pr_devel(">> sbecom_get_brdinfo: returned, first_if %p <%s> last_if %p <%s>\n", bip->first_iname, bip->first_iname, bip->last_iname, bip->last_iname); } /* * Describe the driver state through /proc */ static int sbecom_proc_get_sbe_info(struct seq_file *m, void *v) { ci_t *ci = m->private; char *spd; struct sbe_brd_info *bip; bip = OS_kmalloc(sizeof(struct sbe_brd_info)); if (!bip) return -ENOMEM; pr_devel(">> sbecom_proc_get_sbe_info: entered\n"); sbecom_proc_get_brdinfo(ci, bip); seq_puts(m, "Board Type: "); switch (bip->brd_id) { case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T3): seq_puts(m, "wanPMC-C1T3"); break; case SBE_BOARD_ID(PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1): seq_puts(m, "wanPTMC-256T3 <E1>"); break;
STATIC struct net_device * create_chan (struct net_device * ndev, ci_t * ci, struct sbecom_chan_param * cp) { hdlc_device *hdlc; struct net_device *dev; hdw_info_t *hi; int ret; if (c4_find_chan (cp->channum)) return 0; /* channel already exists */ { struct c4_priv *priv; /* allocate then fill in private data structure */ priv = OS_kmalloc (sizeof (struct c4_priv)); if (!priv) { pr_warning("%s: no memory for net_device !\n", ci->devname); return 0; } dev = alloc_hdlcdev (priv); if (!dev) { pr_warning("%s: no memory for hdlc_device !\n", ci->devname); OS_kfree (priv); return 0; } priv->ci = ci; priv->channum = cp->channum; } hdlc = dev_to_hdlc (dev); dev->base_addr = 0; /* not I/O mapped */ dev->irq = ndev->irq; dev->type = ARPHRD_RAWHDLC; *dev->name = 0; /* default ifconfig name = "hdlc" */ hi = (hdw_info_t *) ci->hdw_info; if (hi->mfg_info_sts == EEPROM_OK) { switch (hi->promfmt) { case PROM_FORMAT_TYPE1: memcpy (dev->dev_addr, (FLD_TYPE1 *) (hi->mfg_info.pft1.Serial), 6); break; case PROM_FORMAT_TYPE2: memcpy (dev->dev_addr, (FLD_TYPE2 *) (hi->mfg_info.pft2.Serial), 6); break; default: memset (dev->dev_addr, 0, 6); break; } } else { memset (dev->dev_addr, 0, 6); } hdlc->xmit = c4_linux_xmit; dev->netdev_ops = &chan_ops; /* * The native hdlc stack calls this 'attach' routine during * hdlc_raw_ioctl(), passing parameters for line encoding and parity. * Since hdlc_raw_ioctl() stack does not interrogate whether an 'attach' * routine is actually registered or not, we supply a dummy routine which * does nothing (since encoding and parity are setup for our driver via a * special configuration application). */ hdlc->attach = chan_attach_noop; rtnl_unlock (); /* needed due to Ioctl calling sequence */ ret = register_hdlc_device (dev); /* NOTE: <stats> setting must occur AFTER registration in order to "take" */ dev->tx_queue_len = MAX_DEFAULT_IFQLEN; rtnl_lock (); /* needed due to Ioctl calling sequence */ if (ret) { if (cxt1e1_log_level >= LOG_WARN) pr_info("%s: create_chan[%d] registration error = %d.\n", ci->devname, cp->channum, ret); free_netdev (dev); /* cleanup */ return 0; /* failed to register */ } return dev; }
static int sbecom_proc_get_sbe_info (char *buffer, char **start, off_t offset, int length, int *eof, void *priv) { ci_t *ci = (ci_t *) priv; int len = 0; char *spd; struct sbe_brd_info *bip; if (!(bip = OS_kmalloc (sizeof (struct sbe_brd_info)))) { return -ENOMEM; } #if 0 /** RLD DEBUG **/ pr_info(">> sbecom_proc_get_sbe_info: entered, offset %d. length %d.\n", (int) offset, (int) length); #endif { hdw_info_t *hi = &hdw_info[ci->brdno]; u_int8_t *bsn = 0; switch (hi->promfmt) { case PROM_FORMAT_TYPE1: bsn = (u_int8_t *) hi->mfg_info.pft1.Serial; break; case PROM_FORMAT_TYPE2: bsn = (u_int8_t *) hi->mfg_info.pft2.Serial; break; } sbecom_get_brdinfo (ci, bip, bsn); } #if 0 /** RLD DEBUG **/ pr_info(">> sbecom_get_brdinfo: returned, first_if %p <%s> last_if %p <%s>\n", (char *) &bip->first_iname, (char *) &bip->first_iname, (char *) &bip->last_iname, (char *) &bip->last_iname); #endif len += sprintf (buffer + len, "Board Type: "); switch (bip->brd_id) { case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T3): len += sprintf (buffer + len, "wanPMC-C1T3"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1): len += sprintf (buffer + len, "wanPTMC-256T3 <E1>"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_T1): len += sprintf (buffer + len, "wanPTMC-256T3 <T1>"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_C24TE1): len += sprintf (buffer + len, "wanPTMC-C24TE1"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1): case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1_L): len += sprintf (buffer + len, "wanPMC-C4T1E1"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1): case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1_L): len += sprintf (buffer + len, "wanPMC-C2T1E1"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1): case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1_L): len += sprintf (buffer + len, "wanPMC-C1T1E1"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1): len += sprintf (buffer + len, "wanPCI-C4T1E1"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1): len += sprintf (buffer + len, "wanPCI-C2T1E1"); break; case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1): len += sprintf (buffer + len, "wanPCI-C1T1E1"); break; default: len += sprintf (buffer + len, "unknown"); break; } len += sprintf (buffer + len, " [%08X]\n", bip->brd_id); len += sprintf (buffer + len, "Board Number: %d\n", bip->brdno); len += sprintf (buffer + len, "Hardware ID: 0x%02X\n", ci->hdw_bid); len += sprintf (buffer + len, "Board SN: %06X\n", bip->brd_sn); <<<<<<< HEAD