lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Thu, 10 Sep 2009 01:47:51 +0200 (CEST)
From:	"Robert M. Stockmann" <stock@...kkie.net>
To:	linux-kernel@...r.kernel.org
cc:	Linus Torvalds <torvalds@...l.org>
Subject: PCIe : PCI-Express or actually PCI-EISA ?


Hi,

PCIe : PCI-Express or actually PCI-EISA ?

After patching the e1000e driver for the Intel PRO/1000 Gigabit 
Ethernet card on PCIe to compile with gcc2 on linux-2.4 [1], it dawned 
on me that this driver actually makes use of some old EISA DMA 
buffering code as found inside e1000.h :

"/usr/include/sys/eisa.h" [2]:

 "/**************************************************************************
   *                                                                        *
   *              Copyright ( C ) 1993, Silicon Graphics, Inc.              *
   *                                                                        *
   *  These coded instructions, statements, and computer programs  contain  *
   *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
   *  are protected by Federal copyright law.  They  may  not be disclosed  *
   *  to  third  parties  or copied or duplicated in any form, in whole or  *
   *  in part, without the prior written consent of Silicon Graphics, Inc.  *
   *                                                                        *
   **************************************************************************/
  
  #ifndef _SYS_EISA_H
  #define _SYS_EISA_H
  
  #ident "$Revision: 1.7 $"
  
  #include <sys/kmem.h>
  
  /*
   * EISA register set
   */
  
  [ ...... ]
  
  /*
   * eisa dma buffer descriptor structure
   */
  struct eisa_dma_buf {
          uint_t                  count;          /* size of block */
          paddr_t                 address;        /* phys addr of data block */
          struct eisa_dma_buf     *next_buf;      /* next buffer descriptor */
          paddr_t                 stopval;        /* ring buf stop */
  };
  
  /*
   * eisa dma command block structure
   */
  struct eisa_dma_cb {
          struct eisa_dma_buf *reqrbufs;  /* list of reqr data bufs */
          union modes {
              struct {
                ushort_t
                   mreqr_ringstop:1,      /* use channel's stop reg? */
                   mreqr_eop:1,           /* is EOP input/output */
                   mreqr_timing:2,        /* A,B,C,ISA compat */
                   mreqr_path:2,          /* 8/16/32 */
                   :2,                    /* reserved */
                   mtrans_type:2,         /* Single/Demand/Blck/Cascade */
                   mtarg_step:1,          /* Inc/Dec */
                   :1,
                   mcommand:2,            /* Read/Write/Translate/Verify*/
                   :2;                    /* reserved */
              } m;
              ushort_t mode;
          } mu;
          uchar_t bufprocess;             /* single/chain/autoinit */
          uchar_t reqr_bswap;             /* byte swap data on/off */
          void    *procparam;             /* parameter buf for app call */
          int     (*proc)(void*);         /* addr of app call routine */
  };
  
  #define reqr_ringstop   mu.m.mreqr_ringstop
  #define reqr_eop        mu.m.mreqr_eop
  #define reqr_timing     mu.m.mreqr_timing
  #define reqr_path       mu.m.mreqr_path
  #define trans_type      mu.m.mtrans_type
  #define targ_step       mu.m.mtarg_step
  #define cb_cmd          mu.m.mcommand
  #define moderegs        mu.mode
  
  /*
   * Command block defines (conforms to eisa reg values,
   * do not modify)
   */
  
  /* reqr_ringstop */
  #define EISA_DMA_RING_OFF       0       /* don't use stop reg */
  #define EISA_DMA_RING_ON        1       /* use stop reg */
  
  /* reqr_eop */
  #define EISA_DMA_EOP_OUTPUT     0       /* EOP is output */
  #define EISA_DMA_EOP_INPUT      1       /* EOP is input */
  
  /* reqr_timing */
  #define EISA_DMA_TIME_ISA       0       /* ISA compat mode timing */
  #define EISA_DMA_TIME_A         1       /* type A timing */
  #define EISA_DMA_TIME_B         2       /* type B timing */

  [ ...... ]"
  
  
So its not far fetched to describe PCIe for what it really
is : a fast edition of the PCI bus with EISA capabilities.

Cheers,

Robert
PS.
[1] e1000e-0.5.11.2-gcc2-linux2.4.patch
   http://crashrecovery.org/CrashRecoveryKit/iso/2.4.37.5/e1000e-0.5.11.2-gcc2-linux2.4.patch.html
   http://crashrecovery.org/CrashRecoveryKit/iso/2.4.37.5/

[2] /usr/include/sys/eisa.h
    taken from IRIX 5.3 (c)1993 SGi
-- 
Robert M. Stockmann - RHCE
Network Engineer - UNIX/Linux Specialist
crashrecovery.org  stock@...kkie.net

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ