Example #1
0
File: netdrv.c Project: ariavie/bcm
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;
}
Example #4
0
File: socend.c Project: ariavie/bcm
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;
}