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 */ |