vserver 1.9.5.x5
[linux-2.6.git] / drivers / net / sk98lin / skproc.c
index 5ce61e3..5cece25 100644 (file)
 #include "h/skdrv2nd.h"
 #include "h/skversion.h"
 
-extern struct SK_NET_DEVICE *SkGeRootDev;
-static int sk_proc_print(void *writePtr, char *format, ...);
-static void sk_gen_browse(void *buffer);
-int len;
-
 static int sk_seq_show(struct seq_file *seq, void *v);
 static int sk_proc_open(struct inode *inode, struct file *file);
+
 struct file_operations sk_proc_fops = {
        .owner          = THIS_MODULE,
        .open           = sk_proc_open,
@@ -45,315 +41,206 @@ struct file_operations sk_proc_fops = {
        .llseek         = seq_lseek,
        .release        = single_release,
 };
-struct net_device *currDev = NULL;
+
 
 /*****************************************************************************
  *
- *     sk_gen_browse -generic  print "summaries" entry 
+ *      sk_seq_show - show proc information of a particular adapter
  *
  * Description:
  *  This function fills the proc entry with statistic data about 
- *  the ethernet device.
+ *  the ethernet device. It invokes the generic sk_gen_browse() to
+ *  print out all items one per one.
  *  
- * Returns: -
- *     
+ * Returns: 0
+ *      
  */
-static void sk_gen_browse(void *buffer)
+static int sk_seq_show(struct seq_file *seq, void *v)
 {
-       struct SK_NET_DEVICE    *SkgeProcDev = SkGeRootDev;
-       struct SK_NET_DEVICE    *next;
-       SK_PNMI_STRUCT_DATA     *pPnmiStruct;
-       SK_PNMI_STAT            *pPnmiStat;
+       struct net_device *dev = seq->private;
+       DEV_NET                 *pNet = netdev_priv(dev);
+       SK_AC                   *pAC = pNet->pAC;
+       SK_PNMI_STRUCT_DATA     *pPnmiStruct = &pAC->PnmiStruct;
        unsigned long           Flags;  
        unsigned int            Size;
-       DEV_NET                 *pNet;
-       SK_AC                   *pAC;
        char                    sens_msg[50];
-       int                     MaxSecurityCount = 0;
        int                     t;
        int                     i;
 
-       while (SkgeProcDev) {
-               MaxSecurityCount++;
-               if (MaxSecurityCount > 100) {
-                       printk("Max limit for sk_proc_read security counter!\n");
-                       return;
-               }
-               pNet = (DEV_NET*) SkgeProcDev->priv;
-               pAC = pNet->pAC;
-               next = pAC->Next;
-               pPnmiStruct = &pAC->PnmiStruct;
-               /* NetIndex in GetStruct is now required, zero is only dummy */
-
-               for (t=pAC->GIni.GIMacsFound; t > 0; t--) {
-                       if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 1)
-                               t--;
+       /* NetIndex in GetStruct is now required, zero is only dummy */
+       for (t=pAC->GIni.GIMacsFound; t > 0; t--) {
+               if ((pAC->GIni.GIMacsFound == 2) && pAC->RlmtNets == 1)
+                       t--;
 
-                       spin_lock_irqsave(&pAC->SlowPathLock, Flags);
-                       Size = SK_PNMI_STRUCT_SIZE;
+               spin_lock_irqsave(&pAC->SlowPathLock, Flags);
+               Size = SK_PNMI_STRUCT_SIZE;
 #ifdef SK_DIAG_SUPPORT
-                       if (pAC->BoardLevel == SK_INIT_DATA) {
-                               SK_MEMCPY(&(pAC->PnmiStruct), &(pAC->PnmiBackup), sizeof(SK_PNMI_STRUCT_DATA));
-                               if (pAC->DiagModeActive == DIAG_NOTACTIVE) {
-                                       pAC->Pnmi.DiagAttached = SK_DIAG_IDLE;
-                               }
-                       } else {
-                               SkPnmiGetStruct(pAC, pAC->IoBase, pPnmiStruct, &Size, t-1);
+               if (pAC->BoardLevel == SK_INIT_DATA) {
+                       SK_MEMCPY(&(pAC->PnmiStruct), &(pAC->PnmiBackup), sizeof(SK_PNMI_STRUCT_DATA));
+                       if (pAC->DiagModeActive == DIAG_NOTACTIVE) {
+                               pAC->Pnmi.DiagAttached = SK_DIAG_IDLE;
                        }
+               } else {
+                       SkPnmiGetStruct(pAC, pAC->IoBase, pPnmiStruct, &Size, t-1);
+               }
 #else
-                       SkPnmiGetStruct(pAC, pAC->IoBase, 
+               SkPnmiGetStruct(pAC, pAC->IoBase, 
                                pPnmiStruct, &Size, t-1);
 #endif
-                       spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
+               spin_unlock_irqrestore(&pAC->SlowPathLock, Flags);
        
-                       if (strcmp(pAC->dev[t-1]->name, currDev->name) == 0) {
-                               pPnmiStat = &pPnmiStruct->Stat[0];
-                               len = sk_proc_print(buffer, 
-                                       "\nDetailed statistic for device %s\n",
-                                       pAC->dev[t-1]->name);
-                               len += sk_proc_print(buffer,
-                                       "=======================================\n");
+               if (pAC->dev[t-1] == dev) {
+                       SK_PNMI_STAT    *pPnmiStat = &pPnmiStruct->Stat[0];
+
+                       seq_printf(seq, "\nDetailed statistic for device %s\n",
+                                     pAC->dev[t-1]->name);
+                       seq_printf(seq, "=======================================\n");
        
-                               /* Board statistics */
-                               len += sk_proc_print(buffer, 
-                                       "\nBoard statistics\n\n");
-                               len += sk_proc_print(buffer,
-                                       "Active Port                    %c\n",
-                                       'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
-                                       Net[t-1].PrefPort]->PortNumber);
-                               len += sk_proc_print(buffer,
-                                       "Preferred Port                 %c\n",
-                                       'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
-                                       Net[t-1].PrefPort]->PortNumber);
+                       /* Board statistics */
+                       seq_printf(seq, "\nBoard statistics\n\n");
+                       seq_printf(seq, "Active Port                    %c\n",
+                                     'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
+                                                                   Net[t-1].PrefPort]->PortNumber);
+                       seq_printf(seq, "Preferred Port                 %c\n",
+                                     'A' + pAC->Rlmt.Net[t-1].Port[pAC->Rlmt.
+                                                                   Net[t-1].PrefPort]->PortNumber);
 
-                               len += sk_proc_print(buffer,
-                                       "Bus speed (MHz)                %d\n",
-                                       pPnmiStruct->BusSpeed);
+                       seq_printf(seq, "Bus speed (MHz)                %d\n",
+                                     pPnmiStruct->BusSpeed);
 
-                               len += sk_proc_print(buffer,
-                                       "Bus width (Bit)                %d\n",
-                                       pPnmiStruct->BusWidth);
-                               len += sk_proc_print(buffer,
-                                       "Driver version                 %s\n",
-                                       VER_STRING);
-                               len += sk_proc_print(buffer,
-                                       "Hardware revision              v%d.%d\n",
-                                       (pAC->GIni.GIPciHwRev >> 4) & 0x0F,
-                                       pAC->GIni.GIPciHwRev & 0x0F);
+                       seq_printf(seq, "Bus width (Bit)                %d\n",
+                                     pPnmiStruct->BusWidth);
+                       seq_printf(seq, "Driver version                 %s\n",
+                                     VER_STRING);
+                       seq_printf(seq, "Hardware revision              v%d.%d\n",
+                                     (pAC->GIni.GIPciHwRev >> 4) & 0x0F,
+                                     pAC->GIni.GIPciHwRev & 0x0F);
 
-                               /* Print sensor informations */
-                               for (i=0; i < pAC->I2c.MaxSens; i ++) {
-                                       /* Check type */
-                                       switch (pAC->I2c.SenTable[i].SenType) {
-                                       case 1:
-                                               strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
-                                               strcat(sens_msg, " (C)");
-                                               len += sk_proc_print(buffer,
-                                                       "%-25s      %d.%02d\n",
-                                                       sens_msg,
-                                                       pAC->I2c.SenTable[i].SenValue / 10,
-                                                       pAC->I2c.SenTable[i].SenValue % 10);
+                       /* Print sensor informations */
+                       for (i=0; i < pAC->I2c.MaxSens; i ++) {
+                               /* Check type */
+                               switch (pAC->I2c.SenTable[i].SenType) {
+                               case 1:
+                                       strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+                                       strcat(sens_msg, " (C)");
+                                       seq_printf(seq, "%-25s      %d.%02d\n",
+                                                     sens_msg,
+                                                     pAC->I2c.SenTable[i].SenValue / 10,
+                                                     pAC->I2c.SenTable[i].SenValue % 10);
 
-                                               strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
-                                               strcat(sens_msg, " (F)");
-                                               len += sk_proc_print(buffer,
-                                                       "%-25s      %d.%02d\n",
-                                                       sens_msg,
-                                                       ((((pAC->I2c.SenTable[i].SenValue)
-                                                       *10)*9)/5 + 3200)/100,
-                                                       ((((pAC->I2c.SenTable[i].SenValue)
-                                                       *10)*9)/5 + 3200) % 10);
-                                               break;
-                                       case 2:
-                                               strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
-                                               strcat(sens_msg, " (V)");
-                                               len += sk_proc_print(buffer,
-                                                       "%-25s      %d.%03d\n",
-                                                       sens_msg,
-                                                       pAC->I2c.SenTable[i].SenValue / 1000,
-                                                       pAC->I2c.SenTable[i].SenValue % 1000);
-                                               break;
-                                       case 3:
-                                               strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
-                                               strcat(sens_msg, " (rpm)");
-                                               len += sk_proc_print(buffer,
-                                                       "%-25s      %d\n",
-                                                       sens_msg,
-                                                       pAC->I2c.SenTable[i].SenValue);
-                                               break;
-                                       default:
-                                               break;
-                                       }
+                                       strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+                                       strcat(sens_msg, " (F)");
+                                       seq_printf(seq, "%-25s      %d.%02d\n",
+                                                     sens_msg,
+                                                     ((((pAC->I2c.SenTable[i].SenValue)
+                                                        *10)*9)/5 + 3200)/100,
+                                                     ((((pAC->I2c.SenTable[i].SenValue)
+                                                        *10)*9)/5 + 3200) % 10);
+                                       break;
+                               case 2:
+                                       strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+                                       strcat(sens_msg, " (V)");
+                                       seq_printf(seq, "%-25s      %d.%03d\n",
+                                                     sens_msg,
+                                                     pAC->I2c.SenTable[i].SenValue / 1000,
+                                                     pAC->I2c.SenTable[i].SenValue % 1000);
+                                       break;
+                               case 3:
+                                       strcpy(sens_msg, pAC->I2c.SenTable[i].SenDesc);
+                                       strcat(sens_msg, " (rpm)");
+                                       seq_printf(seq, "%-25s      %d\n",
+                                                     sens_msg,
+                                                     pAC->I2c.SenTable[i].SenValue);
+                                       break;
+                               default:
+                                       break;
                                }
+                       }
                                
-                               /*Receive statistics */
-                               len += sk_proc_print(buffer, 
-                               "\nReceive statistics\n\n");
+                       /*Receive statistics */
+                       seq_printf(seq, "\nReceive statistics\n\n");
 
-                               len += sk_proc_print(buffer,
-                                       "Received bytes                 %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxOctetsOkCts);
-                               len += sk_proc_print(buffer,
-                                       "Received packets               %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxOkCts);
+                       seq_printf(seq, "Received bytes                 %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxOctetsOkCts);
+                       seq_printf(seq, "Received packets               %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxOkCts);
 #if 0
-                               if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC && 
-                                       pAC->HWRevision < 12) {
-                                       pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts - 
-                                               pPnmiStat->StatRxShortsCts;
-                                       pPnmiStat->StatRxShortsCts = 0;
-                               }
+                       if (pAC->GIni.GP[0].PhyType == SK_PHY_XMAC && 
+                           pAC->HWRevision < 12) {
+                               pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts - 
+                                       pPnmiStat->StatRxShortsCts;
+                               pPnmiStat->StatRxShortsCts = 0;
+                       }
 #endif
-                               if (pNet->Mtu > 1500) 
-                                       pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -
-                                               pPnmiStat->StatRxTooLongCts;
+                       if (dev->mtu > 1500)
+                               pPnmiStruct->InErrorsCts = pPnmiStruct->InErrorsCts -
+                                       pPnmiStat->StatRxTooLongCts;
 
-                               len += sk_proc_print(buffer,
-                                       "Receive errors                 %Lu\n",
-                                       (unsigned long long) pPnmiStruct->InErrorsCts);
-                               len += sk_proc_print(buffer,
-                                       "Receive dropped                %Lu\n",
-                                       (unsigned long long) pPnmiStruct->RxNoBufCts);
-                               len += sk_proc_print(buffer,
-                                       "Received multicast             %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxMulticastOkCts);
-                               len += sk_proc_print(buffer,
-                                       "Receive error types\n");
-                               len += sk_proc_print(buffer,
-                                       "   length                      %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxRuntCts);
-                               len += sk_proc_print(buffer,
-                                       "   buffer overflow             %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxFifoOverflowCts);
-                               len += sk_proc_print(buffer,
-                                       "   bad crc                     %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxFcsCts);
-                               len += sk_proc_print(buffer,
-                                       "   framing                     %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxFramingCts);
-                               len += sk_proc_print(buffer,
-                                       "   missed frames               %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxMissedCts);
+                       seq_printf(seq, "Receive errors                 %Lu\n",
+                                     (unsigned long long) pPnmiStruct->InErrorsCts);
+                       seq_printf(seq, "Receive dropped                %Lu\n",
+                                     (unsigned long long) pPnmiStruct->RxNoBufCts);
+                       seq_printf(seq, "Received multicast             %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxMulticastOkCts);
+                       seq_printf(seq, "Receive error types\n");
+                       seq_printf(seq, "   length                      %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxRuntCts);
+                       seq_printf(seq, "   buffer overflow             %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxFifoOverflowCts);
+                       seq_printf(seq, "   bad crc                     %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxFcsCts);
+                       seq_printf(seq, "   framing                     %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxFramingCts);
+                       seq_printf(seq, "   missed frames               %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxMissedCts);
 
-                               if (pNet->Mtu > 1500)
-                                       pPnmiStat->StatRxTooLongCts = 0;
+                       if (dev->mtu > 1500)
+                               pPnmiStat->StatRxTooLongCts = 0;
 
-                               len += sk_proc_print(buffer,
-                                       "   too long                    %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxTooLongCts);                                      
-                               len += sk_proc_print(buffer,
-                                       "   carrier extension           %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxCextCts);                         
-                               len += sk_proc_print(buffer,
-                                       "   too short                   %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxShortsCts);                               
-                               len += sk_proc_print(buffer,
-                                       "   symbol                      %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxSymbolCts);                               
-                               len += sk_proc_print(buffer,
-                                       "   LLC MAC size                %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxIRLengthCts);                             
-                               len += sk_proc_print(buffer,
-                                       "   carrier event               %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxCarrierCts);                              
-                               len += sk_proc_print(buffer,
-                                       "   jabber                      %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatRxJabberCts);                               
+                       seq_printf(seq, "   too long                    %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxTooLongCts);                                        
+                       seq_printf(seq, "   carrier extension           %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxCextCts);                           
+                       seq_printf(seq, "   too short                   %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxShortsCts);                         
+                       seq_printf(seq, "   symbol                      %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxSymbolCts);                         
+                       seq_printf(seq, "   LLC MAC size                %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxIRLengthCts);                               
+                       seq_printf(seq, "   carrier event               %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxCarrierCts);                                
+                       seq_printf(seq, "   jabber                      %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatRxJabberCts);                         
 
 
-                               /*Transmit statistics */
-                               len += sk_proc_print(buffer, 
-                               "\nTransmit statistics\n\n");
+                       /*Transmit statistics */
+                       seq_printf(seq, "\nTransmit statistics\n\n");
                                
-                               len += sk_proc_print(buffer,
-                                       "Transmited bytes               %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxOctetsOkCts);
-                               len += sk_proc_print(buffer,
-                                       "Transmited packets             %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxOkCts);
-                               len += sk_proc_print(buffer,
-                                       "Transmit errors                %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxSingleCollisionCts);
-                               len += sk_proc_print(buffer,
-                                       "Transmit dropped               %Lu\n",
-                                       (unsigned long long) pPnmiStruct->TxNoBufCts);
-                               len += sk_proc_print(buffer,
-                                       "Transmit collisions            %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxSingleCollisionCts);
-                               len += sk_proc_print(buffer,
-                                       "Transmit error types\n");
-                               len += sk_proc_print(buffer,
-                                       "   excessive collision         %ld\n",
-                                       pAC->stats.tx_aborted_errors);
-                               len += sk_proc_print(buffer,
-                                       "   carrier                     %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxCarrierCts);
-                               len += sk_proc_print(buffer,
-                                       "   fifo underrun               %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxFifoUnderrunCts);
-                               len += sk_proc_print(buffer,
-                                       "   heartbeat                   %Lu\n",
-                                       (unsigned long long) pPnmiStat->StatTxCarrierCts);
-                               len += sk_proc_print(buffer,
-                                       "   window                      %ld\n",
-                                       pAC->stats.tx_window_errors);
+                       seq_printf(seq, "Transmited bytes               %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxOctetsOkCts);
+                       seq_printf(seq, "Transmited packets             %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxOkCts);
+                       seq_printf(seq, "Transmit errors                %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxSingleCollisionCts);
+                       seq_printf(seq, "Transmit dropped               %Lu\n",
+                                     (unsigned long long) pPnmiStruct->TxNoBufCts);
+                       seq_printf(seq, "Transmit collisions            %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxSingleCollisionCts);
+                       seq_printf(seq, "Transmit error types\n");
+                       seq_printf(seq, "   excessive collision         %ld\n",
+                                     pAC->stats.tx_aborted_errors);
+                       seq_printf(seq, "   carrier                     %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxCarrierCts);
+                       seq_printf(seq, "   fifo underrun               %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxFifoUnderrunCts);
+                       seq_printf(seq, "   heartbeat                   %Lu\n",
+                                     (unsigned long long) pPnmiStat->StatTxCarrierCts);
+                       seq_printf(seq, "   window                      %ld\n",
+                                     pAC->stats.tx_window_errors);
                                
-                       } /* if (strcmp(pACname, currDeviceName) == 0) */
                }
-               SkgeProcDev = next;
        }
-}
-
-/*****************************************************************************
- *
- *      sk_proc_print -generic line print  
- *
- * Description:
- *  This function fills the proc entry with statistic data about 
- *  the ethernet device.
- *  
- * Returns: number of bytes written
- *      
- */ 
-static int sk_proc_print(void *writePtr, char *format, ...)
-{   
-#define MAX_LEN_SINGLE_LINE 256
-       char     str[MAX_LEN_SINGLE_LINE];
-       va_list  a_start;
-       int      lenght = 0;
-
-       struct seq_file *seq = (struct seq_file *) writePtr;
-
-       SK_MEMSET(str, 0, MAX_LEN_SINGLE_LINE);
-
-       va_start(a_start, format);
-       vsprintf(str, format, a_start);
-       va_end(a_start);
-
-       lenght = strlen(str);
-
-       seq_printf(seq, str);
-       return lenght;
-}
-
-/*****************************************************************************
- *
- *      sk_seq_show - show proc information of a particular adapter
- *
- * Description:
- *  This function fills the proc entry with statistic data about 
- *  the ethernet device. It invokes the generic sk_gen_browse() to
- *  print out all items one per one.
- *  
- * Returns: number of bytes written
- *      
- */
-static int sk_seq_show(struct seq_file *seq, void *v)
-{
-    void *castedBuffer = (void *) seq;
-    currDev = seq->private;
-    sk_gen_browse(castedBuffer);
-    return 0;
+       return 0;
 }
 
 /*****************************************************************************