Deleted Added
full compact
ef10_intr.c (291436) ef10_intr.c (293751)
1/*-
2 * Copyright (c) 2012-2015 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,

--- 15 unchanged lines hidden (view full) ---

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#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2012-2015 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,

--- 15 unchanged lines hidden (view full) ---

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#include <sys/cdefs.h>
32__FBSDID("$FreeBSD: head/sys/dev/sfxge/common/hunt_intr.c 291436 2015-11-29 05:42:49Z arybchik $");
32__FBSDID("$FreeBSD: head/sys/dev/sfxge/common/hunt_intr.c 293751 2016-01-12 13:30:42Z arybchik $");
33
34#include "efsys.h"
35#include "efx.h"
36#include "efx_impl.h"
37
38
39#if EFSYS_OPT_HUNTINGTON
40
41 __checkReturn efx_rc_t
33
34#include "efsys.h"
35#include "efx.h"
36#include "efx_impl.h"
37
38
39#if EFSYS_OPT_HUNTINGTON
40
41 __checkReturn efx_rc_t
42hunt_intr_init(
42ef10_intr_init(
43 __in efx_nic_t *enp,
44 __in efx_intr_type_t type,
45 __in efsys_mem_t *esmp)
46{
47 _NOTE(ARGUNUSED(enp, type, esmp))
48 return (0);
49}
50
51
52 void
43 __in efx_nic_t *enp,
44 __in efx_intr_type_t type,
45 __in efsys_mem_t *esmp)
46{
47 _NOTE(ARGUNUSED(enp, type, esmp))
48 return (0);
49}
50
51
52 void
53hunt_intr_enable(
53ef10_intr_enable(
54 __in efx_nic_t *enp)
55{
56 _NOTE(ARGUNUSED(enp))
57}
58
59
60 void
54 __in efx_nic_t *enp)
55{
56 _NOTE(ARGUNUSED(enp))
57}
58
59
60 void
61hunt_intr_disable(
61ef10_intr_disable(
62 __in efx_nic_t *enp)
63{
64 _NOTE(ARGUNUSED(enp))
65}
66
67
68 void
62 __in efx_nic_t *enp)
63{
64 _NOTE(ARGUNUSED(enp))
65}
66
67
68 void
69hunt_intr_disable_unlocked(
69ef10_intr_disable_unlocked(
70 __in efx_nic_t *enp)
71{
72 _NOTE(ARGUNUSED(enp))
73}
74
75
76static __checkReturn efx_rc_t
77efx_mcdi_trigger_interrupt(
78 __in efx_nic_t *enp,
79 __in unsigned int level)
80{
81 efx_mcdi_req_t req;
82 uint8_t payload[MAX(MC_CMD_TRIGGER_INTERRUPT_IN_LEN,
83 MC_CMD_TRIGGER_INTERRUPT_OUT_LEN)];
84 efx_rc_t rc;
85
70 __in efx_nic_t *enp)
71{
72 _NOTE(ARGUNUSED(enp))
73}
74
75
76static __checkReturn efx_rc_t
77efx_mcdi_trigger_interrupt(
78 __in efx_nic_t *enp,
79 __in unsigned int level)
80{
81 efx_mcdi_req_t req;
82 uint8_t payload[MAX(MC_CMD_TRIGGER_INTERRUPT_IN_LEN,
83 MC_CMD_TRIGGER_INTERRUPT_OUT_LEN)];
84 efx_rc_t rc;
85
86 EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON);
86 EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
87 enp->en_family == EFX_FAMILY_MEDFORD);
87
88 if (level >= enp->en_nic_cfg.enc_intr_limit) {
89 rc = EINVAL;
90 goto fail1;
91 }
92
93 (void) memset(payload, 0, sizeof (payload));
94 req.emr_cmd = MC_CMD_TRIGGER_INTERRUPT;

--- 18 unchanged lines hidden (view full) ---

113
114fail1:
115 EFSYS_PROBE1(fail1, efx_rc_t, rc);
116
117 return (rc);
118}
119
120 __checkReturn efx_rc_t
88
89 if (level >= enp->en_nic_cfg.enc_intr_limit) {
90 rc = EINVAL;
91 goto fail1;
92 }
93
94 (void) memset(payload, 0, sizeof (payload));
95 req.emr_cmd = MC_CMD_TRIGGER_INTERRUPT;

--- 18 unchanged lines hidden (view full) ---

114
115fail1:
116 EFSYS_PROBE1(fail1, efx_rc_t, rc);
117
118 return (rc);
119}
120
121 __checkReturn efx_rc_t
121hunt_intr_trigger(
122ef10_intr_trigger(
122 __in efx_nic_t *enp,
123 __in unsigned int level)
124{
125 efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
126 efx_rc_t rc;
127
128 if (encp->enc_bug41750_workaround) {
123 __in efx_nic_t *enp,
124 __in unsigned int level)
125{
126 efx_nic_cfg_t *encp = &(enp->en_nic_cfg);
127 efx_rc_t rc;
128
129 if (encp->enc_bug41750_workaround) {
129 /* bug 41750: Test interrupts don't work on Greenport */
130 /*
131 * bug 41750: Test interrupts don't work on Greenport
132 * bug 50084: Test interrupts don't work on VFs
133 */
130 rc = ENOTSUP;
131 goto fail1;
132 }
133
134 if ((rc = efx_mcdi_trigger_interrupt(enp, level)) != 0)
135 goto fail2;
136
137 return (0);
138
139fail2:
140 EFSYS_PROBE(fail2);
141fail1:
142 EFSYS_PROBE1(fail1, efx_rc_t, rc);
143
144 return (rc);
145}
146
147
148 void
134 rc = ENOTSUP;
135 goto fail1;
136 }
137
138 if ((rc = efx_mcdi_trigger_interrupt(enp, level)) != 0)
139 goto fail2;
140
141 return (0);
142
143fail2:
144 EFSYS_PROBE(fail2);
145fail1:
146 EFSYS_PROBE1(fail1, efx_rc_t, rc);
147
148 return (rc);
149}
150
151
152 void
149hunt_intr_fini(
153ef10_intr_fini(
150 __in efx_nic_t *enp)
151{
152 _NOTE(ARGUNUSED(enp))
153}
154
155#endif /* EFSYS_OPT_HUNTINGTON */
154 __in efx_nic_t *enp)
155{
156 _NOTE(ARGUNUSED(enp))
157}
158
159#endif /* EFSYS_OPT_HUNTINGTON */