MCPcopy Create free account
hub / github.com/F-Stack/f-stack / bcm_mips_fini_cpuirq

Function bcm_mips_fini_cpuirq

freebsd/mips/broadcom/bcm_mips.c:232–278  ·  view source on GitHub ↗

* Free any resources associated with the given @p cpuirq state. * * @param sc BHND MIPS driver instance state. * @param cpuirq A CPU IRQ instance previously successfully initialized * via bcm_mips_init_cpuirq(). * * @retval 0 success * @retval non-zero if finalizing @p cpuirq otherwise fails, a regular * unix error code will be returned. */

Source from the content-addressed store, hash-verified

230 * unix error code will be returned.
231 */
232static int
233bcm_mips_fini_cpuirq(struct bcm_mips_softc *sc, struct bcm_mips_cpuirq *cpuirq)
234{
235 int error;
236
237 BCM_MIPS_LOCK(sc);
238
239 if (cpuirq->sc == NULL) {
240 KASSERT(cpuirq->irq_res == NULL, ("leaking cpuirq resource"));
241
242 BCM_MIPS_UNLOCK(sc);
243 return (0); /* not initialized */
244 }
245
246 if (cpuirq->refs != 0) {
247 BCM_MIPS_UNLOCK(sc);
248 return (EBUSY);
249 }
250
251 if (cpuirq->irq_cookie != NULL) {
252 KASSERT(cpuirq->irq_res != NULL, ("resource missing"));
253
254 error = bus_teardown_intr(sc->dev, cpuirq->irq_res,
255 cpuirq->irq_cookie);
256 if (error) {
257 BCM_MIPS_UNLOCK(sc);
258 return (error);
259 }
260
261 cpuirq->irq_cookie = NULL;
262 }
263
264 if (cpuirq->irq_res != NULL) {
265 bus_release_resource(sc->dev, SYS_RES_IRQ, cpuirq->irq_rid,
266 cpuirq->irq_res);
267 cpuirq->irq_res = NULL;
268 }
269
270 if (cpuirq->irq_rid != -1) {
271 bus_delete_resource(sc->dev, SYS_RES_IRQ, cpuirq->irq_rid);
272 cpuirq->irq_rid = -1;
273 }
274
275 BCM_MIPS_UNLOCK(sc);
276
277 return (0);
278}
279
280static int
281bcm_mips_attach_default(device_t dev)

Callers 2

bcm_mips_attachFunction · 0.85
bcm_mips_detachFunction · 0.85

Calls 3

bus_teardown_intrFunction · 0.85
bus_release_resourceFunction · 0.85
bus_delete_resourceFunction · 0.85

Tested by

no test coverage detected