~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/net/ethernet/cisco/enic/vnic_devcmd.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2008-2010 Cisco Systems, Inc.  All rights reserved.
 
3
 * Copyright 2007 Nuova Systems, Inc.  All rights reserved.
 
4
 *
 
5
 * This program is free software; you may redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; version 2 of the License.
 
8
 *
 
9
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
10
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
11
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
12
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 
13
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 
14
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 
15
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
16
 * SOFTWARE.
 
17
 *
 
18
 */
 
19
 
 
20
#ifndef _VNIC_DEVCMD_H_
 
21
#define _VNIC_DEVCMD_H_
 
22
 
 
23
#define _CMD_NBITS      14
 
24
#define _CMD_VTYPEBITS  10
 
25
#define _CMD_FLAGSBITS  6
 
26
#define _CMD_DIRBITS    2
 
27
 
 
28
#define _CMD_NMASK      ((1 << _CMD_NBITS)-1)
 
29
#define _CMD_VTYPEMASK  ((1 << _CMD_VTYPEBITS)-1)
 
30
#define _CMD_FLAGSMASK  ((1 << _CMD_FLAGSBITS)-1)
 
31
#define _CMD_DIRMASK    ((1 << _CMD_DIRBITS)-1)
 
32
 
 
33
#define _CMD_NSHIFT     0
 
34
#define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
 
35
#define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
 
36
#define _CMD_DIRSHIFT   (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
 
37
 
 
38
/*
 
39
 * Direction bits (from host perspective).
 
40
 */
 
41
#define _CMD_DIR_NONE   0U
 
42
#define _CMD_DIR_WRITE  1U
 
43
#define _CMD_DIR_READ   2U
 
44
#define _CMD_DIR_RW     (_CMD_DIR_WRITE | _CMD_DIR_READ)
 
45
 
 
46
/*
 
47
 * Flag bits.
 
48
 */
 
49
#define _CMD_FLAGS_NONE 0U
 
50
#define _CMD_FLAGS_NOWAIT 1U
 
51
 
 
52
/*
 
53
 * vNIC type bits.
 
54
 */
 
55
#define _CMD_VTYPE_NONE  0U
 
56
#define _CMD_VTYPE_ENET  1U
 
57
#define _CMD_VTYPE_FC    2U
 
58
#define _CMD_VTYPE_SCSI  4U
 
59
#define _CMD_VTYPE_ALL   (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
 
60
 
 
61
/*
 
62
 * Used to create cmds..
 
63
*/
 
64
#define _CMDCF(dir, flags, vtype, nr)  \
 
65
        (((dir)   << _CMD_DIRSHIFT) | \
 
66
        ((flags) << _CMD_FLAGSSHIFT) | \
 
67
        ((vtype) << _CMD_VTYPESHIFT) | \
 
68
        ((nr)    << _CMD_NSHIFT))
 
69
#define _CMDC(dir, vtype, nr)    _CMDCF(dir, 0, vtype, nr)
 
70
#define _CMDCNW(dir, vtype, nr)  _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
 
71
 
 
72
/*
 
73
 * Used to decode cmds..
 
74
*/
 
75
#define _CMD_DIR(cmd)            (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
 
76
#define _CMD_FLAGS(cmd)          (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
 
77
#define _CMD_VTYPE(cmd)          (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
 
78
#define _CMD_N(cmd)              (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
 
79
 
 
80
enum vnic_devcmd_cmd {
 
81
        CMD_NONE                = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
 
82
 
 
83
        /*
 
84
         * mcpu fw info in mem:
 
85
         * in:
 
86
         *   (u64)a0=paddr to struct vnic_devcmd_fw_info
 
87
         * action:
 
88
         *   Fills in struct vnic_devcmd_fw_info (128 bytes)
 
89
         * note:
 
90
         *   An old definition of CMD_MCPU_FW_INFO
 
91
         */
 
92
        CMD_MCPU_FW_INFO_OLD    = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
 
93
 
 
94
        /*
 
95
         * mcpu fw info in mem:
 
96
         * in:
 
97
         *   (u64)a0=paddr to struct vnic_devcmd_fw_info
 
98
         *   (u16)a1=size of the structure
 
99
         * out:
 
100
         *       (u16)a1=0                          for in:a1 = 0,
 
101
         *               data size actually written for other values.
 
102
         * action:
 
103
         *   Fills in first 128 bytes of vnic_devcmd_fw_info for in:a1 = 0,
 
104
         *            first in:a1 bytes               for 0 < in:a1 <= 132,
 
105
         *            132 bytes                       for other values of in:a1.
 
106
         * note:
 
107
         *   CMD_MCPU_FW_INFO and CMD_MCPU_FW_INFO_OLD have the same enum 1
 
108
         *   for source compatibility.
 
109
         */
 
110
        CMD_MCPU_FW_INFO        = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1),
 
111
 
 
112
        /* dev-specific block member:
 
113
         *    in: (u16)a0=offset,(u8)a1=size
 
114
         *    out: a0=value */
 
115
        CMD_DEV_SPEC            = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
 
116
 
 
117
        /* stats clear */
 
118
        CMD_STATS_CLEAR         = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
 
119
 
 
120
        /* stats dump in mem: (u64)a0=paddr to stats area,
 
121
         *                    (u16)a1=sizeof stats area */
 
122
        CMD_STATS_DUMP          = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
 
123
 
 
124
        /* set Rx packet filter: (u32)a0=filters (see CMD_PFILTER_*) */
 
125
        CMD_PACKET_FILTER       = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7),
 
126
 
 
127
        /* set Rx packet filter for all: (u32)a0=filters (see CMD_PFILTER_*) */
 
128
        CMD_PACKET_FILTER_ALL   = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
 
129
 
 
130
        /* hang detection notification */
 
131
        CMD_HANG_NOTIFY         = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
 
132
 
 
133
        /* MAC address in (u48)a0 */
 
134
        CMD_MAC_ADDR            = _CMDC(_CMD_DIR_READ,
 
135
                                        _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
 
136
 
 
137
        /* add addr from (u48)a0 */
 
138
        CMD_ADDR_ADD            = _CMDCNW(_CMD_DIR_WRITE,
 
139
                                        _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
 
140
 
 
141
        /* del addr from (u48)a0 */
 
142
        CMD_ADDR_DEL            = _CMDCNW(_CMD_DIR_WRITE,
 
143
                                        _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
 
144
 
 
145
        /* add VLAN id in (u16)a0 */
 
146
        CMD_VLAN_ADD            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
 
147
 
 
148
        /* del VLAN id in (u16)a0 */
 
149
        CMD_VLAN_DEL            = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
 
150
 
 
151
        /* nic_cfg in (u32)a0 */
 
152
        CMD_NIC_CFG             = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
 
153
 
 
154
        /* union vnic_rss_key in mem: (u64)a0=paddr, (u16)a1=len */
 
155
        CMD_RSS_KEY             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
 
156
 
 
157
        /* union vnic_rss_cpu in mem: (u64)a0=paddr, (u16)a1=len */
 
158
        CMD_RSS_CPU             = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
 
159
 
 
160
        /* initiate softreset */
 
161
        CMD_SOFT_RESET          = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
 
162
 
 
163
        /* softreset status:
 
164
         *    out: a0=0 reset complete, a0=1 reset in progress */
 
165
        CMD_SOFT_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
 
166
 
 
167
        /* set struct vnic_devcmd_notify buffer in mem:
 
168
         * in:
 
169
         *   (u64)a0=paddr to notify (set paddr=0 to unset)
 
170
         *   (u32)a1 & 0x00000000ffffffff=sizeof(struct vnic_devcmd_notify)
 
171
         *   (u16)a1 & 0x0000ffff00000000=intr num (-1 for no intr)
 
172
         * out:
 
173
         *   (u32)a1 = effective size
 
174
         */
 
175
        CMD_NOTIFY              = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
 
176
 
 
177
        /* UNDI API: (u64)a0=paddr to s_PXENV_UNDI_ struct,
 
178
         *           (u8)a1=PXENV_UNDI_xxx */
 
179
        CMD_UNDI                = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
 
180
 
 
181
        /* initiate open sequence (u32)a0=flags (see CMD_OPENF_*) */
 
182
        CMD_OPEN                = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
 
183
 
 
184
        /* open status:
 
185
         *    out: a0=0 open complete, a0=1 open in progress */
 
186
        CMD_OPEN_STATUS         = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
 
187
 
 
188
        /* close vnic */
 
189
        CMD_CLOSE               = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
 
190
 
 
191
        /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
 
192
/***** Replaced by CMD_INIT *****/
 
193
        CMD_INIT_v1             = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
 
194
 
 
195
        /* variant of CMD_INIT, with provisioning info
 
196
         *     (u64)a0=paddr of vnic_devcmd_provinfo
 
197
         *     (u32)a1=sizeof provision info */
 
198
        CMD_INIT_PROV_INFO      = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
 
199
 
 
200
        /* enable virtual link */
 
201
        CMD_ENABLE              = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
 
202
 
 
203
        /* enable virtual link, waiting variant. */
 
204
        CMD_ENABLE_WAIT         = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
 
205
 
 
206
        /* disable virtual link */
 
207
        CMD_DISABLE             = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
 
208
 
 
209
        /* stats dump sum of all vnic stats on same uplink in mem:
 
210
         *     (u64)a0=paddr
 
211
         *     (u16)a1=sizeof stats area */
 
212
        CMD_STATS_DUMP_ALL      = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
 
213
 
 
214
        /* init status:
 
215
         *    out: a0=0 init complete, a0=1 init in progress
 
216
         *         if a0=0, a1=errno */
 
217
        CMD_INIT_STATUS         = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
 
218
 
 
219
        /* INT13 API: (u64)a0=paddr to vnic_int13_params struct
 
220
         *            (u32)a1=INT13_CMD_xxx */
 
221
        CMD_INT13               = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
 
222
 
 
223
        /* logical uplink enable/disable: (u64)a0: 0/1=disable/enable */
 
224
        CMD_LOGICAL_UPLINK      = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
 
225
 
 
226
        /* undo initialize of virtual link */
 
227
        CMD_DEINIT              = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
 
228
 
 
229
        /* initialize virtual link: (u32)a0=flags (see CMD_INITF_*) */
 
230
        CMD_INIT                = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35),
 
231
 
 
232
        /* check fw capability of a cmd:
 
233
         * in:  (u32)a0=cmd
 
234
         * out: (u32)a0=errno, 0:valid cmd, a1=supported VNIC_STF_* bits */
 
235
        CMD_CAPABILITY          = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
 
236
 
 
237
        /* persistent binding info
 
238
         * in:  (u64)a0=paddr of arg
 
239
         *      (u32)a1=CMD_PERBI_XXX */
 
240
        CMD_PERBI               = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
 
241
 
 
242
        /* Interrupt Assert Register functionality
 
243
         * in: (u16)a0=interrupt number to assert
 
244
         */
 
245
        CMD_IAR                 = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
 
246
 
 
247
        /* initiate hangreset, like softreset after hang detected */
 
248
        CMD_HANG_RESET          = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
 
249
 
 
250
        /* hangreset status:
 
251
         *    out: a0=0 reset complete, a0=1 reset in progress */
 
252
        CMD_HANG_RESET_STATUS   = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
 
253
 
 
254
        /*
 
255
         * Set hw ingress packet vlan rewrite mode:
 
256
         * in:  (u32)a0=new vlan rewrite mode
 
257
         * out: (u32)a0=old vlan rewrite mode */
 
258
        CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
 
259
 
 
260
        /*
 
261
         * in:  (u16)a0=bdf of target vnic
 
262
         *      (u32)a1=cmd to proxy
 
263
         *      a2-a15=args to cmd in a1
 
264
         * out: (u32)a0=status of proxied cmd
 
265
         *      a1-a15=out args of proxied cmd */
 
266
        CMD_PROXY_BY_BDF =      _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
 
267
 
 
268
        /*
 
269
         * As for BY_BDF except a0 is index of hvnlink subordinate vnic
 
270
         * or SR-IOV virtual vnic
 
271
         */
 
272
        CMD_PROXY_BY_INDEX =    _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
 
273
 
 
274
        /*
 
275
         * For HPP toggle:
 
276
         * adapter-info-get
 
277
         * in:  (u64)a0=phsical address of buffer passed in from caller.
 
278
         *      (u16)a1=size of buffer specified in a0.
 
279
         * out: (u64)a0=phsical address of buffer passed in from caller.
 
280
         *      (u16)a1=actual bytes from VIF-CONFIG-INFO TLV, or
 
281
         *              0 if no VIF-CONFIG-INFO TLV was ever received. */
 
282
        CMD_CONFIG_INFO_GET     = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
 
283
 
 
284
        /* init_prov_info2:
 
285
         * Variant of CMD_INIT_PROV_INFO, where it will not try to enable
 
286
         * the vnic until CMD_ENABLE2 is issued.
 
287
         *     (u64)a0=paddr of vnic_devcmd_provinfo
 
288
         *     (u32)a1=sizeof provision info */
 
289
        CMD_INIT_PROV_INFO2  = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
 
290
 
 
291
        /* enable2:
 
292
         *      (u32)a0=0                  ==> standby
 
293
         *             =CMD_ENABLE2_ACTIVE ==> active
 
294
         */
 
295
        CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
 
296
 
 
297
        /*
 
298
         * cmd_status:
 
299
         *     Returns the status of the specified command
 
300
         * Input:
 
301
         *     a0 = command for which status is being queried.
 
302
         *          Possible values are:
 
303
         *              CMD_SOFT_RESET
 
304
         *              CMD_HANG_RESET
 
305
         *              CMD_OPEN
 
306
         *              CMD_INIT
 
307
         *              CMD_INIT_PROV_INFO
 
308
         *              CMD_DEINIT
 
309
         *              CMD_INIT_PROV_INFO2
 
310
         *              CMD_ENABLE2
 
311
         * Output:
 
312
         *     if status == STAT_ERROR
 
313
         *        a0 = ERR_ENOTSUPPORTED - status for command in a0 is
 
314
         *                                 not supported
 
315
         *     if status == STAT_NONE
 
316
         *        a0 = status of the devcmd specified in a0 as follows.
 
317
         *             ERR_SUCCESS   - command in a0 completed successfully
 
318
         *             ERR_EINPROGRESS - command in a0 is still in progress
 
319
         */
 
320
        CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
 
321
 
 
322
        /*
 
323
         * Returns interrupt coalescing timer conversion factors.
 
324
         * After calling this devcmd, ENIC driver can convert
 
325
         * interrupt coalescing timer in usec into CPU cycles as follows:
 
326
         *
 
327
         *   intr_timer_cycles = intr_timer_usec * multiplier / divisor
 
328
         *
 
329
         * Interrupt coalescing timer in usecs can be obtained from
 
330
         * CPU cycles as follows:
 
331
         *
 
332
         *   intr_timer_usec = intr_timer_cycles * divisor / multiplier
 
333
         *
 
334
         * in: none
 
335
         * out: (u32)a0 = multiplier
 
336
         *      (u32)a1 = divisor
 
337
         *      (u32)a2 = maximum timer value in usec
 
338
         */
 
339
        CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
 
340
};
 
341
 
 
342
/* CMD_ENABLE2 flags */
 
343
#define CMD_ENABLE2_ACTIVE  0x1
 
344
 
 
345
/* flags for CMD_OPEN */
 
346
#define CMD_OPENF_OPROM         0x1     /* open coming from option rom */
 
347
 
 
348
/* flags for CMD_INIT */
 
349
#define CMD_INITF_DEFAULT_MAC   0x1     /* init with default mac addr */
 
350
 
 
351
/* flags for CMD_PACKET_FILTER */
 
352
#define CMD_PFILTER_DIRECTED            0x01
 
353
#define CMD_PFILTER_MULTICAST           0x02
 
354
#define CMD_PFILTER_BROADCAST           0x04
 
355
#define CMD_PFILTER_PROMISCUOUS         0x08
 
356
#define CMD_PFILTER_ALL_MULTICAST       0x10
 
357
 
 
358
/* rewrite modes for CMD_IG_VLAN_REWRITE_MODE */
 
359
#define IG_VLAN_REWRITE_MODE_DEFAULT_TRUNK              0
 
360
#define IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN         1
 
361
#define IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN  2
 
362
#define IG_VLAN_REWRITE_MODE_PASS_THRU                  3
 
363
 
 
364
enum vnic_devcmd_status {
 
365
        STAT_NONE = 0,
 
366
        STAT_BUSY = 1 << 0,     /* cmd in progress */
 
367
        STAT_ERROR = 1 << 1,    /* last cmd caused error (code in a0) */
 
368
};
 
369
 
 
370
enum vnic_devcmd_error {
 
371
        ERR_SUCCESS = 0,
 
372
        ERR_EINVAL = 1,
 
373
        ERR_EFAULT = 2,
 
374
        ERR_EPERM = 3,
 
375
        ERR_EBUSY = 4,
 
376
        ERR_ECMDUNKNOWN = 5,
 
377
        ERR_EBADSTATE = 6,
 
378
        ERR_ENOMEM = 7,
 
379
        ERR_ETIMEDOUT = 8,
 
380
        ERR_ELINKDOWN = 9,
 
381
        ERR_EMAXRES = 10,
 
382
        ERR_ENOTSUPPORTED = 11,
 
383
        ERR_EINPROGRESS = 12,
 
384
};
 
385
 
 
386
/*
 
387
 * note: hw_version and asic_rev refer to the same thing,
 
388
 *       but have different formats. hw_version is
 
389
 *       a 32-byte string (e.g. "A2") and asic_rev is
 
390
 *       a 16-bit integer (e.g. 0xA2).
 
391
 */
 
392
struct vnic_devcmd_fw_info {
 
393
        char fw_version[32];
 
394
        char fw_build[32];
 
395
        char hw_version[32];
 
396
        char hw_serial_number[32];
 
397
        u16 asic_type;
 
398
        u16 asic_rev;
 
399
};
 
400
 
 
401
struct vnic_devcmd_notify {
 
402
        u32 csum;               /* checksum over following words */
 
403
 
 
404
        u32 link_state;         /* link up == 1 */
 
405
        u32 port_speed;         /* effective port speed (rate limit) */
 
406
        u32 mtu;                /* MTU */
 
407
        u32 msglvl;             /* requested driver msg lvl */
 
408
        u32 uif;                /* uplink interface */
 
409
        u32 status;             /* status bits (see VNIC_STF_*) */
 
410
        u32 error;              /* error code (see ERR_*) for first ERR */
 
411
        u32 link_down_cnt;      /* running count of link down transitions */
 
412
        u32 perbi_rebuild_cnt;  /* running count of perbi rebuilds */
 
413
};
 
414
#define VNIC_STF_FATAL_ERR      0x0001  /* fatal fw error */
 
415
#define VNIC_STF_STD_PAUSE      0x0002  /* standard link-level pause on */
 
416
#define VNIC_STF_PFC_PAUSE      0x0004  /* priority flow control pause on */
 
417
/* all supported status flags */
 
418
#define VNIC_STF_ALL            (VNIC_STF_FATAL_ERR |\
 
419
                                 VNIC_STF_STD_PAUSE |\
 
420
                                 VNIC_STF_PFC_PAUSE |\
 
421
                                 0)
 
422
 
 
423
struct vnic_devcmd_provinfo {
 
424
        u8 oui[3];
 
425
        u8 type;
 
426
        u8 data[0];
 
427
};
 
428
 
 
429
/*
 
430
 * Writing cmd register causes STAT_BUSY to get set in status register.
 
431
 * When cmd completes, STAT_BUSY will be cleared.
 
432
 *
 
433
 * If cmd completed successfully STAT_ERROR will be clear
 
434
 * and args registers contain cmd-specific results.
 
435
 *
 
436
 * If cmd error, STAT_ERROR will be set and args[0] contains error code.
 
437
 *
 
438
 * status register is read-only.  While STAT_BUSY is set,
 
439
 * all other register contents are read-only.
 
440
 */
 
441
 
 
442
/* Make sizeof(vnic_devcmd) a power-of-2 for I/O BAR. */
 
443
#define VNIC_DEVCMD_NARGS 15
 
444
struct vnic_devcmd {
 
445
        u32 status;                     /* RO */
 
446
        u32 cmd;                        /* RW */
 
447
        u64 args[VNIC_DEVCMD_NARGS];    /* RW cmd args (little-endian) */
 
448
};
 
449
 
 
450
#endif /* _VNIC_DEVCMD_H_ */