LOCAL STATUS NetdrvUnload(END_DEVICE* pDrvCtrl) { END_OBJECT_UNLOAD (&pDrvCtrl->end); return (OK); }
LOCAL STATUS mirrorEndUnload ( END_CTRL* pDrvCtrl ) { mirrorEndStop(pDrvCtrl); END_OBJECT_UNLOAD(&pDrvCtrl->endObject); return OK; }
/* VA device unload handler. */ static STATUS vxworks_va_unload(END_OBJ *end) { VxWorksVa *va = (void *)end; SSH_DEBUG(SSH_D_HIGHOK, ("unloading %s", va->name)); #if VXWORKS_NETVER < 55122 m2IfFree(va->end.pMib2Tbl); va->end.pMib2Tbl = NULL; #else /* VXWORKS_NETVER < 55122 */ endM2Free(&va->end); #endif /* VXWORKS_NETVER < 55122 */ END_OBJECT_UNLOAD(&va->end); /* Returning EALREADY prevents muxDevUnload from trying to free va */ return EALREADY; }
STATUS socend_unload(_END_OBJ_PAR *p) /* * Function: socend_unload * Purpose: SENS Unload function for SOC devices. * Parameters: p - pointer to VxWorks end_obj structure. * Returns: Status */ { struct end_object *eo = (struct end_object *)p; socend_t *se = (socend_t *)eo->devObject.pDevice; socend_t *se_cur, *se_prev; seu_t *seu= &socend_seu[se->se_unit]; LOG_INFO(BSL_LS_SYS_END, (BSL_META("socend_unload: %s%d:\n"), eo->devObject.name, eo->devObject.unit)); END_OBJECT_UNLOAD(eo); /* Remove from list of active devices */ se_prev = NULL; for (se_cur = seu->seu_devices; se_cur != se; se_cur = se_cur->se_next) { if (se_cur == NULL) { return(ERROR); } se_prev = se_cur; } if (se_prev) { /* Not head */ se_prev->se_next = se->se_next; } else { /* Head */ seu->seu_devices = se->se_next; } return(OK); }
/* VA device load function. */ static END_OBJ *vxworks_va_load(char *init_string, void *arg) { VxWorksVa *va; char *token, *last; int unit, end_initialized; if (!init_string) return NULL; /* Empty init string indicates driver name query */ if (!*init_string) { strcpy(init_string, vxworks_va_devname); return NULL; } /* Otherwise begin loading */ end_initialized = 0; /* Get VA pointer given by us to muxDevLoad() */ va = arg; unit = (int)(va - vxworks_va_tab); /* Verify unit number in the beginning of the init string */ if (!(token = strtok_r(init_string, ":", &last)) || atoi(token) != unit) { SSH_TRACE(SSH_D_ERROR, ("%s: bad unit number in init string", va->name)); return NULL; } SSH_DEBUG(SSH_D_HIGHOK, ("loading %s", va->name)); if (END_OBJ_INIT(&va->end, &va->end.devObject, vxworks_va_devname, unit, &vxworks_va_funcs, vxworks_va_desc) != OK) { SSH_TRACE(SSH_D_ERROR, ("%s: END_OBJ_INIT failed", va->name)); goto fail; } end_initialized = 1; #if VXWORKS_NETVER < 55122 #ifdef INCLUDE_RFC_2233 /* Initialize MIB-II entries (for RFC 2233 ifXTable) */ if (!(va->end.pMib2Tbl = m2IfAlloc(M2_ifType_ethernet_csmacd, va->enet_addr, sizeof va->enet_addr, vxworks_va_mtu, vxworks_va_speed, vxworks_va_devname, unit))) { SSH_TRACE(SSH_D_ERROR, ("%s: m2IfAlloc failed", va->name)); goto fail; } /* * Set the RFC2233 flag bit in the END object flags field and * install the counter update routines. */ m2IfPktCountRtnInstall(va->end.pMib2Tbl, m2If8023PacketCount); /* * Make a copy of the data in mib2Tbl struct as well. We do this * mainly for backward compatibility issues. There might be some * code that might be referencing the END pointer and might * possibly do lookups on the mib2Tbl, which will cause all sorts * of problems. */ bcopy(&va->end.pMib2Tbl->m2Data.mibIfTbl, &va->end.mib2Tbl, sizeof va->end.mib2Tbl); /* Mark the device ready */ END_OBJ_READY (&va->end, IFF_NOTRAILERS | IFF_MULTICAST | IFF_BROADCAST | END_MIB_2233); #else /* INCLUDE_RFC_2233 */ /* Old RFC 1213 mib2 interface */ if (END_MIB_INIT (&va->end, M2_ifType_ethernet_csmacd, va->enet_addr, sizeof va->enet_addr, vxworks_va_mtu, vxworks_va_speed) == ERROR) { SSH_TRACE(SSH_D_ERROR, ("%s: END_MIB_INIT failed", va->name)); goto fail; } /* Mark the device ready */ END_OBJ_READY (&va->end, IFF_NOTRAILERS | IFF_MULTICAST | IFF_BROADCAST); #endif /* INCLUDE_RFC_2233 */ #else /* VXWORKS_NETVER < 55122 */ if (endM2Init(&va->end, M2_ifType_ethernet_csmacd, va->enet_addr, sizeof va->enet_addr, vxworks_va_mtu, vxworks_va_speed, IFF_NOTRAILERS | IFF_MULTICAST | IFF_BROADCAST) != OK) { SSH_TRACE(SSH_D_ERROR, ("%s: endM2Init failed", va->name)); goto fail; } #endif /* VXWORKS_NETVER < 55122 */ return &va->end; fail: if (end_initialized) END_OBJECT_UNLOAD(&va->end); return NULL; }