# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet v2.6.1 -> 1.1521 # drivers/net/sk98lin/Makefile 1.8 -> 1.9 # drivers/scsi/nsp32.h 1.4 -> 1.5 # drivers/net/sk98lin/ski2c.c 1.6 -> 1.7 # arch/ia64/lib/io.c 1.5 -> 1.6 # drivers/net/sk98lin/skgemib.c 1.1 -> 1.2 # drivers/scsi/sym53c8xx_2/sym_hipd.c 1.14 -> 1.15 # drivers/net/sk98lin/skgesirq.c 1.5 -> 1.6 # net/llc/af_llc.c 1.58 -> 1.59 # drivers/scsi/ips.c 1.68 -> 1.70 # drivers/scsi/53c7xx.h 1.3 -> 1.4 # drivers/scsi/scsi_error.c 1.67 -> 1.68 # drivers/ieee1394/raw1394.c 1.32 -> 1.35 # arch/ia64/configs/sn2_defconfig 1.1 -> 1.2 # drivers/net/sk98lin/h/skdrv1st.h 1.10 -> 1.11 # include/net/irda/timer.h 1.3 -> 1.4 # drivers/ieee1394/Kconfig 1.5 -> 1.6 # drivers/net/sk98lin/skcsum.c 1.4 -> 1.5 # arch/ia64/kernel/efi.c 1.28 -> 1.29 # arch/ia64/Makefile 1.62 -> 1.64 # arch/sparc/kernel/irq.c 1.25 -> 1.26 # drivers/scsi/aha152x.c 1.39 -> 1.40 # drivers/net/natsemi.c 1.56 -> 1.57 # drivers/net/skfp/skfddi.c 1.17 -> 1.19 # drivers/net/sk98lin/h/skcsum.h 1.2 -> 1.3 # drivers/net/sk98lin/skproc.c 1.10 -> 1.11 # drivers/scsi/atp870u.h 1.12 -> 1.13 # drivers/net/3c527.h 1.2 -> 1.3 # drivers/scsi/aic7xxx/aic7xxx_osm.c 1.47 -> 1.48 # drivers/scsi/mac_scsi.c 1.7 -> 1.8 # drivers/net/sk98lin/sktimer.c 1.3 -> 1.4 # drivers/net/sk98lin/h/skgepnmi.h 1.3 -> 1.4 # drivers/net/wireless/airo.c 1.80 -> 1.81 # drivers/scsi/bvme6000.c 1.7 -> 1.9 # include/net/tcp.h 1.52 -> 1.53 # include/asm-ia64/page.h 1.23 -> 1.24 # drivers/ieee1394/sbp2.c 1.46 -> 1.48 # arch/sparc64/prom/bootstr.c 1.4 -> 1.5 # arch/ia64/kernel/setup.c 1.64 -> 1.67 # net/ipv4/af_inet.c 1.60 -> 1.61 # drivers/net/sk98lin/skge.c 1.32 -> 1.33 # arch/ia64/hp/common/sba_iommu.c 1.33 -> 1.35 # drivers/ieee1394/video1394.c 1.39 -> 1.41 # drivers/ieee1394/ieee1394_core.h 1.18 -> 1.19 # net/ipx/af_ipx.c 1.45 -> 1.46 # net/ipv4/udp.c 1.55 -> 1.56 # drivers/scsi/g_NCR5380.c 1.24 -> 1.25 # drivers/net/sk98lin/h/sktimer.h 1.3 -> 1.4 # drivers/ieee1394/oui.db 1.3 -> 1.4 # include/linux/signal.h 1.14 -> 1.15 # net/bluetooth/af_bluetooth.c 1.25 -> 1.26 # drivers/net/68360enet.c 1.3 -> (deleted) # drivers/ieee1394/hosts.h 1.18 -> 1.19 # net/sched/sch_teql.c 1.8 -> 1.10 # arch/ia64/kernel/time.c 1.36 -> 1.37 # drivers/net/ne2k-pci.c 1.18 -> 1.19 # drivers/ieee1394/csr.c 1.16 -> 1.17 # drivers/net/sk98lin/skqueue.c 1.5 -> 1.6 # drivers/ieee1394/ieee1394_core.c 1.38 -> 1.40 # include/asm-ia64/asmmacro.h 1.13 -> 1.14 # drivers/scsi/ips.h 1.34 -> 1.35 # net/ipv4/netfilter/ip_tables.c 1.19 -> 1.20 # arch/ia64/kernel/smpboot.c 1.41 -> 1.43 # drivers/net/wireless/Kconfig 1.15 -> 1.16 # net/bluetooth/sco.c 1.22 -> 1.23 # drivers/net/wan/Kconfig 1.16 -> 1.17 # drivers/net/starfire.c 1.33 -> 1.34 # net/irda/irlap_frame.c 1.14 -> 1.15 # net/key/af_key.c 1.49 -> 1.50 # drivers/scsi/ini9100u.c 1.19 -> 1.20 # drivers/net/wireless/atmel.c 1.7 -> 1.8 # arch/ia64/sn/kernel/setup.c 1.20 -> 1.21 # drivers/net/sk98lin/skdim.c 1.4 -> 1.5 # net/ipv4/tcp.c 1.50 -> 1.51 # arch/ia64/mm/numa.c 1.5 -> 1.6 # drivers/net/Makefile 1.68 -> 1.69 # drivers/scsi/aic7xxx/aic7xxx_osm_pci.c 1.11 -> 1.12 # drivers/net/sk98lin/h/ski2c.h 1.3 -> 1.4 # drivers/scsi/inia100.c 1.26 -> 1.27 # net/irda/ircomm/ircomm_tty.c 1.30 -> 1.31 # net/irda/af_irda.c 1.47 -> 1.49 # drivers/scsi/NCR53C9x.h 1.8 -> 1.9 # drivers/ieee1394/highlevel.h 1.12 -> 1.14 # arch/sparc64/defconfig 1.108 -> 1.109 # arch/sparc/mm/fault.c 1.13 -> 1.14 # include/asm-ia64/numa.h 1.12 -> 1.13 # net/socket.c 1.70 -> 1.71 # drivers/scsi/amiga7xx.c 1.7 -> 1.9 # arch/sparc64/kernel/head.S 1.20 -> 1.21 # drivers/net/sk98lin/h/skgehwt.h 1.3 -> 1.4 # drivers/ieee1394/hosts.c 1.22 -> 1.23 # net/ipv6/raw.c 1.44 -> 1.45 # arch/ia64/kernel/irq_ia64.c 1.15 -> 1.16 # drivers/scsi/atp870u.c 1.26 -> 1.27 # net/atm/br2684.c 1.9 -> 1.10 # include/linux/net.h 1.17 -> 1.18 # include/linux/pci_ids.h 1.129 -> 1.130 # include/net/bluetooth/bluetooth.h 1.13 -> 1.14 # arch/ia64/mm/init.c 1.54 -> 1.55 # drivers/scsi/aacraid/aachba.c 1.21 -> 1.22 # drivers/net/dummy.c 1.6 -> 1.7 # arch/ia64/pci/pci.c 1.39 -> 1.40 # arch/ia64/kernel/ia64_ksyms.c 1.35 -> 1.36 # arch/ia64/kernel/process.c 1.49 -> 1.50 # arch/ia64/lib/memcpy_mck.S 1.4 -> 1.5 # arch/ia64/lib/memset.S 1.6 -> 1.7 # arch/ia64/kernel/acpi.c 1.57 -> 1.59 # drivers/net/tokenring/smctr.c 1.26 -> 1.27 # drivers/scsi/mac_esp.c 1.13 -> 1.15 # net/ipx/ipx_route.c 1.2 -> 1.3 # arch/ia64/kernel/machvec.c 1.5 -> 1.6 # net/econet/af_econet.c 1.28 -> 1.29 # net/netrom/af_netrom.c 1.42 -> 1.43 # net/rose/af_rose.c 1.36 -> 1.37 # drivers/net/wireless/atmel_cs.c 1.8 -> 1.9 # net/netlink/af_netlink.c 1.37 -> 1.38 # drivers/scsi/scsi.c 1.132 -> 1.134 # net/decnet/af_decnet.c 1.36 -> 1.37 # drivers/net/sk98lin/skgeinit.c 1.7 -> 1.8 # drivers/net/irda/sir-dev.h 1.1 -> 1.2 # mm/mremap.c 1.35 -> 1.36 # drivers/scsi/aic7xxx/aic79xx_osm.c 1.50 -> 1.51 # net/ipv4/raw.c 1.42 -> 1.43 # drivers/net/3c527.c 1.17 -> 1.20 # net/bluetooth/hci_sock.c 1.26 -> 1.27 # drivers/net/sk98lin/h/skversion.h 1.4 -> 1.5 # arch/sparc/mm/srmmu.c 1.37 -> 1.38 # drivers/net/wan/Makefile 1.17 -> 1.18 # drivers/ieee1394/amdtp.c 1.15 -> 1.17 # arch/ia64/ia32/sys_ia32.c 1.86 -> 1.87 # net/irda/irlap_event.c 1.23 -> 1.24 # drivers/ieee1394/eth1394.c 1.24 -> 1.26 # drivers/net/irda/sir_dev.c 1.7 -> 1.9 # net/unix/af_unix.c 1.55 -> 1.56 # drivers/net/pppoe.c 1.38 -> 1.39 # net/bluetooth/rfcomm/sock.c 1.24 -> 1.25 # Documentation/networking/sk98lin.txt 1.7 -> 1.8 # net/packet/af_packet.c 1.37 -> 1.38 # drivers/net/wireless/orinoco_pci.c 1.9 -> 1.10 # net/bluetooth/l2cap.c 1.34 -> 1.35 # drivers/net/wan/farsync.c 1.17 -> 1.18 # arch/ia64/mm/tlb.c 1.20 -> 1.21 # drivers/net/wan/hd64572.h 1.2 -> 1.3 # drivers/net/sk98lin/skgepnmi.c 1.6 -> 1.7 # include/net/sock.h 1.48 -> 1.49 # drivers/ieee1394/dv1394.c 1.34 -> 1.36 # net/core/sock.c 1.30 -> 1.31 # include/net/inet_common.h 1.5 -> 1.6 # net/atm/common.h 1.13 -> 1.14 # drivers/net/pcmcia/Kconfig 1.10 -> 1.11 # drivers/net/sk98lin/h/skgeinit.h 1.4 -> 1.5 # drivers/net/sk98lin/h/skgei2c.h 1.2 -> 1.3 # drivers/ieee1394/cmp.c 1.8 -> 1.9 # drivers/net/tokenring/olympic.c 1.26 -> 1.27 # drivers/scsi/scsi_scan.c 1.114 -> 1.115 # include/net/udp.h 1.12 -> 1.13 # drivers/net/irda/sir_kthread.c 1.8 -> 1.9 # drivers/scsi/Makefile 1.49 -> 1.51 # net/ipv6/udp.c 1.56 -> 1.57 # drivers/scsi/mvme16x.c 1.7 -> 1.8 # drivers/net/sk98lin/h/xmac_ii.h 1.6 -> 1.7 # drivers/ieee1394/highlevel.c 1.16 -> 1.18 # drivers/ieee1394/ohci1394.c 1.46 -> 1.48 # drivers/net/Kconfig 1.56 -> 1.59 # drivers/net/sk98lin/sklm80.c 1.2 -> 1.3 # drivers/scsi/sym53c8xx_2/sym_misc.c 1.2 -> 1.3 # arch/sparc64/Kconfig 1.41 -> 1.42 # arch/ia64/kernel/irq.c 1.33 -> 1.34 # kernel/exit.c 1.121 -> 1.122 # include/asm-ia64/acpi.h 1.12 -> 1.13 # arch/ia64/scripts/unwcheck.sh 1.1 -> (deleted) # drivers/net/sk98lin/skgehwt.c 1.4 -> 1.5 # drivers/scsi/aic7xxx_old/aic7xxx_proc.c 1.9 -> 1.11 # drivers/scsi/Kconfig 1.46 -> 1.48 # net/ax25/af_ax25.c 1.35 -> 1.36 # arch/ia64/kernel/perfmon.c 1.68 -> 1.70 # arch/ia64/Kconfig 1.52 -> 1.54 # drivers/net/wan/pc300_drv.c 1.14 -> 1.15 # drivers/scsi/nsp32_io.h 1.4 -> 1.5 # arch/ia64/lib/Makefile 1.23 -> 1.24 # net/x25/af_x25.c 1.35 -> 1.36 # drivers/net/sk98lin/h/skgehw.h 1.6 -> 1.7 # drivers/net/sk98lin/skxmac2.c 1.6 -> 1.7 # include/scsi/scsi.h 1.15 -> 1.16 # arch/ia64/kernel/smp.c 1.27 -> 1.28 # drivers/net/sk98lin/h/skdrv2nd.h 1.6 -> 1.7 # drivers/net/sk98lin/h/skqueue.h 1.3 -> 1.4 # drivers/scsi/qla1280.h 1.22 -> 1.23 # net/appletalk/ddp.c 1.40 -> 1.41 # drivers/scsi/qla1280.c 1.51 -> 1.53 # drivers/net/sk98lin/h/sktypes.h 1.3 -> 1.4 # include/asm-ia64/mmzone.h 1.6 -> 1.7 # arch/ia64/kernel/unwind.c 1.34 -> 1.35 # drivers/scsi/53c7xx.c 1.20 -> 1.21 # drivers/scsi/sym53c8xx_2/sym_glue.c 1.39 -> 1.40 # net/sctp/socket.c 1.100 -> 1.101 # net/atm/common.c 1.48 -> 1.49 # (new) -> 1.1 drivers/scsi/qla2xxx/ql2200.c # (new) -> 1.1 Documentation/scsi/qla2xxx.revision.notes # (new) -> 1.5 drivers/net/forcedeth.c # (new) -> 1.1 drivers/scsi/qla2xxx/Makefile # (new) -> 1.1 drivers/scsi/qla2xxx/qla_sup.c # (new) -> 1.1 drivers/net/wan/pci200syn.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_settings.h # (new) -> 1.1 drivers/scsi/qla2xxx/qla_gs.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_rscn.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_os.h # (new) -> 1.1 drivers/scsi/qla2xxx/ql2200_fw.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_listops.h # (new) -> 1.1 drivers/scsi/qla2xxx/ql2100.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_isr.c # (new) -> 1.2 arch/ia64/configs/generic_defconfig # (new) -> 1.1 drivers/scsi/qla2xxx/qla_version.h # (new) -> 1.1 drivers/scsi/qla2xxx/ql2300_fw.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_mbx.c # (new) -> 1.1 arch/ia64/scripts/check-text-align.S # (new) -> 1.1 drivers/scsi/qla2xxx/qla_def.h # (new) -> 1.1 drivers/scsi/qla2xxx/qla_devtbl.h # (new) -> 1.1 drivers/scsi/qla2xxx/qla_iocb.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_inline.h # (new) -> 1.1 arch/ia64/scripts/unwcheck.py # (new) -> 1.1 drivers/scsi/qla2xxx/qla_dbg.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_init.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_dbg.h # (new) -> 1.1 drivers/scsi/qla2xxx/ql2300.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_os.c # (new) -> 1.1 drivers/scsi/qla2xxx/ql2100_fw.c # (new) -> 1.1 drivers/scsi/qla2xxx/qla_gbl.h # (new) -> 1.2 drivers/scsi/qla2xxx/Kconfig # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 04/01/08 torvalds@home.osdl.org 1.1503 # Linux 2.6.1 # -------------------------------------------- # 04/01/09 davidm@tiger.hpl.hp.com 1.1504 # Merge tiger.hpl.hp.com:/data1/bk/vanilla/linux-2.5 # into tiger.hpl.hp.com:/data1/bk/lia64/to-linus-2.5 # -------------------------------------------- # 04/01/09 davem@nuts.ninka.net 1.1503.1.1 # [SPARC64]: In early bootup, BUG() if cannot find TLB entry for remapping. # -------------------------------------------- # 04/01/09 wesolows@foobazco.org 1.1503.1.2 # [SPARC]: Fix PMD masking in SRMMU code. # -------------------------------------------- # 04/01/09 wesolows@foobazco.org 1.1503.1.3 # [SPARC]: Use spinlock to protect IRQ action management. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.1 # [NET]: Use size_t for size argument in {send,recv}msg callchain. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.2 # [IPV4/IPV6]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.3 # [BLUETOOTH]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.4 # [PPPOE]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.5 # [APPLETALK DDP]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.6 # [ATM]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.7 # [AX25]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.8 # [IPX]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.9 # [DECNET]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.10 # [NETLINK]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.11 # [ECONET]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.12 # [IRDA]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.13 # [LLC]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.14 # [NETROM]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.15 # [ROSE]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.16 # [UNIX]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 shemminger@osdl.org 1.1503.2.17 # [X25]: Use size_t for size in {send,recv}msg. # -------------------------------------------- # 04/01/09 chas@cmf.nrl.navy.mil 1.1503.2.18 # [ATM]: br2684 incorrectly handles frames recvd with FCS (by Alex Zeffertt ) # -------------------------------------------- # 04/01/09 garloff@suse.de 1.1503.2.19 # [NETFILTER]: Align nulldevname properly in ip_tables. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.2.20 # [IRDA]: Proper calculation for F-timer. Improve interoperability. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.2.21 # [IRDA]: Fix a potential dealock in sir-dev state machine. # # Also, make sir-dev locking compatible with irport. # From Martin Diehl. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.2.22 # [IRDA]: Fix sir-dev 'raw' mode for sir dongles that need it. # # From Martin Diehl. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.2.23 # [IRDA]: Add module alias for IrCOMM pseudo serial device. # # From Martin Diehl. # -------------------------------------------- # 04/01/09 jt@bougret.hpl.hp.com 1.1503.2.24 # [IRDA]: Fix compiler warning in af_irda.c # -------------------------------------------- # 04/01/09 bcollins@debian.org 1.1503.1.4 # [SPARC64]: Add option to define default command line to kernel, ala PPC. # -------------------------------------------- # 04/01/09 davem@nuts.ninka.net 1.1503.1.5 # [SPARC64]: Update defconfig. # -------------------------------------------- # 04/01/09 torvalds@home.osdl.org 1.1503.1.6 # Merge bk://kernel.bkbits.net/davem/sparc-2.6 # into home.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # 04/01/09 davej@redhat.com 1.1484.1.2 # [AGPGART] The RadeonIGP 345M device ID is 0xcbb2, not 0xcbb # Spotted by Matteo Croce # -------------------------------------------- # 04/01/09 torvalds@home.osdl.org 1.1503.1.7 # Merge bk://linux-dj.bkbits.net/agpgart # into home.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.8 # Merge mulgrave.(none):/home/jejb/BK/linux-2.5 # into mulgrave.(none):/home/jejb/BK/scsi-misc-2.7 # -------------------------------------------- # 04/01/10 jes@trained-monkey.org 1.1503.1.9 # [PATCH] qla1280 # # I am attaching the latest version of the qla1280 driver for inclusion in # the next 2.6.x release. It is mostly based on Christoph's cleanup work # and a couple of changes of my own. I don't know if it is too late for # 2.6.1, but otherwise it would be nice to get it into 2.6.2. # # I have built and tested this using 2.6.0-test11 on an ia64, but I don't # think there were any major SCSI changes since then. # -------------------------------------------- # 04/01/10 arjanv@redhat.com 1.1503.1.10 # [PATCH] fix a few missing return value checks in scsi # # The attached patch adds a few error checks for the pci dma_mask setting # routines, which after all can fail and thus need their return code # checked. # -------------------------------------------- # 04/01/10 mort@wildopensource.com 1.1503.1.11 # [PATCH] Call slave_destroy in scsi_alloc_sdev error path # # This patch fixes a potential memory leak in scsi_alloc_sdev. # # If slave_alloc kmallocs memory and the get_device() (around line 245) # fails then we goto the error path. The error path never calls # slave_destroy. # -------------------------------------------- # 04/01/10 patmans@ibm.com 1.1503.1.12 # [PATCH] Re: 2.6.1-rc1: SCSI: `TIMEOUT' redefined # # On Tue, Jan 06, 2004 at 07:33:25PM +0100, Adrian Bunk wrote: # > On Wed, Dec 31, 2003 at 12:36:49AM -0800, Linus Torvalds wrote: # > >... # > > Summary of changes from v2.6.0 to v2.6.1-rc1 # > > ============================================ # > >... # > > Patrick Mansfield: # > > o consolidate and log scsi command on send and completion # > >... # > # > This adds a #define TIMEOUT to scsi.h conflicting with a different # > TIMEOUT #define in drivers/scsi/eata_generic.h: # # Sorry Adrian, here is a patch renaming TIMEOUT to TIMEOUT_ERROR. Still # not a good name for the usage in SCSI core, but it does not conflict, and # matches the other names for the IO completion results (SUCCESS, FAILED, # etc., they and others should really be prefixed with at least SCSI). # # eata does not use the TIMEOUT it defines, but there are enough defines of # TIMEOUT that it could be a problem in other drivers. # # Only compile tested for eata driver. # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.13 # SCSI: atp870u update # # From: Zwane Mwaikambo # -------------------------------------------- # 04/01/10 fischer@linux-buechse.de 1.1503.1.14 # [PATCH] Kernel oops in 2.6.1 when loading aha152x_cs.ko # # Attached patch removed the references to the legacy stuff from the # driver. # # I'm not sure if that is all that needs to be done though, and I could # only test it for the non-pcmcia case, but that works here. # -------------------------------------------- # 04/01/10 felipewd@terra.com.br 1.1503.3.1 # [netdrvr 3c527] remove cli/sti # # # Richard Procter and I worked to remove cli/sti to add proper SMP support (I did the original stuff and Richard did the actual current code :)). # # Besides that, Richard did a great jog improving the perfomance of the driver quite a bit: # # - Improve mc32_command by 770% (438% non-inlined) over the semaphore version (at a cost of 1 sem + 2 completions per driver). # # - Removed mutex covering mc32_send_packet (hard_start_xmit). This lets the interrupt handler operate concurrently and removes unnecessary locking. It makes the code only slightly more brittle # # Original post: # # http://marc.theaimsgroup.com/?l=linux-netdev&m=106438449315202&w=2 # # Since it didn't apply cleanly against 2.6.0-test6, I forward ported it. Patch attached. # # Jeff, please consider applying, # # Thanks. # -------------------------------------------- # 04/01/10 rddunlap@osdl.org 1.1503.4.1 # [netdrvr natsemi] janitor: insert missing iounmap(), add error handling # # From: Leann Ogasawara # # Patch inserts a missing iounmap(). Implements a cleanup path # for error handling as well. # -------------------------------------------- # 04/01/10 shemminger@osdl.org 1.1503.5.1 # [PATCH] smctr - get rid of MOD_INC/DEC # # Get rid of warning now that module refcounting now done by network code not drivers. # # Not tested on real hardware. # -------------------------------------------- # 04/01/10 rnp@paradise.net.nz 1.1503.3.2 # [netdrvr 3c527] whitespace changes (sync up with maintainer) # -------------------------------------------- # 04/01/10 rnp@paradise.net.nz 1.1503.3.3 # [netdrvr 3c527] fix race # -------------------------------------------- # 04/01/10 shemminger@osdl.org 1.1503.5.2 # [PATCH] trivial -- skfp_probe should be static # # skfp_probe used to be called from Space.c but isn't any more. # Therefore it no longer needs to be global. All the calls to insert_device() # pass skfp_probe as a second arg, so just use it directly. # # Jeff, this also is janitor type stuff, so just put it in net-2.5-exp # -------------------------------------------- # 04/01/10 jgarzik@redhat.com 1.1503.5.3 # [netdrvr] Remove never-referenced 68360enet.c # -------------------------------------------- # 04/01/10 jgarzik@redhat.com 1.1503.3.4 # [netdrvr 3c527] applied missing pieces of Richard Proctor's 3c527 SMP update # # Minor stuff... remove unused constants, and mark non-experimental # and non-broken in Kconfig. # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.15 # SCSI sg,st block layer TCQ fix # # Usually, the mid layer ends the block tag (if one was in use) # early to release the resources. However, things like sg and st # don't go through the code path that does the release, so put a # fallback release in __scsi_release_request() for them. # -------------------------------------------- # 04/01/10 xose@wanadoo.es 1.1503.5.4 # [PATCH] more ne2k-pci clone boards # -------------------------------------------- # 04/01/10 manfred@colorfullife.com 1.1503.6.1 # [netdrvr] add "forcedeth" driver for nVidia nForce NICs # -------------------------------------------- # 04/01/10 achirica@telefonica.net 1.1503.7.1 # [wireless airo] Fix PCI registration # -------------------------------------------- # 04/01/10 shemminger@osdl.org 1.1503.5.5 # [PATCH] get rid of MOD INC/DEC for farsync # # Get rid of leftover MOD INC/DEC in this driver. Ref counting now done # by network core. # # Jeff, please apply to net-drivers-2.5-exp # -------------------------------------------- # 04/01/10 shemminger@osdl.org 1.1503.5.6 # [PATCH] pc300 - get rid of MOD_INC/MOD_DEC # # Remove old style mod inc/dec from this WAN driver. # -------------------------------------------- # 04/01/10 khc@pm.waw.pl 1.1503.8.1 # [wan] add new pc200syn driver # -------------------------------------------- # 04/01/10 mlindner@syskonnect.de 1.1503.9.1 # [PATCH] sk98lin-2.6: Kernel Update to Driver Version v6.21 # # Patch 1/4 (Update to version 6.21) # * Add: Common module update # * Add: New function for PCI initialization (SkGeInitPCI) # * Add: Yukon Plus changes (ChipID, PCI...) # * Add: Code for DIAG tool # * Fix: Problems while unloading the linux driver # * Fix: PrefPort=B not allowed on single NICs # * Fix: Fixed Linux System crash when using vlans # * Fix: Remove useless register_netdev # * Fix: Initalize Board before network configuration # * Fix: Modifications regarding try_module_get() and capable() # -------------------------------------------- # 04/01/10 mlindner@syskonnect.de 1.1503.9.2 # [PATCH] sk98lin-2.6: Readme Update to Driver Version v6.21 # # Patch 2/4 (Update to version 6.21) # * Fix: Readme changes # -------------------------------------------- # 04/01/10 mlindner@syskonnect.de 1.1503.9.3 # [PATCH] sk98lin-2.6: Kconfig Update to Driver Version v6.21 # # Patch 3/4 (Update to version 6.21) # * Add: Update of the Vendors list # -------------------------------------------- # 04/01/10 jgarzik@redhat.com 1.1503.5.7 # Cset exclude: shemminger@osdl.org|ChangeSet|20040110194048|37013 # # Revert skfp_probe patch... better patch coming. # -------------------------------------------- # 04/01/10 emcnabb@cs.byu.edu 1.1503.5.8 # [wireless orinoco_pci] add Vaio PCI id # -------------------------------------------- # 04/01/10 jgarzik@redhat.com 1.1503.5.9 # [netdrvr starfire] remove dup include # -------------------------------------------- # 04/01/10 jgarzik@redhat.com 1.1503.4.2 # Merge redhat.com:/spare/repo/netdev-2.6/natsemi # into redhat.com:/spare/repo/netdev-2.6/misc # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.16 # aacraid warning fix # # From: Christoph Hellwig # # Fix: # # drivers/scsi/aacraid/aachba.c:1409: warning: `flag' might be used uninitialized in this function # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.17 # repair oops in aic7xxx_old proc_info # # From: "Randy.Dunlap" # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.18 # another aic7xxx_old proc fix # # from 2.6.1-mm2 # -------------------------------------------- # 04/01/10 manfred@colorfullife.com 1.1503.6.2 # [netdrvr forcedeth] alloc fixes # -------------------------------------------- # 04/01/10 simon@thekelleys.org.uk 1.1503.10.1 # [wireless atmel] various updates # # Below is a patch against 2.6.1-rc1 which has that fix and # quite a few other components. viz: # # * Bumped version to 0.9 # # * Dmitry Torokhov's skb-leak and netif_carrier patches. # # * Added a couple of fields to /proc/driver/atmel # # * Fixed failure to call unregister_netdev in a couple of error-unwind # paths. I think this fixes the # unregister_netdevice: waiting for eth1 to become free. # bugs, but I don't have definative proof. # # * Remove floating-point constants just in case the compiler doesn't. # # * Fixed bug in scanning. # # * Added firmware versioning, driver will search through different # available versions of firmware 'till it finds an available one. # # * Changed firmware URL in configure help to a directory rather than a # file, so I can release new named versions. # # * Added support for later releases of the firmware, which are WPA aware. # Firmware verion is automatically detected, so users who upgrade their # kernel but not their firmware won't have problems. # # # The PCI support and possible WPA support will have to wait for another day. # # -------------------------------------------- # 04/01/10 ak@muc.de 1.1503.4.3 # [PATCH] Mark IBM TR driver as not 64 bit clean # # This driver doesn't seem to be 64bit clean judging from the warnings # on x86-64. Mark it as !64BIT. # # -Andi # -------------------------------------------- # 04/01/10 jgarzik@redhat.com 1.1503.4.4 # [tokenring olympic] use memset_io to fix certain platforms # # Prefer a single memset_io() to buggy writel/writew/writeb loops. # # Bug found and fixed by IBM. # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.19 # sym2 speed selection fix # # From: Alex Tomas # # without following patch I couldn't get 160MB from my disk. removed line # restores previous clocking value (0 in my case). so, driver thinks disk # isn't DT-capable ... # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.20 # Fix sym2 Ultra160 mode # # From: Anton Blanchard # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.21 # Update Mac ESP SCSI # # From: Geert Uytterhoeven # # Mac ESP SCSI: Update argument parsing (from Matthias Urlichs) # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.22 # Mac SCSI fixes (from Matthias Urlichs) # # From: Geert Uytterhoeven # # Mac SCSI fixes (from Matthias Urlichs): # - Inline functions need to be defined before being used. # - out_8() takes an address and a value, not the other way round. # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.23 # ncr53c7xx: Cleanup prototypes # # From: Geert Uytterhoeven # # ncr53c7xx: Cleanup prototypes for ncr53c7xx_init() # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.24 # BVME6000 SCSI: Fix typos # # From: Geert Uytterhoeven # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.25 # Amiga NCR53c710: Coalesce all configuration options into one # # From: Geert Uytterhoeven # # Amiga NCR53c710: Coalesce all Amiga NCR53c710 SCSI host adapter configuration # options into one config option, as suggested by Matthew Wilcox. # -------------------------------------------- # 04/01/10 jejb@mulgrave.(none) 1.1503.1.26 # NCR53C9x SCSI: Kill bogus inline # # From: Geert Uytterhoeven # -------------------------------------------- # 04/01/11 viro@parcelfarce.linux.theplanet.co.uk 1.1503.4.5 # [NET] fix leak in sch_teql # # Also note the fact that we're calling functions that may block, # while holding a local spinlock. # -------------------------------------------- # 04/01/11 viro@parcelfarce.linux.theplanet.co.uk 1.1503.6.3 # [netdrvr forcedeth] kfree -> free_netdev # -------------------------------------------- # 04/01/11 bunk@fs.tum.de 1.1503.1.27 # [PATCH] qla1280.c doesn't compile # # On Wed, Jan 07, 2004 at 11:28:31PM -0800, Andrew Morton wrote: # >... # > Changes since 2.6.1-rc1-mm2: # >... # > -qla1280-update.patch # > +qla1280-update-2.patch # > # > Updated qlogic patch # >... # # I got the following compile error when trying to compile this driver # statically into a kernel with hotplug enabled: # # # <-- snip --> # # ... # drivers/scsi/qla1280.c:4849: error: `qla1280_remove_one' undeclared here # (not in a function) # drivers/scsi/qla1280.c:4849: error: initializer element is not constant # drivers/scsi/qla1280.c:4849: error: (near initialization for # `qla1280_pci_driver.remove') # make[2]: *** [drivers/scsi/qla1280.o] Error 1 # # <-- snip --> # # # Since I don't see a good reason why qla1280_remove_one is #ifdef'ed out # in the non-modular case the patch below fixes this problem by removing # two #ifdef's. # -------------------------------------------- # 04/01/12 davidm@tiger.hpl.hp.com 1.1505 # ia64: add generic defconfig file # # Here's a generic_defconfig that works on all the ia64 # platforms I'm aware of, and we can always update it if it's # missing a driver or two. Compile tested 'make compressed' and # 'make modules', and boot tested on sn2, and I think Alex boot # tested on an HP machine. # -------------------------------------------- # 04/01/12 bjorn.helgaas@hp.com 1.1506 # [PATCH] ia64: HP IOTLB startup msg # # This patch adds a little noise on the console. I like to see this # info because it matches up with the AGPGART aperture info later on. # -------------------------------------------- # 04/01/12 jbarnes@sgi.com 1.1507 # [PATCH] ia64: sn2 defconfig update # # Just a quick update for the sn2_defconfig file now that some more config # options have been added. # -------------------------------------------- # 04/01/12 schwab@suse.de 1.1508 # [PATCH] ia64: __ia64_memcpy_fromio() may be missing from kernel # # When building a highly modular, non-generic kernel it can happen that # arch/ia64/lib/io.o is not included in the image because nothing built-in # needs __ia64_memcpy_fromio, etc., yet it may be called from a module. We # should force it to be linked in. # -------------------------------------------- # 04/01/12 davidm@tiger.hpl.hp.com 1.1509 # ia64: Minor fix for get_order() so it works even for insanely large # arguments. # -------------------------------------------- # 04/01/12 davidm@tiger.hpl.hp.com 1.1510 # ia64: Turn on CONFIG_EFI unconditionaly (even for HP Ski simulator). # -------------------------------------------- # 04/01/12 alex.williamson@hp.com 1.1511 # [PATCH] ia64: sba_iommu update # # This patch does a couple things: # * Allows iommu page size different than PAGE_SIZE. This was # largely done by Bjorn. The motivation for this is that sx1000 # hardware officially only supports use of the iommu with a 4k # page size. Thus the default is now 4k for sx1000 and PAGE_SIZE # for zx1. # * Cleanup the runtime statistics gathering such that we can turn # it on for some info w/o impacting runtime performance. # -------------------------------------------- # 04/01/12 davidm@tiger.hpl.hp.com 1.1512 # ia64: Avoid use of cast expressions as lvalues. They're ugly and may be # dropped from GCC at some point in the future. # -------------------------------------------- # 04/01/12 ak@muc.de 1.1503.4.6 # [PATCH] variable number of dummy devices # # Uses the new module_params that nobody else uses now. # -------------------------------------------- # 04/01/12 davidm@tiger.hpl.hp.com 1.1513 # ia64: Fix bad patch breakage: move generic-defconfig to where it belongs. # -------------------------------------------- # 04/01/12 torvalds@evo.osdl.org 1.1503.11.1 # Dosemu actually wants to do a zero-sized source mremap # to generate the duplicate area at 0x0000 and 0x100000. # # There's no downside to it, so allow it even though it's # a tad strange. # -------------------------------------------- # 04/01/14 willy@debian.org 1.1503.1.28 # [PATCH] Re: Building sym 2.1.18f on linux/alpha # # On Tue, Jan 13, 2004 at 06:02:08PM +0300, Sergey Tikhonov wrote: # > The final kernel could not pass linking stage with 2.1.18f version # > (included into 2.6.1 kernel patch). # > The linker complains that : # > drivers/built-in.o(.init.text+0x8cec): In function 'sym2_probe': # > : undfined reference to 'local symbols in discarded section .exit.text' # > # > I compared arch/alpha/kernel/vmlinux.lds.S with one from the i386 tree. # > The '.exit.text' and '.exit.data' # > sections were moved out of DISCARD attributes in the i386 version. I did # > the same with alpha version # > and it helped. # # Thanks for this report; you uncovered a real bug. Actually two real # bugs; one is that parisc is not discarding the .init.text and .exit.text # sections (so I didn't notice this bug) and the other is that sym_detach # is marked __devexit, yet called from a __devinit function. # -------------------------------------------- # 04/01/14 jes@wildopensource.com 1.1514 # [PATCH] ia64: header cleanup # # I fixed the code to compile with CONFIG_ACPI_NUMA and # !CONFIG_DISCONTIG since it's actually possible to compile that # configuration as well as cleaned up the #include usage a litte. # -------------------------------------------- # 04/01/14 bjorn.helgaas@hp.com 1.1515 # [PATCH] ia64: system type Kconfig cleanup # # Fix system type selection to workaround menuconfig bug (select "HP", # get "HP-simulator"). # -------------------------------------------- # 04/01/14 davidm@tiger.hpl.hp.com 1.1516 # ia64: Patch by Bjorn Helgaas: acpi_register_irq() must be exported to enable # modular ACPI device drivers. # -------------------------------------------- # 04/01/14 bjorn.helgaas@hp.com 1.1517 # [PATCH] ia64: move HCDP under serial console #ifdef # # Currently you can select HCDP independent of serial console. This # doesn't seem very useful, and makes the setup_serial_hcdp() reference # unresolved if the serial driver is built as a module. # # CONFIG_SERIAL_8250_CONSOLE is only selectable if the serial core is # built in (SERIAL_8250=y), so this patch makes sure we don't try to # call setup_serial_hcdp() unless it is actually built in to the kernel. # # (I think we should also make HCDP selection dependent on # SERIAL_8250_CONSOLE=y in Kconfig; I'll send a separate patch # for that since it's not ia64-specific.) # -------------------------------------------- # 04/01/14 jes@trained-monkey.org 1.1518 # [PATCH] ia64: quiet down SMP boot messages # # This patch gets rid of some superfluous printk's which get tedious on # machines with insane number of CPUs. The virtual/physical address bit # info is already available via /proc/pal, so there is no need to print # it at boot- time. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.2 # [IEEE1394]: Update OUI database as of Dec 31, 2003. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.3 # [IEEE1394]: Spelling fix from Dominik Brodowski. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.4 # [IEEE1394]: Convert to cdev API. # # Retire our char device dispatching logic. With the 2.6 cdev API we # can register much smaller device number regions, so we use that instead. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.5 # [IEEE1394]: Use the right length when deregistering raw1394 char device. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.6 # [IEEE1394]: Fix compilation when CONFIG_COMPAT is enabled (32/64 systems). # # This was broken by the last commit for cdev stuff which removed the # "int ret;" that these routines used. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.7 # [IEEE1394]: Per-host address space patch from Steve. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.8 # [IEEE1394]: Fix test in ohci_soft_reset(), and handle hot-unplugged cardbus cards better. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.9 # [IEEE1394]: Rework highlevel list locking to avoid blocking under spinlocks. # -------------------------------------------- # 04/01/14 bcollins@debian.org 1.1503.11.10 # [IEEE1394]: Sync file revisions. # -------------------------------------------- # 04/01/14 jgarzik@redhat.com 1.1503.6.4 # Merge redhat.com:/spare/repo/netdev-2.6/forcedeth # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/14 jgarzik@redhat.com 1.1503.6.5 # Merge redhat.com:/spare/repo/netdev-2.6/pci200syn # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/14 jgarzik@redhat.com 1.1503.6.6 # Merge redhat.com:/spare/repo/netdev-2.6/airo # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/14 jgarzik@redhat.com 1.1503.6.7 # Merge redhat.com:/spare/repo/netdev-2.6/atmel # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/14 jgarzik@redhat.com 1.1503.6.8 # Merge bk://kernel.bkbits.net/jgarzik/net-drivers-2.5 # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.4.7 # Merge redhat.com:/spare/repo/netdev-2.6/misc # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.3.5 # Merge redhat.com:/spare/repo/netdev-2.6/3c527 # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.3.6 # [netdrvr forcedeth] include linux/interrupt.h # # Fixes build on some platforms. # -------------------------------------------- # 04/01/15 jejb@mulgrave.(none) 1.1503.1.29 # g_NCR5380 - 2.6.0 - problem with reloading module # # From: "Randy.Dunlap" # # The problem is that the detect function requests an IO region # of 16 bytes (at least when a command line override parameter is # used) but the release function only tries to release 8 bytes, # and this request isn't done because it doesn't match any allocated # IO region. [NCR53C400 extensions are not enabled, so # NCR5380_region_size is 8, not 16, but the request uses # NCR5380_region_size regardless.] # # Fix: save the allocated region size in instance->n_io_ports and release # that size only; # -------------------------------------------- # 04/01/15 jejb@mulgrave.(none) 1.1503.1.30 # Import qla2xxx driver # # From: "Andrew Vasquez" # # With additional changes from: "James Bottomley" , # "Christoph Hellwig" # # This is the qlogic driver version 8.00.00b7 with the ioctl and failover code stripped # out and a few associated fixes put in. # -------------------------------------------- # 04/01/15 jejb@mulgrave.(none) 1.1503.1.31 # Fix qla2xxx Kconfig dependency problem # -------------------------------------------- # 04/01/15 david_jeffery@adaptec.com 1.1503.1.32 # [PATCH] ips 2/2: minor fixes # # This patch fixes two minor bugs. It allows zero length write commands # through to devices. It also prevents the writing of any '\0' # characters at the end of version numbers to ips's /proc/scsi files. # -------------------------------------------- # 04/01/15 david_jeffery@adaptec.com 1.1503.1.33 # [PATCH] ips fix for large mem 64bit machines # # This patch fixes DMA bugs on x86-64 and ia64 machines. The driver was # using commands that only support 32bit addresses in places that could # return 64bit addresses. One place was DMAing off the stack. The other # place was causing problems on x86-64 machines by calling pci_map() # functions on a region allocated by pci_alloc_consistent(). # -------------------------------------------- # 04/01/15 torvalds@evo.osdl.org 1.1503.1.34 # Merge bk://linux-scsi.bkbits.net/scsi-misc-2.7 # into evo.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.12.1 # [NET] remove both incorrect and unneeded spinlock from sch_teql # # The spinlock was held while calling functions that could block, # while simultaneously being at all times inside the context of # module init/exit. # # Thanks to DaveM. # -------------------------------------------- # 04/01/15 davidm@tiger.hpl.hp.com 1.1519 # ia64: Replace unwcheck shell-script with a Python script which works # correctly even on 32-bit hosts. As an added bonus, it's faster, # too. Run "unwcheck" by default, but for now, don't let unwcheck # errors cause the kernel build to fail. # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.1.35 # Merge redhat.com:/spare/repo/netdev-2.6/misc # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.1.36 # Merge redhat.com:/spare/repo/netdev-2.6/sk98lin # into redhat.com:/spare/repo/net-drivers-2.5 # -------------------------------------------- # 04/01/15 jgarzik@redhat.com 1.1503.1.37 # [netdrvr forcedeth] linux/interrupt wasn't enough :) include asm/irq.h too # # Thanks to DaveM. # -------------------------------------------- # 04/01/15 davidm@tiger.hpl.hp.com 1.1520 # ia64: If GAS can handle .align inside code, enable it via TEXT_ALIGN(). # -------------------------------------------- # 04/01/15 roland@redhat.com 1.1503.13.1 # [PATCH] fix pdeath_signal SMP locking # # Obviously almost noone uses the pdeath_signal feature, since this has gone # unnoticed for quite some time. # # This patch calls the function that does the right locking for the context # of this call (inside exit_notify). The names of the signal.c entrypoints # are a little confusing. # -------------------------------------------- # 04/01/15 torvalds@evo.osdl.org 1.1503.1.38 # Merge bk://gkernel.bkbits.net/net-drivers-2.5 # into evo.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # 04/01/15 torvalds@evo.osdl.org 1.1521 # Merge http://lia64.bkbits.net/to-linus-2.5 # into evo.osdl.org:/home/torvalds/v2.5/linux # -------------------------------------------- # diff -Nru a/Documentation/networking/sk98lin.txt b/Documentation/networking/sk98lin.txt --- a/Documentation/networking/sk98lin.txt Thu Jan 15 21:41:54 2004 +++ b/Documentation/networking/sk98lin.txt Thu Jan 15 21:41:54 2004 @@ -2,9 +2,9 @@ All rights reserved =========================================================================== -sk98lin.txt created 23-Sep-2003 +sk98lin.txt created 15-Dec-2003 -Readme File for sk98lin v6.18 +Readme File for sk98lin v6.21 Marvell Yukon/SysKonnect SK-98xx Gigabit Ethernet Adapter family driver for LINUX This file contains @@ -466,7 +466,7 @@ Link Aggregation according to IEEE standards 802.1, 802.1q, and 802.3ad. These features are only available after installation of open source modules available on the Internet: -For VLAN go to: http://scry.wanfear.com/~greear/vlan.html +For VLAN go to: http://www.candelatech.com/~greear/vlan.html For Link Aggregation go to: http://www.st.rim.or.jp/~yumo NOTE: SysKonnect GmbH does not offer any support for these open source diff -Nru a/Documentation/scsi/qla2xxx.revision.notes b/Documentation/scsi/qla2xxx.revision.notes --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/scsi/qla2xxx.revision.notes Thu Jan 15 21:41:55 2004 @@ -0,0 +1,457 @@ +/* + * QLogic ISP2200 and ISP2300 Linux Driver Revision List File. + * + ******************************************************************** + * + * Revision History + * + * Rev 8.00.00b8 December 5, 2003 AV + * - Instruct mid-layer to perform initial scan. + * + * Rev 8.00.00b7 December 5, 2003 AV + * - Resync with Linux Kernel 2.6.0-test11. + * - Add basic NVRAM parser (extras/qla_nvr). + * + * Rev 8.00.00b7-pre11 December 3, 2003 AV + * - Sanitize the scsi_qla_host structure: + * - Purge unused elements. + * - Reorganize high-priority members (cache coherency). + * - Add support for NVRAM access via a sysfs binary attribute: + * - Consolidate semaphore locking access. + * - Fix more PCI posting issues. + * - Add extras directory for dump/NVRAM tools. + * - Remove unused qla_vendor.c file. + * + * Rev 8.00.00b7-pre11 November 26, 2003 DG/AV + * - Merge several patches from Christoph Hellwig [hch@lst.de]: + * - in Linux 2.6 both pci and the scsi layer use the generic + * dma direction bits, use them directly instead of the scsi + * and pci variants and the (noop) conversion routines. + * - Fix _IOXX_BAD() usage for external IOCTL interface. + * - Use atomic construct for HA loop_state member. + * - Add generic model description text for HBA types. + * + * Rev 8.00.00b7-pre5 November 17, 2003 AV + * - Merge several patches from Christoph Hellwig [hch@lst.de]: + * - patch to split the driver into a common qla2xxx.ko and a + * qla2?00.ko for each HBA type - the latter modules are + * only very small wrappers, mostly for the firmware + * images, all the meat is in the common qla2xxx.ko. + * - make the failover code optional. + * - kill useless lock_kernel in dpc thread startup. + * - no need for modversions hacks in 2.6 (or 2.4). + * - kill qla2x00_register_with_Linux. + * - simplify EH code, cmd or it's hostdata can't be NULL, no + * need to search whether the host it's ours, the midlayer + * makes sure it won't call into a driver for some else + * host. + * - Merge several patches from Jes Sorensen + * [jes@wildopensource.com]: + * - Call qla2x00_config_dma_addressing() before performing + * any consistent allocations. This is required since the + * dma mask settings will affect the memory + * pci_alloc_consistent() will return. + * - Call pci_set_consistent_dma_mask() to allow for 64 bit + * consistent allocations, required on some platforms such + * as the SN2. + * - Wait 20 usecs (not sure how long is really necessary, + * but this seems safe) after setting CSR_ISP_SOFT_RESET in + * the ctrl_status register as the card doesn't respond to + * PCI reads while in reset state. This causes a machine + * check on some architectures. + * - Flush PCI writes before calling udelay() to ensure the + * write is not sitting idle in-flight for a while before + * hitting the hardware. + * - Include linux/vmalloc.h in qla_os.c since it uses + * vmalloc(). + * - Use auto-negotiate link speed when using default + * parameters rather than NVRAM settings. Disable NVRAM + * reading on SN2 since it's not possible to execute the + * HBA's BIOS on an SN2. I suggest doing something similar + * for all architectures that do not provide x86 BIOS + * emulation. + * - Clean-up slab-cache allocations: + * - locking. + * - mempool allocations in case of low-memory situations. + * - Fallback to GA_NXT scan if GID_PT call returns more than + * MAX_FIBRE_DEVICES. + * - Preserve iterating port ID across GA_NXT calls in + * qla2x00_find_all_fabric_devs(). + * - Pre-calculate ASCII firmware dump length as to not incur the + * cost-to-calculate at each invocation of a read(). + * + * Rev 8.00.00b6 November 4, 2003 AV + * - Add new 2300 TPX firmware (3.02.18). + * + * Rev 8.00.00b6-pre25 October 20, 2003 RA/AV + * - Resync with Linux Kernel 2.6.0-test9. + * - Rework firmware dump process: + * - Use binary attribute within sysfs tree. + * - Add user-space tool (gdump.sh) to retrieve formatted + * buffer. + * - Add ISP2100 support. + * - Use a slab cache for SRB allocations to reduce memory + * pressure. + * - Initial conversion of driver logging methods to a new + * qla_printk() function which uses dev_printk (Daniel + * Stekloff, IBM). + * - Further reduce stack usage in qla2x00_configure_local_loop() + * and qla2x00_find_all_fabric_devs(). + * - Separate port state used for routing of I/O's from port + * mgmt-login retry etc. + * + * Rev 8.00.00b6-pre19 October 13, 2003 AV + * - Resync with Linux Kernel 2.6.0-test7-bk5. + * - Add intelligent RSCN event handling: + * - reduce scan time during 'port' RSCN events by only + * querying specified port ids. + * - Available on ISP23xx cards only. + * - Increase maximum number of recognizable targets from 256 + * to 512. + * - Backend changes were previously added to support TPX + * (2K logins) firmware. Mid-layer can now scan for targets + * (H, B, T, L) where 512 < T >= 0. + * - Remove IP support from driver. + * - Switch firmware types from IP->TP for ISP22xx and + * IPX->TPX for ISP23xx cards. + * - Remove files qla_ip.[ch]. + * - Remove type designations from firmware filenames. + * + * Rev 8.00.00b6-pre11 September 15, 2003 DG/AV + * - Resync with 6.06.00. + * - Resync with Linux Kernel 2.6.0-test5-bk3. + * - Add new 2300 IPX firmware (3.02.15). + * + * Rev 8.00.00b5 July 31, 2003 AV + * - Always create an fc_lun_t entry for lun 0 - as the mid- + * layer requires access to this lun for discovery to occur. + * - General sanitizing: + * - Add generic firmware option definitions. + * - Generalize retrieval/update of firmware options. + * - Fix compile errors which occur with extended debug. + * - Handle failure cases for scsi_add_host() and + * down_interruptible(). + * - Host template updates: + * - Use standard bios_param callback function. + * - Disable clustering. + * - Remove unchecked_is_dma entry. + * + * Rev 8.00.00b5-pre5 July 29, 2003 DG/AV + * - Resync with 6.06.00b13. + * - Resync with Linux Kernel 2.6.0-test2. + * - Pass the complete loop_id, not the masked (0xff) value + * while issuing mailbox commands (qla_mbx.c/qla_fo.c/ + * qla_iocb.c/qla_init.c). + * - Properly handle zero-length return status for an RLC CDB. + * - Create an fclun_t structure for 'disconnected' luns, + * peripheral-qualifier of 001b. + * - Remove unused LIP-sequence register access during AE 8010. + * - Generalize qla2x00_mark_device_lost() to handle forced + * login request -- modify all direct/indirect invocations + * with proper flag. + * - Save RSCN notification (AE 8015h) data in a proper and + * consistent format (domain, area, al_pa). + * - General sanitizing: + * - scsi_qla_host structure member reordering for cache-line + * coherency. + * - Remove unused SCSI opcodes, endian-swap definitions. + * - Remove CMD_* pre-processor defines. + * - Remove unused SCSIFCHOTSWAP/GAMAP/MULTIHOST codes. + * - Backout patch which added a per-scsi_qla_host scsi host + * spinlock, since mid-layer already defines one. + * - Add new 2300 IPX firmware (3.02.15). + * + * Rev 8.00.00b4 July 14, 2003 RA/DG/AV + * - Resync with 6.06.00b12. + * - Resync with Linux Kernel 2.6.0-test1. + * - Remove IOCB throttling code -- originally #if'd. + * - Remove apidev_*() routines since proc_mknod() has been + * removed -- need alternate IOCTL interface. + * - Merge several performance/fix patches from Arjan van de + * Ven: + * - Undefined operation >> 32. + * - No need to acquire mid-layer lock during command + * callback. + * - Use a per-HBA mid-layer lock. + * - Use a non-locked cycle for setting the count of the + * newly allocated sp (qla2x00_get_new_sp()). + * - Modify semantic behavior of qla2x00_queuecommand(): + * - Reduce cacheline bouncing by having I/Os submitted + * by the IRQ handler. + * - Remove extraneous calls to qla2x00_next() during I/O + * queuing. + * - Use list_splice_init() during qla2x00_done() handling + * of commands to reduce list_lock contention. + * - RIO mode support for ISP2200: + * - Implementation differs slightly from original patch. + * - Do not use bottom-half handler (tasklet/work queue) + * for qla2x00_done() processing. + * + * Rev 8.00.00b4-pre22 July 12, 2003 AV + * - Check for 'Process Response Queue' requests early during + * the Host Status check. + * - General sanitizing: + * - srb_t structure rewrite, removal of unused members. + * - Remove unused fcdev array, fabricid, and PORT_* + * definitions. + * - Remove unused config_reg_t PCI definitions. + * - Add new 2200 IP firmware (2.02.06). + * - Add new 2300 IPX firmware (3.02.14). + * + * Rev 8.00.00b4-pre19 June 30, 2003 AV + * - Resync with Linux Kernel 2.5.73-bk8. + * - Rework IOCB command queuing methods: + * - Upper-layer driver *MUST* properly set the direction + * bit of SCSI commands. + * - Generalize 32bit/64bit queuing path functions. + * - Remove costly page-boundary cross check when using + * 64bit address capable IOCBs. + * + * Rev 8.00.00b4-pre15 June 19, 2003 AV + * - Resync with 6.06.00b11. + * - Continue fcport list consolidation work: + * - Updated IOCTL implementations to use new fcports + * list. + * - Modified product ID check to not verify ISP chip + * revision -- ISP2312 v3 (qla2x00_chip_diag()). + * - Add new 2300 IPX firmware (3.02.13): + * + * Rev 8.00.00b4-pre13 June 19, 2003 AV + * - Fix build process for qla2100 driver -- no support + * for IP. + * - SCSI host template modifications: + * - Set sg_tablesize based on the derived DMA mask. + * - Increase max_sectors since only limit within RISC + * is transfer of (((2^32) - 1) >> 9) sectors. + * + * Rev 8.00.00b4-pre12 June 18, 2003 RA, DG, RL, AV + * - Resync with 6.06.00b10. + * - Resync with Linux Kernel 2.5.72. + * - Initial fcport list consolidation work: + * - fcports/fcinitiators/fcdev/fc_ip --> ha->fcports + * list. + * + * Rev 8.00.00b4-pre7 June 05, 2003 AV + * - Properly release PCI resouces in init-failure case. + * - Reconcile disparite function return code definitions. + * + * Rev 8.00.00b4-pre4 June 03, 2003 AV + * - Resync with Linux Kernel 2.5.70-bk8: + * - SHT proc_info() changes. + * - Restructure SNS Generic Services routines: + * - Add qla_gs.c file to driver distribution. + * - Configure PCI latency timer for ISP23xx. + * + * Rev 8.00.00b4-pre3 June 02, 2003 RA, DG, RL, AV + * - Resync with 6.06.00b5. + * - Rework (again) PCI I/O space configuration + * (Anton Blanchard): + * - Use pci_set_mwi() routine; + * - Remove uneeded qla2x00_set_cache_line() function. + * - Remove extraneous modification of PCI_COMMAND word. + * + * Rev 8.00.00b3 May 29, 2003 AV + * - Resync with Linux Kernel 2.5.70. + * - Move RISC paused check from ISR fast-path. + * + * Rev 8.00.00b3-pre8 May 26, 2003 AV + * - Add new 2300 IPX firmware (3.02.12): + * - Rework PCI I/O space configuration. + * + * Rev 8.00.00b3-pre6 May 22, 2003 RA, DG, RL, AV + * - Resync with 6.06.00b3. + * + * Rev 8.00.00b3-pre4 May 21 2003 AV + * - Add new 2300 IPX firmware (3.02.11): + * - Remove 2300 TPX firmware from distribution. + * + * Rev 8.00.00b3-pre3 May 21 2003 AV + * - Properly setup PCI configuation space during + * initialization: + * - Properly configure Memory-Mapped I/O during early + * configuration stage. + * - Rework IP functionality to support 2k logins. + * - Add new 2300 IPX firmware (3.02.11): + * - Remove 2300 TPX firmware from distribution. + * + * Rev 8.00.00b3-pre2 May ??, 2003 RA, DG, RL, AV + * - Resync with 6.06.00b1. + * + * Rev 8.00.00b3-pre1 May ??, 2003 RA, DG, RL, AV + * - Resync with 6.05.00. + * + * Rev 8.00.00b2 May 19, 2003 AV + * - Simplify dma_addr_t handling during command queuing given + * new block-layer defined restrictions: + * - Physical addresses not spanning 4GB boundaries. + * - Firmware versions: 2100 TP (1.19.24), 2200 IP (2.02.05), + * 2300 TPX (3.02.10). + * + * Rev 8.00.00b2-pre1 May 13, 2003 AV + * - Add support for new 'Hotplug initialization' model. + * - Simplify host template by removing unused callbacks. + * - Use scsicam facilities to determine geometry. + * - Fix compilation issues for non-ISP23xx builds: + * - Correct register references in qla_dbg.c. + * - Correct Makefile build process. + * + * Rev 8.00.00b1 May 05, 2003 AV + * - Resync with Linux Kernel 2.5.69. + * - Firmware versions: 2100 TP (1.19.24), 2200 TP (2.02.05), + * 2300 TPX (3.02.10). + * + * Rev 8.00.00b1-pre45 April ??, 2003 AV + * - Resync with Linux Kernel 2.5.68-bk11: + * - Fix improper return-code assignment during fabric + * discovery. + * - Remove additional extraneous #defines from + * qla_settings.h. + * - USE_PORTNAME -- FO will always use portname. + * - Default queue depth size set to 64. + * + * Rev 8.00.00b1-pre42 April ??, 2003 AV + * - Convert bottom-half tasklet to a work_queue. + * - Initial basic coding of dynamic queue depth handling + * during QUEUE FULL statuses. + * - Fix mailbox interface problem with + * qla2x00_get_retry_cnt(). + * + * Rev 8.00.00b1-pre41 April ??, 2003 AV + * - Convert build defines qla2[1|2|3]00 macros to + * qla2[1|2|3]xx due to module name stringification clashes. + * - Add additional ISP2322 checks during board configuration. + * + * Rev 8.00.00b1-pre40 April ??, 2003 AV + * - Resync with Linux Kernel 2.5.68-bk8: + * - Updated IRQ handler interface. + * - Add ISP dump code (stub) in case of SYSTEM_ERROR on + * ISP2100. + * - Add new 2200 IP firmware (2.02.05). + * + * Rev 8.00.00b1-pre39 April ??, 2003 AV + * - Resync with Linux Kernel 2.5.68. + * - Add simple build.sh script to aid in external compilation. + * - Clean-break with Kernel 2.4 compatibility. + * - Rework DPC routine -- completion routines for signaling. + * - Re-add HBAAPI character device node for IOCTL support. + * - Remove residual QLA2X_PERFORMANCE defines. + * - Allocate SP pool via __get_free_pages() rather than + * individual kmalloc()'s. + * - Inform SCSI mid-layer of 16-byte CDB support + * (host->max_cmd_len): + * - Remove unecessary 'more_cdb' handling code from + * qla_iocb.c and qla_xioct.c. + * - Reduce duplicate code in fabric scanning logic (MS IOCB + * preparation). + * - Add ISP dump code in case of SYSTEM_ERROR. + * - Remove 2300 VIX firmware from distribution: + * - Add initial code for IPX support. + * - Add new 2300 TPX firmware (3.02.10). + * + * Rev 8.00.00b1-pre34 April ??, 2003 AV + * - Resync with Linux Kernel 2.5.67. + * - Use domain/area/al_pa fields when displaying PortID + * values -- addresses endianess issues. + * - Rework large case statement to check 'common' CDB commands + * early in qla2x00_get_cmd_direction(). + * + * Rev 8.00.00b1-pre31 April ??, 2003 AV + * - Update makefile to support PPC64 build. + * - Retool NVRAM configuration routine and structures: + * - Consoldate ISP21xx/ISP22xx/ISP23xx configuration + * (struct nvram_t). + * - Remove big/little endian support structures in favor of + * simplified bit-operations within byte fields. + * - Fix long-standing 'static' buffer sharing problem in + * qla2x00_configure_fabric(). + * + * Rev 8.00.00b1-pre30 April ??, 2003 AV + * - Complete implementation of GID_PT scan. + * - Use consistent MS IOCB invocation method to query SNS: + * - Add RNN_ID and RSNN_NN registrations in a fabric. + * - Remove unused Mailbox Command 6Eh (Send SNS) support + * structures. + * - Use 64bit safe IOCBs while issuing INQUIRY and RLC during + * topology scan. + * - Until reimplementation of fcdev_t/fcport list + * consolidation, valid loop_id ranges are still limited from + * 0x00 through 0xFF -- enforce this within the code. + * + * Rev 8.00.00b1-pre27 March ??, 2003 AV + * - Resync with 6.05.00b9. + * - Retool HBA PCI configuration -- qla2x00_pci_config(). + * - Remove inconsistent use of delay routines (UDELAY/SYS*). + * - Continue to teardown/clean/add comments and debug + * routines. + * - Properly swap bytes of the device's nodename in + * qla2x00_configure_local_loop(). + * + * Rev 8.00.00b1-pre25 March ??, 2003 AV + * - Resync with 6.05.00b8. + * + * Rev 8.00.00b1-pre23 March ??, 2003 AV + * - Remove (#define) IOCB usage throttling. + * - Abstract interrupt polling with qla2x00_poll(). + * - Modify lun scanning logic: + * - If the device does not support the SCSI Report Luns + * command, the driver will now only scan from 0 to the + * max#-luns as defined in the NVRAM (BIOS), rather than + * blindly scanning from 0 to 255 -- which could result in + * an increase in startup time when running against slow + * (JBOD) devices. + * - Rework reset logic in qla2x00_reset_chip() (spec). + * + * Rev 8.00.00b1-pre22 March ??, 2003 AV + * - Resync with 6.05.00b7. + * - Cleanup (rewrite) ISR handler. + * - Rename kmem_zalloc --> qla2x00_kmem_zalloc(): + * - This function will eventually be removed. + * - Add new 2300 VIX firmware (3.02.09): + * - Support for Tape, Fabric, 2K logins, IP, and VI. + * + * Rev 8.00.00b1-pre18 March ??, 2003 AV + * - Support 232x type ISPs. + * - Support single firmware for each ISP type: + * - Restructure brd_info/fw_info methods. + * - Streamline firmware load process. + * - Properly query firmware for version information. + * - Remove extraneous scsi_qla_host members: + * - device_id ==> pdev->device + * - Fix fc4 features (RFF_ID) registration. + * - Convert kmem_zalloc --> qla2x00_kmem_zalloc(). + * - Remove unused/extraneous #defines (USE_PORTNAME). + * + * Rev 8.00.00b1-pre14 March ??, 2003 AV + * - Resync with 6.05.00b6. + * - Initial source-code restructuring effort. + * - Build procedure. + * - Source file layout -- intuitive component layout. + * - Remove unused #defines (*PERFORMANCE, WORD_FW_LOAD, etc). + * - Add support for 2K logins (TPX -- firmware). + * - Add module parameter ql2xsuspendcount. + * - Add new 2200 IP/TP firmware (2.02.04). + * + * Rev 8.00.00b1-pre9 March ??, 2003 RL/DG/RA/AV + * - Use kernel struct list_head for fcport and fclun lists. + * - Remove extraneous (L|M)S_64BITS() and QL21_64*() defines. + * + * Rev 8.00.00b1-pre8 February 28, 2003 RL/DG/RA/AV + * - Resync with 6.05.00b3. + * + * Rev 8.00.00b1-pre7 February 23, 2003 RL/DG/RA/AV + * - Add alternate fabric scanning logic (GID_PT/GNN_ID/GPN_ID). + * - Remove use of deprecated function check_region(). + * - Add new 2300 IP/TP firmware (3.02.08). + * + * Rev 8.00.00b1-pre5 January 28, 2003 RL/DG/RA/AV + * - Resync with 6.05.00b3. + * - Consolidate device_reg structure definitions for ISP types. + * - Add support for new queue-depth selection. + * - Add new 2300 IP/TP firmware (3.02.07). + * + * Rev 8.00.00b1-pre1 January 17, 2003 AV + * - Initial branch from 6.04.00b8 driver. + * - Remove VMWARE specific code. + * - Add support for pci_driver interface. + * + ********************************************************************/ diff -Nru a/arch/ia64/Kconfig b/arch/ia64/Kconfig --- a/arch/ia64/Kconfig Thu Jan 15 21:41:55 2004 +++ b/arch/ia64/Kconfig Thu Jan 15 21:41:55 2004 @@ -33,6 +33,10 @@ bool default y +config EFI + bool + default y + choice prompt "IA-64 processor type" default ITANIUM @@ -66,26 +70,18 @@ will run on any supported IA-64 system. However, if you configure a kernel for your specific system, it will be faster and smaller. - To find out what type of IA-64 system you have, you may want to - check the IA-64 Linux web site at . - As of the time of this writing, most hardware is DIG compliant, - so the "DIG-compliant" option is usually the right choice. - - HP-simulator For the HP simulator - (). - HP-zx1 For HP zx1-based systems. - SGI-SN2 For SGI Altix systems DIG-compliant For DIG ("Developer's Interface Guide") compliant - systems. + systems + HP-zx1 For HP systems + SGI-SN2 For SGI Altix systems + Ski-simulator For the HP simulator + () If you don't know what to do, choose "generic". config IA64_DIG bool "DIG-compliant" -config IA64_HP_SIM - bool "HP-simulator" - config IA64_HP_ZX1 bool "HP-zx1" help @@ -96,6 +92,9 @@ config IA64_SGI_SN2 bool "SGI-SN2" +config IA64_HP_SIM + bool "Ski-simulator" + endchoice choice @@ -394,11 +393,6 @@ To use this option, you have to ensure that the "/proc file system support" (CONFIG_PROC_FS) is enabled, too. - -config EFI - bool - depends on !IA64_HP_SIM - default y config EFI_VARS tristate "/proc/efi/vars support" diff -Nru a/arch/ia64/Makefile b/arch/ia64/Makefile --- a/arch/ia64/Makefile Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/Makefile Thu Jan 15 21:41:53 2004 @@ -5,10 +5,11 @@ # License. See the file "COPYING" in the main directory of this archive # for more details. # -# Copyright (C) 1998-2003 by David Mosberger-Tang +# Copyright (C) 1998-2004 by David Mosberger-Tang # NM := $(CROSS_COMPILE)nm -B +READELF := $(CROSS_COMPILE)readelf export AWK @@ -25,9 +26,8 @@ GCC_VERSION=$(shell $(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f1 -d'.') GCC_MINOR_VERSION=$(shell $(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f2 -d'.') -GAS_STATUS=$(shell $(srctree)/arch/ia64/scripts/check-gas $(CC) $(OBJDUMP)) - -CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags $(CC) $(OBJDUMP)) +GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas $(CC) $(OBJDUMP)) +CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags $(CC) $(OBJDUMP) $(READELF)) ifeq ($(GAS_STATUS),buggy) $(error Sorry, you need a newer version of the assember, one that is built from \ @@ -71,15 +71,15 @@ .PHONY: boot compressed check -all: compressed +all: compressed unwcheck compressed: vmlinux.gz vmlinux.gz: vmlinux $(Q)$(MAKE) $(build)=$(boot) $@ -check: vmlinux - arch/ia64/scripts/unwcheck.sh $< +unwcheck: vmlinux + -$(Q)READELF=$(READELF) $(srctree)/arch/ia64/scripts/unwcheck.py $< archclean: $(Q)$(MAKE) $(clean)=$(boot) @@ -88,7 +88,7 @@ prepare: include/asm-ia64/offsets.h -arch/ia64/kernel/asm-offsets.s: include/asm include/linux/version.h +arch/ia64/kernel/asm-offsets.s: include/asm include/linux/version.h include/config/MARKER include/asm-ia64/offsets.h: arch/ia64/kernel/asm-offsets.s $(call filechk,gen-asm-offsets) @@ -108,4 +108,5 @@ define archhelp echo '* compressed - Build compressed kernel image' echo ' boot - Build vmlinux and bootloader for Ski simulator' + echo '* unwcheck - Check vmlinux for invalid unwind info' endef diff -Nru a/arch/ia64/configs/generic_defconfig b/arch/ia64/configs/generic_defconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/configs/generic_defconfig Thu Jan 15 21:41:55 2004 @@ -0,0 +1,1045 @@ +# +# Automatically generated make config: don't edit +# + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_CLEAN_COMPILE=y +CONFIG_STANDALONE=y + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=20 +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +# CONFIG_EMBEDDED is not set +CONFIG_KALLSYMS=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +CONFIG_MODVERSIONS=y +CONFIG_KMOD=y + +# +# Processor type and features +# +CONFIG_IA64=y +CONFIG_64BIT=y +CONFIG_MMU=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_TIME_INTERPOLATION=y +# CONFIG_ITANIUM is not set +CONFIG_MCKINLEY=y +CONFIG_IA64_GENERIC=y +# CONFIG_IA64_DIG is not set +# CONFIG_IA64_HP_SIM is not set +# CONFIG_IA64_HP_ZX1 is not set +# CONFIG_IA64_SGI_SN2 is not set +# CONFIG_IA64_PAGE_SIZE_4KB is not set +# CONFIG_IA64_PAGE_SIZE_8KB is not set +CONFIG_IA64_PAGE_SIZE_16KB=y +# CONFIG_IA64_PAGE_SIZE_64KB is not set +CONFIG_ACPI=y +CONFIG_ACPI_INTERPRETER=y +CONFIG_ACPI_KERNEL_CONFIG=y +CONFIG_IA64_L1_CACHE_SHIFT=7 +# CONFIG_MCKINLEY_ASTEP_SPECIFIC is not set +CONFIG_NUMA=y +CONFIG_DISCONTIGMEM=y +CONFIG_VIRTUAL_MEM_MAP=y +CONFIG_IA64_MCA=y +CONFIG_PM=y +CONFIG_IOSAPIC=y +CONFIG_FORCE_MAX_ZONEORDER=18 +# CONFIG_HUGETLB_PAGE_SIZE_4GB is not set +# CONFIG_HUGETLB_PAGE_SIZE_1GB is not set +# CONFIG_HUGETLB_PAGE_SIZE_256MB is not set +# CONFIG_HUGETLB_PAGE_SIZE_64MB is not set +CONFIG_HUGETLB_PAGE_SIZE_16MB=y +# CONFIG_HUGETLB_PAGE_SIZE_4MB is not set +# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set +# CONFIG_HUGETLB_PAGE_SIZE_256KB is not set +# CONFIG_IA64_PAL_IDLE is not set +CONFIG_SMP=y +# CONFIG_PREEMPT is not set +CONFIG_IA32_SUPPORT=y +CONFIG_COMPAT=y +CONFIG_HAVE_DEC_LOCK=y +CONFIG_PERFMON=y +CONFIG_IA64_PALINFO=y +CONFIG_EFI=y +CONFIG_EFI_VARS=y +CONFIG_NR_CPUS=512 +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=m + +# +# ACPI (Advanced Configuration and Power Interface) Support +# +CONFIG_ACPI_BOOT=y +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_THERMAL=m +CONFIG_ACPI_NUMA=y +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_BUS=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_PCI=y +CONFIG_ACPI_SYSTEM=y +# CONFIG_ACPI_RELAXED_AML is not set +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_LEGACY_PROC=y +CONFIG_PCI_NAMES=y +CONFIG_HOTPLUG=y + +# +# PCI Hotplug Support +# +CONFIG_HOTPLUG_PCI=m +# CONFIG_HOTPLUG_PCI_FAKE is not set +CONFIG_HOTPLUG_PCI_ACPI=m +# CONFIG_HOTPLUG_PCI_CPCI is not set + +# +# PCMCIA/CardBus support +# +# CONFIG_PCMCIA is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Generic Driver Options +# +# CONFIG_FW_LOADER is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +CONFIG_BLK_DEV_IDEFLOPPY=y +CONFIG_BLK_DEV_IDESCSI=m +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_TASKFILE_IO is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_IDEPCI_SHARE_IRQ is not set +# CONFIG_BLK_DEV_OFFBOARD is not set +CONFIG_BLK_DEV_GENERIC=y +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +# CONFIG_IDEDMA_PCI_WIP is not set +CONFIG_BLK_DEV_ADMA=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +CONFIG_BLK_DEV_CMD64X=y +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +CONFIG_BLK_DEV_PIIX=y +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_HD is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# Multi-device support (RAID and LVM) +# +CONFIG_MD=y +CONFIG_BLK_DEV_MD=m +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID5=m +CONFIG_MD_MULTIPATH=m +CONFIG_BLK_DEV_DM=m +CONFIG_DM_IOCTL_V4=y + +# +# Fusion MPT device support +# +CONFIG_FUSION=y +CONFIG_FUSION_BOOT=y +CONFIG_FUSION_MAX_SGE=40 +# CONFIG_FUSION_ISENSE is not set +# CONFIG_FUSION_CTL is not set + +# +# SCSI device support +# +CONFIG_SCSI=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_ST=m +# CONFIG_CHR_DEV_OSST is not set +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +CONFIG_SCSI_REPORT_LUNS=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI low-level drivers +# +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_SATA is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INIA100 is not set +CONFIG_SCSI_SYM53C8XX_2=y +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set +# CONFIG_SCSI_QLOGIC_ISP is not set +CONFIG_SCSI_QLOGIC_FC=y +# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set +CONFIG_SCSI_QLOGIC_1280=y +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_NETLINK_DEV=y +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_IP_MROUTE is not set +CONFIG_ARPD=y +# CONFIG_INET_ECN is not set +CONFIG_SYN_COOKIES=y +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_IPV6 is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_NETFILTER is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set +# CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +CONFIG_DUMMY=m +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set + +# +# Tulip family network device support +# +CONFIG_NET_TULIP=y +# CONFIG_DE2104X is not set +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_DE4X5 is not set +# CONFIG_WINBOND_840 is not set +# CONFIG_DM9102 is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_B44 is not set +# CONFIG_DGRS is not set +CONFIG_EEPRO100=m +# CONFIG_EEPRO100_PIO is not set +CONFIG_E100=m +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_VIA_RHINE is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +CONFIG_E1000=m +# CONFIG_E1000_NAPI is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set +# CONFIG_SIS190 is not set +# CONFIG_SK98LIN is not set +CONFIG_TIGON3=y + +# +# Ethernet (10000 Mbit) +# +# CONFIG_IXGB is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_EVBUG is not set + +# +# Input I/O drivers +# +CONFIG_GAMEPORT=m +CONFIG_SOUND_GAMEPORT=m +# CONFIG_GAMEPORT_NS558 is not set +# CONFIG_GAMEPORT_L4 is not set +# CONFIG_GAMEPORT_EMU10K1 is not set +# CONFIG_GAMEPORT_VORTEX is not set +# CONFIG_GAMEPORT_FM801 is not set +# CONFIG_GAMEPORT_CS461x is not set +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PCIPS2 is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +# CONFIG_MOUSE_SERIAL is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +# CONFIG_INPUT_MISC is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_ROCKETPORT is not set +# CONFIG_SYNCLINK is not set +# CONFIG_SYNCLINKMP is not set +# CONFIG_N_HDLC is not set +# CONFIG_STALDRV is not set +CONFIG_SGI_L1_SERIAL=y +CONFIG_SGI_L1_SERIAL_CONSOLE=y + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_ACPI=y +CONFIG_SERIAL_8250_HCDP=y +CONFIG_SERIAL_8250_NR_UARTS=6 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_MULTIPORT is not set +# CONFIG_SERIAL_8250_RSA is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# I2C Algorithms +# + +# +# I2C Hardware Bus support +# + +# +# I2C Hardware Sensors Chip support +# +# CONFIG_I2C_SENSOR is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_NVRAM is not set +# CONFIG_GEN_RTC is not set +CONFIG_EFI_RTC=y +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +CONFIG_AGP=m +CONFIG_AGP_I460=m +CONFIG_AGP_HP_ZX1=m +CONFIG_DRM=y +CONFIG_DRM_TDFX=m +CONFIG_DRM_GAMMA=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_MGA=m +CONFIG_DRM_SIS=m +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=256 + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_JFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=y +# CONFIG_XFS_RT is not set +# CONFIG_XFS_QUOTA is not set +# CONFIG_XFS_POSIX_ACL is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +CONFIG_AUTOFS_FS=y +CONFIG_AUTOFS4_FS=y + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +CONFIG_UDF_FS=m + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +# CONFIG_DEVPTS_FS_XATTR is not set +CONFIG_TMPFS=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=m +CONFIG_NFS_V3=y +CONFIG_NFS_V4=y +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V3=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_SUNRPC=m +# CONFIG_SUNRPC_GSS is not set +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp437" +CONFIG_CIFS=m +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +# CONFIG_AFS_FS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_NEC98_PARTITION is not set +CONFIG_SGI_PARTITION=y +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +CONFIG_EFI_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_VERBOSE_PRINTK=y +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m + +# +# PCI devices +# +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_AZT3328 is not set +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS4281=m +CONFIG_SND_EMU10K1=m +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_YMFPCI is not set +# CONFIG_SND_ALS4000 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_MAESTRO3 is not set +CONFIG_SND_FM801=m +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VX222 is not set + +# +# ALSA USB devices +# +# CONFIG_SND_USB_AUDIO is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_DYNAMIC_MINORS is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_OHCI_HCD=m +CONFIG_USB_UHCI_HCD=m + +# +# USB Device Class drivers +# +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_BLUETOOTH_TTY is not set +# CONFIG_USB_MIDI is not set +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT=y +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +# CONFIG_USB_XPAD is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_SCANNER is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_HPUSBSCSI is not set + +# +# USB Multimedia devices +# +# CONFIG_USB_DABUSB is not set + +# +# Video4Linux support is needed for USB Multimedia device support +# + +# +# USB Network adaptors +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_TIGL is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_BRLVGER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_GADGET is not set + +# +# Library routines +# +CONFIG_CRC32=y + +# +# HP Simulator drivers +# +# CONFIG_HP_SIMETH is not set +# CONFIG_HP_SIMSERIAL is not set +# CONFIG_HP_SIMSCSI is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +CONFIG_IA64_GRANULE_16MB=y +# CONFIG_IA64_GRANULE_64MB is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_IA64_PRINT_HAZARDS is not set +# CONFIG_DISABLE_VHPT is not set +CONFIG_MAGIC_SYSRQ=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_IA64_DEBUG_CMPXCHG is not set +# CONFIG_IA64_DEBUG_IRQ is not set +# CONFIG_DEBUG_INFO is not set + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_AES is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_TEST is not set diff -Nru a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig --- a/arch/ia64/configs/sn2_defconfig Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/configs/sn2_defconfig Thu Jan 15 21:41:53 2004 @@ -15,8 +15,6 @@ CONFIG_SWAP=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_PAGG=y -CONFIG_PAGG_JOB=y CONFIG_SYSCTL=y CONFIG_LOG_BUF_SHIFT=20 # CONFIG_IKCONFIG is not set @@ -27,6 +25,7 @@ CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_DEADLINE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # # Loadable module support @@ -53,7 +52,6 @@ CONFIG_IA64_PAGE_SIZE_16KB=y # CONFIG_IA64_PAGE_SIZE_64KB is not set CONFIG_ACPI=y -CONFIG_ACPI_EFI=y CONFIG_ACPI_INTERPRETER=y CONFIG_ACPI_KERNEL_CONFIG=y CONFIG_IA64_L1_CACHE_SHIFT=7 @@ -70,9 +68,10 @@ # CONFIG_PREEMPT is not set CONFIG_IA32_SUPPORT=y CONFIG_COMPAT=y +CONFIG_HAVE_DEC_LOCK=y CONFIG_PERFMON=y CONFIG_IA64_PALINFO=y -CONFIG_IA64_SALINFO=y +CONFIG_EFI=y # CONFIG_EFI_VARS is not set CONFIG_NR_CPUS=512 CONFIG_BINFMT_ELF=y @@ -145,7 +144,60 @@ # # ATA/ATAPI/MFM/RLL support # -# CONFIG_IDE is not set +CONFIG_IDE=y +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDEDISK is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_IDE_TASKFILE_IO is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_IDEPCI_SHARE_IRQ=y +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_BLK_DEV_OPTI621 is not set +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +# CONFIG_IDEDMA_PCI_WIP is not set +CONFIG_BLK_DEV_ADMA=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +# CONFIG_BLK_DEV_CMD64X is not set +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_CS5520 is not set +# CONFIG_BLK_DEV_CS5530 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +CONFIG_BLK_DEV_SGIIOC4=y +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_DMA_NONPCI is not set +# CONFIG_BLK_DEV_HD is not set # # IEEE 1394 (FireWire) support (EXPERIMENTAL) @@ -216,6 +268,7 @@ # CONFIG_SCSI_QLOGIC_FC is not set CONFIG_SCSI_QLOGIC_1280=y # CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_NSP32 is not set # CONFIG_SCSI_DEBUG is not set @@ -585,11 +638,11 @@ # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set CONFIG_EFI_PARTITION=y -CONFIG_NLS=y # # Native Language Support # +CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_CODEPAGE_437 is not set # CONFIG_NLS_CODEPAGE_737 is not set diff -Nru a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c --- a/arch/ia64/hp/common/sba_iommu.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/hp/common/sba_iommu.c Thu Jan 15 21:41:53 2004 @@ -1,9 +1,9 @@ /* ** IA64 System Bus Adapter (SBA) I/O MMU manager ** -** (c) Copyright 2002-2003 Alex Williamson +** (c) Copyright 2002-2004 Alex Williamson ** (c) Copyright 2002-2003 Grant Grundler -** (c) Copyright 2002-2003 Hewlett-Packard Company +** (c) Copyright 2002-2004 Hewlett-Packard Company ** ** Portions (c) 2000 Grant Grundler (from parisc I/O MMU code) ** Portions (c) 1999 Dave S. Miller (from sparc64 I/O MMU code) @@ -39,12 +39,19 @@ #include /* PAGE_OFFSET */ #include #include /* wmb() */ +#include /* hweight64() */ #include #define PFX "IOC: " /* +** Enabling timing search of the pdir resource map. Output in /proc. +** Disabled by default to optimize performance. +*/ +#undef PDIR_SEARCH_TIMING + +/* ** This option allows cards capable of 64bit DMA to bypass the IOMMU. If ** not defined, all DMA will be 32bit and go through the TLB. ** There's potentially a conflict in the bio merge code with us @@ -54,11 +61,6 @@ */ #define ALLOW_IOV_BYPASS -#ifdef CONFIG_PROC_FS - /* turn it off for now; without per-CPU counters, it's too much of a scalability bottleneck: */ -# define SBA_PROC_FS 0 -#endif - /* ** If a device prefetches beyond the end of a valid pdir entry, it will cause ** a hard failure, ie. MCA. Version 3.0 and later of the zx1 LBA should @@ -160,21 +162,18 @@ #define ZX1_SBA_IOMMU_COOKIE 0x0000badbadc0ffeeUL /* -** IOC supports 4/8/16/64KB page sizes (see TCNFG register) -** It's safer (avoid memory corruption) to keep DMA page mappings -** equivalently sized to VM PAGE_SIZE. +** The zx1 IOC supports 4/8/16/64KB page sizes (see TCNFG register) ** -** We really can't avoid generating a new mapping for each -** page since the Virtual Coherence Index has to be generated -** and updated for each page. +** Some IOCs (sx1000) can run at the above pages sizes, but are +** really only supported using the IOC at a 4k page size. ** -** IOVP_SIZE could only be greater than PAGE_SIZE if we are +** iovp_size could only be greater than PAGE_SIZE if we are ** confident the drivers really only touch the next physical ** page iff that driver instance owns it. */ -#define IOVP_SIZE PAGE_SIZE -#define IOVP_SHIFT PAGE_SHIFT -#define IOVP_MASK PAGE_MASK +static unsigned long iovp_size; +static unsigned long iovp_shift; +static unsigned long iovp_mask; struct ioc { void *ioc_hpa; /* I/O MMU base address */ @@ -198,24 +197,10 @@ } saved[DELAYED_RESOURCE_CNT]; #endif -#if SBA_PROC_FS +#ifdef PDIR_SEARCH_TIMING #define SBA_SEARCH_SAMPLE 0x100 unsigned long avg_search[SBA_SEARCH_SAMPLE]; unsigned long avg_idx; /* current index into avg_search */ - unsigned long used_pages; - unsigned long msingle_calls; - unsigned long msingle_pages; - unsigned long msg_calls; - unsigned long msg_pages; - unsigned long usingle_calls; - unsigned long usingle_pages; - unsigned long usg_calls; - unsigned long usg_pages; -#ifdef ALLOW_IOV_BYPASS - unsigned long msingle_bypass; - unsigned long usingle_bypass; - unsigned long msg_bypass; -#endif #endif /* Stuff we don't need in performance path */ @@ -252,7 +237,7 @@ ** rather than the HW. I/O MMU allocation alogorithms can be ** faster with smaller size is (to some degree). */ -#define DMA_CHUNK_SIZE (BITS_PER_LONG*PAGE_SIZE) +#define DMA_CHUNK_SIZE (BITS_PER_LONG*iovp_size) #define ROUNDUP(x,y) ((x + ((y)-1)) & ~((y)-1)) @@ -416,18 +401,37 @@ #define PAGES_PER_RANGE 1 /* could increase this to 4 or 8 if needed */ /* Convert from IOVP to IOVA and vice versa. */ -#define SBA_IOVA(ioc,iovp,offset,hint_reg) ((ioc->ibase) | (iovp) | (offset) | \ - ((hint_reg)<<(ioc->hint_shift_pdir))) -#define SBA_IOVP(ioc,iova) (((iova) & ioc->hint_mask_pdir) & ~(ioc->ibase)) +#define SBA_IOVA(ioc,iovp,offset,hint_reg) ((ioc->ibase) | (iovp) | (offset)) +#define SBA_IOVP(ioc,iova) ((iova) & ~(ioc->ibase)) -/* FIXME : review these macros to verify correctness and usage */ -#define PDIR_INDEX(iovp) ((iovp)>>IOVP_SHIFT) +#define PDIR_ENTRY_SIZE sizeof(u64) + +#define PDIR_INDEX(iovp) ((iovp)>>iovp_shift) #define RESMAP_MASK(n) ~(~0UL << (n)) #define RESMAP_IDX_MASK (sizeof(unsigned long) - 1) /** + * For most cases the normal get_order is sufficient, however it limits us + * to PAGE_SIZE being the minimum mapping alignment and TC flush granularity. + * It only incurs about 1 clock cycle to use this one with the static variable + * and makes the code more intuitive. + */ +static SBA_INLINE int +get_iovp_order (unsigned long size) +{ + long double d = size - 1; + long order; + + order = ia64_getf_exp(d); + order = order - iovp_shift - 0xffff + 1; + if (order < 0) + order = 0; + return order; +} + +/** * sba_search_bitmap - find free space in IO PDIR resource bitmap * @ioc: IO MMU structure which owns the pdir we are interested in. * @bits_wanted: number of entries we need. @@ -465,7 +469,7 @@ ** We need the alignment to invalidate I/O TLB using ** SBA HW features in the unmap path. */ - unsigned long o = 1 << get_order(bits_wanted << PAGE_SHIFT); + unsigned long o = 1 << get_iovp_order(bits_wanted << iovp_shift); uint bitshiftcnt = ROUNDUP(ioc->res_bitshift, o); unsigned long mask; @@ -521,16 +525,15 @@ static int sba_alloc_range(struct ioc *ioc, size_t size) { - unsigned int pages_needed = size >> IOVP_SHIFT; -#if SBA_PROC_FS + unsigned int pages_needed = size >> iovp_shift; +#ifdef PDIR_SEARCH_TIMING unsigned long itc_start = ia64_get_itc(); #endif unsigned long pide; ASSERT(pages_needed); - ASSERT((pages_needed * IOVP_SIZE) <= DMA_CHUNK_SIZE); ASSERT(pages_needed <= BITS_PER_LONG); - ASSERT(0 == (size & ~IOVP_MASK)); + ASSERT(0 == (size & ~iovp_mask)); /* ** "seek and ye shall find"...praying never hurts either... @@ -546,7 +549,7 @@ #ifdef ASSERT_PDIR_SANITY /* verify the first enable bit is clear */ - if(0x00 != ((u8 *) ioc->pdir_base)[pide*sizeof(u64) + 7]) { + if(0x00 != ((u8 *) ioc->pdir_base)[pide*PDIR_ENTRY_SIZE + 7]) { sba_dump_pdir_entry(ioc, "sba_search_bitmap() botched it?", pide); } #endif @@ -556,17 +559,9 @@ (uint) ((unsigned long) ioc->res_hint - (unsigned long) ioc->res_map), ioc->res_bitshift ); -#if SBA_PROC_FS - { - unsigned long itc_end = ia64_get_itc(); - unsigned long tmp = itc_end - itc_start; - /* check for roll over */ - itc_start = (itc_end < itc_start) ? -(tmp) : (tmp); - } - ioc->avg_search[ioc->avg_idx++] = itc_start; +#ifdef PDIR_SEARCH_TIMING + ioc->avg_search[ioc->avg_idx++] = ia64_get_itc() - itc_start; ioc->avg_idx &= SBA_SEARCH_SAMPLE - 1; - - ioc->used_pages += pages_needed; #endif return (pide); @@ -589,7 +584,7 @@ unsigned int ridx = pide >> 3; /* convert bit to byte address */ unsigned long *res_ptr = (unsigned long *) &((ioc)->res_map[ridx & ~RESMAP_IDX_MASK]); - int bits_not_wanted = size >> IOVP_SHIFT; + int bits_not_wanted = size >> iovp_shift; /* 3-bits "bit" address plus 2 (or 3) bits for "byte" == bit in word */ unsigned long m = RESMAP_MASK(bits_not_wanted) << (pide & (BITS_PER_LONG - 1)); @@ -598,13 +593,9 @@ __FUNCTION__, (uint) iova, size, bits_not_wanted, m, pide, res_ptr, *res_ptr); -#if SBA_PROC_FS - ioc->used_pages -= bits_not_wanted; -#endif - ASSERT(m != 0); ASSERT(bits_not_wanted); - ASSERT((bits_not_wanted * IOVP_SIZE) <= DMA_CHUNK_SIZE); + ASSERT((bits_not_wanted * iovp_size) <= DMA_CHUNK_SIZE); ASSERT(bits_not_wanted <= BITS_PER_LONG); ASSERT((*res_ptr & m) == m); /* verify same bits are set */ *res_ptr &= ~m; @@ -702,7 +693,7 @@ /* Must be non-zero and rounded up */ ASSERT(byte_cnt > 0); - ASSERT(0 == (byte_cnt & ~IOVP_MASK)); + ASSERT(0 == (byte_cnt & ~iovp_mask)); #ifdef ASSERT_PDIR_SANITY /* Assert first pdir entry is set */ @@ -711,11 +702,11 @@ } #endif - if (byte_cnt <= IOVP_SIZE) + if (byte_cnt <= iovp_size) { ASSERT(off < ioc->pdir_size); - iovp |= IOVP_SHIFT; /* set "size" field for PCOM */ + iovp |= iovp_shift; /* set "size" field for PCOM */ #ifndef FULL_VALID_PDIR /* @@ -734,7 +725,7 @@ ioc->pdir_base[off] = (0x80000000000000FFULL | prefetch_spill_page); #endif } else { - u32 t = get_order(byte_cnt) + PAGE_SHIFT; + u32 t = get_iovp_order(byte_cnt) + iovp_shift; iovp |= t; ASSERT(t <= 31); /* 2GB! Max value of "size" field */ @@ -749,7 +740,7 @@ ioc->pdir_base[off] = (0x80000000000000FFULL | prefetch_spill_page); #endif off++; - byte_cnt -= IOVP_SIZE; + byte_cnt -= iovp_size; } while (byte_cnt > 0); } @@ -790,11 +781,6 @@ ** Device is bit capable of DMA'ing to the buffer... ** just return the PCI address of ptr */ -#if SBA_PROC_FS - spin_lock_irqsave(&ioc->res_lock, flags); - ioc->msingle_bypass++; - spin_unlock_irqrestore(&ioc->res_lock, flags); -#endif DBG_BYPASS("sba_map_single() bypass mask/addr: 0x%lx/0x%lx\n", *dev->dma_mask, pci_addr); return pci_addr; @@ -805,10 +791,10 @@ ASSERT(size <= DMA_CHUNK_SIZE); /* save offset bits */ - offset = ((dma_addr_t) (long) addr) & ~IOVP_MASK; + offset = ((dma_addr_t) (long) addr) & ~iovp_mask; - /* round up to nearest IOVP_SIZE */ - size = (size + offset + ~IOVP_MASK) & IOVP_MASK; + /* round up to nearest iovp_size */ + size = (size + offset + ~iovp_mask) & iovp_mask; spin_lock_irqsave(&ioc->res_lock, flags); #ifdef ASSERT_PDIR_SANITY @@ -816,12 +802,8 @@ panic("Sanity check failed"); #endif -#if SBA_PROC_FS - ioc->msingle_calls++; - ioc->msingle_pages += size >> IOVP_SHIFT; -#endif pide = sba_alloc_range(ioc, size); - iovp = (dma_addr_t) pide << IOVP_SHIFT; + iovp = (dma_addr_t) pide << iovp_shift; DBG_RUN("%s() 0x%p -> 0x%lx\n", __FUNCTION__, addr, (long) iovp | offset); @@ -834,8 +816,8 @@ DBG_RUN(" pdir 0x%p %lx\n", pdir_start, *pdir_start); - addr += IOVP_SIZE; - size -= IOVP_SIZE; + addr += iovp_size; + size -= iovp_size; pdir_start++; } /* force pdir update */ @@ -875,11 +857,6 @@ /* ** Address does not fall w/in IOVA, must be bypassing */ -#if SBA_PROC_FS - spin_lock_irqsave(&ioc->res_lock, flags); - ioc->usingle_bypass++; - spin_unlock_irqrestore(&ioc->res_lock, flags); -#endif DBG_BYPASS("sba_unmap_single() bypass addr: 0x%lx\n", iova); #ifdef ENABLE_MARK_CLEAN @@ -890,20 +867,16 @@ return; } #endif - offset = iova & ~IOVP_MASK; + offset = iova & ~iovp_mask; DBG_RUN("%s() iovp 0x%lx/%x\n", __FUNCTION__, (long) iova, size); iova ^= offset; /* clear offset bits */ size += offset; - size = ROUNDUP(size, IOVP_SIZE); + size = ROUNDUP(size, iovp_size); spin_lock_irqsave(&ioc->res_lock, flags); -#if SBA_PROC_FS - ioc->usingle_calls++; - ioc->usingle_pages += size >> IOVP_SHIFT; -#endif #if DELAYED_RESOURCE_CNT > 0 d = &(ioc->saved[ioc->saved_cnt]); @@ -930,7 +903,7 @@ int off = PDIR_INDEX(iovp); void *addr; - if (size <= IOVP_SIZE) { + if (size <= iovp_size) { addr = phys_to_virt(ioc->pdir_base[off] & ~0xE000000000000FFFULL); mark_clean(addr, size); @@ -940,9 +913,9 @@ do { addr = phys_to_virt(ioc->pdir_base[off] & ~0xE000000000000FFFULL); - mark_clean(addr, min(byte_cnt, IOVP_SIZE)); + mark_clean(addr, min(byte_cnt, iovp_size)); off++; - byte_cnt -= IOVP_SIZE; + byte_cnt -= iovp_size; } while (byte_cnt > 0); } @@ -1061,11 +1034,11 @@ */ if (startsg->dma_address & PIDE_FLAG) { u32 pide = startsg->dma_address & ~PIDE_FLAG; - dma_offset = (unsigned long) pide & ~IOVP_MASK; + dma_offset = (unsigned long) pide & ~iovp_mask; startsg->dma_address = 0; dma_sg++; dma_sg->dma_address = pide | ioc->ibase; - pdirp = &(ioc->pdir_base[pide >> IOVP_SHIFT]); + pdirp = &(ioc->pdir_base[pide >> iovp_shift]); n_mappings++; } @@ -1082,14 +1055,11 @@ dma_sg->dma_length += cnt; cnt += dma_offset; dma_offset=0; /* only want offset on first chunk */ - cnt = ROUNDUP(cnt, IOVP_SIZE); -#if SBA_PROC_FS - ioc->msg_pages += cnt >> IOVP_SHIFT; -#endif + cnt = ROUNDUP(cnt, iovp_size); do { sba_io_pdir_entry(pdirp, vaddr); - vaddr += IOVP_SIZE; - cnt -= IOVP_SIZE; + vaddr += iovp_size; + cnt -= iovp_size; pdirp++; } while (cnt > 0); } @@ -1107,12 +1077,12 @@ /* ** Two address ranges are DMA contiguous *iff* "end of prev" and -** "start of next" are both on a page boundry. +** "start of next" are both on an IOV page boundary. ** ** (shift left is a quick trick to mask off upper bits) */ #define DMA_CONTIG(__X, __Y) \ - (((((unsigned long) __X) | ((unsigned long) __Y)) << (BITS_PER_LONG - PAGE_SHIFT)) == 0UL) + (((((unsigned long) __X) | ((unsigned long) __Y)) << (BITS_PER_LONG - iovp_shift)) == 0UL) /** @@ -1150,7 +1120,7 @@ dma_sg = vcontig_sg = startsg; dma_len = vcontig_len = vcontig_end = startsg->length; vcontig_end += vaddr; - dma_offset = vaddr & ~IOVP_MASK; + dma_offset = vaddr & ~iovp_mask; /* PARANOID: clear entries */ startsg->dma_address = startsg->dma_length = 0; @@ -1175,7 +1145,7 @@ ** exceed DMA_CHUNK_SIZE if we coalesce the ** next entry. */ - if (((dma_len + dma_offset + startsg->length + ~IOVP_MASK) & IOVP_MASK) + if (((dma_len + dma_offset + startsg->length + ~iovp_mask) & iovp_mask) > DMA_CHUNK_SIZE) break; @@ -1194,7 +1164,7 @@ } #ifdef DEBUG_LARGE_SG_ENTRIES - dump_run_sg = (vcontig_len > IOVP_SIZE); + dump_run_sg = (vcontig_len > iovp_size); #endif /* @@ -1233,10 +1203,10 @@ ** Allocate space for DMA stream. */ vcontig_sg->dma_length = vcontig_len; - dma_len = (dma_len + dma_offset + ~IOVP_MASK) & IOVP_MASK; + dma_len = (dma_len + dma_offset + ~iovp_mask) & iovp_mask; ASSERT(dma_len <= DMA_CHUNK_SIZE); dma_sg->dma_address = (dma_addr_t) (PIDE_FLAG - | (sba_alloc_range(ioc, dma_len) << IOVP_SHIFT) + | (sba_alloc_range(ioc, dma_len) << iovp_shift) | dma_offset); n_mappings++; } @@ -1273,11 +1243,6 @@ sg->dma_length = sg->length; sg->dma_address = virt_to_phys(sba_sg_address(sg)); } -#if SBA_PROC_FS - spin_lock_irqsave(&ioc->res_lock, flags); - ioc->msg_bypass++; - spin_unlock_irqrestore(&ioc->res_lock, flags); -#endif return filled; } #endif @@ -1285,13 +1250,7 @@ if (nents == 1) { sglist->dma_length = sglist->length; sglist->dma_address = sba_map_single(dev, sba_sg_address(sglist), sglist->length, - dir); -#if SBA_PROC_FS - /* - ** Should probably do some stats counting, but trying to - ** be precise quickly starts wasting CPU time. - */ -#endif + dir); return 1; } @@ -1305,10 +1264,6 @@ } #endif -#if SBA_PROC_FS - ioc->msg_calls++; -#endif - /* ** First coalesce the chunks and allocate I/O pdir space ** @@ -1368,10 +1323,6 @@ ioc = GET_IOC(dev); ASSERT(ioc); -#if SBA_PROC_FS - ioc->usg_calls++; -#endif - #ifdef ASSERT_PDIR_SANITY spin_lock_irqsave(&ioc->res_lock, flags); sba_check_pdir(ioc,"Check before sba_unmap_sg()"); @@ -1381,16 +1332,6 @@ while (nents && sglist->dma_length) { sba_unmap_single(dev, sglist->dma_address, sglist->dma_length, dir); -#if SBA_PROC_FS - /* - ** This leaves inconsistent data in the stats, but we can't - ** tell which sg lists were mapped by map_single and which - ** were coalesced to a single entry. The stats are fun, - ** but speed is more important. - */ - ioc->usg_pages += ((sglist->dma_address & ~IOVP_MASK) + sglist->dma_length - + IOVP_SIZE - 1) >> PAGE_SHIFT; -#endif sglist++; nents--; } @@ -1414,8 +1355,7 @@ static void __init ioc_iova_init(struct ioc *ioc) { - u32 iova_space_mask; - int iov_order, tcnfg; + int tcnfg; int agp_found = 0; struct pci_dev *device = NULL; #ifdef FULL_VALID_PDIR @@ -1428,23 +1368,27 @@ ** IBASE and IMASK registers. */ ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE) & ~0x1UL; - ioc->iov_size = ~(READ_REG(ioc->ioc_hpa + IOC_IMASK) & 0xFFFFFFFFUL) + 1; + ioc->imask = READ_REG(ioc->ioc_hpa + IOC_IMASK) | 0xFFFFFFFF00000000UL; - /* - ** iov_order is always based on a 1GB IOVA space since we want to - ** turn on the other half for AGP GART. - */ - iov_order = get_order(ioc->iov_size >> (IOVP_SHIFT - PAGE_SHIFT)); - ioc->pdir_size = (ioc->iov_size / IOVP_SIZE) * sizeof(u64); + ioc->iov_size = ~ioc->imask + 1; - DBG_INIT("%s() hpa %p IOV %dMB (%d bits) PDIR size 0x%x\n", - __FUNCTION__, ioc->ioc_hpa, ioc->iov_size >> 20, - iov_order + PAGE_SHIFT, ioc->pdir_size); - - /* FIXME : DMA HINTs not used */ - ioc->hint_shift_pdir = iov_order + PAGE_SHIFT; - ioc->hint_mask_pdir = ~(0x3 << (iov_order + PAGE_SHIFT)); + DBG_INIT("%s() hpa %p IOV base 0x%lx mask 0x%lx (%dMB)\n", + __FUNCTION__, ioc->ioc_hpa, ioc->ibase, ioc->imask, + ioc->iov_size >> 20); + + switch (iovp_size) { + case 4*1024: tcnfg = 0; break; + case 8*1024: tcnfg = 1; break; + case 16*1024: tcnfg = 2; break; + case 64*1024: tcnfg = 3; break; + default: + panic(PFX "Unsupported IOTLB page size %ldK", + iovp_size >> 10); + break; + } + WRITE_REG(tcnfg, ioc->ioc_hpa + IOC_TCNFG); + ioc->pdir_size = (ioc->iov_size / iovp_size) * PDIR_ENTRY_SIZE; ioc->pdir_base = (void *) __get_free_pages(GFP_KERNEL, get_order(ioc->pdir_size)); if (!ioc->pdir_base) @@ -1452,61 +1396,12 @@ memset(ioc->pdir_base, 0, ioc->pdir_size); - DBG_INIT("%s() pdir %p size %x hint_shift_pdir %x hint_mask_pdir %lx\n", - __FUNCTION__, ioc->pdir_base, ioc->pdir_size, - ioc->hint_shift_pdir, ioc->hint_mask_pdir); + DBG_INIT("%s() IOV page size %ldK pdir %p size %x\n", __FUNCTION__, + iovp_size >> 10, ioc->pdir_base, ioc->pdir_size); - ASSERT((((unsigned long) ioc->pdir_base) & PAGE_MASK) == (unsigned long) ioc->pdir_base); + ASSERT(ALIGN((unsigned long) ioc->pdir_base, 4*1024) == (unsigned long) ioc->pdir_base); WRITE_REG(virt_to_phys(ioc->pdir_base), ioc->ioc_hpa + IOC_PDIR_BASE); - DBG_INIT(" base %p\n", ioc->pdir_base); - - /* build IMASK for IOC and Elroy */ - iova_space_mask = 0xffffffff; - iova_space_mask <<= (iov_order + PAGE_SHIFT); - ioc->imask = iova_space_mask; - - DBG_INIT("%s() IOV base 0x%lx mask 0x%0lx\n", - __FUNCTION__, ioc->ibase, ioc->imask); - - /* - ** FIXME: Hint registers are programmed with default hint - ** values during boot, so hints should be sane even if we - ** can't reprogram them the way drivers want. - */ - WRITE_REG(ioc->imask, ioc->ioc_hpa + IOC_IMASK); - - /* - ** Setting the upper bits makes checking for bypass addresses - ** a little faster later on. - */ - ioc->imask |= 0xFFFFFFFF00000000UL; - - /* Set I/O PDIR Page size to system page size */ - switch (PAGE_SHIFT) { - case 12: tcnfg = 0; break; /* 4K */ - case 13: tcnfg = 1; break; /* 8K */ - case 14: tcnfg = 2; break; /* 16K */ - case 16: tcnfg = 3; break; /* 64K */ - default: - panic(PFX "Unsupported system page size %d", - 1 << PAGE_SHIFT); - break; - } - WRITE_REG(tcnfg, ioc->ioc_hpa + IOC_TCNFG); - - /* - ** Program the IOC's ibase and enable IOVA translation - ** Bit zero == enable bit. - */ - WRITE_REG(ioc->ibase | 1, ioc->ioc_hpa + IOC_IBASE); - - /* - ** Clear I/O TLB of any possible entries. - ** (Yes. This is a bit paranoid...but so what) - */ - WRITE_REG(ioc->ibase | (iov_order+PAGE_SHIFT), ioc->ioc_hpa + IOC_PCOM); - /* ** If an AGP device is present, only use half of the IOV space ** for PCI DMA. Unfortunately we can't know ahead of time @@ -1519,8 +1414,8 @@ agp_found |= pci_find_capability(device, PCI_CAP_ID_AGP); if (agp_found && reserve_sba_gart) { - DBG_INIT("%s: AGP device found, reserving half of IOVA for GART support\n", - __FUNCTION__); + printk(KERN_INFO PFX "reserving %dMb of IOVA space at 0x%lx for agpgart\n", + ioc->iov_size/2 >> 20, ioc->ibase + ioc->iov_size/2); ioc->pdir_size /= 2; ((u64 *)ioc->pdir_base)[PDIR_INDEX(ioc->iov_size/2)] = ZX1_SBA_IOMMU_COOKIE; } @@ -1534,12 +1429,12 @@ int poison_size = 16; void *poison_addr, *addr; - addr = (void *)__get_free_pages(GFP_KERNEL, get_order(IOVP_SIZE)); + addr = (void *)__get_free_pages(GFP_KERNEL, get_order(iovp_size)); if (!addr) panic(PFX "Couldn't allocate PDIR spill page\n"); poison_addr = addr; - for ( ; (u64) poison_addr < addr + IOVP_SIZE; poison_addr += poison_size) + for ( ; (u64) poison_addr < addr + iovp_size; poison_addr += poison_size) memcpy(poison_addr, spill_poison, poison_size); prefetch_spill_page = virt_to_phys(addr); @@ -1549,10 +1444,17 @@ /* ** Set all the PDIR entries valid w/ the spill page as the target */ - for (index = 0 ; index < (ioc->pdir_size / sizeof(u64)) ; index++) + for (index = 0 ; index < (ioc->pdir_size / PDIR_ENTRY_SIZE) ; index++) ((u64 *)ioc->pdir_base)[index] = (0x80000000000000FF | prefetch_spill_page); #endif + /* Clear I/O TLB of any possible entries */ + WRITE_REG(ioc->ibase | (get_iovp_order(ioc->iov_size) + iovp_shift), ioc->ioc_hpa + IOC_PCOM); + READ_REG(ioc->ioc_hpa + IOC_PCOM); + + /* Enable IOVA translation */ + WRITE_REG(ioc->ibase | 1, ioc->ioc_hpa + IOC_IBASE); + READ_REG(ioc->ioc_hpa + IOC_IBASE); } static void __init @@ -1561,7 +1463,7 @@ spin_lock_init(&ioc->res_lock); /* resource map size dictated by pdir_size */ - ioc->res_size = ioc->pdir_size / sizeof(u64); /* entries */ + ioc->res_size = ioc->pdir_size / PDIR_ENTRY_SIZE; /* entries */ ioc->res_size >>= 3; /* convert bit count to byte count */ DBG_INIT("%s() res_size 0x%x\n", __FUNCTION__, ioc->res_size); @@ -1582,7 +1484,7 @@ #ifdef FULL_VALID_PDIR /* Mark the last resource used so we don't prefetch beyond IOVA space */ ioc->res_map[ioc->res_size - 1] |= 0x80UL; /* res_map is chars */ - ioc->pdir_base[(ioc->pdir_size / sizeof(u64)) - 1] = (0x80000000000000FF + ioc->pdir_base[(ioc->pdir_size / PDIR_ENTRY_SIZE) - 1] = (0x80000000000000FF | prefetch_spill_page); #endif @@ -1627,6 +1529,23 @@ panic(PFX "IOC 2.0 or later required for IOMMU support\n"); ioc->dma_mask = 0xFFFFFFFFFFUL; + + if (!iovp_shift) { + /* 64k is max iommu page size */ + iovp_shift = min(PAGE_SHIFT, 16); + iovp_size = (1 << iovp_shift); + iovp_mask = ~(iovp_size - 1); + } +} + +static void __init +ioc_sx1000_init(struct ioc *ioc) +{ + if (!iovp_shift) { + iovp_shift = 12; /* 4K for now */ + iovp_size = (1 << iovp_shift); + iovp_mask = ~(iovp_size - 1); + } } typedef void (initfunc)(struct ioc *); @@ -1639,8 +1558,8 @@ static struct ioc_iommu ioc_iommu_info[] __initdata = { { ZX1_IOC_ID, "zx1", ioc_zx1_init }, - { REO_IOC_ID, "REO" }, - { SX1000_IOC_ID, "sx1000" }, + { REO_IOC_ID, "REO", ioc_sx1000_init }, + { SX1000_IOC_ID, "sx1000", ioc_sx1000_init }, }; static struct ioc * __init @@ -1665,6 +1584,11 @@ ioc->rev = READ_REG(ioc->ioc_hpa + IOC_FCLASS) & 0xFFUL; ioc->dma_mask = 0xFFFFFFFFFFFFFFFFUL; /* conservative */ + if (iovp_shift) { + iovp_size = (1 << iovp_shift); + iovp_mask = ~(iovp_size - 1); + } + for (info = ioc_iommu_info; info < ioc_iommu_info + ARRAY_SIZE(ioc_iommu_info); info++) { if (ioc->func_id == info->func_id) { ioc->name = info->name; @@ -1672,6 +1596,8 @@ (info->init)(ioc); } } + DBG_INIT("%s: PAGE_SIZE %ldK, iovp_size %ldK\n", __FUNCTION__, + PAGE_SIZE >> 10, iovp_size >> 10); if (!ioc->name) { ioc->name = kmalloc(24, GFP_KERNEL); @@ -1686,8 +1612,8 @@ ioc_resource_init(ioc); ioc_sac_init(ioc); - if ((long) ~IOVP_MASK > (long) ia64_max_iommu_merge_mask) - ia64_max_iommu_merge_mask = ~IOVP_MASK; + if ((long) ~iovp_mask > (long) ia64_max_iommu_merge_mask) + ia64_max_iommu_merge_mask = ~iovp_mask; MAX_DMA_ADDRESS = ~0UL; printk(KERN_INFO PFX @@ -1709,7 +1635,7 @@ ** **************************************************************************/ -#if SBA_PROC_FS +#ifdef CONFIG_PROC_FS static void * ioc_start(struct seq_file *s, loff_t *pos) { @@ -1741,55 +1667,37 @@ ioc_show(struct seq_file *s, void *v) { struct ioc *ioc = v; - int total_pages = (int) (ioc->res_size << 3); /* 8 bits per byte */ - unsigned long i = 0, avg = 0, min, max; + unsigned long *res_ptr = (unsigned long *)ioc->res_map; + int i, used = 0; seq_printf(s, "Hewlett Packard %s IOC rev %d.%d\n", ioc->name, ((ioc->rev >> 4) & 0xF), (ioc->rev & 0xF)); - seq_printf(s, "IO PDIR size : %d bytes (%d entries)\n", - (int) ((ioc->res_size << 3) * sizeof(u64)), /* 8 bits/byte */ - total_pages); - - seq_printf(s, "IO PDIR entries : %ld free %ld used (%d%%)\n", - total_pages - ioc->used_pages, ioc->used_pages, - (int) (ioc->used_pages * 100 / total_pages)); - - seq_printf(s, "Resource bitmap : %d bytes (%d pages)\n", - ioc->res_size, ioc->res_size << 3); /* 8 bits per byte */ - - min = max = ioc->avg_search[0]; - for (i = 0; i < SBA_SEARCH_SAMPLE; i++) { - avg += ioc->avg_search[i]; - if (ioc->avg_search[i] > max) max = ioc->avg_search[i]; - if (ioc->avg_search[i] < min) min = ioc->avg_search[i]; - } - avg /= SBA_SEARCH_SAMPLE; - seq_printf(s, " Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", min, avg, max); - - seq_printf(s, "pci_map_single(): %12ld calls %12ld pages (avg %d/1000)\n", - ioc->msingle_calls, ioc->msingle_pages, - (int) ((ioc->msingle_pages * 1000)/ioc->msingle_calls)); -#ifdef ALLOW_IOV_BYPASS - seq_printf(s, "pci_map_single(): %12ld bypasses\n", ioc->msingle_bypass); -#endif + seq_printf(s, "IOVA size : %d MB\n", ioc->iov_size/(1024*1024)); + seq_printf(s, "IOVA page size : %ld kb\n", iovp_size/1024); - seq_printf(s, "pci_unmap_single: %12ld calls %12ld pages (avg %d/1000)\n", - ioc->usingle_calls, ioc->usingle_pages, - (int) ((ioc->usingle_pages * 1000)/ioc->usingle_calls)); -#ifdef ALLOW_IOV_BYPASS - seq_printf(s, "pci_unmap_single: %12ld bypasses\n", ioc->usingle_bypass); -#endif - - seq_printf(s, "pci_map_sg() : %12ld calls %12ld pages (avg %d/1000)\n", - ioc->msg_calls, ioc->msg_pages, - (int) ((ioc->msg_pages * 1000)/ioc->msg_calls)); -#ifdef ALLOW_IOV_BYPASS - seq_printf(s, "pci_map_sg() : %12ld bypasses\n", ioc->msg_bypass); -#endif + for (i = 0; i < (ioc->res_size / sizeof(unsigned long)); ++i, ++res_ptr) + used += hweight64(*res_ptr); - seq_printf(s, "pci_unmap_sg() : %12ld calls %12ld pages (avg %d/1000)\n", - ioc->usg_calls, ioc->usg_pages, (int) ((ioc->usg_pages * 1000)/ioc->usg_calls)); + seq_printf(s, "PDIR size : %d entries\n", ioc->res_size << 3); + seq_printf(s, "PDIR used : %d entries\n", used); +#ifdef PDIR_SEARCH_TIMING + { + unsigned long i = 0, avg = 0, min, max; + min = max = ioc->avg_search[0]; + for (i = 0; i < SBA_SEARCH_SAMPLE; i++) { + avg += ioc->avg_search[i]; + if (ioc->avg_search[i] > max) max = ioc->avg_search[i]; + if (ioc->avg_search[i] < min) min = ioc->avg_search[i]; + } + avg /= SBA_SEARCH_SAMPLE; + seq_printf(s, "Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", + min, avg, max); + } +#endif +#ifndef ALLOW_IOV_BYPASS + seq_printf(s, "IOVA bypass disabled\n"); +#endif return 0; } @@ -1813,39 +1721,6 @@ .release = seq_release }; -static int -ioc_map_show(struct seq_file *s, void *v) -{ - struct ioc *ioc = v; - unsigned int i, *res_ptr = (unsigned int *)ioc->res_map; - - for (i = 0; i < ioc->res_size / sizeof(unsigned int); ++i, ++res_ptr) - seq_printf(s, "%s%08x", (i & 7) ? " " : "\n ", *res_ptr); - seq_printf(s, "\n"); - - return 0; -} - -static struct seq_operations ioc_map_ops = { - .start = ioc_start, - .next = ioc_next, - .stop = ioc_stop, - .show = ioc_map_show -}; - -static int -ioc_map_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &ioc_map_ops); -} - -static struct file_operations ioc_map_fops = { - .open = ioc_map_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release -}; - static void __init ioc_proc_init(void) { @@ -1858,10 +1733,6 @@ entry = create_proc_entry(ioc_list->name, 0, dir); if (entry) entry->proc_fops = &ioc_fops; - - entry = create_proc_entry("bitmap", 0, dir); - if (entry) - entry->proc_fops = &ioc_map_fops; } #endif @@ -1958,7 +1829,7 @@ } #endif -#if SBA_PROC_FS +#ifdef CONFIG_PROC_FS ioc_proc_init(); #endif return 0; @@ -1981,6 +1852,29 @@ } __setup("nosbagart", nosbagart); + +static int __init +sba_page_override(char *str) +{ + unsigned long page_size; + + page_size = memparse(str, &str); + switch (page_size) { + case 4096: + case 8192: + case 16384: + case 65536: + iovp_shift = ffs(page_size) - 1; + break; + default: + printk("%s: unknown/unsupported iommu page size %ld\n", + __FUNCTION__, page_size); + } + + return 1; +} + +__setup("sbapagesize=",sba_page_override); EXPORT_SYMBOL(sba_map_single); EXPORT_SYMBOL(sba_unmap_single); diff -Nru a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c --- a/arch/ia64/ia32/sys_ia32.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/ia32/sys_ia32.c Thu Jan 15 21:41:54 2004 @@ -741,7 +741,7 @@ || copy_to_user(dirent->d_name, name, namlen) || put_user(0, dirent->d_name + namlen)) return -EFAULT; - ((char *) dirent) += reclen; + dirent = (struct compat_dirent *) ((char *) dirent + reclen); buf->current_dir = dirent; buf->count -= reclen; return 0; diff -Nru a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c --- a/arch/ia64/kernel/acpi.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/kernel/acpi.c Thu Jan 15 21:41:54 2004 @@ -32,6 +32,7 @@ */ #include +#include #include #include #include @@ -53,6 +54,7 @@ #define PREFIX "ACPI: " void (*pm_idle) (void); +EXPORT_SYMBOL(pm_idle); void (*pm_power_off) (void); unsigned char acpi_kbd_controller_present = 1; @@ -629,5 +631,6 @@ (polarity == ACPI_ACTIVE_HIGH) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, (trigger == ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); } +EXPORT_SYMBOL(acpi_register_irq); #endif /* CONFIG_ACPI_BOOT */ diff -Nru a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c --- a/arch/ia64/kernel/efi.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/kernel/efi.c Thu Jan 15 21:41:53 2004 @@ -19,6 +19,7 @@ * Skip non-WB memory and ignore empty memory ranges. */ #include +#include #include #include #include @@ -37,6 +38,7 @@ extern efi_status_t efi_call_phys (void *, ...); struct efi efi; +EXPORT_SYMBOL(efi); static efi_runtime_services_t *runtime; /* @@ -48,6 +50,7 @@ */ #ifdef CONFIG_PROC_FS struct proc_dir_entry *efi_dir; +EXPORT_SYMBOL(efi_dir); #endif static unsigned long mem_limit = ~0UL; diff -Nru a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c --- a/arch/ia64/kernel/ia64_ksyms.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/kernel/ia64_ksyms.c Thu Jan 15 21:41:54 2004 @@ -1,15 +1,18 @@ /* * Architecture-specific kernel symbols + * + * Don't put any exports here unless it's defined in an assembler file. + * All other exports should be put directly after the definition. */ #include #include #include -EXPORT_SYMBOL_NOVERS(memset); /* gcc generates direct calls to memset()... */ +EXPORT_SYMBOL(memset); EXPORT_SYMBOL(memchr); EXPORT_SYMBOL(memcmp); -EXPORT_SYMBOL_NOVERS(memcpy); +EXPORT_SYMBOL(memcpy); EXPORT_SYMBOL(memmove); EXPORT_SYMBOL(memscan); EXPORT_SYMBOL(strcat); @@ -25,77 +28,28 @@ EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strpbrk); -#include -EXPORT_SYMBOL(isa_irq_to_vector_map); -EXPORT_SYMBOL(enable_irq); -EXPORT_SYMBOL(disable_irq); -EXPORT_SYMBOL(disable_irq_nosync); - -#include -EXPORT_SYMBOL(probe_irq_mask); - #include EXPORT_SYMBOL(ip_fast_csum); /* hand-coded assembly */ -#include -EXPORT_SYMBOL(__ia64_memcpy_fromio); -EXPORT_SYMBOL(__ia64_memcpy_toio); -EXPORT_SYMBOL(__ia64_memset_c_io); -EXPORT_SYMBOL(io_space); - #include -EXPORT_SYMBOL_NOVERS(__down); -EXPORT_SYMBOL_NOVERS(__down_interruptible); -EXPORT_SYMBOL_NOVERS(__down_trylock); -EXPORT_SYMBOL_NOVERS(__up); +EXPORT_SYMBOL(__down); +EXPORT_SYMBOL(__down_interruptible); +EXPORT_SYMBOL(__down_trylock); +EXPORT_SYMBOL(__up); #include EXPORT_SYMBOL(clear_page); #ifdef CONFIG_VIRTUAL_MEM_MAP #include -#include -EXPORT_SYMBOL(vmalloc_end); -EXPORT_SYMBOL(ia64_pfn_valid); EXPORT_SYMBOL(max_low_pfn); /* defined by bootmem.c, but not exported by generic code */ #endif #include EXPORT_SYMBOL(per_cpu__cpu_info); #ifdef CONFIG_SMP -EXPORT_SYMBOL(__per_cpu_offset); EXPORT_SYMBOL(per_cpu__local_per_cpu_offset); #endif -EXPORT_SYMBOL(kernel_thread); - -#include -#ifdef CONFIG_IA64_DEBUG_IRQ -EXPORT_SYMBOL(last_cli_ip); -#endif - -#include - -EXPORT_SYMBOL(flush_tlb_range); - -#ifdef CONFIG_SMP - -EXPORT_SYMBOL(smp_flush_tlb_all); - -#include -#include -EXPORT_SYMBOL(synchronize_irq); - -#include -EXPORT_SYMBOL(smp_call_function); -EXPORT_SYMBOL(smp_call_function_single); -EXPORT_SYMBOL(cpu_online_map); -EXPORT_SYMBOL(phys_cpu_present_map); -EXPORT_SYMBOL(ia64_cpu_to_sapicid); -#else /* !CONFIG_SMP */ - -EXPORT_SYMBOL(local_flush_tlb_all); - -#endif /* !CONFIG_SMP */ #include EXPORT_SYMBOL(__copy_user); @@ -117,14 +71,14 @@ extern void __moddi3(void); extern void __umoddi3(void); -EXPORT_SYMBOL_NOVERS(__divsi3); -EXPORT_SYMBOL_NOVERS(__udivsi3); -EXPORT_SYMBOL_NOVERS(__modsi3); -EXPORT_SYMBOL_NOVERS(__umodsi3); -EXPORT_SYMBOL_NOVERS(__divdi3); -EXPORT_SYMBOL_NOVERS(__udivdi3); -EXPORT_SYMBOL_NOVERS(__moddi3); -EXPORT_SYMBOL_NOVERS(__umoddi3); +EXPORT_SYMBOL(__divsi3); +EXPORT_SYMBOL(__udivsi3); +EXPORT_SYMBOL(__modsi3); +EXPORT_SYMBOL(__umodsi3); +EXPORT_SYMBOL(__divdi3); +EXPORT_SYMBOL(__udivdi3); +EXPORT_SYMBOL(__moddi3); +EXPORT_SYMBOL(__umoddi3); #if defined(CONFIG_MD_RAID5) || defined(CONFIG_MD_RAID5_MODULE) extern void xor_ia64_2(void); @@ -132,15 +86,12 @@ extern void xor_ia64_4(void); extern void xor_ia64_5(void); -EXPORT_SYMBOL_NOVERS(xor_ia64_2); -EXPORT_SYMBOL_NOVERS(xor_ia64_3); -EXPORT_SYMBOL_NOVERS(xor_ia64_4); -EXPORT_SYMBOL_NOVERS(xor_ia64_5); +EXPORT_SYMBOL(xor_ia64_2); +EXPORT_SYMBOL(xor_ia64_3); +EXPORT_SYMBOL(xor_ia64_4); +EXPORT_SYMBOL(xor_ia64_5); #endif -extern unsigned long ia64_iobase; -EXPORT_SYMBOL(ia64_iobase); - #include EXPORT_SYMBOL(ia64_pal_call_phys_stacked); EXPORT_SYMBOL(ia64_pal_call_phys_static); @@ -149,44 +100,8 @@ EXPORT_SYMBOL(ia64_load_scratch_fpregs); EXPORT_SYMBOL(ia64_save_scratch_fpregs); -extern struct efi efi; -EXPORT_SYMBOL(efi); - -#include -extern struct proc_dir_entry *efi_dir; -EXPORT_SYMBOL(efi_dir); - -#include -#ifdef CONFIG_IA64_GENERIC -EXPORT_SYMBOL(ia64_mv); -#endif -EXPORT_SYMBOL(machvec_noop); -EXPORT_SYMBOL(machvec_memory_fence); -EXPORT_SYMBOL(zero_page_memmap_ptr); -#ifdef CONFIG_PERFMON -#include -EXPORT_SYMBOL(pfm_register_buffer_fmt); -EXPORT_SYMBOL(pfm_unregister_buffer_fmt); -EXPORT_SYMBOL(pfm_mod_fast_read_pmds); -EXPORT_SYMBOL(pfm_mod_read_pmds); -EXPORT_SYMBOL(pfm_mod_write_pmcs); -#endif - -#ifdef CONFIG_NUMA -#include -EXPORT_SYMBOL(cpu_to_node_map); -#endif - #include -EXPORT_SYMBOL(unw_init_from_blocked_task); EXPORT_SYMBOL(unw_init_running); -EXPORT_SYMBOL(unw_unwind); -EXPORT_SYMBOL(unw_unwind_to_user); -EXPORT_SYMBOL(unw_access_gr); -EXPORT_SYMBOL(unw_access_br); -EXPORT_SYMBOL(unw_access_fr); -EXPORT_SYMBOL(unw_access_ar); -EXPORT_SYMBOL(unw_access_pr); #ifdef CONFIG_SMP # if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 3) @@ -205,8 +120,3 @@ EXPORT_SYMBOL(ia64_spinlock_contention); # endif #endif - -EXPORT_SYMBOL(ia64_max_iommu_merge_mask); - -#include -EXPORT_SYMBOL(pm_idle); diff -Nru a/arch/ia64/kernel/irq.c b/arch/ia64/kernel/irq.c --- a/arch/ia64/kernel/irq.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/kernel/irq.c Thu Jan 15 21:41:54 2004 @@ -226,6 +226,7 @@ while (irq_descp(irq)->status & IRQ_INPROGRESS) cpu_relax(); } +EXPORT_SYMBOL(synchronize_irq); #endif /* @@ -367,6 +368,7 @@ } spin_unlock_irqrestore(&desc->lock, flags); } +EXPORT_SYMBOL(disable_irq_nosync); /** * disable_irq - disable an irq and wait for completion @@ -389,6 +391,7 @@ if (desc->action) synchronize_irq(irq); } +EXPORT_SYMBOL(disable_irq); /** * enable_irq - enable handling of an irq @@ -427,6 +430,7 @@ } spin_unlock_irqrestore(&desc->lock, flags); } +EXPORT_SYMBOL(enable_irq); /* * do_IRQ handles all normal device IRQ's (the special @@ -795,6 +799,7 @@ return mask & val; } +EXPORT_SYMBOL(probe_irq_mask); /** * probe_irq_off - end an interrupt autodetect diff -Nru a/arch/ia64/kernel/irq_ia64.c b/arch/ia64/kernel/irq_ia64.c --- a/arch/ia64/kernel/irq_ia64.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/kernel/irq_ia64.c Thu Jan 15 21:41:54 2004 @@ -13,6 +13,7 @@ */ #include +#include #include #include @@ -54,6 +55,7 @@ 0x2f, 0x20, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21 }; +EXPORT_SYMBOL(isa_irq_to_vector_map); int ia64_alloc_vector (void) diff -Nru a/arch/ia64/kernel/machvec.c b/arch/ia64/kernel/machvec.c --- a/arch/ia64/kernel/machvec.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/kernel/machvec.c Thu Jan 15 21:41:54 2004 @@ -1,4 +1,5 @@ #include +#include #include @@ -11,6 +12,7 @@ #include struct ia64_machine_vector ia64_mv; +EXPORT_SYMBOL(ia64_mv); static struct ia64_machine_vector * lookup_machvec (const char *name) @@ -45,9 +47,11 @@ machvec_noop (void) { } +EXPORT_SYMBOL(machvec_noop); void machvec_memory_fence (void) { mb(); } +EXPORT_SYMBOL(machvec_memory_fence); diff -Nru a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c --- a/arch/ia64/kernel/perfmon.c Thu Jan 15 21:41:55 2004 +++ b/arch/ia64/kernel/perfmon.c Thu Jan 15 21:41:55 2004 @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -1042,12 +1043,10 @@ int i; unsigned long val, ovfl_val = pmu_conf.ovfl_val; - DPRINT(("mask=0x%lx\n", mask)); for (i=0; mask; i++, mask>>=1) { if ((mask & 0x1) == 0) continue; val = PMD_IS_COUNTING(i) ? pmds[i] & ovfl_val : pmds[i]; ia64_set_pmd(i, val); - DPRINT(("pmd[%d]=0x%lx\n", i, val)); } ia64_srlz_d(); } @@ -1115,11 +1114,9 @@ { int i; - DPRINT(("mask=0x%lx\n", mask)); for (i=0; mask; i++, mask>>=1) { if ((mask & 0x1) == 0) continue; ia64_set_pmc(i, pmcs[i]); - DPRINT(("pmc[%d]=0x%lx\n", i, pmcs[i])); } ia64_srlz_d(); } @@ -1259,6 +1256,7 @@ spin_unlock(&pfm_buffer_fmt_lock); return ret; } +EXPORT_SYMBOL(pfm_register_buffer_fmt); int pfm_unregister_buffer_fmt(pfm_uuid_t uuid) @@ -1282,6 +1280,7 @@ return ret; } +EXPORT_SYMBOL(pfm_unregister_buffer_fmt); static int pfm_reserve_session(struct task_struct *task, int is_syswide, unsigned int cpu) @@ -3421,6 +3420,7 @@ return pfm_write_pmcs(ctx, req, nreq, regs); } +EXPORT_SYMBOL(pfm_mod_write_pmcs); long pfm_mod_read_pmds(struct task_struct *task, pfarg_reg_t *req, unsigned int nreq, struct pt_regs *regs) @@ -3442,6 +3442,7 @@ return pfm_read_pmds(ctx, req, nreq, regs); } +EXPORT_SYMBOL(pfm_mod_read_pmds); long pfm_mod_fast_read_pmds(struct task_struct *task, unsigned long mask[4], unsigned long *addr, struct pt_regs *regs) @@ -3483,6 +3484,7 @@ } return 0; } +EXPORT_SYMBOL(pfm_mod_fast_read_pmds); /* * Only call this function when a process it trying to @@ -5670,7 +5672,7 @@ ctx = PFM_GET_CTX(task); - if (ctx == NULL) goto save_error; + if (ctx == NULL) return; t = &task->thread; /* @@ -5685,8 +5687,6 @@ pfm_clear_psr_up(); - DPRINT(("ctx zombie, forcing cleanup for [%d]\n", task->pid)); - pfm_force_cleanup(ctx, regs); BUG_ON(ctx->ctx_smpl_hdr); @@ -5701,12 +5701,7 @@ * sanity check */ if (ctx->ctx_last_activation != GET_ACTIVATION()) { - printk("ctx_activation=%lu activation=%lu state=%d: no save\n", - ctx->ctx_last_activation, - GET_ACTIVATION(), ctx->ctx_state); - pfm_unprotect_ctx_ctxsw(ctx, flags); - return; } @@ -5763,13 +5758,6 @@ * interrupts will still be masked after this call. */ pfm_unprotect_ctx_ctxsw(ctx, flags); - - return; - -save_error: - printk(KERN_ERR "perfmon: pfm_save_regs CPU%d [%d] NULL context PM_VALID=%ld\n", - smp_processor_id(), task->pid, - task->thread.flags & IA64_THREAD_PM_VALID); } #else /* !CONFIG_SMP */ @@ -5780,7 +5768,7 @@ u64 psr; ctx = PFM_GET_CTX(task); - if (ctx == NULL) goto save_error; + if (ctx == NULL) return; /* * save current PSR: needed because we modify it @@ -5802,12 +5790,6 @@ * keep a copy of psr.up (for reload) */ ctx->ctx_saved_psr_up = psr & IA64_PSR_UP; - - return; -save_error: - printk(KERN_ERR "perfmon: pfm_save_regs CPU%d [%d] NULL context PM_VALID=%ld\n", - smp_processor_id(), task->pid, - task->thread.flags & IA64_THREAD_PM_VALID); } static void @@ -5824,8 +5806,6 @@ ctx = PFM_GET_CTX(task); t = &task->thread; - DPRINT(("on [%d] used_pmds=0x%lx\n", task->pid, ctx->ctx_used_pmds[0])); - /* * we need to mask PMU overflow here to * make sure that we maintain pmc0 until @@ -5886,10 +5866,7 @@ u64 psr, psr_up; ctx = PFM_GET_CTX(task); - if (unlikely(ctx == NULL)) { - printk(KERN_ERR "perfmon: pfm_load_regs() null context\n"); - return; - } + if (unlikely(ctx == NULL)) return; BUG_ON(GET_PMU_OWNER()); @@ -5897,10 +5874,7 @@ /* * possible on unload */ - if (unlikely((t->flags & IA64_THREAD_PM_VALID) == 0)) { - printk("[%d] PM_VALID=0, nothing to do\n", task->pid); - return; - } + if (unlikely((t->flags & IA64_THREAD_PM_VALID) == 0)) return; /* * we always come here with interrupts ALREADY disabled by @@ -5918,8 +5892,6 @@ BUG_ON(ctx->ctx_smpl_hdr); - DPRINT(("ctx zombie, forcing cleanup for [%d]\n", task->pid)); - pfm_force_cleanup(ctx, regs); pfm_unprotect_ctx_ctxsw(ctx, flags); @@ -5957,7 +5929,6 @@ pmc_mask = ctx->ctx_reload_pmcs[0]; pmd_mask = ctx->ctx_reload_pmds[0]; - if (pmc_mask || pmd_mask) DPRINT(("partial reload [%d] pmd_mask=0x%lx pmc_mask=0x%lx\n", task->pid, pmd_mask, pmc_mask)); } else { /* * To avoid leaking information to the user level when psr.sp=0, @@ -5975,12 +5946,6 @@ * PMC0 is never in the mask. It is always restored separately. */ pmc_mask = ctx->ctx_all_pmcs[0]; - - DPRINT(("full reload for [%d] activation=%lu last_activation=%lu last_cpu=%d pmd_mask=0x%lx pmc_mask=0x%lx\n", - task->pid, - GET_ACTIVATION(), ctx->ctx_last_activation, - GET_LAST_CPU(ctx), pmd_mask, pmc_mask)); - } /* * when context is MASKED, we will restore PMC with plm=0 @@ -6008,7 +5973,6 @@ /* * will replay the PMU interrupt */ - DPRINT(("perfmon: resend irq for [%d]\n", task->pid)); hw_resend_irq(NULL, IA64_PERFMON_VECTOR); #endif pfm_stats[smp_processor_id()].pfm_replay_ovfl_intr_count++; @@ -6102,8 +6066,6 @@ return; } - DPRINT(("reload for [%d] owner=%d\n", task->pid, owner ? owner->pid : -1)); - /* * someone else is still using the PMU, first push it out and * then we'll be able to install our stuff ! @@ -6150,7 +6112,6 @@ /* * will replay the PMU interrupt */ - DPRINT(("perfmon: resend irq for [%d]\n", task->pid)); hw_resend_irq(NULL, IA64_PERFMON_VECTOR); #endif pfm_stats[smp_processor_id()].pfm_replay_ovfl_intr_count++; diff -Nru a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c --- a/arch/ia64/kernel/process.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/kernel/process.c Thu Jan 15 21:41:54 2004 @@ -598,6 +598,7 @@ } return tid; } +EXPORT_SYMBOL(kernel_thread); /* * Flush thread state. This is called when a thread does an execve(). diff -Nru a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c --- a/arch/ia64/kernel/setup.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/kernel/setup.c Thu Jan 15 21:41:53 2004 @@ -17,6 +17,7 @@ * 06/24/99 W.Drummond added boot_cpu_data. */ #include +#include #include #include @@ -60,6 +61,7 @@ #ifdef CONFIG_SMP unsigned long __per_cpu_offset[NR_CPUS]; +EXPORT_SYMBOL(__per_cpu_offset); #endif DEFINE_PER_CPU(struct cpuinfo_ia64, cpu_info); @@ -71,7 +73,9 @@ unsigned long ia64_max_cacheline_size; unsigned long ia64_iobase; /* virtual address for I/O accesses */ +EXPORT_SYMBOL(ia64_iobase); struct io_space io_space[MAX_IO_SPACES]; +EXPORT_SYMBOL(io_space); unsigned int num_io_spaces; unsigned char aux_device_present = 0xaa; /* XXX remove this when legacy I/O is gone */ @@ -86,6 +90,7 @@ * page-size of 2^64. */ unsigned long ia64_max_iommu_merge_mask = ~0UL; +EXPORT_SYMBOL(ia64_max_iommu_merge_mask); #define COMMAND_LINE_SIZE 512 @@ -317,13 +322,13 @@ #ifdef CONFIG_ACPI_BOOT acpi_boot_init(); #endif +#ifdef CONFIG_SERIAL_8250_CONSOLE #ifdef CONFIG_SERIAL_8250_HCDP if (efi.hcdp) { void setup_serial_hcdp(void *); setup_serial_hcdp(efi.hcdp); } #endif -#ifdef CONFIG_SERIAL_8250_CONSOLE /* * Without HCDP, we won't discover any serial ports until the serial driver looks * in the ACPI namespace. If ACPI claims there are some legacy devices, register @@ -520,8 +525,6 @@ impl_va_msb = vm2.pal_vm_info_2_s.impl_va_msb; phys_addr_size = vm1.pal_vm_info_1_s.phys_add_size; } - printk(KERN_INFO "CPU %d: %lu virtual and %lu physical address bits\n", - smp_processor_id(), impl_va_msb + 1, phys_addr_size); c->unimpl_va_mask = ~((7L<<61) | ((1L << (impl_va_msb + 1)) - 1)); c->unimpl_pa_mask = ~((1L<<63) | ((1L << phys_addr_size) - 1)); } diff -Nru a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c --- a/arch/ia64/kernel/smp.c Thu Jan 15 21:41:55 2004 +++ b/arch/ia64/kernel/smp.c Thu Jan 15 21:41:55 2004 @@ -22,6 +22,7 @@ #include +#include #include #include #include @@ -210,6 +211,7 @@ { on_each_cpu((void (*)(void *))local_flush_tlb_all, 0, 1, 1); } +EXPORT_SYMBOL(smp_flush_tlb_all); void smp_flush_tlb_mm (struct mm_struct *mm) @@ -283,6 +285,7 @@ put_cpu(); return 0; } +EXPORT_SYMBOL(smp_call_function_single); /* * this function sends a 'generic call function' IPI to all other CPUs @@ -337,6 +340,7 @@ spin_unlock(&call_lock); return 0; } +EXPORT_SYMBOL(smp_call_function); void smp_do_timer (struct pt_regs *regs) diff -Nru a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c --- a/arch/ia64/kernel/smpboot.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/kernel/smpboot.c Thu Jan 15 21:41:53 2004 @@ -16,6 +16,7 @@ #include +#include #include #include #include @@ -81,10 +82,13 @@ /* Bitmask of currently online CPUs */ cpumask_t cpu_online_map; +EXPORT_SYMBOL(cpu_online_map); cpumask_t phys_cpu_present_map; +EXPORT_SYMBOL(phys_cpu_present_map); /* which logical CPU number maps to which CPU (physical APIC ID) */ volatile int ia64_cpu_to_sapicid[NR_CPUS]; +EXPORT_SYMBOL(ia64_cpu_to_sapicid); static volatile cpumask_t cpu_callin_map; @@ -401,10 +405,7 @@ } Dprintk("\n"); - if (cpu_isset(cpu, cpu_callin_map)) { - /* number CPUs logically, starting from 1 (BSP is 0) */ - printk(KERN_INFO "CPU%d: CPU has booted.\n", cpu); - } else { + if (!cpu_isset(cpu, cpu_callin_map)) { printk(KERN_ERR "Processor 0x%x/0x%x is stuck.\n", cpu, sapicid); ia64_cpu_to_sapicid[cpu] = -1; cpu_clear(cpu, cpu_online_map); /* was set in smp_callin() */ @@ -467,6 +468,7 @@ /* on which node is each logical CPU (one cacheline even for 64 CPUs) */ volatile u8 cpu_to_node_map[NR_CPUS] __cacheline_aligned; +EXPORT_SYMBOL(cpu_to_node_map); /* which logical CPUs are on which nodes */ volatile cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned; @@ -578,14 +580,11 @@ if (sapicid == -1) return -EINVAL; - printk(KERN_INFO "Processor %d/%d is spinning up...\n", sapicid, cpu); - /* Processor goes to start_secondary(), sets online flag */ ret = do_boot_cpu(sapicid, cpu); if (ret < 0) return ret; - printk(KERN_INFO "Processor %d has spun up...\n", cpu); return 0; } diff -Nru a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c --- a/arch/ia64/kernel/time.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/kernel/time.c Thu Jan 15 21:41:53 2004 @@ -39,6 +39,7 @@ #ifdef CONFIG_IA64_DEBUG_IRQ unsigned long last_cli_ip; +EXPORT_SYMBOL(last_cli_ip); #endif diff -Nru a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c --- a/arch/ia64/kernel/unwind.c Thu Jan 15 21:41:55 2004 +++ b/arch/ia64/kernel/unwind.c Thu Jan 15 21:41:55 2004 @@ -26,6 +26,7 @@ * o if both the unw.lock spinlock and a script's read-write lock must be * acquired, then the read-write lock must be acquired first. */ +#include #include #include #include @@ -392,6 +393,7 @@ } return 0; } +EXPORT_SYMBOL(unw_access_gr); int unw_access_br (struct unw_frame_info *info, int regnum, unsigned long *val, int write) @@ -423,6 +425,7 @@ *val = *addr; return 0; } +EXPORT_SYMBOL(unw_access_br); int unw_access_fr (struct unw_frame_info *info, int regnum, struct ia64_fpreg *val, int write) @@ -467,6 +470,7 @@ *val = *addr; return 0; } +EXPORT_SYMBOL(unw_access_fr); int unw_access_ar (struct unw_frame_info *info, int regnum, unsigned long *val, int write) @@ -559,6 +563,7 @@ *val = *addr; return 0; } +EXPORT_SYMBOL(unw_access_ar); int unw_access_pr (struct unw_frame_info *info, unsigned long *val, int write) @@ -575,6 +580,7 @@ *val = *addr; return 0; } +EXPORT_SYMBOL(unw_access_pr); /* Routines to manipulate the state stack. */ @@ -1897,6 +1903,7 @@ STAT(unw.stat.api.unwind_time += ia64_get_itc() - start; local_irq_restore(flags)); return retval; } +EXPORT_SYMBOL(unw_unwind); int unw_unwind_to_user (struct unw_frame_info *info) @@ -1917,6 +1924,7 @@ UNW_DPRINT(0, "unwind.%s: failed to unwind to user-level (ip=0x%lx)\n", __FUNCTION__, ip); return -1; } +EXPORT_SYMBOL(unw_unwind_to_user); static void init_frame_info (struct unw_frame_info *info, struct task_struct *t, @@ -2014,6 +2022,7 @@ UNW_DPRINT(1, "unwind.%s\n", __FUNCTION__); unw_init_frame_info(info, t, sw); } +EXPORT_SYMBOL(unw_init_from_blocked_task); static void init_unwind_table (struct unw_table *table, const char *name, unsigned long segment_base, diff -Nru a/arch/ia64/lib/Makefile b/arch/ia64/lib/Makefile --- a/arch/ia64/lib/Makefile Thu Jan 15 21:41:55 2004 +++ b/arch/ia64/lib/Makefile Thu Jan 15 21:41:55 2004 @@ -2,11 +2,13 @@ # Makefile for ia64-specific library routines.. # +obj-y := io.o + lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o \ __divdi3.o __udivdi3.o __moddi3.o __umoddi3.o \ checksum.o clear_page.o csum_partial_copy.o copy_page.o \ clear_user.o strncpy_from_user.o strlen_user.o strnlen_user.o \ - flush.o io.o ip_fast_csum.o do_csum.o \ + flush.o ip_fast_csum.o do_csum.o \ memset.o strlen.o swiotlb.o lib-$(CONFIG_ITANIUM) += copy_page.o copy_user.o memcpy.o diff -Nru a/arch/ia64/lib/io.c b/arch/ia64/lib/io.c --- a/arch/ia64/lib/io.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/lib/io.c Thu Jan 15 21:41:53 2004 @@ -1,4 +1,5 @@ #include +#include #include #include @@ -17,6 +18,7 @@ from++; } } +EXPORT_SYMBOL(__ia64_memcpy_fromio); /* * Copy data from "real" memory space to IO memory space. @@ -32,6 +34,7 @@ to++; } } +EXPORT_SYMBOL(__ia64_memcpy_toio); /* * "memset" on IO memory space. @@ -48,6 +51,7 @@ dst++; } } +EXPORT_SYMBOL(__ia64_memset_c_io); #ifdef CONFIG_IA64_GENERIC diff -Nru a/arch/ia64/lib/memcpy_mck.S b/arch/ia64/lib/memcpy_mck.S --- a/arch/ia64/lib/memcpy_mck.S Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/lib/memcpy_mck.S Thu Jan 15 21:41:54 2004 @@ -155,7 +155,7 @@ mov ar.ec=2 (p10) br.dpnt.few .aligned_src_tail ;; -// .align 32 + TEXT_ALIGN(32) 1: EX(.ex_handler, (p16) ld8 r34=[src0],16) EK(.ex_handler, (p16) ld8 r38=[src1],16) @@ -312,7 +312,7 @@ (p7) mov ar.lc = r21 (p8) mov ar.lc = r0 ;; -// .align 32 + TEXT_ALIGN(32) 1: lfetch.fault [src_pre_mem], 128 lfetch.fault.excl [dst_pre_mem], 128 br.cloop.dptk.few 1b @@ -518,7 +518,7 @@ shrp r21=r22,r38,shift; /* speculative work */ \ br.sptk.few .unaligned_src_tail /* branch out of jump table */ \ ;; -// .align 32 + TEXT_ALIGN(32) .jump_table: COPYU(8) // unaligned cases .jmp1: diff -Nru a/arch/ia64/lib/memset.S b/arch/ia64/lib/memset.S --- a/arch/ia64/lib/memset.S Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/lib/memset.S Thu Jan 15 21:41:54 2004 @@ -125,7 +125,7 @@ (p_zr) br.cond.dptk.many .l1b // Jump to use stf.spill ;; } -// .align 32 // -------------------------- // L1A: store ahead into cache lines; fill later + TEXT_ALIGN(32) // --------------------- // L1A: store ahead into cache lines; fill later { .mmi and tmp = -(LINE_SIZE), cnt // compute end of range mov ptr9 = ptr1 // used for prefetching @@ -194,7 +194,7 @@ br.cond.dpnt.many .move_bytes_from_alignment // Branch no. 3 ;; } -// .align 32 + TEXT_ALIGN(32) .l1b: // ------------------------------------ // L1B: store ahead into cache lines; fill later { .mmi and tmp = -(LINE_SIZE), cnt // compute end of range @@ -261,7 +261,7 @@ and cnt = 0x1f, cnt // compute the remaining cnt mov.i ar.lc = loopcnt ;; } -// .align 32 + TEXT_ALIGN(32) .l2: // ------------------------------------ // L2A: store 32B in 2 cycles { .mmb stf8 [ptr1] = fvalue, 8 diff -Nru a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c --- a/arch/ia64/mm/init.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/mm/init.c Thu Jan 15 21:41:54 2004 @@ -43,15 +43,16 @@ unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL; #ifdef CONFIG_VIRTUAL_MEM_MAP - unsigned long vmalloc_end = VMALLOC_END_INIT; - struct page *vmem_map; - - EXPORT_SYMBOL(vmem_map); +unsigned long vmalloc_end = VMALLOC_END_INIT; +EXPORT_SYMBOL(vmalloc_end); +struct page *vmem_map; +EXPORT_SYMBOL(vmem_map); #endif static int pgt_cache_water[2] = { 25, 50 }; struct page *zero_page_memmap_ptr; /* map entry for zero page */ +EXPORT_SYMBOL(zero_page_memmap_ptr); void check_pgt_cache (void) @@ -457,6 +458,7 @@ return __get_user(byte, (char *) pfn_to_page(pfn)) == 0; } +EXPORT_SYMBOL(ia64_pfn_valid); int find_largest_hole (u64 start, u64 end, void *arg) diff -Nru a/arch/ia64/mm/numa.c b/arch/ia64/mm/numa.c --- a/arch/ia64/mm/numa.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/mm/numa.c Thu Jan 15 21:41:54 2004 @@ -18,6 +18,7 @@ #include #include #include +#include #include static struct memblk *sysfs_memblks; @@ -28,7 +29,7 @@ * The following structures are usually initialized by ACPI or * similar mechanisms and describe the NUMA characteristics of the machine. */ -int num_memblks = 0; +int num_memblks; struct node_memblk_s node_memblk[NR_MEMBLKS]; struct node_cpuid_s node_cpuid[NR_CPUS]; /* diff -Nru a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c --- a/arch/ia64/mm/tlb.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/mm/tlb.c Thu Jan 15 21:41:54 2004 @@ -10,6 +10,7 @@ * IPI based ptc implementation and A-step IPI implementation. */ #include +#include #include #include #include @@ -126,6 +127,7 @@ local_irq_restore(flags); ia64_srlz_i(); /* srlz.i implies srlz.d */ } +EXPORT_SYMBOL(local_flush_tlb_all); void flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned long end) @@ -162,6 +164,7 @@ ia64_srlz_i(); /* srlz.i implies srlz.d */ } +EXPORT_SYMBOL(flush_tlb_range); void __init ia64_tlb_init (void) diff -Nru a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c --- a/arch/ia64/pci/pci.c Thu Jan 15 21:41:54 2004 +++ b/arch/ia64/pci/pci.c Thu Jan 15 21:41:54 2004 @@ -223,6 +223,9 @@ status = acpi_resource_to_address64(res, &addr); if (ACPI_SUCCESS(status)) { + if (!addr.address_length) + return AE_OK; + if (addr.resource_type == ACPI_MEMORY_RANGE) { flags = IORESOURCE_MEM; root = &iomem_resource; diff -Nru a/arch/ia64/scripts/check-text-align.S b/arch/ia64/scripts/check-text-align.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/scripts/check-text-align.S Thu Jan 15 21:41:55 2004 @@ -0,0 +1,6 @@ + .proc foo + .prologue +foo: .save rp, r2 + nop 0 + .align 64 + .endp foo diff -Nru a/arch/ia64/scripts/unwcheck.py b/arch/ia64/scripts/unwcheck.py --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/scripts/unwcheck.py Thu Jan 15 21:41:55 2004 @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# +# Usage: unwcheck.py FILE +# +# This script checks the unwind info of each function in file FILE +# and verifies that the sum of the region-lengths matches the total +# length of the function. +# +# Based on a shell/awk script originally written by Harish Patil, +# which was converted to Perl by Matthew Chapman, which was converted +# to Python by David Mosberger. +# +import os +import re +import sys + +if len(sys.argv) != 2: + print "Usage: %s FILE" % sys.argv[0] + sys.exit(2) + +readelf = os.getenv("READELF", "readelf") + +start_pattern = re.compile("<([^>]*)>: \[0x([0-9a-f]+)-0x([0-9a-f]+)\]") +rlen_pattern = re.compile(".*rlen=([0-9]+)") + +def check_func (func, slots, rlen_sum): + if slots != rlen_sum: + global num_errors + num_errors += 1 + if not func: func = "[%#x-%#x]" % (start, end) + print "ERROR: %s: %lu slots, total region length = %lu" % (func, slots, rlen_sum) + return + +num_funcs = 0 +num_errors = 0 +func = False +slots = 0 +rlen_sum = 0 +for line in os.popen("%s -u %s" % (readelf, sys.argv[1])): + m = start_pattern.match(line) + if m: + check_func(func, slots, rlen_sum) + + func = m.group(1) + start = long(m.group(2), 16) + end = long(m.group(3), 16) + slots = 3 * (end - start) / 16 + rlen_sum = 0L + num_funcs += 1 + else: + m = rlen_pattern.match(line) + if m: + rlen_sum += long(m.group(1)) +check_func(func, slots, rlen_sum) + +if num_errors == 0: + print "No errors detected in %u functions." % num_funcs +else: + if num_errors > 1: + err="errors" + else: + err="error" + print "%u %s detected in %u functions." % (num_errors, err, num_funcs) + sys.exit(1) diff -Nru a/arch/ia64/scripts/unwcheck.sh b/arch/ia64/scripts/unwcheck.sh --- a/arch/ia64/scripts/unwcheck.sh Thu Jan 15 21:41:54 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,109 +0,0 @@ -#!/bin/sh -# Usage: unwcheck.sh -# Pre-requisite: readelf [from Gnu binutils package] -# Purpose: Check the following invariant -# For each code range in the input binary: -# Sum[ lengths of unwind regions] = Number of slots in code range. -# Author : Harish Patil -# First version: January 2002 -# Modified : 2/13/2002 -# Modified : 3/15/2002: duplicate detection -readelf -u $1 | gawk '\ - function todec(hexstr){ - dec = 0; - l = length(hexstr); - for (i = 1; i <= l; i++) - { - c = substr(hexstr, i, 1); - if (c == "A") - dec = dec*16 + 10; - else if (c == "B") - dec = dec*16 + 11; - else if (c == "C") - dec = dec*16 + 12; - else if (c == "D") - dec = dec*16 + 13; - else if (c == "E") - dec = dec*16 + 14; - else if (c == "F") - dec = dec*16 + 15; - else - dec = dec*16 + c; - } - return dec; - } - BEGIN { first = 1; sum_rlen = 0; no_slots = 0; errors=0; no_code_ranges=0; } - { - if (NF==5 && $3=="info") - { - no_code_ranges += 1; - if (first == 0) - { - if (sum_rlen != no_slots) - { - print full_code_range; - print " ", "lo = ", lo, " hi =", hi; - print " ", "sum_rlen = ", sum_rlen, "no_slots = " no_slots; - print " "," ", "*******ERROR ***********"; - print " "," ", "sum_rlen:", sum_rlen, " != no_slots:" no_slots; - errors += 1; - } - sum_rlen = 0; - } - full_code_range = $0; - code_range = $2; - gsub("..$", "", code_range); - gsub("^.", "", code_range); - split(code_range, addr, "-"); - lo = toupper(addr[1]); - - code_range_lo[no_code_ranges] = addr[1]; - occurs[addr[1]] += 1; - full_range[addr[1]] = $0; - - gsub("0X.[0]*", "", lo); - hi = toupper(addr[2]); - gsub("0X.[0]*", "", hi); - no_slots = (todec(hi) - todec(lo))/ 16*3 - first = 0; - } - if (index($0,"rlen") > 0 ) - { - rlen_str = substr($0, index($0,"rlen")); - rlen = rlen_str; - gsub("rlen=", "", rlen); - gsub(")", "", rlen); - sum_rlen = sum_rlen + rlen; - } - } - END { - if (first == 0) - { - if (sum_rlen != no_slots) - { - print "code_range=", code_range; - print " ", "lo = ", lo, " hi =", hi; - print " ", "sum_rlen = ", sum_rlen, "no_slots = " no_slots; - print " "," ", "*******ERROR ***********"; - print " "," ", "sum_rlen:", sum_rlen, " != no_slots:" no_slots; - errors += 1; - } - } - no_duplicates = 0; - for (i=1; i<=no_code_ranges; i++) - { - cr = code_range_lo[i]; - if (reported_cr[cr]==1) continue; - if ( occurs[cr] > 1) - { - reported_cr[cr] = 1; - print "Code range low ", code_range_lo[i], ":", full_range[cr], " occurs: ", occurs[cr], " times."; - print " "; - no_duplicates++; - } - } - print "======================================" - print "Total errors:", errors, "/", no_code_ranges, " duplicates:", no_duplicates; - print "======================================" - } - ' diff -Nru a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c --- a/arch/ia64/sn/kernel/setup.c Thu Jan 15 21:41:53 2004 +++ b/arch/ia64/sn/kernel/setup.c Thu Jan 15 21:41:53 2004 @@ -398,9 +398,6 @@ cnode = nasid_to_cnodeid(nasid); slice = cpu_physical_id_to_slice(cpuphyid); - printk("CPU %d: nasid %d, slice %d, cnode %d\n", - smp_processor_id(), nasid, slice, cnode); - memset(pda, 0, sizeof(pda)); pda->p_nodepda = nodepdaindr[cnode]; pda->led_address = (typeof(pda->led_address)) (LED0 + (slice< #include +/* Used to protect the IRQ action lists */ +spinlock_t irq_action_lock = SPIN_LOCK_UNLOCKED; + /* * Dave Redman (djhr@tadpole.co.uk) * @@ -492,7 +495,7 @@ return -EBUSY; } - save_and_cli(flags); + spin_lock_irqsave(&irq_action_lock, flags); /* If this is flagged as statically allocated then we use our * private struct which is never freed. @@ -507,10 +510,10 @@ if (action == NULL) action = (struct irqaction *)kmalloc(sizeof(struct irqaction), - GFP_KERNEL); + GFP_ATOMIC); if (!action) { - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return -ENOMEM; } @@ -547,7 +550,7 @@ *(cpu_irq + irq_action) = action; enable_irq(irq); - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return 0; } @@ -586,7 +589,7 @@ action = NULL; /* Or else! */ } - save_and_cli(flags); + spin_lock_irqsave(&irq_action_lock, flags); /* If this is flagged as statically allocated then we use our * private struct which is never freed. @@ -600,10 +603,10 @@ if (action == NULL) action = (struct irqaction *)kmalloc(sizeof(struct irqaction), - GFP_KERNEL); + GFP_ATOMIC); if (!action) { - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return -ENOMEM; } @@ -620,7 +623,7 @@ *(cpu_irq + irq_action) = action; enable_irq(irq); - restore_flags(flags); + spin_unlock_irqrestore(&irq_action_lock, flags); return 0; } diff -Nru a/arch/sparc/mm/fault.c b/arch/sparc/mm/fault.c --- a/arch/sparc/mm/fault.c Thu Jan 15 21:41:54 2004 +++ b/arch/sparc/mm/fault.c Thu Jan 15 21:41:54 2004 @@ -36,7 +36,6 @@ #define ELEMENTS(arr) (sizeof (arr)/sizeof (arr[0])) -extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS+1]; extern int prom_node_root; /* At boot time we determine these two values necessary for setting diff -Nru a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c --- a/arch/sparc/mm/srmmu.c Thu Jan 15 21:41:54 2004 +++ b/arch/sparc/mm/srmmu.c Thu Jan 15 21:41:54 2004 @@ -349,7 +349,7 @@ vaddr, (unsigned long)SRMMU_NOCACHE_VADDR); BUG(); } - if (vaddr+size >= srmmu_nocache_end) { + if (vaddr+size > srmmu_nocache_end) { printk("Vaddr %lx is bigger than nocache end 0x%lx\n", vaddr, srmmu_nocache_end); BUG(); @@ -1071,7 +1071,7 @@ } if (start > (0xffffffffUL - SRMMU_PMD_SIZE_SOFT)) break; - start = (start + SRMMU_PMD_SIZE) & SRMMU_PMD_MASK; + start = (start + SRMMU_PMD_SIZE_SOFT) & SRMMU_PMD_MASK_SOFT; } } @@ -1101,7 +1101,7 @@ } if (start > (0xffffffffUL - SRMMU_PMD_SIZE_SOFT)) break; - start = (start + SRMMU_PMD_SIZE) & SRMMU_PMD_MASK; + start = (start + SRMMU_PMD_SIZE_SOFT) & SRMMU_PMD_MASK_SOFT; } } diff -Nru a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig --- a/arch/sparc64/Kconfig Thu Jan 15 21:41:54 2004 +++ b/arch/sparc64/Kconfig Thu Jan 15 21:41:54 2004 @@ -489,6 +489,22 @@ machines. The watchdog timeout period is normally one minute but can be changed with a boot-time parameter. +config CMDLINE_BOOL + bool "Default bootloader kernel arguments" + +config CMDLINE + string "Initial kernel command string" + depends on CMDLINE_BOOL + default "console=ttyS0,9600 root=/dev/sda1" + help + Say Y here if you want to be able to pass default arguments to + the kernel. This will be overridden by the bootloader, if you + use one (such as SILO). This is most useful if you want to boot + a kernel from TFTP, and want default options to be available + with having them passed on the command line. + + NOTE: This option WILL override the PROM bootargs setting! + endmenu source "drivers/base/Kconfig" diff -Nru a/arch/sparc64/defconfig b/arch/sparc64/defconfig --- a/arch/sparc64/defconfig Thu Jan 15 21:41:54 2004 +++ b/arch/sparc64/defconfig Thu Jan 15 21:41:54 2004 @@ -102,6 +102,7 @@ CONFIG_DISPLAY7SEG=m CONFIG_WATCHDOG_CP1XXX=m CONFIG_WATCHDOG_RIO=m +# CONFIG_CMDLINE_BOOL is not set # # Generic Driver Options @@ -1286,6 +1287,7 @@ CONFIG_DVB_TWINHAN_DST=m CONFIG_DVB_STV0299=m CONFIG_DVB_SP887X=m +CONFIG_DVB_SP887X_FIRMWARE_FILE="/etc/dvb/sc_main.mc" CONFIG_DVB_ALPS_TDLB7=m CONFIG_DVB_ALPS_TDMB7=m CONFIG_DVB_ATMEL_AT76C651=m @@ -1295,12 +1297,12 @@ CONFIG_DVB_MT312=m CONFIG_DVB_VES1820=m CONFIG_DVB_VES1X93=m -CONFIG_DVB_SP887X_FIRMWARE_FILE="/etc/dvb/sc_main.mc" # # Supported SAA7146 based PCI Adapters # -# CONFIG_DVB_AV7110 is not set +CONFIG_DVB_AV7110=m +# CONFIG_DVB_AV7110_OSD is not set CONFIG_DVB_BUDGET=m CONFIG_DVB_BUDGET_CI=m CONFIG_DVB_BUDGET_AV=m diff -Nru a/arch/sparc64/kernel/head.S b/arch/sparc64/kernel/head.S --- a/arch/sparc64/kernel/head.S Thu Jan 15 21:41:54 2004 +++ b/arch/sparc64/kernel/head.S Thu Jan 15 21:41:54 2004 @@ -151,6 +151,9 @@ blu,pt %xcc, 1b add %l0, (1 << 3), %l0 + /* BUG() if we get here... */ + ta 0x5 + cheetah_got_tlbentry: ldxa [%l0] ASI_ITLB_DATA_ACCESS, %g0 ldxa [%l0] ASI_ITLB_DATA_ACCESS, %g1 @@ -332,6 +335,9 @@ cmp %l0, (63 << 3) blu,pt %xcc, 1b add %l0, (1 << 3), %l0 + + /* BUG() if we get here... */ + ta 0x5 spitfire_got_tlbentry: /* Nops here again, perhaps Cheetah/Blackbird are better behaved... */ diff -Nru a/arch/sparc64/prom/bootstr.c b/arch/sparc64/prom/bootstr.c --- a/arch/sparc64/prom/bootstr.c Thu Jan 15 21:41:53 2004 +++ b/arch/sparc64/prom/bootstr.c Thu Jan 15 21:41:53 2004 @@ -21,6 +21,10 @@ char bootstr_buf[BARG_LEN]; } bootstr_info = { .bootstr_len = BARG_LEN, +#ifdef CONFIG_CMDLINE + .bootstr_valid = 1, + .bootstr_buf = CONFIG_CMDLINE, +#endif }; char * __init diff -Nru a/drivers/ieee1394/Kconfig b/drivers/ieee1394/Kconfig --- a/drivers/ieee1394/Kconfig Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/Kconfig Thu Jan 15 21:41:53 2004 @@ -40,7 +40,7 @@ help If you say Y here, then an OUI list (vendor unique ID's) will be compiled into the ieee1394 module. This doesn't really do much - accept being able to display the vendor of a hardware node. The + except being able to display the vendor of a hardware node. The downside is that it adds about 300k to the size of the module, or kernel (depending on whether you compile ieee1394 as a module, or static in the kernel). diff -Nru a/drivers/ieee1394/amdtp.c b/drivers/ieee1394/amdtp.c --- a/drivers/ieee1394/amdtp.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/amdtp.c Thu Jan 15 21:41:54 2004 @@ -82,6 +82,7 @@ #include #include #include +#include #include #include @@ -1196,6 +1197,7 @@ return 0; } +static struct cdev amdtp_cdev; static struct file_operations amdtp_fops = { .owner = THIS_MODULE, @@ -1262,12 +1264,11 @@ static int __init amdtp_init_module (void) { - int ret; - - ret = ieee1394_register_chardev(IEEE1394_MINOR_BLOCK_AMDTP, - THIS_MODULE, &amdtp_fops); - if (ret) { - HPSB_ERR("amdtp: unable to get minor device block"); + cdev_init(&amdtp_cdev, &amdtp_fops); + amdtp_cdev.owner = THIS_MODULE; + kobject_set_name(&amdtp_cdev.kobj, "amdtp"); + if (cdev_add(&amdtp_cdev, IEEE1394_AMDTP_DEV, 16)) { + HPSB_ERR("amdtp: unable to add char device"); return -EIO; } @@ -1276,12 +1277,15 @@ hpsb_register_highlevel(&amdtp_highlevel); #ifdef CONFIG_COMPAT - ret = register_ioctl32_conversion(AMDTP_IOC_CHANNEL, NULL); - ret |= register_ioctl32_conversion(AMDTP_IOC_PLUG, NULL); - ret |= register_ioctl32_conversion(AMDTP_IOC_PING, NULL); - ret |= register_ioctl32_conversion(AMDTP_IOC_ZAP, NULL); - if (ret) - HPSB_ERR("amdtp: Error registering ioctl32 translations"); + { + int ret; + ret = register_ioctl32_conversion(AMDTP_IOC_CHANNEL, NULL); + ret |= register_ioctl32_conversion(AMDTP_IOC_PLUG, NULL); + ret |= register_ioctl32_conversion(AMDTP_IOC_PING, NULL); + ret |= register_ioctl32_conversion(AMDTP_IOC_ZAP, NULL); + if (ret) + HPSB_ERR("amdtp: Error registering ioctl32 translations"); + } #endif HPSB_INFO("Loaded AMDTP driver"); @@ -1304,10 +1308,12 @@ hpsb_unregister_highlevel(&amdtp_highlevel); devfs_remove("amdtp"); - ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_AMDTP); + cdev_unmap(IEEE1394_AMDTP_DEV, 16); + cdev_del(&amdtp_cdev); HPSB_INFO("Unloaded AMDTP driver"); } module_init(amdtp_init_module); module_exit(amdtp_exit_module); +MODULE_ALIAS_CHARDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_AMDTP * 16); diff -Nru a/drivers/ieee1394/cmp.c b/drivers/ieee1394/cmp.c --- a/drivers/ieee1394/cmp.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/cmp.c Thu Jan 15 21:41:54 2004 @@ -77,6 +77,25 @@ static struct hpsb_highlevel cmp_highlevel; +static void cmp_add_host(struct hpsb_host *host); +static void cmp_host_reset(struct hpsb_host *host); +static int pcr_read(struct hpsb_host *host, int nodeid, quadlet_t *buf, + u64 addr, size_t length, u16 flags); +static int pcr_lock(struct hpsb_host *host, int nodeid, quadlet_t *store, + u64 addr, quadlet_t data, quadlet_t arg, int extcode, u16 flags); + +static struct hpsb_highlevel cmp_highlevel = { + .name = "cmp", + .add_host = cmp_add_host, + .host_reset = cmp_host_reset, +}; + +static struct hpsb_address_ops pcr_ops = { + .read = pcr_read, + .lock = pcr_lock, +}; + + struct cmp_pcr * cmp_register_opcr(struct hpsb_host *host, int opcr_number, int payload, void (*update)(struct cmp_pcr *pcr, void *data), @@ -137,6 +156,10 @@ return; } + hpsb_register_addrspace(&cmp_highlevel, host, &pcr_ops, + CSR_REGISTER_BASE + CSR_PCR_MAP, + CSR_REGISTER_BASE + CSR_PCR_MAP_END); + ch->host = host; ch->u.ompr.rate = IEEE1394_SPEED_100; ch->u.ompr.bcast_channel_base = 63; @@ -258,17 +281,6 @@ } -static struct hpsb_highlevel cmp_highlevel = { - .name = "cmp", - .add_host = cmp_add_host, - .host_reset = cmp_host_reset, -}; - -static struct hpsb_address_ops pcr_ops = { - .read = pcr_read, - .lock = pcr_lock, -}; - /* Module interface */ MODULE_AUTHOR("Kristian Hogsberg "); @@ -282,10 +294,6 @@ static int __init cmp_init_module (void) { hpsb_register_highlevel (&cmp_highlevel); - - hpsb_register_addrspace(&cmp_highlevel, &pcr_ops, - CSR_REGISTER_BASE + CSR_PCR_MAP, - CSR_REGISTER_BASE + CSR_PCR_MAP_END); HPSB_INFO("Loaded CMP driver"); diff -Nru a/drivers/ieee1394/csr.c b/drivers/ieee1394/csr.c --- a/drivers/ieee1394/csr.c Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/csr.c Thu Jan 15 21:41:53 2004 @@ -35,6 +35,43 @@ module_param(fcp, int, 0444); MODULE_PARM_DESC(fcp, "Map FCP registers (default = 1, disable = 0)."); +static void add_host(struct hpsb_host *host); +static void host_reset(struct hpsb_host *host); +static int read_maps(struct hpsb_host *host, int nodeid, quadlet_t *buffer, + u64 addr, size_t length, u16 fl); +static int write_fcp(struct hpsb_host *host, int nodeid, int dest, + quadlet_t *data, u64 addr, size_t length, u16 flags); +static int read_regs(struct hpsb_host *host, int nodeid, quadlet_t *buf, + u64 addr, size_t length, u16 flags); +static int write_regs(struct hpsb_host *host, int nodeid, int destid, + quadlet_t *data, u64 addr, size_t length, u16 flags); +static int lock_regs(struct hpsb_host *host, int nodeid, quadlet_t *store, + u64 addr, quadlet_t data, quadlet_t arg, int extcode, u16 fl); +static int lock64_regs(struct hpsb_host *host, int nodeid, octlet_t * store, + u64 addr, octlet_t data, octlet_t arg, int extcode, u16 fl); + +static struct hpsb_highlevel csr_highlevel = { + .name = "standard registers", + .add_host = add_host, + .host_reset = host_reset, +}; + +static struct hpsb_address_ops map_ops = { + .read = read_maps, +}; + +static struct hpsb_address_ops fcp_ops = { + .write = write_fcp, +}; + +static struct hpsb_address_ops reg_ops = { + .read = read_regs, + .write = write_regs, + .lock = lock_regs, + .lock64 = lock64_regs, +}; + + static u16 csr_crc16(unsigned *data, int length) { int check=0, i; @@ -125,6 +162,24 @@ static void add_host(struct hpsb_host *host) { + hpsb_register_addrspace(&csr_highlevel, host, ®_ops, + CSR_REGISTER_BASE, + CSR_REGISTER_BASE + CSR_CONFIG_ROM); + hpsb_register_addrspace(&csr_highlevel, host, &map_ops, + CSR_REGISTER_BASE + CSR_CONFIG_ROM, + CSR_REGISTER_BASE + CSR_CONFIG_ROM_END); + if (fcp) { + hpsb_register_addrspace(&csr_highlevel, host, &fcp_ops, + CSR_REGISTER_BASE + CSR_FCP_COMMAND, + CSR_REGISTER_BASE + CSR_FCP_END); + } + hpsb_register_addrspace(&csr_highlevel, host, &map_ops, + CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP, + CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP_END); + hpsb_register_addrspace(&csr_highlevel, host, &map_ops, + CSR_REGISTER_BASE + CSR_SPEED_MAP, + CSR_REGISTER_BASE + CSR_SPEED_MAP_END); + host->csr.lock = SPIN_LOCK_UNLOCKED; host->csr.rom_size = host->driver->get_rom(host, &host->csr.rom); @@ -684,48 +739,10 @@ } -static struct hpsb_highlevel csr_highlevel = { - .name = "standard registers", - .add_host = add_host, - .host_reset = host_reset, -}; - - -static struct hpsb_address_ops map_ops = { - .read = read_maps, -}; - -static struct hpsb_address_ops fcp_ops = { - .write = write_fcp, -}; - -static struct hpsb_address_ops reg_ops = { - .read = read_regs, - .write = write_regs, - .lock = lock_regs, - .lock64 = lock64_regs, -}; void init_csr(void) { hpsb_register_highlevel(&csr_highlevel); - - hpsb_register_addrspace(&csr_highlevel, ®_ops, CSR_REGISTER_BASE, - CSR_REGISTER_BASE + CSR_CONFIG_ROM); - hpsb_register_addrspace(&csr_highlevel, &map_ops, - CSR_REGISTER_BASE + CSR_CONFIG_ROM, - CSR_REGISTER_BASE + CSR_CONFIG_ROM_END); - if (fcp) { - hpsb_register_addrspace(&csr_highlevel, &fcp_ops, - CSR_REGISTER_BASE + CSR_FCP_COMMAND, - CSR_REGISTER_BASE + CSR_FCP_END); - } - hpsb_register_addrspace(&csr_highlevel, &map_ops, - CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP, - CSR_REGISTER_BASE + CSR_TOPOLOGY_MAP_END); - hpsb_register_addrspace(&csr_highlevel, &map_ops, - CSR_REGISTER_BASE + CSR_SPEED_MAP, - CSR_REGISTER_BASE + CSR_SPEED_MAP_END); } void cleanup_csr(void) diff -Nru a/drivers/ieee1394/dv1394.c b/drivers/ieee1394/dv1394.c --- a/drivers/ieee1394/dv1394.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/dv1394.c Thu Jan 15 21:41:54 2004 @@ -110,6 +110,7 @@ #include #include #include +#include #include "ieee1394.h" #include "ieee1394_types.h" @@ -2165,6 +2166,7 @@ spin_unlock(&video->spinlock); } +static struct cdev dv1394_cdev; static struct file_operations dv1394_fops= { .owner = THIS_MODULE, @@ -2607,17 +2609,17 @@ hpsb_unregister_protocol(&dv1394_driver); hpsb_unregister_highlevel(&dv1394_highlevel); - ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_DV1394); + cdev_unmap(IEEE1394_DV1394_DEV, 16); + cdev_del(&dv1394_cdev); devfs_remove("ieee1394/dv"); } static int __init dv1394_init_module(void) { - int ret; - - ret = ieee1394_register_chardev(IEEE1394_MINOR_BLOCK_DV1394, - THIS_MODULE, &dv1394_fops); - if (ret) { + cdev_init(&dv1394_cdev, &dv1394_fops); + dv1394_cdev.owner = THIS_MODULE; + kobject_set_name(&dv1394_cdev.kobj, "dv1394"); + if (cdev_add(&dv1394_cdev, IEEE1394_DV1394_DEV, 16)) { printk(KERN_ERR "dv1394: unable to register character device\n"); return -EIO; } @@ -2629,18 +2631,22 @@ hpsb_register_protocol(&dv1394_driver); #ifdef CONFIG_COMPAT - /* First compatible ones */ - ret = register_ioctl32_conversion(DV1394_IOC_SHUTDOWN, NULL); - ret |= register_ioctl32_conversion(DV1394_IOC_SUBMIT_FRAMES, NULL); - ret |= register_ioctl32_conversion(DV1394_IOC_WAIT_FRAMES, NULL); - ret |= register_ioctl32_conversion(DV1394_IOC_RECEIVE_FRAMES, NULL); - ret |= register_ioctl32_conversion(DV1394_IOC_START_RECEIVE, NULL); - - /* These need to be handled by translation */ - ret |= register_ioctl32_conversion(DV1394_IOC32_INIT, handle_dv1394_init); - ret |= register_ioctl32_conversion(DV1394_IOC32_GET_STATUS, handle_dv1394_get_status); - if (ret) - printk(KERN_ERR "dv1394: Error registering ioctl32 translations\n"); + { + int ret; + + /* First compatible ones */ + ret = register_ioctl32_conversion(DV1394_IOC_SHUTDOWN, NULL); + ret |= register_ioctl32_conversion(DV1394_IOC_SUBMIT_FRAMES, NULL); + ret |= register_ioctl32_conversion(DV1394_IOC_WAIT_FRAMES, NULL); + ret |= register_ioctl32_conversion(DV1394_IOC_RECEIVE_FRAMES, NULL); + ret |= register_ioctl32_conversion(DV1394_IOC_START_RECEIVE, NULL); + + /* These need to be handled by translation */ + ret |= register_ioctl32_conversion(DV1394_IOC32_INIT, handle_dv1394_init); + ret |= register_ioctl32_conversion(DV1394_IOC32_GET_STATUS, handle_dv1394_get_status); + if (ret) + printk(KERN_ERR "dv1394: Error registering ioctl32 translations\n"); + } #endif return 0; @@ -2648,3 +2654,4 @@ module_init(dv1394_init_module); module_exit(dv1394_exit_module); +MODULE_ALIAS_CHARDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16); diff -Nru a/drivers/ieee1394/eth1394.c b/drivers/ieee1394/eth1394.c --- a/drivers/ieee1394/eth1394.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/eth1394.c Thu Jan 15 21:41:54 2004 @@ -89,7 +89,7 @@ #define TRACE() printk(KERN_ERR "%s:%s[%d] ---- TRACE\n", driver_name, __FUNCTION__, __LINE__) static char version[] __devinitdata = - "$Rev: 1079 $ Ben Collins "; + "$Rev: 1096 $ Ben Collins "; struct fragment_info { struct list_head list; @@ -168,6 +168,26 @@ static int ether1394_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); static int ether1394_ethtool_ioctl(struct net_device *dev, void *useraddr); +static int ether1394_write(struct hpsb_host *host, int srcid, int destid, + quadlet_t *data, u64 addr, size_t len, u16 flags); +static void ether1394_add_host (struct hpsb_host *host); +static void ether1394_remove_host (struct hpsb_host *host); +static void ether1394_host_reset (struct hpsb_host *host); + +/* Function for incoming 1394 packets */ +static struct hpsb_address_ops addr_ops = { + .write = ether1394_write, +}; + +/* Ieee1394 highlevel driver functions */ +static struct hpsb_highlevel eth1394_highlevel = { + .name = driver_name, + .add_host = ether1394_add_host, + .remove_host = ether1394_remove_host, + .host_reset = ether1394_host_reset, +}; + + static void eth1394_iso_shutdown(struct eth1394_priv *priv) { priv->bc_state = ETHER1394_BC_CLOSED; @@ -420,6 +440,10 @@ struct eth1394_priv *priv; static int version_printed = 0; + hpsb_register_addrspace(ð1394_highlevel, host, &addr_ops, + ETHER1394_REGION_ADDR, + ETHER1394_REGION_ADDR_END); + if (version_printed++ == 0) ETH1394_PRINT_G (KERN_INFO, "%s\n", version); @@ -1599,7 +1623,7 @@ case ETHTOOL_GDRVINFO: { struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO }; strcpy (info.driver, driver_name); - strcpy (info.version, "$Rev: 1079 $"); + strcpy (info.version, "$Rev: 1096 $"); /* FIXME XXX provide sane businfo */ strcpy (info.bus_info, "ieee1394"); if (copy_to_user (useraddr, &info, sizeof (info))) @@ -1619,18 +1643,6 @@ return 0; } -/* Function for incoming 1394 packets */ -static struct hpsb_address_ops addr_ops = { - .write = ether1394_write, -}; - -/* Ieee1394 highlevel driver functions */ -static struct hpsb_highlevel eth1394_highlevel = { - .name = driver_name, - .add_host = ether1394_add_host, - .remove_host = ether1394_remove_host, - .host_reset = ether1394_host_reset, -}; static int __init ether1394_init_module (void) { @@ -1639,9 +1651,6 @@ /* Register ourselves as a highlevel driver */ hpsb_register_highlevel(ð1394_highlevel); - - hpsb_register_addrspace(ð1394_highlevel, &addr_ops, ETHER1394_REGION_ADDR, - ETHER1394_REGION_ADDR_END); return 0; } diff -Nru a/drivers/ieee1394/highlevel.c b/drivers/ieee1394/highlevel.c --- a/drivers/ieee1394/highlevel.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/highlevel.c Thu Jan 15 21:41:54 2004 @@ -39,7 +39,10 @@ static LIST_HEAD(hl_drivers); -static rwlock_t hl_drivers_lock = RW_LOCK_UNLOCKED; +static DECLARE_RWSEM(hl_drivers_sem); + +static LIST_HEAD(hl_irqs); +static rwlock_t hl_irqs_lock = RW_LOCK_UNLOCKED; static LIST_HEAD(addr_space); static rwlock_t addr_space_lock = RW_LOCK_UNLOCKED; @@ -239,20 +242,22 @@ void hpsb_register_highlevel(struct hpsb_highlevel *hl) { - unsigned long flags; - INIT_LIST_HEAD(&hl->addr_list); INIT_LIST_HEAD(&hl->host_info_list); rwlock_init(&hl->host_info_lock); - write_lock_irqsave(&hl_drivers_lock, flags); + down_write(&hl_drivers_sem); list_add_tail(&hl->hl_list, &hl_drivers); - write_unlock_irqrestore(&hl_drivers_lock, flags); + up_write(&hl_drivers_sem); if (hl->add_host) nodemgr_for_each_host(hl, highlevel_for_each_host_reg); + write_lock(&hl_irqs_lock); + list_add_tail(&hl->irq_list, &hl_irqs); + write_unlock(&hl_irqs_lock); + return; } @@ -280,15 +285,19 @@ } write_unlock_irqrestore(&addr_space_lock, flags); - write_lock_irqsave(&hl_drivers_lock, flags); + write_lock(&hl_irqs_lock); + list_del(&hl->irq_list); + write_unlock(&hl_irqs_lock); + + down_write(&hl_drivers_sem); list_del(&hl->hl_list); - write_unlock_irqrestore(&hl_drivers_lock, flags); + up_write(&hl_drivers_sem); if (hl->remove_host) nodemgr_for_each_host(hl, highlevel_for_each_host_unreg); } -int hpsb_register_addrspace(struct hpsb_highlevel *hl, +int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host, struct hpsb_address_ops *ops, u64 start, u64 end) { struct hpsb_address_serve *as; @@ -314,7 +323,7 @@ as->end = end; write_lock_irqsave(&addr_space_lock, flags); - entry = addr_space.next; + entry = host->addr_space.next; while (list_entry(entry, struct hpsb_address_serve, as_list)->end <= start) { @@ -336,7 +345,8 @@ return retval; } -int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, u64 start) +int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host, + u64 start) { int retval = 0; struct hpsb_address_serve *as; @@ -350,7 +360,7 @@ while (entry != &hl->addr_list) { as = list_entry(entry, struct hpsb_address_serve, addr_list); entry = entry->next; - if (as->start == start) { + if (as->start == start && as->host == host) { list_del(&as->as_list); list_del(&as->addr_list); kfree(as); @@ -395,89 +405,82 @@ void highlevel_add_host(struct hpsb_host *host) { - struct list_head *entry; struct hpsb_highlevel *hl; - read_lock(&hl_drivers_lock); - list_for_each(entry, &hl_drivers) { - hl = list_entry(entry, struct hpsb_highlevel, hl_list); + down_read(&hl_drivers_sem); + list_for_each_entry(hl, &hl_drivers, hl_list) { if (hl->add_host) hl->add_host(host); } - read_unlock(&hl_drivers_lock); + up_read(&hl_drivers_sem); } void highlevel_remove_host(struct hpsb_host *host) { - struct list_head *entry; struct hpsb_highlevel *hl; + struct list_head *lh, *next; + struct hpsb_address_serve *as; + unsigned long flags; - read_lock(&hl_drivers_lock); - list_for_each(entry, &hl_drivers) { - hl = list_entry(entry, struct hpsb_highlevel, hl_list); - + down_read(&hl_drivers_sem); + list_for_each_entry(hl, &hl_drivers, hl_list) { if (hl->remove_host) { hl->remove_host(host); hpsb_destroy_hostinfo(hl, host); } } - read_unlock(&hl_drivers_lock); + up_read(&hl_drivers_sem); + + /* Free up 1394 address space left behind by high level drivers. */ + write_lock_irqsave(&addr_space_lock, flags); + list_for_each_safe (lh, next, &host->addr_space) { + as = list_entry(lh, struct hpsb_address_serve, as_list); + if (!list_empty(&as->addr_list)) { + list_del(&as->addr_list); + kfree(as); + } + } + write_unlock_irqrestore(&addr_space_lock, flags); } void highlevel_host_reset(struct hpsb_host *host) { - struct list_head *entry; struct hpsb_highlevel *hl; - read_lock(&hl_drivers_lock); - list_for_each(entry, &hl_drivers) { - hl = list_entry(entry, struct hpsb_highlevel, hl_list); - + read_lock(&hl_irqs_lock); + list_for_each_entry(hl, &hl_irqs, hl_list) { if (hl->host_reset) hl->host_reset(host); } - read_unlock(&hl_drivers_lock); + read_unlock(&hl_irqs_lock); } -void highlevel_iso_receive(struct hpsb_host *host, void *data, - size_t length) +void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length) { - struct list_head *entry; struct hpsb_highlevel *hl; int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f; - read_lock(&hl_drivers_lock); - entry = hl_drivers.next; - - while (entry != &hl_drivers) { - hl = list_entry(entry, struct hpsb_highlevel, hl_list); - if (hl->iso_receive) { + read_lock(&hl_irqs_lock); + list_for_each_entry(hl, &hl_irqs, irq_list) { + if (hl->iso_receive) hl->iso_receive(host, channel, data, length); - } - entry = entry->next; } - read_unlock(&hl_drivers_lock); + read_unlock(&hl_irqs_lock); } void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction, void *data, size_t length) { - struct list_head *entry; struct hpsb_highlevel *hl; int cts = ((quadlet_t *)data)[0] >> 4; - read_lock(&hl_drivers_lock); - entry = hl_drivers.next; - - while (entry != &hl_drivers) { - hl = list_entry(entry, struct hpsb_highlevel, hl_list); - if (hl->fcp_request) { + read_lock(&hl_irqs_lock); + list_for_each_entry(hl, &hl_irqs, irq_list) { + if (hl->fcp_request) hl->fcp_request(host, nodeid, direction, cts, data, - length); - } - entry = entry->next; + length); } - read_unlock(&hl_drivers_lock); + read_unlock(&hl_irqs_lock); } int highlevel_read(struct hpsb_host *host, int nodeid, void *data, @@ -490,7 +493,7 @@ read_lock(&addr_space_lock); - entry = addr_space.next; + entry = host->addr_space.next; as = list_entry(entry, struct hpsb_address_serve, as_list); while (as->start <= addr) { @@ -536,7 +539,7 @@ read_lock(&addr_space_lock); - entry = addr_space.next; + entry = host->addr_space.next; as = list_entry(entry, struct hpsb_address_serve, as_list); while (as->start <= addr) { @@ -582,7 +585,7 @@ read_lock(&addr_space_lock); - entry = addr_space.next; + entry = host->addr_space.next; as = list_entry(entry, struct hpsb_address_serve, as_list); while (as->start <= addr) { @@ -615,7 +618,7 @@ read_lock(&addr_space_lock); - entry = addr_space.next; + entry = host->addr_space.next; as = list_entry(entry, struct hpsb_address_serve, as_list); while (as->start <= addr) { @@ -640,7 +643,7 @@ return rcode; } -void init_hpsb_highlevel(void) +void init_hpsb_highlevel(struct hpsb_host *host) { INIT_LIST_HEAD(&dummy_zero_addr.as_list); INIT_LIST_HEAD(&dummy_zero_addr.addr_list); @@ -652,6 +655,6 @@ dummy_zero_addr.start = dummy_zero_addr.end = 0; dummy_max_addr.start = dummy_max_addr.end = ((u64) 1) << 48; - list_add_tail(&dummy_zero_addr.as_list, &addr_space); - list_add_tail(&dummy_max_addr.as_list, &addr_space); + list_add_tail(&dummy_zero_addr.as_list, &host->addr_space); + list_add_tail(&dummy_max_addr.as_list, &host->addr_space); } diff -Nru a/drivers/ieee1394/highlevel.h b/drivers/ieee1394/highlevel.h --- a/drivers/ieee1394/highlevel.h Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/highlevel.h Thu Jan 15 21:41:54 2004 @@ -10,6 +10,8 @@ struct hpsb_address_ops *op; + struct hpsb_host *host; + /* first address handled and first address behind, quadlet aligned */ u64 start, end; }; @@ -36,9 +38,9 @@ * hpsb_unregister_highlevel once for each host. */ void (*remove_host) (struct hpsb_host *host); - /* Host experienced bus reset with possible configuration changes. Note - * that this one may occur during interrupt/bottom half handling. You - * can not expect to be able to do stock hpsb_reads. */ + /* Host experienced bus reset with possible configuration changes. + * Note that this one may occur during interrupt/bottom half handling. + * You can not expect to be able to do stock hpsb_reads. */ void (*host_reset) (struct hpsb_host *host); /* An isochronous packet was received. Channel contains the channel @@ -50,13 +52,14 @@ /* A write request was received on either the FCP_COMMAND (direction = * 0) or the FCP_RESPONSE (direction = 1) register. The cts arg - * contains the cts field (first byte of data). - */ + * contains the cts field (first byte of data). */ void (*fcp_request) (struct hpsb_host *host, int nodeid, int direction, int cts, u8 *data, size_t length); - + /* These are initialized by the subsystem when the + * hpsb_higlevel is registered. */ struct list_head hl_list; + struct list_head irq_list; struct list_head addr_list; struct list_head host_info_list; @@ -137,10 +140,11 @@ * It returns true for successful allocation. There is no unregister function, * all address spaces are deallocated together with the hpsb_highlevel. */ -int hpsb_register_addrspace(struct hpsb_highlevel *hl, +int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host, struct hpsb_address_ops *ops, u64 start, u64 end); -int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, u64 start); +int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host, + u64 start); /* * Enable or disable receving a certain isochronous channel through the @@ -179,6 +183,6 @@ struct hpsb_host *hpsb_get_host_bykey(struct hpsb_highlevel *hl, unsigned long key); /* Initialize the highlevel system */ -void init_hpsb_highlevel(void); +void init_hpsb_highlevel(struct hpsb_host *host); #endif /* IEEE1394_HIGHLEVEL_H */ diff -Nru a/drivers/ieee1394/hosts.c b/drivers/ieee1394/hosts.c --- a/drivers/ieee1394/hosts.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/hosts.c Thu Jan 15 21:41:54 2004 @@ -89,6 +89,8 @@ INIT_LIST_HEAD(&h->pending_packets); spin_lock_init(&h->pending_pkt_lock); + INIT_LIST_HEAD(&h->addr_space); + for (i = 0; i < ARRAY_SIZE(h->tpool); i++) HPSB_TPOOL_INIT(&h->tpool[i]); diff -Nru a/drivers/ieee1394/hosts.h b/drivers/ieee1394/hosts.h --- a/drivers/ieee1394/hosts.h Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/hosts.h Thu Jan 15 21:41:53 2004 @@ -69,6 +69,8 @@ int id; struct device device; + + struct list_head addr_space; }; diff -Nru a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c --- a/drivers/ieee1394/ieee1394_core.c Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/ieee1394_core.c Thu Jan 15 21:41:53 2004 @@ -993,186 +993,11 @@ } -/* - * character device dispatching (see ieee1394_core.h) - * Dan Maas - */ - -static struct { - struct file_operations *file_ops; - struct module *module; -} ieee1394_chardevs[16]; - -static rwlock_t ieee1394_chardevs_lock = RW_LOCK_UNLOCKED; - -static int ieee1394_dispatch_open(struct inode *inode, struct file *file); - -static struct file_operations ieee1394_chardev_ops = { - .owner =THIS_MODULE, - .open = ieee1394_dispatch_open, -}; - -/* claim a block of minor numbers */ -int ieee1394_register_chardev(int blocknum, - struct module *module, - struct file_operations *file_ops) -{ - int retval; - - if ( (blocknum < 0) || (blocknum > 15) ) - return -EINVAL; - - write_lock(&ieee1394_chardevs_lock); - - if (ieee1394_chardevs[blocknum].file_ops == NULL) { - /* grab the minor block */ - ieee1394_chardevs[blocknum].file_ops = file_ops; - ieee1394_chardevs[blocknum].module = module; - - retval = 0; - } else { - /* block already taken */ - retval = -EBUSY; - } - - write_unlock(&ieee1394_chardevs_lock); - - return retval; -} - -/* release a block of minor numbers */ -void ieee1394_unregister_chardev(int blocknum) -{ - if ( (blocknum < 0) || (blocknum > 15) ) - return; - - write_lock(&ieee1394_chardevs_lock); - - if (ieee1394_chardevs[blocknum].file_ops) { - ieee1394_chardevs[blocknum].file_ops = NULL; - ieee1394_chardevs[blocknum].module = NULL; - } - - write_unlock(&ieee1394_chardevs_lock); -} - -/* - ieee1394_get_chardev() - look up and acquire a character device - driver that has previously registered using ieee1394_register_chardev() - - On success, returns 1 and sets module and file_ops to the driver. - The module will have an incremented reference count. - - On failure, returns 0. - The module will NOT have an incremented reference count. -*/ - -static int ieee1394_get_chardev(int blocknum, - struct module **module, - struct file_operations **file_ops) -{ - int ret = 0; - - if ((blocknum < 0) || (blocknum > 15)) - return ret; - - read_lock(&ieee1394_chardevs_lock); - - *module = ieee1394_chardevs[blocknum].module; - *file_ops = ieee1394_chardevs[blocknum].file_ops; - - if (*file_ops == NULL) - goto out; - - if (!try_module_get(*module)) - goto out; - - /* success! */ - ret = 1; - -out: - read_unlock(&ieee1394_chardevs_lock); - return ret; -} - -/* the point of entry for open() on any ieee1394 character device */ -static int ieee1394_dispatch_open(struct inode *inode, struct file *file) -{ - struct file_operations *file_ops; - struct module *module; - int blocknum; - int retval; - - /* - Maintaining correct module reference counts is tricky here! - - The key thing to remember is that the VFS increments the - reference count of ieee1394 before it calls - ieee1394_dispatch_open(). - - If the open() succeeds, then we need to transfer this extra - reference to the task-specific driver module (e.g. raw1394). - The VFS will deref the driver module automatically when the - file is later released. - - If the open() fails, then the VFS will drop the - reference count of whatever module file->f_op->owner points - to, immediately after this function returns. - */ - - /* shift away lower four bits of the minor - to get the index of the ieee1394_driver - we want */ - - blocknum = (iminor(inode) >> 4) & 0xF; - - /* look up the driver */ - - if (ieee1394_get_chardev(blocknum, &module, &file_ops) == 0) - return -ENODEV; - - /* redirect all subsequent requests to the driver's - own file_operations */ - file->f_op = file_ops; - - /* at this point BOTH ieee1394 and the task-specific driver have - an extra reference */ - - /* follow through with the open() */ - retval = file_ops->open(inode, file); - - if (retval == 0) { - - /* If the open() succeeded, then ieee1394 will be left - * with an extra module reference, so we discard it here. - * - * The task-specific driver still has the extra reference - * given to it by ieee1394_get_chardev(). This extra - * reference prevents the module from unloading while the - * file is open, and will be dropped by the VFS when the - * file is released. */ - - module_put(THIS_MODULE); - } else { - /* point the file's f_ops back to ieee1394. The VFS will then - decrement ieee1394's reference count immediately after this - function returns. */ - - file->f_op = &ieee1394_chardev_ops; - - /* If the open() failed, then we need to drop the extra - * reference we gave to the task-specific driver. */ - - module_put(module); - } - - return retval; -} - static int __init ieee1394_init(void) { devfs_mk_dir("ieee1394"); - if (register_chrdev(IEEE1394_MAJOR, "ieee1394", &ieee1394_chardev_ops)) { + + if (register_chrdev_region(IEEE1394_CORE_DEV, 256, "ieee1394")) { HPSB_ERR("unable to register character device major %d!\n", IEEE1394_MAJOR); return -ENODEV; } @@ -1184,7 +1009,6 @@ bus_register(&ieee1394_bus_type); - init_hpsb_highlevel(); init_csr(); if (!disable_nodemgr) @@ -1206,7 +1030,7 @@ kmem_cache_destroy(hpsb_packet_cache); - unregister_chrdev(IEEE1394_MAJOR, "ieee1394"); + unregister_chrdev_region(IEEE1394_CORE_DEV, 256); devfs_remove("ieee1394"); } @@ -1234,8 +1058,6 @@ EXPORT_SYMBOL(hpsb_selfid_complete); EXPORT_SYMBOL(hpsb_packet_sent); EXPORT_SYMBOL(hpsb_packet_received); -EXPORT_SYMBOL(ieee1394_register_chardev); -EXPORT_SYMBOL(ieee1394_unregister_chardev); /** ieee1394_transactions.c **/ EXPORT_SYMBOL(hpsb_get_tlabel); diff -Nru a/drivers/ieee1394/ieee1394_core.h b/drivers/ieee1394/ieee1394_core.h --- a/drivers/ieee1394/ieee1394_core.h Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/ieee1394_core.h Thu Jan 15 21:41:53 2004 @@ -176,9 +176,9 @@ * task-specific interfaces (raw1394, video1394, dv1394, etc) in * blocks of 16. * - * The core ieee1394.o modules handles the initial open() for all - * character devices on major 171; it then dispatches to the - * appropriate task-specific driver. + * The core ieee1394.o module allocates the device number region + * 171:0-255, the various drivers must then cdev_add() their cdev + * objects to handle their respective sub-regions. * * Minor device number block allocations: * @@ -199,29 +199,19 @@ #define IEEE1394_MINOR_BLOCK_AMDTP 3 #define IEEE1394_MINOR_BLOCK_EXPERIMENTAL 15 +#define IEEE1394_CORE_DEV MKDEV(IEEE1394_MAJOR, 0) +#define IEEE1394_RAW1394_DEV MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_RAW1394 * 16) +#define IEEE1394_VIDEO1394_DEV MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_VIDEO1394 * 16) +#define IEEE1394_DV1394_DEV MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16) +#define IEEE1394_AMDTP_DEV MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_AMDTP * 16) +#define IEEE1394_EXPERIMENTAL_DEV MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_EXPERIMENTAL * 16) + /* return the index (within a minor number block) of a file */ static inline unsigned char ieee1394_file_to_instance(struct file *file) { - unsigned char minor = iminor(file->f_dentry->d_inode); - - /* return lower 4 bits */ - return minor & 0xF; + return file->f_dentry->d_inode->i_cindex; } -/* - * Task-specific drivers should call ieee1394_register_chardev() to - * request a block of 16 minor numbers. - * - * Returns 0 if the request was successful, -EBUSY if the block was - * already taken. - */ - -int ieee1394_register_chardev(int blocknum, /* 0-15 */ - struct module *module, /* THIS_MODULE */ - struct file_operations *file_ops); - -/* release a block of minor numbers */ -void ieee1394_unregister_chardev(int blocknum); /* Our sysfs bus entry */ extern struct bus_type ieee1394_bus_type; diff -Nru a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c --- a/drivers/ieee1394/ohci1394.c Thu Jan 15 21:41:54 2004 +++ b/drivers/ieee1394/ohci1394.c Thu Jan 15 21:41:54 2004 @@ -161,7 +161,7 @@ printk(level "%s: fw-host%d: " fmt "\n" , OHCI1394_DRIVER_NAME, card , ## args) static char version[] __devinitdata = - "$Rev: 1087 $ Ben Collins "; + "$Rev: 1097 $ Ben Collins "; /* Module Parameters */ static int phys_dma = 1; @@ -174,6 +174,7 @@ static int alloc_dma_rcv_ctx(struct ti_ohci *ohci, struct dma_rcv_ctx *d, enum context_type type, int ctx, int num_desc, int buf_size, int split_buf_size, int context_base); +static void stop_dma_rcv_ctx(struct dma_rcv_ctx *d); static void free_dma_rcv_ctx(struct dma_rcv_ctx *d); static int alloc_dma_trm_ctx(struct ti_ohci *ohci, struct dma_trm_ctx *d, @@ -358,7 +359,7 @@ reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_softReset); for (i = 0; i < OHCI_LOOP_COUNT; i++) { - if (!reg_read(ohci, OHCI1394_HCControlSet) & OHCI1394_HCControl_softReset) + if (!(reg_read(ohci, OHCI1394_HCControlSet) & OHCI1394_HCControl_softReset)) break; mdelay(1); } @@ -1077,6 +1078,7 @@ DBGMSG(ohci->id, "Listening disabled on channel %d", arg); if (ohci->ir_legacy_channels == 0) { + stop_dma_rcv_ctx(&ohci->ir_legacy_context); free_dma_rcv_ctx(&ohci->ir_legacy_context); DBGMSG(ohci->id, "ISO receive legacy context deactivated"); } @@ -2249,6 +2251,14 @@ if (!event) return IRQ_NONE; + /* If event is ~(u32)0 cardbus card was ejected. In this case + * we just return, and clean up in the ohci1394_pci_remove + * function. */ + if (event == ~(u32) 0) { + DBGMSG(ohci->id, "Device removed."); + return IRQ_NONE; + } + DBGMSG(ohci->id, "IntEvent: %08x", event); if (event & OHCI1394_unrecoverableError) { @@ -2811,15 +2821,8 @@ spin_unlock_irqrestore(&d->lock, flags); } -static void free_dma_rcv_ctx(struct dma_rcv_ctx *d) +static void stop_dma_rcv_ctx(struct dma_rcv_ctx *d) { - int i; - - if (d->ohci == NULL) - return; - - DBGMSG(d->ohci->id, "Freeing dma_rcv_ctx %d", d->ctx); - if (d->ctrlClear) { ohci1394_stop_context(d->ohci, d->ctrlClear, NULL); @@ -2831,6 +2834,17 @@ tasklet_kill(&d->task); } } +} + + +static void free_dma_rcv_ctx(struct dma_rcv_ctx *d) +{ + int i; + + if (d->ohci == NULL) + return; + + DBGMSG(d->ohci->id, "Freeing dma_rcv_ctx %d", d->ctx); if (d->buf_cpu) { for (i=0; inum_desc; i++) @@ -2982,19 +2996,6 @@ DBGMSG(d->ohci->id, "Freeing dma_trm_ctx %d", d->ctx); - if (d->ctrlClear) { - ohci1394_stop_context(d->ohci, d->ctrlClear, NULL); - - if (d->type == DMA_CTX_ISO) { - /* disable interrupts */ - reg_write(d->ohci, OHCI1394_IsoXmitIntMaskClear, 1 << d->ctx); - ohci1394_unregister_iso_tasklet(d->ohci, - &d->ohci->it_legacy_tasklet); - } else { - tasklet_kill(&d->task); - } - } - if (d->prg_cpu) { for (i=0; inum_desc; i++) if (d->prg_cpu[i] && d->prg_bus[i]) { @@ -3511,6 +3512,8 @@ free_irq(ohci->dev->irq, ohci); case OHCI_INIT_HAVE_TXRX_BUFFERS__MAYBE: + /* The ohci_soft_reset() stops all DMA contexts, so we + * dont need to do this. */ /* Free AR dma */ free_dma_rcv_ctx(&ohci->ar_req_context); free_dma_rcv_ctx(&ohci->ar_resp_context); diff -Nru a/drivers/ieee1394/oui.db b/drivers/ieee1394/oui.db --- a/drivers/ieee1394/oui.db Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/oui.db Thu Jan 15 21:41:53 2004 @@ -108,7 +108,7 @@ 00006B SILICON GRAPHICS INC./MIPS 00006D CRAY COMMUNICATIONS, LTD. 00006E ARTISOFT, INC. -00006F MADGE NETWORKS LTD. +00006F Madge Ltd. 000070 HCL LIMITED 000071 ADRA SYSTEMS INC. 000072 MINIWARE TECHNOLOGY @@ -137,7 +137,7 @@ 000089 CAYMAN SYSTEMS INC. 00008A DATAHOUSE INFORMATION SYSTEMS 00008B INFOTRON -00008C ALLOY COMPUTER PRODUCTS, INC. +00008C Alloy Computer Products (Australia) Pty Ltd 00008D VERDIX CORPORATION 00008E SOLBOURNE COMPUTER, INC. 00008F RAYTHEON COMPANY @@ -190,7 +190,7 @@ 0000BE THE NTI GROUP 0000BF SYMMETRIC COMPUTER SYSTEMS 0000C0 WESTERN DIGITAL CORPORATION -0000C1 Madge Networks Ltd. +0000C1 Madge Ltd. 0000C2 INFORMATION PRESENTATION TECH. 0000C3 HARRIS CORP COMPUTER SYS DIV 0000C4 WATERS DIV. OF MILLIPORE @@ -202,7 +202,7 @@ 0000CA APPLITEK 0000CB COMPU-SHACK ELECTRONIC GMBH 0000CC DENSAN CO., LTD. -0000CD Centrecom Systems, Ltd. +0000CD Allied Telesyn Research Ltd. 0000CE MEGADATA CORP. 0000CF HAYES MICROCOMPUTER PRODUCTS 0000D0 DEVELCON ELECTRONICS LTD. @@ -271,7 +271,7 @@ 000110 Gotham Networks 000111 iDigm Inc. 000112 Shark Multimedia Inc. -000113 OLYMPUS OPTICAL CO., LTD. +000113 OLYMPUS CORPORATION 000114 KANDA TSUSHIN KOGYO CO., LTD. 000115 EXTRATECH CORPORATION 000116 Netspect Technologies, Inc. @@ -345,7 +345,7 @@ 00015A Digital Video Broadcasting 00015B ITALTEL S.p.A/RF-UP-I 00015C CADANT INC. -00015D Pirus Networks +00015D Sun Microsystems, Inc 00015E BEST TECHNOLOGY CO., LTD. 00015F DIGITAL DESIGN GmbH 000160 ELMEX Co., LTD. @@ -361,7 +361,7 @@ 00016A ALITEC 00016B LightChip, Inc. 00016C FOXCONN -00016D Triton Network Systems +00016D CarrierComm Inc. 00016E Conklin Corporation 00016F HAITAI ELECTRONICS CO., LTD. 000170 ESE Embedded System Engineer'g @@ -445,7 +445,7 @@ 0001BE Gigalink Co., Ltd. 0001BF Teleforce Co., Ltd. 0001C0 CompuLab, Ltd. -0001C1 Exbit Technology +0001C1 Vitesse Semiconductor Corporation 0001C2 ARK Research Corp. 0001C3 Acromag, Inc. 0001C4 NeoWave, Inc. @@ -495,6 +495,7 @@ 0001EF Camtel Technology Corp. 0001F0 Tridium, Inc. 0001F1 Innovative Concepts, Inc. +0001F2 Mark of the Unicorn, Inc. 0001F3 QPS, Inc. 0001F4 Enterasys Networks 0001F5 ERIM S.A. @@ -515,6 +516,7 @@ 000204 Bodmann Industries Elektronik GmbH 000205 Hitachi Denshi, Ltd. 000206 Telital R&D Denmark A/S +000207 VisionGlobal Network Corp. 000208 Unify Networks, Inc. 000209 Shenzhen SED Information Technology Co., Ltd. 00020A Gefran Spa @@ -579,7 +581,7 @@ 000245 Lampus Co, Ltd. 000246 All-Win Tech Co., Ltd. 000247 Great Dragon Information Technology (Group) Co., Ltd. -000248 Pila GmbH & Co. +000248 Pilz GmbH & Co. 000249 Aviv Infocom Co, Ltd. 00024A Cisco Systems, Inc. 00024B Cisco Systems, Inc. @@ -600,6 +602,7 @@ 00025A Catena Networks 00025B Cambridge Silicon Radio 00025C SCI Systems (Kunshan) Co., Ltd. +00025D Calix Networks 00025E High Technology Ltd 00025F Nortel Networks 000260 Accordion Networks, Inc. @@ -635,7 +638,7 @@ 00027E Cisco Systems, Inc. 00027F ask-technologies.com 000280 Mu Net, Inc. -000281 Red-M (Communications) Ltd. +000281 Madge Ltd. 000282 ViaClix, Inc. 000283 Spectrum Controls, Inc. 000284 Alstom T&D P&C @@ -662,6 +665,7 @@ 000299 Apex, Inc. 00029A Storage Apps 00029B Kreatel Communications AB +00029C 3COM 00029D Merix Corp. 00029E Information Equipment Co., Ltd. 00029F L-3 Communication Aviation Recorders @@ -678,7 +682,7 @@ 0002AA PLcom Co., Ltd. 0002AB CTC Union Technologies Co., Ltd. 0002AC 3PAR data -0002AD Asahi Optical Co., Ltd. +0002AD Pentax Corpotation 0002AE Scannex Electronics Ltd. 0002AF TeleCruz Technology, Inc. 0002B0 Hokubu Communication & Industrial Co., Ltd. @@ -740,7 +744,7 @@ 0002E8 E.D.&A. 0002E9 CS Systemes De Securite - C3S 0002EA Videonics, Inc. -0002EB Easent Communications +0002EB Pico Communications 0002EC Maschoff Design Engineering 0002ED DXO Telecom Co., Ltd. 0002EE Nokia Danmark A/S @@ -760,7 +764,7 @@ 0002FC Cisco Systems, Inc. 0002FD Cisco Systems, Inc. 0002FE Viditec, Inc. -0002FF Handan Broad InfoCom +0002FF Handan BroadInfoCom 000300 NetContinuum, Inc. 000301 Avantas Networks Corporation 000302 Oasys Telecom, Inc. @@ -776,7 +780,7 @@ 00030C Telesoft Technologies Ltd. 00030D Uniwill Computer Corp. 00030E Core Communications Co., Ltd. -00030F Legend Digital China Ltd. +00030F Digital China (Shanghai) Networks Ltd. 000310 Link Evolution Corp. 000311 Micro Technology Co., Ltd. 000312 TR-Systemtechnik GmbH @@ -797,7 +801,7 @@ 000321 Reco Research Co., Ltd. 000322 IDIS Co., Ltd. 000323 Cornet Technology, Inc. -000324 Tottori SANYO Electric Co., Ltd. +000324 SANYO Multimedia Tottori Co., Ltd. 000325 Arima Computer Corp. 000326 Iwasaki Information Systems Co., Ltd. 000327 ACT'L @@ -851,12 +855,12 @@ 000357 Intervoice-Brite, Inc. 000358 iCable System Co., Ltd. 000359 DigitalSis -00035A Phototron Limited +00035A Photron Limited 00035B BridgeWave Communications 00035C Saint Song Corp. 00035D Bosung Hi-Net Co., Ltd. 00035E Metropolitan Area Networks, Inc. -00035F Schuehle Mess - und. Kontrollsysteme +00035F Prueftechnik Condition Monitoring GmbH & Co. KG 000360 PAC Interactive Technology, Inc. 000361 Widcomm, Inc. 000362 Vodtel Communications, Inc. @@ -889,6 +893,7 @@ 00037D Stellcom 00037E PORTech Communications, Inc. 00037F Atheros Communications, Inc. +000380 SSH Communications Security Corp. 000381 Ingenico International 000382 A-One Co., Ltd. 000383 Metera Networks, Inc. @@ -916,7 +921,7 @@ 00039A nSine, Ltd. 00039B NetChip Technology, Inc. 00039C OptiMight Communications, Inc. -00039D Acer Communications & Multimedia, Inc. +00039D BENQ CORPORATION 00039E Tera System Co., Ltd. 00039F Cisco Systems, Inc. 0003A0 Cisco Systems, Inc. @@ -1063,7 +1068,7 @@ 00042E Netous Technologies, Ltd. 00042F International Communications Products, Inc. 000430 Netgem -000431 Play Industries +000431 GlobalStreams, Inc. 000432 Voyetra Turtle Beach, Inc. 000433 Cyberboard A/S 000434 Accelent Systems, Inc. @@ -1082,7 +1087,7 @@ 000441 Half Dome Systems, Inc. 000442 NACT 000443 Agilent Technologies, Inc. -000444 Wireless Home +000444 Western Multiplex Corporation 000445 LMS Skalar Instruments GmbH 000446 CYZENTECH Co., Ltd. 000447 Acrowave Systems Co., Ltd. @@ -1097,7 +1102,7 @@ 000450 DMD Computers SRL 000451 Medrad, Inc. 000452 RocketLogix, Inc. -000453 Yotta Yotta, Inc. +000453 YottaYotta, Inc. 000454 Quadriga UK 000455 ANTARA.net 000456 PipingHot Networks @@ -1108,16 +1113,16 @@ 00045B Techsan Electronics Co., Ltd. 00045C Mobiwave Pte Ltd 00045D BEKA Elektronik -00045E Poly Trax Information Technology AG +00045E PolyTrax Information Technology AG 00045F Evalue Technology, Inc. 000460 Knilink Technology, Inc. 000461 EPOX Computer Co., Ltd. 000462 DAKOS Data & Communication Co., Ltd. -000463 Philips Communication Security & Imaging +000463 Bosch Security Systems 000464 Fantasma Networks, Inc. -000465 ist isdn support tecknik GmbH +000465 i.s.t isdn-support technik GmbH 000466 ARMITEL Co. -000467 Wuhan Research Institute +000467 Wuhan Research Institute of MII 000468 Vivity, Inc. 000469 Innocom, Inc. 00046A Navini Networks @@ -1133,7 +1138,7 @@ 000474 LEGRAND 000475 3 Com Corporation 000476 3 Com Corporation -000477 e-Appliance Corp. +000477 Scalant Systems, Inc. 000478 G. Star Technology Corporation 000479 Radius Co., Ltd. 00047A AXXESSIT ASA @@ -1144,7 +1149,7 @@ 00047F Chr. Mayr GmbH & Co. KG 000480 Foundry Networks, Inc. 000481 Econolite Control Products, Inc. -000482 MediaLogic Corp. +000482 Medialogic Corp. 000483 Deltron Technology, Inc. 000484 Amann GmbH 000485 PicoLight @@ -1195,7 +1200,7 @@ 0004B3 Videotek, Inc. 0004B4 CIAC 0004B5 Equitrac Corporation -0004B6 Tellumat (Pty) Ltd. +0004B6 Stratex Networks, Inc. 0004B7 AMB i.t. Holding 0004B8 Kumahira Co., Ltd. 0004B9 S.I. Soubou, Inc. @@ -1204,20 +1209,20 @@ 0004BC Giantec, Inc. 0004BD Motorola BCS 0004BE OptXCon, Inc. -0004BF Versa Logic Corp. +0004BF VersaLogic Corp. 0004C0 Cisco Systems, Inc. 0004C1 Cisco Systems, Inc. 0004C2 Magnipix, Inc. 0004C3 CASTOR Informatique -0004C4 Allen & Health +0004C4 Allen & Heath Limited 0004C5 ASE Technologies, USA 0004C6 Yamaha Motor Co., Ltd. 0004C7 NetMount -0004C8 LIBA Maschinefabrik GmbH +0004C8 LIBA Maschinenfabrik GmbH 0004C9 Micro Electron Co., Ltd. 0004CA FreeMs Corp. 0004CB Tdsoft Communication, Ltd. -0004CC Peek Traffic BV. +0004CC Peek Traffic B.V. 0004CD Informedia Research Group 0004CE Patria Ailon 0004CF Seagate Technology @@ -1286,7 +1291,7 @@ 00050E 3ware, Inc. 00050F Tanaka S/S Ltd. 000510 Infinite Shanghai Communication Terminals Ltd. -000511 Complementaty Technologies Ltd +000511 Complementary Technologies Ltd 000512 MeshNetworks, Inc. 000513 VTLinx Multimedia Systems, Inc. 000514 KDT Systems Co., Ltd. @@ -1299,7 +1304,7 @@ 00051B Magic Control Technology Corporation 00051C Xnet Technology Corp. 00051D Airocon, Inc. -00051E Rhapsody Networks +00051E Brocade Communications Systems, Inc. 00051F Taijin Media Co., Ltd. 000520 Smartronix, Inc. 000521 Control Microsystems @@ -1339,7 +1344,7 @@ 000543 IQ Wireless GmbH 000544 Valley Technologies, Inc. 000545 Internet Photonics -000546 KDD Network Systems Co., Ltd. +000546 K-Solutions Inc. 000547 Starent Networks 000548 Disco Corporation 000549 Salira Optical Network Systems @@ -1374,6 +1379,7 @@ 000567 Etymonic Design, Inc. 000568 Piltofish Networks AB 000569 VMWARE, Inc. +00056A Heuft Systemtechnik GmbH 00056B C.P. Technology Co., Ltd. 00056C Hung Chang Co., Ltd. 00056D Pacific Corporation @@ -1408,18 +1414,18 @@ 00058B IPmental, Inc. 00058C Opentech Inc. 00058D Lynx Photonic Networks, Inc. -00058E Ahead Communications System GmbH +00058E Flextronics International GmbH & Co. Nfg. KG 00058F CLCsoft co. -000590 Ascom Business Systems +000590 Swissvoice Ltd. 000591 Active Silicon Ltd. -000592 Pultex Corp. +000592 Pultek Corp. 000593 Grammar Engine Inc. 000594 IXXAT Automation GmbH 000595 Alesis Corporation 000596 Genotech Co., Ltd. 000597 Eagle Traffic Control Systems 000598 CRONOS S.r.l. -000599 PEI Electronics, Inc. +000599 DRS Test and Energy Management or DRS-TEM 00059A Cisco Systems, Inc. 00059B Cisco Systems, Inc. 00059C Kleinknecht GmbH, Ing. Buero @@ -1436,7 +1442,7 @@ 0005A7 Hyperchip, Inc. 0005A8 WYLE ELECTRONICS 0005A9 Princeton Networks, Inc. -0005AA Moore Industries Int. +0005AA Moore Industries International Inc. 0005AB Cyber Fone, Inc. 0005AC Northern Digital, Inc. 0005AD Topspin Communications, Inc. @@ -1453,13 +1459,14 @@ 0005B8 Electronic Design Associates, Inc. 0005B9 Airvana, Inc. 0005BA Area Netwoeks, Inc. +0005BB Myspace AB 0005BC Resorsys Ltd. 0005BD ROAX BV 0005BE Kongsberg Seatex AS 0005BF JustEzy Technology, Inc. 0005C0 Digital Network Alacarte Co., Ltd. 0005C1 A-Kyung Motion, Inc. -0005C2 Digital Archway, Inc. +0005C2 Soronti, Inc. 0005C3 Pacific Instruments, Inc. 0005C4 Telect, Inc. 0005C5 Flaga HF @@ -1470,13 +1477,13 @@ 0005CA Hitron Technology, Inc. 0005CB ROIS Technologies, Inc. 0005CC Sumtel Communications, Inc. -0005CD Nippon Columbia +0005CD Denon, Ltd. 0005CE Prolink Microsystems Corporation 0005CF Thunder River Technologies, Inc. 0005D0 Solinet Systems 0005D1 Metavector Technologies 0005D2 DAP Technologies -0005D3 CAC, Inc. +0005D3 eProduction Solutions, Inc. 0005D4 FutureSmart Networks, Inc. 0005D5 Speedcom Wireless 0005D6 Titan Wireless @@ -1496,27 +1503,27 @@ 0005E4 Red Lion Controls L.P. 0005E5 Renishaw PLC 0005E6 Egenera, Inc. -0005E7 Netrake +0005E7 Netrake Corp. 0005E8 TurboWave, Inc. -0005E9 Unicess Networks, Inc. -0005EA Viewcast Corporation +0005E9 Unicess Network, Inc. +0005EA Rednix 0005EB Blue Ridge Networks, Inc. 0005EC Mosaic Systems Inc. -0005ED Technikum Joanneaum GmbH +0005ED Technikum Joanneum GmbH 0005EE BEWATOR Group 0005EF ADOIR Digital Technology 0005F0 SATEC -0005F1 VRcom, Inc. +0005F1 Vrcom, Inc. 0005F2 Power R, Inc. 0005F3 Weboyn -0005F4 SystemBase Co., Ltd. +0005F4 System Base Co., Ltd. 0005F5 OYO Geospace Corp. 0005F6 Young Chang Co. Ltd. 0005F7 Analog Devices, Inc. 0005F8 Real Time Access, Inc. -0005F9 Diva Systems +0005F9 TOA Corporation 0005FA IPOptical, Inc. -0005FB Sharegate +0005FB ShareGate, Inc. 0005FC Schenck Pegasus Corp. 0005FD PacketLight Networks Ltd. 0005FE Traficon N.V. @@ -1524,23 +1531,23 @@ 000600 Tokyo Electronic Industry Co., Ltd. 000601 Otanikeiki Co., Ltd. 000602 Cirkitech Electronics Co. -000603 Baker Hughes +000603 Baker Hughes Inc. 000604 @Track Communications, Inc. 000605 Inncom International, Inc. -000606 RapidWan, Inc. -000607 Omni-Directional Control Technology Inc. +000606 RapidWAN, Inc. +000607 Omni Directional Control Technology Inc. 000608 At-Sky SAS 000609 Crossport Systems -00060A Blue2space.com +00060A Blue2space 00060B Paceline Systems Corporation 00060C Melco Industries, Inc. 00060D Wave7 Optics -00060E IGSYS Systems, Inc. +00060E IGYS Systems, Inc. 00060F Narad Networks Inc 000610 Abeona Networks Inc 000611 Zeus Wireless, Inc. 000612 Accusys, Inc. -000613 Kawasaki Steel Corporation +000613 Kawasaki Microelectronics Incorporated 000614 Prism Holdings 000615 Kimoto Electric Co., Ltd. 000616 Tel Net Co., Ltd. @@ -1557,7 +1564,7 @@ 000621 Hinox, Co., Ltd. 000622 Chung Fu Chen Yeh Enterprise Corp. 000623 MGE UPS Systems France -000624 Gentner Communications +000624 Gentner Communications Corp. 000625 The Linksys Group, Inc. 000626 MWE GmbH 000627 Uniwide Technologies, Inc. @@ -1580,7 +1587,7 @@ 000638 Sungjin C&C Co., Ltd. 000639 Newtec 00063A Dura Micro, Inc. -00063B Lineo Canada Corp. +00063B Arcturus Networks, Inc. 00063C NMI Electronics Ltd 00063D Microwave Data Systems Inc. 00063E Opthos Inc. @@ -1622,7 +1629,7 @@ 000662 MBM Technology Ltd. 000663 Human Technology Co., Ltd. 000664 Fostex Corporation -000665 Summy Gikem, Inc. +000665 Sunny Giken, Inc. 000666 Roving Networks 000667 Tripp Lite 000668 Vicon Industries Inc. @@ -1639,7 +1646,7 @@ 000673 Optelecom, Inc. 000674 Spectrum Control, Inc. 000675 Banderacom, Inc. -000676 Novra Technologies, Inc. +000676 Novra Technologies Inc. 000677 SICK AG 000678 Marantz Japan, Inc. 000679 Konami Corporation @@ -1647,18 +1654,2125 @@ 00067B Toplink C&C Corporation 00067C CISCO SYSTEMS, INC. 00067D Takasago Ltd. +00067E WinCom Systems, Inc. +00067F Rearden Steel Technologies +000680 Card Access, Inc. +000681 Goepel Electronic GmbH +000682 Convedia +000683 Bravara Communications, Inc. +000684 Biacore AB +000685 NetNearU Corporation +000686 ZARDCOM Co., Ltd. +000687 Omnitron Systems Technology, Inc. +000688 Telways Communication Co., Ltd. +000689 yLez Technologies Pte Ltd +00068A NeuronNet Co. Ltd. R&D Center +00068B AirRunner Technologies, Inc. +00068C 3Com Corporation +00068D SANgate Systems +00068E HID Corporation +00068F Telemonitor, Inc. +000690 Euracom Communication GmbH +000691 PT Inovacao +000692 Intruvert Networks, Inc. +000693 Flexus Computer Technology, Inc. +000694 Mobillian Corporation +000695 Ensure Technologies, Inc. +000696 Advent Networks +000697 R & D Center +000698 egnite Software GmbH +000699 Vida Design Co. +00069A e & Tel +00069B AVT Audio Video Technologies GmbH +00069C Transmode Systems AB +00069D Petards Mobile Intelligence +00069E UNIQA, Inc. +00069F Kuokoa Networks +0006A0 Mx Imaging +0006A1 Celsian Technologies, Inc. +0006A2 Microtune, Inc. +0006A3 Bitran Corporation +0006A4 INNOWELL Corp. +0006A5 PINON Corp. +0006A6 Artistic Licence (UK) Ltd +0006A7 Primarion +0006A8 KC Technology, Inc. +0006A9 Universal Instruments Corp. +0006AA Miltope Corporation +0006AB W-Link Systems, Inc. +0006AC Intersoft Co. +0006AD KB Electronics Ltd. +0006AE Himachal Futuristic Communications Ltd +0006B0 Comtech EF Data Corp. +0006B1 Sonicwall +0006B2 Linxtek Co. +0006B3 Diagraph Corporation +0006B4 Vorne Industries, Inc. +0006B5 Luminent, Inc. +0006B6 Nir-Or Israel Ltd. +0006B7 TELEM GmbH +0006B8 Bandspeed Pty Ltd +0006B9 A5TEK Corp. +0006BA Westwave Communications +0006BB ATI Technologies Inc. +0006BC Macrolink, Inc. +0006BD BNTECHNOLOGY Co., Ltd. +0006BE Baumer Optronic GmbH +0006BF Accella Technologies Co., Ltd. +0006C0 United Internetworks, Inc. 0006C1 CISCO SYSTEMS, INC. +0006C2 Smartmatic Corporation +0006C3 Schindler Elevators Ltd. +0006C4 Piolink Inc. +0006C5 INNOVI Technologies Limited +0006C6 lesswire AG +0006C7 RFNET Technologies Pte Ltd (S) +0006C8 Sumitomo Metal Micro Devices, Inc. +0006C9 Technical Marketing Research, Inc. +0006CA American Computer & Digital Components, Inc. (ACDC) +0006CB Jotron Electronics A/S +0006CC JMI Electronics Co., Ltd. +0006CD CreoScitex Corporation Ltd. +0006CE DATENO +0006CF Thales Avionics In-Flight Systems, LLC +0006D0 Elgar Electronics Corp. +0006D1 Tahoe Networks, Inc. +0006D2 Tundra Semiconductor Corp. +0006D3 Alpha Telecom, Inc. U.S.A. +0006D4 Interactive Objects, Inc. +0006D5 Diamond Systems Corp. +0006D6 Cisco Systems, Inc. +0006D7 Cisco Systems, Inc. +0006D8 Maple Optical Systems +0006D9 IPM-Net S.p.A. +0006DA ITRAN Communications Ltd. +0006DB ICHIPS Co., Ltd. +0006DC Syabas Technology (Amquest) +0006DD AT & T Laboratories - Cambridge Ltd +0006DE Flash Technology +0006DF AIDONIC Corporation +0006E0 MAT Co., Ltd. +0006E1 Techno Trade s.a +0006E2 Ceemax Technology Co., Ltd. +0006E3 Quantitative Imaging Corporation +0006E4 Citel Technologies Ltd. +0006E5 Fujian Newland Computer Ltd. Co. +0006E6 DongYang Telecom Co., Ltd. +0006E7 Bit Blitz Communications Inc. +0006E8 Optical Network Testing, Inc. +0006E9 Intime Corp. +0006EA ELZET80 Mikrocomputer GmbH&Co. KG +0006EB Global Data +0006EC M/A COM Private Radio System Inc. +0006ED Inara Networks +0006EE Shenyang Neu-era Information & Technology Stock Co., Ltd +0006EF Maxxan Systems, Inc. +0006F0 Digeo, Inc. +0006F1 Optillion +0006F2 Platys Communications +0006F3 AcceLight Networks +0006F4 Prime Electronics & Satellitics Inc. +0006F9 Mitsui Zosen Systems Research Inc. +0006FA IP SQUARE Co, Ltd. +0006FB Hitachi Printing Solutions, Ltd. +0006FC Fnet Co., Ltd. +0006FD Comjet Information Systems Corp. +0006FE Celion Networks, Inc. +0006FF Sheba Systems Co., Ltd. +000700 Zettamedia Korea 000701 RACAL-DATACOM +000702 Varian Medical Systems +000703 CSEE Transport +000705 Endress & Hauser GmbH & Co +000706 Sanritz Corporation +000707 Interalia Inc. +000708 Bitrage Inc. +000709 Westerstrand Urfabrik AB +00070A Unicom Automation Co., Ltd. +00070B Octal, SA +00070C SVA-Intrusion.com Co. Ltd. +00070D Cisco Systems Inc. +00070E Cisco Systems Inc. +00070F Fujant, Inc. +000710 Adax, Inc. +000711 Acterna +000712 JAL Information Technology +000713 IP One, Inc. +000714 Brightcom +000715 General Research of Electronics, Inc. +000716 J & S Marine Ltd. +000717 Wieland Electric GmbH +000718 iCanTek Co., Ltd. +000719 Mobiis Co., Ltd. +00071A Finedigital Inc. +00071B Position Technology Inc. +00071C AT&T Fixed Wireless Services +00071D Satelsa Sistemas Y Aplicaciones De Telecomunicaciones, S.A. +00071E Tri-M Engineering / Nupak Dev. Corp. +00071F European Systems Integration +000720 Trutzschler GmbH & Co. KG +000721 Formac Elektronik GmbH +000722 Nielsen Media Research +000723 ELCON Systemtechnik GmbH +000724 Telemax Co., Ltd. +000725 Bematech International Corp. +000727 Zi Corporation (HK) Ltd. +000728 Neo Telecom +000729 Kistler Instrumente AG +00072A Innovance Networks +00072B Jung Myung Telecom Co., Ltd. +00072C Fabricom +00072D CNSystems +00072E North Node AB +00072F Instransa, Inc. +000730 Hutchison OPTEL Telecom Technology Co., Ltd. +000731 Spiricon, Inc. +000732 AAEON Technology Inc. +000733 DANCONTROL Engineering +000734 ONStor, Inc. +000735 Flarion Technologies, Inc. +000736 Data Video Technologies Co., Ltd. +000737 Soriya Co. Ltd. +000738 Young Technology Co., Ltd. +000739 Motion Media Technology Ltd. +00073A Inventel Systemes +00073B Tenovis GmbH & Co KG +00073C Telecom Design +00073D Nanjing Postel Telecommunications Co., Ltd. +00073E China Great-Wall Computer Shenzhen Co., Ltd. +00073F Woojyun Systec Co., Ltd. +000740 Melco Inc. +000741 Sierra Automated Systems +000742 Current Technologies +000743 Chelsio Communications +000744 Unico, Inc. +000745 Radlan Computer Communications Ltd. +000746 Interlink BT, LLC +000747 Mecalc +000748 The Imaging Source Europe +000749 CENiX Inc. +00074A Carl Valentin GmbH +00074B Daihen Corporation +00074C Beicom Inc. +00074D Zebra Technologies Corp. +00074E Naughty boy co., Ltd. +00074F Cisco Systems, Inc. +000750 Cisco Systems, Inc. +000751 m.u.t. - GmbH +000752 Rhythm Watch Co., Ltd. +000753 Beijing Qxcomm Technology Co., Ltd. +000754 Xyterra Computing, Inc. +000755 Lafon SA +000756 Juyoung Telecom +000757 Topcall International AG +000758 Dragonwave +000759 Boris Manufacturing Corp. +00075A Air Products and Chemicals, Inc. +00075B Gibson Guitars +00075C ENCAD, Inc. +00075D Celleritas Inc. +00075E Pulsar Technologies, Inc. +00075F VCS Video Communication Systems AG +000760 TOMIS Information & Telecom Corp. +000761 Logitech SA +000762 Group Sense Limited +000763 Sunniwell Cyber Tech. Co., Ltd. +000764 YoungWoo Telecom Co. Ltd. +000765 Jade Quantum Technologies, Inc. +000766 Chou Chin Industrial Co., Ltd. +000767 Yuxing Electronics Company Limited +000768 Danfoss A/S +000769 Italiana Macchi SpA +00076A NEXTEYE Co., Ltd. +00076B Stralfors AB +00076C Daehanet, Inc. +00076D Flexlight Networks +00076E Sinetica Corporation Ltd. +00076F Synoptics Limited +000770 Locusnetworks Corporation +000771 Embedded System Corporation +000772 Alcatel Shanghai Bell Co., Ltd. +000773 Ascom Powerline Communications Ltd. +000774 GuangZhou Thinker Technology Co. Ltd. +000775 Valence Semiconductor, Inc. +000776 Federal APD +000777 Motah Ltd. +000778 GERSTEL GmbH & Co. KG +000779 Sungil Telecom Co., Ltd. +00077A Infoware System Co., Ltd. +00077B Millimetrix Broadband Networks +00077C OnTime Networks +00077E Elrest GmbH +00077F J Communications Co., Ltd. +000780 Bluegiga Technologies OY +000781 Itron Inc. +000782 Nauticus Networks, Inc. +000783 SynCom Network, Inc. +000784 Cisco Systems Inc. +000785 Cisco Systems Inc. +000786 Wireless Networks Inc. +000787 Idea System Co., Ltd. +000788 Clipcomm, Inc. +000789 Eastel Systems Corporation +00078A Mentor Data System Inc. +00078B Wegener Communications, Inc. +00078C Elektronikspecialisten i Borlange AB +00078D NetEngines Ltd. +00078E Garz & Friche GmbH +00078F Emkay Innovative Products +000790 Tri-M Technologies (s) Limited +000791 International Data Communications, Inc. +000792 Suetron Electronic GmbH +000794 Simple Devices, Inc. +000795 Elitegroup Computer System Co. (ECS) +000796 LSI Systems, Inc. +000797 Netpower Co., Ltd. +000798 Selea SRL +000799 Tipping Point Technologies, Inc. +00079A SmartSight Networks Inc. +00079B Aurora Networks +00079C Golden Electronics Technology Co., Ltd. +00079D Musashi Co., Ltd. +00079E Ilinx Co., Ltd. +00079F Action Digital Inc. +0007A0 e-Watch Inc. +0007A1 VIASYS Healthcare GmbH +0007A2 Opteon Corporation +0007A3 Ositis Software, Inc. +0007A4 GN Netcom Ltd. +0007A5 Y.D.K Co. Ltd. +0007A6 Home Automation, Inc. +0007A7 A-Z Inc. +0007A8 Haier Group Technologies Ltd. +0007A9 Novasonics +0007AA Quantum Data Inc. +0007AC Eolring +0007AD Pentacon GmbH Foto-und Feinwerktechnik +0007AE Layer N Networks +0007AF N-Tron Corp. +0007B0 Office Details, Inc. +0007B1 Equator Technologies +0007B2 Transaccess S.A. +0007B3 Cisco Systems Inc. +0007B4 Cisco Systems Inc. +0007B5 Any One Wireless Ltd. +0007B6 Telecom Technology Ltd. +0007B7 Samurai Ind. Prods Eletronicos Ltda +0007B8 American Predator Corp. +0007B9 Ginganet Corporation +0007BA Xebeo Communications, Inc. +0007BB Candera Inc. +0007BC Identix Inc. +0007BD Radionet Ltd. +0007BE DataLogic SpA +0007BF Armillaire Technologies, Inc. +0007C0 NetZerver Inc. +0007C1 Overture Networks, Inc. +0007C2 Netsys Telecom +0007C3 Cirpack +0007C4 JEAN Co. Ltd. +0007C5 Gcom, Inc. +0007C6 VDS Vosskuhler GmbH +0007C7 Synectics Systems Limited +0007C8 Brain21, Inc. +0007C9 Technol Seven Co., Ltd. +0007CA Creatix Polymedia Ges Fur Kommunikaitonssysteme +0007CB Freebox SA +0007CC Kaba Benzing GmbH +0007CD NMTEL Co., Ltd. +0007CE Cabletime Limited +0007CF Anoto AB +0007D0 Automat Engenharia de Automaoa Ltda. +0007D1 Spectrum Signal Processing Inc. +0007D2 Logopak Systeme +0007D3 Stork Digital Imaging B.V. +0007D4 Zhejiang Yutong Network Communication Co Ltd. +0007D5 3e Technologies Int;., Inc. +0007D6 Commil Ltd. +0007D7 Caporis Networks AG +0007D8 Hitron Systems Inc. +0007D9 Splicecom +0007DA Neuro Telecom Co., Ltd. +0007DB Kirana Networks, Inc. +0007DC Atek Co, Ltd. +0007DD Cradle Technologies +0007DE eCopilt AB +0007DF Vbrick Systems Inc. +0007E0 Palm Inc. +0007E1 WIS Communications Co. Ltd. +0007E2 Bitworks, Inc. +0007E3 Navcom Technology, Inc. +0007E4 SoftRadio Co., Ltd. +0007E5 Coup Corporation +0007E6 edgeflow Canada Inc. +0007E7 FreeWave Technologies +0007E8 St. Bernard Software +0007E9 Intel Corporation +0007EA Massana, Inc. +0007EB Cisco Systems Inc. +0007EC Cisco Systems Inc. +0007ED Altera Corporation +0007EE telco Informationssysteme GmbH +0007EF Lockheed Martin Tactical Systems +0007F0 LogiSync Corporation +0007F1 TeraBurst Networks Inc. +0007F2 IOA Corporation +0007F3 Think Engine Networks +0007F4 Eletex Co., Ltd. +0007F5 Bridgeco Co AG +0007F6 Qqest Software Systems +0007F7 Galtronics +0007F8 ITDevices, Inc. +0007F9 Phonetics, Inc. +0007FA ITT Co., Ltd. +0007FB Giga Stream UMTS Technologies GmbH +0007FC Adept Systems Inc. +0007FD LANergy Ltd. +0007FE Rigaku Corporation +0007FF Gluon Networks 000800 MULTITECH SYSTEMS, INC. +000801 HighSpeed Surfing Inc. +000802 Compaq Computer Corporation +000803 Cos Tron +000804 ICA Inc. +000805 Techno-Holon Corporation +000806 Raonet Systems, Inc. +000807 Access Devices Limited +000808 PPT Vision, Inc. +000809 Systemonic AG +00080A Espera-Werke GmbH +00080B Birka BPA Informationssystem AB +00080C VDA elettronica SrL +00080D Toshiba +00080E Motorola, BCS +00080F Proximion Fiber Optics AB +000810 Key Technology, Inc. +000811 VOIX Corporation +000812 GM-2 Corporation +000813 Diskbank, Inc. +000814 TIL Technologies +000815 CATS Co., Ltd. +000816 Bluetags A/S +000817 EmergeCore Networks LLC +000818 Pixelworks, Inc. +000819 Banksys +00081A Sanrad Intelligence Storage Communications (2000) Ltd. +00081B Windigo Systems +00081C @pos.com +00081D Ipsil, Incorporated +00081E Repeatit AB +00081F Pou Yuen Tech Corp. Ltd. +000820 Cisco Systems Inc. +000821 Cisco Systems Inc. +000822 InPro Comm +000823 Texa Corp. +000824 Promatek Industries Ltd. +000825 Acme Packet +000826 Colorado Med Tech +000827 Pirelli Cables & Systems +000828 Koei Engineering Ltd. +000829 Aval Nagasaki Corporation +00082A Powerwallz Network Security +00082B Wooksung Electronics, Inc. +00082C Homag AG +00082D Indus Teqsite Private Limited +00082E Multitone Electronics PLC +00084E DivergeNet, Inc. +00084F Qualstar Corporation +000850 Arizona Instrument Corp. +000851 Canadian Bank Note Company, Ltd. +000852 Davolink Co. Inc. +000853 Schleicher GmbH & Co. Relaiswerke KG +000854 Netronix, Inc. +000855 NASA-Goddard Space Flight Center +000856 Gamatronic Electronic Industries Ltd. +000857 Polaris Networks, Inc. +000858 Novatechnology Inc. +000859 ShenZhen Unitone Electronics Co., Ltd. +00085A IntiGate Inc. +00085B Hanbit Electronics Co., Ltd. +00085C Shanghai Dare Technologies Co. Ltd. +00085D Aastra +00085E PCO AG +00085F Picanol N.V. +000860 LodgeNet Entertainment Corp. +000861 SoftEnergy Co., Ltd. +000862 NEC Eluminant Technologies, Inc. +000863 Entrisphere Inc. +000864 Fasy S.p.A. +000865 JASCOM CO., LTD +000866 DSX Access Systems, Inc. +000867 Uptime Devices +000868 PurOptix +000869 Command-e Technology Co.,Ltd. +00086A Industrie Technik IPS GmbH +00086B MIPSYS +00086C Plasmon LMS +00086D Missouri FreeNet +00086E Hyglo AB +00086F Resources Computer Network Ltd. +000870 Rasvia Systems, Inc. +000871 NORTHDATA Co., Ltd. +000872 Sorenson Technologies, Inc. +000873 DAP Design B.V. +000874 Dell Computer Corp. +000875 Acorp Electronics Corp. +000876 SDSystem +000877 Liebert HIROSS S.p.A. +000878 Benchmark Storage Innovations +000879 CEM Corporation +00087A Wipotec GmbH +00087B RTX Telecom A/S +00087C Cisco Systems, Inc. +00087D Cisco Systems Inc. +00087E Bon Electro-Telecom Inc. +00087F SPAUN electronic GmbH & Co. KG +000880 BroadTel Canada Communications inc. +000881 DIGITAL HANDS CO.,LTD. +000882 SIGMA CORPORATION +000883 Hewlett-Packard Company +000884 Index Braille AB +000885 EMS Dr. Thomas Wuensche +000886 Hansung Teliann, Inc. +000887 Maschinenfabrik Reinhausen GmbH +000888 OULLIM Information Technology Inc,. +000889 Echostar Technologies Corp +00088A Minds@Work +00088B Tropic Networks Inc. +00088C Quanta Network Systems Inc. +00088D Sigma-Links Inc. +00088E Nihon Computer Co., Ltd. +00088F ADVANCED DIGITAL TECHNOLOGY +000890 AVILINKS SA +000891 Lyan Inc. +000892 EM Solutions +000894 InnoVISION Multimedia Ltd. +000895 DIRC Technologie GmbH & Co.KG +000896 Printronix, Inc. +000897 Quake Technologies +000898 Gigabit Optics Corporation +000899 Netbind, Inc. +00089A Alcatel Microelectronics +00089B ICP Electronics Inc. +00089C Elecs Industry Co., Ltd. +00089D UHD-Elektronik +00089E Beijing Enter-Net co.LTD +00089F EFM Networks +0008A0 Stotz Feinmesstechnik GmbH +0008A1 CNet Technology Inc. +0008A2 ADI Engineering, Inc. +0008A3 Cisco Systems +0008A4 Cisco Systems +0008A5 Peninsula Systems Inc. +0008A6 Multiware & Image Co., Ltd. +0008A7 iLogic Inc. +0008A8 Systec Co., Ltd. +0008A9 SangSang Technology, Inc. +0008AA KARAM +0008AB EnerLinx.com, Inc. +0008AD Toyo-Linx Co., Ltd. +0008AE Packetfront +0008AF Novatec Corporation +0008B0 BKtel communications GmbH +0008B1 ProQuent Systems +0008B2 SHENZHEN COMPASS TECHNOLOGY DEVELOPMENT CO.,LTD +0008B3 Fastwel +0008B4 SYSPOL +0008B5 TAI GUEN ENTERPRISE CO., LTD +0008B6 RouteFree, Inc. +0008B7 HIT Incorporated +0008B8 E.F. Johnson +0008B9 KAON MEDIA Co., Ltd. +0008BA Erskine Systems Ltd +0008BB NetExcell +0008BC Ilevo AB +0008BD TEPG-US +0008BE XENPAK MSA Group +0008BF Aptus Elektronik AB +0008C0 ASA SYSTEMS +0008C1 Avistar Communications Corporation +0008C2 Cisco Systems +0008C3 Contex A/S +0008C4 Hikari Co.,Ltd. +0008C5 Liontech Co., Ltd. +0008C6 Philips Consumer Communications 0008C7 COMPAQ COMPUTER CORPORATION +0008C8 Soneticom, Inc. +0008C9 TechniSat Digital GmbH +0008CA TwinHan Technology Co.,Ltd +0008CB Zeta Broadband Inc. +0008CC Remotec, Inc. +0008CD With-Net Inc +0008CF Nippon Koei Power Systems Co., Ltd. +0008D0 Musashi Engineering Co., LTD. +0008D1 KAREL INC. +0008D2 ZOOM Networks Inc. +0008D3 Hercules Technologies S.A. +0008D4 IneoQuest Technologies, Inc +0008D5 Vanguard Managed Solutions +0008D6 HASSNET Inc. +0008D7 HOW CORPORATION +0008D8 Dowkey Microwave +0008D9 Mitadenshi Co.,LTD +0008DA SofaWare Technologies Ltd. +0008DB Corrigent Systems +0008DC Wiznet +0008DD Telena Communications, Inc. +0008DE 3UP Systems +0008DF Alistel Inc. +0008E0 ATO Technology Ltd. +0008E1 Barix AG +0008E2 Cisco Systems +0008E3 Cisco Systems +0008E4 Envenergy Inc +0008E5 IDK Corporation +0008E6 Littlefeet +0008E7 SHI ControlSystems,Ltd. +0008E8 Excel Master Ltd. +0008E9 NextGig +0008EA Motion Control Engineering, Inc +0008EB ROMWin Co.,Ltd. +0008EC Zonu, Inc. +0008ED ST&T Instrument Corp. +0008EE Logic Product Development +0008EF DIBAL,S.A. +0008F0 Next Generation Systems, Inc. +0008F1 Voltaire +0008F2 C&S Technology +0008F3 WANY +0008F4 Bluetake Technology Co., Ltd. +0008F5 YESTECHNOLOGY Co.,Ltd. +0008F6 SUMITOMO ELECTRIC HIGHTECHS.co.,ltd. +0008F7 Hitachi Ltd, Semiconductor & Integrated Circuits Gr +0008F8 Guardall Ltd +0008F9 Padcom, Inc. +0008FA Karl E.Brinkmann GmbH +0008FB SonoSite, Inc. +0008FC Gigaphoton Inc. +0008FD BlueKorea Co., Ltd. +0008FE UNIK C&C Co.,Ltd. +0008FF Trilogy Broadcast (Holdings) Ltd +000900 TMT +000901 Shenzhen Shixuntong Information & Technoligy Co +000902 Redline Communications Inc. +000903 Panasas, Inc +000904 MONDIAL electronic +000905 iTEC Technologies Ltd. +000906 Esteem Networks +000907 Chrysalis Development +000908 VTech Technology Corp. +000909 Telenor Connect A/S +00090A SnedFar Technology Co., Ltd. +00090B MTL Instruments PLC +00090C Mayekawa Mfg. Co. Ltd. +00090D LEADER ELECTRONICS CORP. +00090E Helix Technology Inc. +00090F Fortinet Inc. +000910 Simple Access Inc. +000911 Cisco Systems +000912 Cisco Systems +000914 COMPUTROLS INC. +000915 CAS Corp. +000916 Listman Home Technologies, Inc. +000917 WEM Technology Inc +000918 SAMSUNG TECHWIN CO.,LTD +000919 MDS Gateways +00091A Macat Optics & Electronics Co., Ltd. +00091B Digital Generation Inc. +00091C CacheVision, Inc +00091D Proteam Computer Corporation +00091E Firstech Technology Corp. +00091F A&D Co., Ltd. +000920 EpoX COMPUTER CO.,LTD. +000921 Planmeca Oy +000922 Touchless Sensor Technology AG +000923 Heaman System Co., Ltd +000924 Telebau GmbH +000925 VSN Systemen BV +000926 YODA COMMUNICATIONS, INC. +000927 TOYOKEIKI CO.,LTD. +000928 Telecore Inc +000929 Sanyo Industries (UK) Limited +00092A MYTECS Co.,Ltd. +00092B iQstor Networks, Inc. +00092C Hitpoint Inc. +00092D High Tech Computer, Corp. +00092E B&Tech System Inc. +00092F Akom Technology Corporation +000930 AeroConcierge Inc. +000931 Future Internet, Inc. +000932 Omnilux +000933 OPTOVALLEY Co. Ltd. +000934 Dream-Multimedia-Tv GmbH +000935 Sandvine Incorporated +000936 Ipetronik GmbH & Co.KG +000937 Inventec Appliance Corp +000938 Allot Communications +000939 ShibaSoku Co.,Ltd. +00093A Molex Fiber Optics +00093B HYUNDAI NETWORKS INC. +00093C Jacques Technologies P/L +00093D Newisys,Inc. +00093E C&I Technologies +00093F Double-Win Enterpirse CO., LTD +000940 AGFEO GmbH & Co. KG +000941 Allied Telesis K.K. +000942 CRESCO, LTD. +000943 Cisco Systems +000944 Cisco Systems +000945 Palmmicro Communications Inc +000946 Cluster Labs GmbH +000947 Aztek, Inc. +000948 Vista Control Systems, Corp. +000949 Glyph Technologies Inc. +00094A Homenet Communications +00094B FillFactory NV +00094C Communication Weaver Co.,Ltd. +00094D Braintree Communications Pty Ltd +00094E BARTECH SYSTEMS INTERNATIONAL, INC +00094F elmegt GmbH & Co. KG +000950 Independent Storage Corporation +000951 Apogee Instruments, Inc +000952 Auerswald GmbH & Co. KG +000953 Linkage System Integration Co.Ltd. +000954 AMiT spol. s. r. o. +000955 Young Generation International Corp. +000956 Network Systems Group, Ltd. (NSG) +000957 Supercaller, Inc. +000958 INTELNET S.A. +000959 Sitecsoft +00095A RACEWOOD TECHNOLOGY +00095B Netgear, Inc. +00095C Philips Medical Systems - Cardiac and Monitoring Systems (CM +00095D Dialogue Technology Corp. +00095E Masstech Group Inc. +00095F Telebyte, Inc. +000960 YOZAN Inc. +000961 Switchgear and Instrumentation Ltd +000962 Filetrac AS +000963 Dominion Lasercom Inc. +000964 Hi-Techniques +000966 Thales Navigation +000967 Tachyon, Inc +000968 TECHNOVENTURE, INC. +000969 Meret Optical Communications +00096A Cloverleaf Communications Inc. +00096B IBM Corporation +00096C Imedia Semiconductor Corp. +00096D Powernet Technologies Corp. +00096E GIANT ELECTRONICS LTD. +00096F Beijing Zhongqing Elegant Tech. Corp.,Limited +000970 Vibration Research Corporation +000971 Time Management, Inc. +000972 Securebase,Inc +000973 Lenten Technology Co., Ltd. +000974 Innopia Technologies, Inc. +000975 fSONA Communications Corporation +000976 Datasoft ISDN Systems GmbH +000977 Brunner Elektronik AG +000978 AIJI System Co., Ltd. +000979 Advanced Television Systems Committee, Inc. +00097A Louis Design Labs. +00097B Cisco Systems +00097C Cisco Systems +00097D SecWell Networks Oy +00097E IMI TECHNOLOGY CO., LTD +00097F Vsecure 2000 LTD. +000980 Power Zenith Inc. +000981 Newport Networks +000982 Loewe Opta GmbH +000983 Gvision Incorporated +000984 MyCasa Network Inc. +000985 Auto Telecom Company +000986 Metalink LTD. +000987 NISHI NIPPON ELECTRIC WIRE & CABLE CO.,LTD. +000988 Nudian Electron Co., Ltd. +000989 VividLogic Inc. +00098A EqualLogic Inc +00098B Entropic Communications, Inc. +00098C Possio AB +00098D DCT Ltd (Digital Communication Technologies Ltd) +00098E ipcas GmbH +00098F Cetacean Networks +000990 ACKSYS Communications & systems +000991 GE Fanuc Automation Manufacturing, Inc. +000992 InterEpoch Technology,INC. +000993 Visteon Corporation +000994 Cronyx Engineering +000995 Castle Technology Ltd +000996 RDI +000997 Nortel Networks +000998 Capinfo Company Limited +000999 CP GEORGES RENAULT +00099A ELMO COMPANY, LIMITED +00099B Western Telematic Inc. +00099C Naval Research Laboratory +00099D Haliplex Communications +00099E Testech, Inc. +00099F VIDEX INC. +0009A0 Microtechno Corporation +0009A1 Telewise Communications, Inc. +0009A2 Interface Co., Ltd. +0009A3 Leadfly Techologies Corp. Ltd. +0009A4 HARTEC Corporation +0009A5 HANSUNG ELETRONIC INDUSTRIES DEVELOPMENT CO., LTD +0009A6 Ignis Optics, Inc. +0009A7 Bang & Olufsen A/S +0009A8 Eastmode Pte Ltd +0009A9 Ikanos Communications +0009AA Data Comm for Business, Inc. +0009AB Netcontrol Oy +0009AC LANVOICE +0009AD HYUNDAI SYSCOMM, INC. +0009AE OKANO ELECTRIC CO.,LTD +0009AF e-generis +0009B0 Onkyo Corporation +0009B1 Kanematsu Electronics, Ltd. +0009B2 L&F Inc. +0009B3 MCM Systems Ltd +0009B4 KISAN TELECOM CO., LTD. +0009B5 3J Tech. Co., Ltd. +0009B6 Cisco Systems +0009B7 Cisco Systems +0009B8 Entise Systems +0009B9 Action Imaging Solutions +0009BA MAKU Informationstechik GmbH +0009BB MathStar, Inc. +0009BC Digital Safety Technologies Inc. +0009BD Epygi Technologies, Ltd. +0009BE Mamiya-OP Co.,Ltd. +0009BF Nintendo Co.,Ltd. +0009C0 6WIND +0009C1 PROCES-DATA A/S +0009C3 NETAS +0009C4 Medicore Co., Ltd +0009C5 KINGENE Technology Corporation +0009C6 Visionics Corporation +0009C7 Movistec +0009C8 SINAGAWA TSUSHIN KEISOU SERVICE +0009C9 BlueWINC Co., Ltd. +0009CA iMaxNetworks(Shenzhen)Limited. +0009CB HBrain +0009CC Moog GmbH +0009CD HUDSON SOFT CO.,LTD. +0009CE SpaceBridge Semiconductor Corp. +0009CF iAd GmbH +0009D0 Versatel Networks +0009D1 SERANOA NETWORKS INC +0009D2 Mai Logic Inc. +0009D3 Western DataCom Co., Inc. +0009D4 Transtech Networks +0009D5 Signal Communication, Inc. +0009D6 KNC One GmbH +0009D7 DC Security Products +0009D9 Neoscale Systems, Inc +0009DA Control Module Inc. +0009DB eSpace +0009DC Galaxis Technology AG +0009DD Mavin Technology Inc. +0009DE Samjin Information & Communications Co., Ltd. +0009DF Vestel Komunikasyon Sanayi ve Ticaret A.S. +0009E0 XEMICS S.A. +0009E1 Gemtek Technology Co., Ltd. +0009E2 Sinbon Electronics Co., Ltd. +0009E3 Angel Iglesias S.A. +0009E4 K Tech Infosystem Inc. +0009E5 Hottinger Baldwin Messtechnik GmbH +0009E6 Cyber Switching Inc. +0009E7 ADC Techonology +0009E8 Cisco Systems +0009E9 Cisco Systems +0009EA YEM Inc. +0009EB HuMANDATA LTD. +0009EC Daktronics, Inc. +0009ED CipherOptics +0009EE MEIKYO ELECTRIC CO.,LTD +0009EF Vocera Communications +0009F0 Shimizu Technology Inc. +0009F1 Yamaki Electric Corporation +0009F2 Cohu, Inc., Electronics Division +0009F3 WELL Communication Corp. +0009F4 Alcon Laboratories, Inc. +0009F5 Emerson Network Power Co.,Ltd +0009F6 Shenzhen Eastern Digital Tech Ltd. +0009F7 SED, a division of Calian +0009F8 UNIMO TECHNOLOGY CO., LTD. +0009F9 ART JAPAN CO., LTD. +0009FB Philips Medizinsysteme Boeblingen GmbH +0009FC IPFLEX Inc. +0009FD Ubinetics Limited +0009FE Daisy Technologies, Inc. +0009FF X.net 2000 GmbH +000A00 Mediatek Corp. +000A01 SOHOware, Inc. +000A02 ANNSO CO., LTD. +000A03 ENDESA SERVICIOS, S.L. +000A04 3Com Europe Ltd +000A05 Widax Corp. +000A06 Teledex LLC +000A07 WebWayOne Ltd +000A08 ALPINE ELECTRONICS, INC. +000A09 TaraCom Integrated Products, Inc. +000A0A SUNIX Co., Ltd. +000A0B Sealevel Systems, Inc. +000A0C Scientific Research Corporation +000A0D MergeOptics GmbH +000A0E Invivo Research Inc. +000A0F Ilryung Telesys, Inc +000A10 FAST media integrations AG +000A11 ExPet Technologies, Inc +000A12 Azylex Technology, Inc +000A13 Silent Witness +000A14 TECO a.s. +000A15 Silicon Data, Inc +000A16 Lassen Research +000A17 NESTAR COMMUNICATIONS, INC +000A18 Vichel Inc. +000A19 Valere Power, Inc. +000A1A Imerge Ltd +000A1B Stream Labs +000A1C Bridge Information Co., Ltd. +000A1D Optical Communications Products Inc. +000A1E Red-M (Communications) Limited +000A1F ART WARE Telecommunication Co., Ltd. +000A20 SVA Networks, Inc. +000A21 Integra Telecom Co. Ltd +000A22 Amperion Inc +000A23 Parama Networks Inc +000A24 Octave Communications +000A25 CERAGON NETWORKS +000A26 CEIA S.p.A. 000A27 Apple Computer, Inc. -001000 CABLE TELEVISION +000A28 Motorola +000A29 Pan Dacom Networking AG +000A2A QSI Systems Inc. +000A2B Etherstuff +000A2C Active Tchnology Corporation +000A2E MAPLE NETWORKS CO., LTD +000A2F Artnix Inc. +000A30 Johnson Controls-ASG +000A31 HCV Wireless +000A32 Xsido Corporation +000A33 Sierra Logic, Inc. +000A34 Identicard Systems Incorporated +000A35 Xilinx +000A36 Synelec Telecom Multimedia +000A37 Procera Networks, Inc. +000A38 Netlock Technologies, Inc. +000A39 LoPA Information Technology +000A3A J-THREE INTERNATIONAL Holding Co., Ltd. +000A3B GCT Semiconductor, Inc +000A3C Enerpoint Ltd. +000A3D Elo Sistemas Eletronicos S.A. +000A3E EADS Telecom +000A3F Data East Corporation +000A40 Crown Audio +000A41 Cisco Systems +000A42 Cisco Systems +000A43 Chunghwa Telecom Co., Ltd. +000A44 Avery Dennison Deutschland GmbH +000A45 Audio-Technica Corp. +000A46 ARO Controls SAS +000A47 Allied Vision Technologies +000A48 Albatron Technology +000A49 Acopia Networks +000A4A Targa Systems Ltd. +000A4B DataPower Technology, Inc. +000A4C Molecular Devices Corporation +000A4D Noritz Corporation +000A4E UNITEK Electronics INC. +000A4F Brain Boxes Limited +000A50 REMOTEK CORPORATION +000A51 GyroSignal Technology Co., Ltd. +000A52 Venitek Co. Ltd. +000A53 Intronics, Incorporated +000A54 Laguna Hills, Inc. +000A55 MARKEM Corporation +000A56 HITACHI Maxell Ltd. +000A57 Hewlett-Packard Company - Standards +000A58 Ingenieur-Buero Freyer & Siegel +000A59 HW server +000A5A GreenNET Technologies Co.,Ltd. +000A5B Power-One as +000A5C Carel s.p.a. +000A5D PUC Founder (MSC) Berhad +000A5E 3COM Corporation +000A5F almedio inc. +000A60 Autostar Technology Pte Ltd +000A61 Cellinx Systems Inc. +000A62 Crinis Networks, Inc. +000A63 DHD GmbH +000A64 Eracom Technologies +000A65 GentechMedia.co.,ltd. +000A66 MITSUBISHI ELECTRIC SYSTEM & SERVICE CO.,LTD. +000A67 OngCorp +000A68 SolarFlare Communications, Inc. +000A69 SUNNY bell Technology Co., Ltd. +000A6A SVM Microwaves s.r.o. +000A6B Tadiran Telecom Business Systems LTD +000A6C Walchem Corporation +000A6D EKS Elektronikservice GmbH +000A6E Broadcast Technology Limited +000A6F ZyTera Technologies Inc. +000A70 MPLS Forum +000A71 Avrio Technologies, Inc +000A72 SimpleTech, Inc. +000A73 Scientific Atlanta +000A74 Manticom Networks Inc. +000A75 Cat Electronics +000A76 Beida Jade Bird Huaguang Technology Co.,Ltd +000A77 Bluewire Technologies LLC +000A78 OLITEC +000A79 corega K.K. +000A7A Kyoritsu Electric Co., Ltd. +000A7B Cornelius Consult +000A7C Tecton Ltd +000A7D Valo, Inc. +000A7E The Advantage Group +000A7F Teradon Industries, Inc +000A80 Telkonet Inc. +000A81 TEIMA Audiotex S.L. +000A82 TATSUTA SYSTEM ELECTRONICS CO.,LTD. +000A83 SALTO SYSTEMS S.L. +000A84 Rainsun Enterprise Co., Ltd. +000A85 PLAT'C2,Inc +000A86 Lenze +000A87 Integrated Micromachines Inc. +000A88 InCypher S.A. +000A89 Creval Systems, Inc. +000A8A Cisco Systems +000A8B Cisco Systems +000A8C Guardware Systems Ltd. +000A8D EUROTHERM LIMITED +000A8E Invacom Ltd +000A8F Aska International Inc. +000A90 Bayside Interactive, Inc. +000A91 HemoCue AB +000A92 Presonus Corporation +000A93 W2 Networks, Inc. +000A94 ShangHai cellink CO., LTD +000A95 Apple Computer, Inc. +000A96 MEWTEL TECHNOLOGY INC. +000A97 SONICblue, Inc. +000A98 M+F Gwinner GmbH & Co +000A99 Dataradio Inc. +000A9A Aiptek International Inc +000A9B Towa Meccs Corporation +000A9C Server Technology, Inc. +000A9D King Young Technology Co. Ltd. +000A9E BroadWeb Corportation +000A9F Pannaway Technologies, Inc. +000AA0 Cedar Point Communications +000AA1 V V S Limited +000AA2 SYSTEK INC. +000AA3 SHIMAFUJI ELECTRIC CO.,LTD. +000AA4 SHANGHAI SURVEILLANCE TECHNOLOGY CO,LTD +000AA5 MAXLINK INDUSTRIES LIMITED +000AA6 Hochiki Corporation +000AA7 FEI Company +000AA8 ePipe Pty. Ltd. +000AA9 Brooks Automation GmbH +000AAA AltiGen Communications Inc. +000AAB TOYOTA MACS, INC. +000AAC TerraTec Electronic GmbH +000AAD Stargames Corporation +000AAE Rosemount Process Analytical +000AAF Pipal Systems +000AB0 LOYTEC electronics GmbH +000AB1 GENETEC Corporation +000AB2 Fresnel Wireless Systems +000AB3 Fa. GIRA +000AB4 ETIC Telecommunications +000AB5 Digital Electronic Network +000AB6 COMPUNETIX, INC +000AB7 Cisco Systems +000AB8 Cisco Systems +000AB9 Astera Technologies Corp. +000ABA Arcon Technology Limited +000ABB Taiwan Secom Co,. Ltd +000ABC Seabridge Ltd. +000ABD Rupprecht & Patashnick Co. +000ABE OPNET Technologies CO., LTD. +000ABF HIROTA SS +000AC0 Fuyoh Video Industry CO., LTD. +000AC1 Futuretel +000AC2 FiberHome Telecommunication Technologies CO.,LTD +000AC3 eM Technics Co., Ltd. +000AC4 Daewoo Teletech Co., Ltd +000AC5 Color Kinetics +000AC7 Unication Group +000AC8 ZPSYS CO.,LTD. (Planning&Management) +000AC9 Zambeel Inc +000ACA YOKOYAMA SHOKAI CO.,Ltd. +000ACB XPAK MSA Group +000ACC Winnow Networks, Inc. +000ACD Sunrich Technology Limited +000ACE RADIANTECH, INC. +000ACF PROVIDEO Multimedia Co. Ltd. +000AD0 Niigata Develoment Center, F.I.T. Co., Ltd. +000AD1 MWS +000AD2 JEPICO Corporation +000AD3 INITECH Co., Ltd +000AD4 CoreBell Systems Inc. +000AD5 Brainchild Electronic Co., Ltd. +000AD6 BeamReach Networks +000AD8 IPCserv Technology Corp. +000AD9 Sony Ericsson Mobile Communications AB +000ADB SkyPilot Network, Inc +000ADC RuggedCom Inc. +000ADD InSciTek Microsystems, Inc. +000ADE Happy Communication Co., Ltd. +000ADF Gennum Corporation +000AE0 Fujitsu Softek +000AE1 EG Technology +000AE2 Binatone Electronics International, Ltd +000AE3 YANG MEI TECHNOLOGY CO., LTD +000AE4 Wistron Corp. +000AE5 ScottCare Corporation +000AE6 Elitegroup Computer System Co. (ECS) +000AE7 ELIOP S.A. +000AE8 Cathay Roxus Information Technology Co. LTD +000AE9 AirVast Technology Inc. +000AEA ADAM ELEKTRONIK LTD.STI. +000AEB Shenzhen Tp-link Technology Co; Ltd. +000AEC Koatsu Gas Kogyo Co., Ltd. +000AED HARTING Vending G.m.b.H. & CO KG +000AEE GCD Hard- & Software GmbH +000AEF OTRUM ASA +000AF0 SHIN-OH ELECTRONICS CO., LTD. R&D +000AF1 Clarity Design, Inc. +000AF2 NeoAxiom Corp. +000AF3 Cisco Systems +000AF4 Cisco Systems +000AF5 Airgo Networks, Inc. +000AF6 Computer Process Controls +000AF7 Broadcom Corp. +000AF8 American Telecare Inc. +000AFA Traverse Technologies Australia +000AFB Ambri Limited +000AFC Core Tec Communications, LLC +000AFD Viking Electronic Services +000AFE NovaPal Ltd +000AFF Kilchherr Elektronik AG +000B00 FUJIAN START COMPUTER EQUIPMENT CO.,LTD +000B01 DAIICHI ELECTRONICS CO., LTD. +000B02 Dallmeier electronic +000B03 Taekwang Industrial Co., Ltd +000B04 Volktek Corporation +000B05 Pacific Broadband Networks +000B06 Motorola BCS +000B07 Voxpath Networks +000B08 Pillar Data Systems +000B09 Ifoundry Systems Singapore +000B0A dBm Optics +000B0B Corrent Corporation +000B0C Agile Systems Inc. +000B0D Air2U, Inc. +000B0E Trapeze Networks +000B0F Nyquist Industrial Control BV +000B10 11wave Technonlogy Co.,Ltd +000B11 HIMEJI ABC TRADING CO.,LTD. +000B13 ZETRON INC +000B14 ViewSonic Corporation +000B15 Platypus Technology +000B16 Communication Machinery Corporation +000B17 MKS Instruments +000B19 Vernier Networks, Inc. +000B1A Teltone Corporation +000B1B Systronix, Inc. +000B1D LayerZero Power Systems, Inc. +000B1E KAPPA opto-electronics GmbH +000B1F I CON Computer Co. +000B20 Hirata corporation +000B21 G-Star Communications Inc. +000B22 Environmental Systems and Services +000B23 Efficient Networks, Inc. +000B24 AirLogic +000B25 Aeluros +000B26 Wetek Corporation +000B27 Scion Corporation +000B28 Quatech Inc. +000B29 LG Industrial Systems Co.,Ltd. +000B2A HOWTEL Co., Ltd. +000B2B HOSTNET CORPORATION +000B2C Eiki Industrial Co. Ltd. +000B2D Danfoss Inc. +000B2E Cal-Comp Electronics (Thailand) Public Company Limited Taipe +000B2F bplan GmbH +000B30 Beijing Gongye Science & Technology Co.,Ltd +000B31 Yantai ZhiYang Scientific and technology industry CO., LTD +000B32 VORMETRIC, INC. +000B33 Vivato +000B34 ShangHai Broadband Technologies CO.LTD +000B35 Quad Bit System co., Ltd. +000B36 Productivity Systems, Inc. +000B37 MANUFACTURE DES MONTRES ROLEX SA +000B38 Knuerr AG +000B39 Keisoku Giken Co.,Ltd. +000B3A Fortel DTV, Inc. +000B3B devolo AG +000B3C Cygnal Integrated Products, Inc. +000B3D CONTAL OK Ltd. +000B3E BittWare, Inc +000B3F Anthology Solutions Inc. +000B40 OpNext Inc. +000B41 Ing. Buero Dr. Beutlhauser +000B42 commax Co., Ltd. +000B43 Microscan Systems, Inc. +000B44 Concord IDea Corp. +000B45 Cisco +000B46 Cisco +000B47 Advanced Energy +000B48 sofrel +000B49 RF-Link System Inc. +000B4A Visimetrics (UK) Ltd +000B4B VISIOWAVE SA +000B4C Clarion (M) Sdn Bhd +000B4D Emuzed +000B4E VertexRSI Antenna Products Division +000B4F Verifone, INC. +000B50 Oxygnet +000B51 Micetek International Inc. +000B52 JOYMAX ELECTRONICS CORP. +000B53 INITIUM Co., Ltd. +000B54 BiTMICRO Networks, Inc. +000B55 ADInstruments +000B56 Cybernetics +000B57 Silicon Laboratories +000B58 Astronautics C.A LTD +000B59 ScriptPro, LLC +000B5A HyperEdge +000B5B Rincon Research Corporation +000B5C Newtech Co.,Ltd +000B5D FUJITSU LIMITED +000B5E ATMAVA Ltd +000B5F Cisco Systems +000B60 Cisco Systems +000B61 Friedrich Lütze GmbH &Co. +000B62 Ingenieurbüro Ingo Mohnen +000B64 Kieback & Peter GmbH & Co KG +000B65 Sy.A.C. srl +000B66 Teralink Communications +000B67 Topview Technology Corporation +000B68 Addvalue Communications Pte Ltd +000B69 Franke Finland Oy +000B6A Asiarock Incorporation +000B6B Wistron Neweb Corp. +000B6C Sychip Inc. +000B6D SOLECTRON JAPAN NAKANIIDA +000B6E Neff Instrument Corp. +000B6F Media Streaming Networks Inc +000B70 Load Technology, Inc. +000B71 Litchfield Communications Inc. +000B72 Lawo AG +000B73 Kodeos Communications +000B74 Kingwave Technology Co., Ltd. +000B75 Iosoft Ltd. +000B76 ET&T Co. Ltd. +000B77 Cogent Systems, Inc. +000B78 TAIFATECH INC. +000B79 X-COM, Inc. +000B7B Test-Um Inc. +000B7C Telex Communications +000B7D SOLOMON EXTREME INTERNATIONAL LTD. +000B7E SAGINOMIYA Seisakusho Inc. +000B7F OmniWerks +000B81 Kaparel Corporation +000B82 Grandstream Networks, Inc. +000B83 DATAWATT B.V. +000B84 BODET +000B85 Airespace, Inc. +000B86 Aruba Networks +000B87 American Reliance Inc. +000B88 Vidisco ltd. +000B89 Top Global Technology, Ltd. +000B8A MITEQ Inc. +000B8B KERAJET, S.A. +000B8C flextronics israel +000B8D Avvio Networks +000B8E Ascent Corporation +000B8F AKITA ELECTRONICS SYSTEMS CO.,LTD. +000B90 Covaro Networks, Inc. +000B91 Aglaia Gesellschaft für Bildverarbeitung und Kommunikation m +000B92 Ascom Danmark A/S +000B93 Barmag Electronic +000B94 Digital Monitoring Products, Inc. +000B95 eBet Gaming Systems Pty Ltd +000B96 Innotrac Diagnostics Oy +000B97 Matsushita Electric Industrial Co.,Ltd. +000B98 NiceTechVision +000B99 SensAble Technologies, Inc. +000B9A Shanghai Ulink Telecom Equipment Co. Ltd. +000B9B Sirius System Co, Ltd. +000B9C TriBeam Technologies, Inc. +000B9D TwinMOS Technologies Inc. +000B9E Yasing Technology Corp. +000B9F Neue ELSA GmbH +000BA0 T&L Information Inc. +000BA1 SYSCOM Ltd. +000BA2 Sumitomo Electric Networks, Inc +000BA3 Siemens AG, I&S +000BA4 Shiron Satellite Communications Ltd. (1996) +000BA5 Quasar Cipta Mandiri, PT +000BA6 Miyakawa Electric Works Ltd. +000BA7 Maranti Networks +000BA8 HANBACK ELECTRONICS CO., LTD. +000BAA Aiphone co.,Ltd +000BAB Advantech Technology (CHINA) Co., Ltd. +000BAC 3Com Europe Ltd. +000BAD PC-PoS Inc. +000BAE Vitals System Inc. +000BB0 Sysnet Telematica srl +000BB1 Super Star Technology Co., Ltd. +000BB2 SMALLBIG TECHNOLOGY +000BB3 RiT technologies Ltd. +000BB4 RDC Semiconductor Inc., +000BB5 nStor Technologies, Inc. +000BB6 Mototech Inc. +000BB7 Micro Systems Co.,Ltd. +000BB8 Kihoku Electronic Co. +000BB9 Imsys AB +000BBA Harmonic Broadband Access Networks +000BBB Etin Systems Co., Ltd +000BBC En Garde Systems, Inc. +000BBD Connexionz Limited +000BBE Cisco Systems +000BBF Cisco Systems +000BC0 China IWNComm Co., Ltd. +000BC1 Bay Microsystems, Inc. +000BC2 Corinex Communication Corp. +000BC3 Multiplex, Inc. +000BC4 BIOTRONIK GmbH & Co +000BC5 SMC Networks, Inc. +000BC6 ISAC, Inc. +000BC7 ICET S.p.A. +000BC8 AirFlow Networks +000BC9 Electroline Equipment +000BCA DATAVAN International Corporation +000BCB Fagor Automation , S. Coop +000BCC JUSAN, S.A. +000BCD Compaq (HP) +000BCE Free2move AB +000BCF AGFA NDT INC. +000BD0 XiMeta Technology Americas Inc. +000BD1 Aeronix, Inc. +000BD2 Remopro Technology Inc. +000BD3 cd3o +000BD4 Beijing Wise Technology & Science Development Co.Ltd +000BD5 Nvergence, Inc. +000BD6 Paxton Access Ltd +000BD7 MBB Gelma GmbH +000BD8 Industrial Scientific Corp. +000BD9 General Hydrogen +000BDA EyeCross Co.,Inc. +000BDB Dell ESG PCBA Test +000BDC AKCP +000BDD TOHOKU RICOH Co., LTD. +000BDF Shenzhen RouterD Networks Limited +000BE0 SercoNet Ltd. +000BE2 Lumenera Corporation +000BE3 Key Stream Co., Ltd. +000BE4 Hosiden Corporation +000BE5 HIMS Korea Co., Ltd. +000BE6 Datel Electronics +000BE7 COMFLUX TECHNOLOGY INC. +000BE8 AOIP +000BEA Zultys Technologies +000BEB Systegra AG +000BEC NIPPON ELECTRIC INSTRUMENT, INC. +000BED ELM Inc. +000BEE inc.jet, Incorporated +000BEF Code Corporation +000BF0 MoTEX Products Co., Ltd. +000BF1 LAP Laser Applikations +000BF2 Chih-Kan Technology Co., Ltd. +000BF3 BAE SYSTEMS +000BF5 Shanghai Sibo Telecom Technology Co.,Ltd +000BF6 Nitgen Co., Ltd +000BF7 NIDEK CO.,LTD +000BF8 Infinera +000BF9 Gemstone communications, Inc. +000BFB D-NET International Corporation +000BFC Cisco Systems +000BFD Cisco Systems +000BFE CASTEL Broadband Limited +000BFF Berkeley Camera Engineering +000C00 BEB Industrie-Elektronik AG +000C01 Abatron AG +000C02 ABB Oy +000C03 HDMI Licensing, LLC +000C04 Tecnova +000C05 RPA Reserch Co., Ltd. +000C06 Nixvue Systems Pte Ltd +000C07 Iftest AG +000C08 HUMEX Technologies Corp. +000C09 Hitachi IE Systems Co., Ltd +000C0A Guangdong Province Electronic Technology Research Institute +000C0B Broadbus Technologies +000C0C APPRO TECHNOLOGY INC. +000C0D Communications & Power Industries / Satcom Division +000C0E XtremeSpectrum, Inc. +000C0F Techno-One Co., Ltd +000C10 PNI Corporation +000C11 NIPPON DEMPA CO.,LTD. +000C12 Micro-Optronic-Messtechnik GmbH +000C13 MediaQ +000C14 Diagnostic Instruments, Inc. +000C15 CyberPower Systems, Inc. +000C16 Concorde Microsystems Inc. +000C17 AJA Video Systems Inc +000C18 Zenisu Keisoku Inc. +000C19 Telio Communications GmbH +000C1A Quest Technical Solutions Inc. +000C1B ORACOM Co, Ltd. +000C1C MicroWeb Co., Ltd. +000C1D Mettler & Fuchs AG +000C1E Global Cache +000C1F Glimmerglass Networks +000C20 Fi WIn, Inc. +000C21 Faculty of Science and Technology, Keio University +000C22 Double D Electronics Ltd +000C23 Beijing Lanchuan Tech. Co., Ltd. +000C25 Allied Telesyn Networks +000C26 Weintek Labs. Inc. +000C27 Sammy Corporation +000C28 RIFATRON +000C29 VMware, Inc. +000C2A OCTTEL Communication Co., Ltd. +000C2B ELIAS Technology, Inc. +000C2C Enwiser Inc. +000C2D FullWave Technology Co., Ltd. +000C2E Openet information technology(shenzhen) Co., Ltd. +000C2F SeorimTechnology Co.,Ltd. +000C30 Cisco +000C31 Cisco +000C32 Avionic Design Development GmbH +000C33 Compucase Enterprise Co. Ltd. +000C34 Vixen Co., Ltd. +000C35 KaVo Dental GmbH & Co. KG +000C36 SHARP TAKAYA ELECTRONICS INDUSTRY CO.,LTD. +000C37 Geomation, Inc. +000C38 TelcoBridges Inc. +000C39 Sentinel Wireless Inc. +000C3A Oxance +000C3B Orion Electric Co., Ltd. +000C3C MediaChorus, Inc. +000C3D Glsystech Co., Ltd. +000C3E Crest Audio +000C3F Cogent Defence & Security Networks, +000C40 Altech Controls +000C41 The Linksys Group, Inc. +000C42 Routerboard.com +000C43 Ralink Technology, Corp. +000C44 Automated Interfaces, Inc. +000C45 Animation Technologies Inc. +000C46 Allied Telesyn Inc. +000C47 SK Teletech(R&D Planning Team) +000C48 QoStek Corporation +000C49 Dangaard Telecom RTC Division A/S +000C4A Cygnus Microsystems Private Limited +000C4B Cheops Elektronik +000C4C Arcor AG&Co. +000C4D ACRA CONTROL +000C4E Winbest Technology CO,LT +000C4F UDTech Japan Corporation +000C50 Seagate Technology +000C51 Scientific Technologies Inc. +000C52 Roll Systems Inc. +000C54 Pedestal Networks, Inc +000C55 Microlink Communications Inc. +000C56 Megatel Computer (1986) Corp. +000C57 MACKIE Engineering Services Belgium BVBA +000C58 M&S Systems +000C59 Indyme Electronics, Inc. +000C5A IBSmm Industrieelektronik Multimedia +000C5B HANWANG TECHNOLOGY CO.,LTD +000C5C GTN Systems B.V. +000C5D CHIC TECHNOLOGY (CHINA) CORP. +000C5F Avtec, Inc. +000C60 ACM Systems +000C61 AC Tech corporation DBA Advanced Digital +000C62 ABB Automation Technology Products AB, Control +000C63 Zenith Electronics Corporation +000C64 X2 MSA Group +000C65 Sunin Telecom +000C66 Pronto Networks Inc +000C67 OYO ELECTRIC CO.,LTD +000C68 Oasis Semiconductor, Inc. +000C69 National Radio Astronomy Observatory +000C6A MBARI +000C6B Kurz Industrie-Elektronik GmbH +000C6C Elgato Systems LLC +000C6D BOC Edwards +000C6E ASUSTEK COMPUTER INC. +000C6F Amtek system co.,LTD. +000C70 ACC GmbH +000C71 Wybron, Inc +000C72 Tempearl Industrial Co., Ltd. +000C73 TELSON ELECTRONICS CO., LTD +000C74 RIVERTEC CORPORATION +000C75 Oriental integrated electronics. LTD +000C76 MICRO-STAR INTERNATIONAL CO., LTD. +000C77 Life Racing Ltd +000C78 In-Tech Electronics Limited +000C79 Extel Communications P/L +000C7A DaTARIUS Technologies GmbH +000C7B ALPHA PROJECT Co.,Ltd. +000C7C Internet Information Image Inc. +000C7D TEIKOKU ELECTRIC MFG. CO., LTD +000C7E Tellium Incorporated +000C7F synertronixx GmbH +000C80 Opelcomm Inc. +000C81 Nulec Industries Pty Ltd +000C82 NETWORK TECHNOLOGIES INC +000C83 Logical Solutions +000C84 Eazix, Inc. +000C85 Cisco Systems +000C86 Cisco Systems +000C87 ATI +000C88 Apache Micro Peripherals, Inc. +000C89 AC Electric Vehicles, Ltd. +000C8A Bose Corporation +000C8B Connect Tech Inc +000C8C KODICOM CO.,LTD. +000C8D MATRIX VISION GmbH +000C8E Mentor Engineering Inc +000C8F Nergal s.r.l. +000C90 Octasic Inc. +000C91 Riverhead Networks Inc. +000C92 WolfVision Gmbh +000C93 Xeline Co., Ltd. +000C94 United Electronic Industries, Inc. +000C95 PrimeNet +000C96 OQO, Inc. +000C97 NV ADB TTV Technologies SA +000C98 LETEK Communications Inc. +000C99 HITEL LINK Co.,Ltd +000C9A Hitech Electronics Corp. +000C9B EE Solutions, Inc +000C9C Chongho information & communications +000C9D AirWalk Communications, Inc. +000C9E MemoryLink Corp. +000C9F NKE Corporation +000CA0 StorCase Technology, Inc. +000CA1 SIGMACOM Co., LTD. +000CA2 Scopus Network Technologies Ltd +000CA3 Rancho Technology, Inc. +000CA4 Prompttec Product Management GmbH +000CA6 Mintera Corporation +000CA7 Metro (Suzhou) Technologies Co., Ltd. +000CA8 Garuda Networks Corporation +000CA9 Ebtron Inc. +000CAA Cubic Transportation Systems Inc +000CAB COMMEND International +000CAC Citizen Watch Co., Ltd. +000CAD BTU International +000CAE Ailocom Oy +000CAF TRI TERM CO.,LTD. +000CB0 Star Semiconductor Corporation +000CB1 Salland Engineering (Europe) BV +000CB2 safei Co., Ltd. +000CB3 ROUND Co.,Ltd. +000CB4 Propagate Networks, Inc +000CB5 Premier Technolgies, Inc +000CB6 NANJING SEU MOBILE & INTERNET TECHNOLOGY CO.,LTD +000CB7 Nanjing Huazhuo Electronics Co., Ltd. +000CB8 MEDION AG +000CB9 LEA +000CBA Jamex +000CBB ISKRAEMECO +000CBC Iscutum +000CBD Interface Masters, Inc +000CBF Holy Stone Ent. Co., Ltd. +000CC0 Genera Oy +000CC1 Cooper Industries Inc. +000CC3 BeWAN systems +000CC4 Tiptel AG +000CC5 Nextlink Co., Ltd. +000CC6 Ka-Ro electronics GmbH +000CC7 Intelligent Computer Solutions Inc. +000CC8 Integrated Digital Systems, Inc. +000CC9 ILWOO DATA & TECHNOLOGY CO.,LTD +000CCA Hitachi Global Storage Technologies +000CCB Design Combus Ltd +000CCC Bluesoft Ltd. +000CCD IEC - TC57 +000CCE Cisco Systems +000CCF Cisco Systems +000CD0 Symetrix +000CD1 SFOM Technology Corp. +000CD2 Schaffner EMV AG +000CD3 Prettl Elektronik Radeberg GmbH +000CD4 Positron Public Safety Systems inc. +000CD5 Passave Inc. +000CD6 PARTNER TECH +000CD7 Nallatech Ltd +000CD8 M. K. Juchheim GmbH & Co +000CD9 Itcare Co., Ltd +000CDA FreeHand Systems, Inc. +000CDB Foundry Networks +000CDC BECS Technology, Inc +000CDD AOS Technologies AG +000CDE ABB STOTZ-KONTAKT GmbH +000CDF PULNiX America, Inc +000CE0 Trek Diagnostics Inc. +000CE1 The Open Group +000CE2 Rolls-Royce +000CE3 Option International N.V. +000CE4 NeuroCom International, Inc. +000CE5 Motorola BCS +000CE6 Meru Networks Inc +000CE7 MediaTek Inc. +000CE8 GuangZhou AnJuBao Co., Ltd +000CE9 BLOOMBERG L.P. +000CEA aphona Kommunikationssysteme +000CEB CNMP Networks, Inc. +000CEC Spectracom Corp. +000CED Real Digital Media +000CEE Q-Networks +000CEF Open Networks Engineering Ltd +000CF0 M & N GmbH +000CF1 Intel Corporation +000CF2 GAMESA EÓLICA +000CF3 CALL IMAGE SA +000CF4 AKATSUKI ELECTRIC MFG.CO.,LTD. +000CF5 InfoExpress +000CF6 Sitecom Europe BV +000CF7 Nortel Networks +000CF8 Nortel Networks +000CF9 ITT Flygt AB +000CFA Digital Systems Corp +000CFB Korea Network Systems +000CFC S2io Technologies Corp +000CFE Grand Electronic Co., Ltd +000CFF MRO-TEK LIMITED +000D00 Seaway Networks Inc. +000D01 P&E Microcomputer Systems, Inc. +000D02 NEC Access Technica,Ltd +000D03 Matrics, Inc. +000D04 Foxboro Eckardt Development GmbH +000D05 cybernet manufacturing inc. +000D06 Compulogic Limited +000D07 Calrec Audio Ltd +000D08 AboveCable, Inc. +000D09 Yuehua(Zhuhai) Electronic CO. LTD +000D0A Projectiondesign as +000D0B Melco Inc. +000D0C MDI Security Systems +000D0D ITSupported, LLC +000D0E Inqnet Systems, Inc. +000D0F Finlux Ltd +000D10 Embedtronics Oy +000D11 DENTSPLY - Gendex +000D12 AXELL Corporation +000D13 Wilhelm Rutenbeck GmbH&Co. +000D14 Vtech Innovation LP dba Advanced American Telephones +000D15 Voipac s.r.o. +000D16 UHS Systems Pty Ltd +000D17 Turbo Networks Co.Ltd +000D18 Sunitec Enterprise Co., Ltd. +000D19 ROBE Show lighting +000D1A Mustek System Inc. +000D1B Kyoto Electronics Manufacturing Co., Ltd. +000D1C I2E TELECOM +000D1D HIGH-TEK HARNESS ENT. CO., LTD. +000D1E Control Techniques +000D1F AV Digital +000D20 ASAHIKASEI TECHNOSYSTEM CO.,LTD. +000D21 WISCORE Inc. +000D22 Unitronics +000D23 Smart Solution, Inc +000D24 SENTEC E&E CO., LTD. +000D25 SANDEN CORPORATION +000D26 Primagraphics Limited +000D27 MICROPLEX Printware AG +000D28 Cisco +000D29 Cisco +000D2A Scanmatic AS +000D2B Racal Instruments +000D2C Patapsco Designs Ltd +000D2D NCT Deutschland GmbH +000D2E Matsushita Avionics Systems Corporation +000D2F AIN Comm.Tech.Co., LTD +000D30 IceFyre Semiconductor +000D31 Compellent Technologies, Inc. +000D32 DispenseSource, Inc. +000D33 Prediwave Corp. +000D34 Shell International Exploration and Production, Inc. +000D35 PAC International Ltd +000D36 Wu Han Routon Electronic Co., Ltd +000D37 WIPLUG +000D38 NISSIN INC. +000D39 Network Electronics +000D3A Microsoft Corp. +000D3B Microelectronics Technology Inc. +000D3C i.Tech Dynamic Ltd +000D3E APLUX Communications Ltd. +000D3F VXI Technology +000D40 Verint Loronix Video Solutions +000D41 Siemens AG ICM MP UC RD IT KLF1 +000D42 Newbest Development Limited +000D43 DRS Tactical Systems Inc. +000D45 Tottori SANYO Electric Co., Ltd. +000D46 Eurotherm Drives, Ltd. +000D47 Collex +000D48 AEWIN Technologies Co., Ltd. +000D49 Triton Systems of Delaware, Inc. +000D4A Steag ETA-Optik +000D4B Roku, LLC +000D4C Outline Electronics Ltd. +000D4D Ninelanes +000D4E NDR Co.,LTD. +000D4F Kenwood Corporation +000D50 Galazar Networks +000D51 DIVR Systems, Inc. +000D52 Comart system +000D53 Beijing 5w Communication Corp. +000D54 3Com Europe Ltd +000D55 SANYCOM Technology Co.,Ltd +000D56 Dell PCBA Test +000D57 Fujitsu I-Network Systems Limited. +000D59 Amity Systems, Inc. +000D5A Tiesse SpA +000D5B Smart Empire Investments Limited +000D5C Robert Bosch GmbH, VT-ATMO +000D5D Raritan Computer, Inc +000D5E NEC CustomTechnica, Ltd. +000D5F Minds Inc +000D60 IBM Corporation +000D61 Giga-Byte Technology Co., Ltd. +000D62 Funkwerk Dabendorf GmbH +000D63 DENT Instruments, Inc. +000D64 COMAG Handels AG +000D65 Cisco Systems +000D66 Cisco Systems +000D67 BelAir Networks Inc. +000D68 Vinci Systems, Inc. +000D69 TMT&D Corporation +000D6A Redwood Technologies LTD +000D6B Mita-Teknik A/S +000D6C M-Audio +000D6D K-Tech Devices Corp. +000D6E K-Patents Oy +000D6F Ember Corporation +000D70 Datamax Corporation +000D71 boca systems +000D72 2Wire, Inc +000D73 Technical Support, Inc. +000D74 Sand Network Systems, Inc. +000D75 Kobian Pte Ltd - Taiwan Branch +000D76 Hokuto Denshi Co,. Ltd. +000D77 FalconStor Software +000D78 Engineering & Security +000D79 Dynamic Solutions Co,.Ltd. +000D7A DiGATTO Asia Pacific Pte Ltd +000D7B Consensys Computers Inc. +000D7C Codian Ltd +000D7D Afco Systems +000D7E Axiowave Networks, Inc. +000D7F MIDAS COMMUNICATION TECHNOLOGIES PTE LTD ( Foreign Branch) +000D80 Online Development Inc +000D81 Pepperl+Fuchs GmbH +000D82 PHS srl +000D83 Sanmina-SCI Hungary Ltd. +000D84 Seodu Inchip, Inc. +000D85 Tapwave, Inc. +000D86 Huber + Suhner AG +000D87 Elitegroup Computer System Co. (ECS) +000D88 D-Link Corporation +000D89 Bils Technology Inc +000D8A Winners Electronics Co., Ltd. +000D8B T&D Corporation +000D8C Shanghai Wedone Digital Ltd. CO. +000D8D ProLinx Communication Gateways, Inc. +000D8E Koden Electronics Co., Ltd. +000D8F King Tsushin Kogyo Co., LTD. +000D90 Factum Electronics AB +000D91 Eclipse (HQ Espana) S.L. +000D92 Arima Communication Corporation +000D93 Apple Computer +000D94 AFAR Communications,Inc +000D96 Vtera Technology Inc. +000D97 Tropos Networks, Inc. +000D98 S.W.A.C. Schmitt-Walter Automation Consult GmbH +000D99 Orbital Sciences Corp.; Launch Systems Group +000D9A INFOTEC LTD +000D9C Elan GmbH & Co KG +000D9D Hewlett Packard +000D9E TOKUDEN OHIZUMI SEISAKUSYO Co.,Ltd. +000D9F RF Micro Devices +000DA0 NEDAP N.V. +000DA1 MIRAE ITS Co.,LTD. +000DA2 Infrant Technologies, Inc. +000DA3 Emerging Technologies Limited +000DA4 DOSCH & AMAND SYSTEMS AG +000DA5 Fabric7 Systems, Inc +000DA6 Universal Switching Corporation +000DA8 Teletronics Technology Corporation +000DA9 T.E.A.M. S.L. +000DAA S.A.Tehnology co.,Ltd. +000DAB Parker Hannifin GmbH Electromechanical Division Europe +000DAC Japan CBM Corporation +000DAD Dataprobe Inc +000DAE SAMSUNG HEAVY INDUSTRIES CO., LTD. +000DAF Plexus Corp (UK) Ltd +000DB0 Olym-tech Co.,Ltd. +000DB1 Japan Network Service Co., Ltd. +000DB2 Ammasso, Inc. +000DB3 SDO Communication Corperation +000DB4 NETASQ +000DB5 GLOBALSAT TECHNOLOGY CORPORATION +000DB6 Teknovus, Inc. +000DB7 SANKO ELECTRIC CO,.LTD +000DB8 SCHILLER AG +000DB9 PC Engines GmbH +000DBA Océ Document Technologies GmbH +000DBB Nippon Dentsu Co.,Ltd. +000DBC Cisco Systems +000DBD Cisco Systems +000DBE Bel Fuse Europe Ltd.,UK +000DBF TekTone Sound & Signal Mfg., Inc. +000DC0 Spagat AS +000DC1 SafeWeb Inc +000DC3 First Communication, Inc. +000DC4 Emcore Corporation +000DC5 EchoStar International Corporation +000DC6 DigiRose Technology Co., Ltd. +000DC7 COSMIC ENGINEERING INC. +000DC8 AirMagnet, Inc +000DC9 THALES Elektronik Systeme GmbH +000DCA Tait Electronics +000DCB Petcomkorea Co., Ltd. +000DCC NEOSMART Corp. +000DCD GROUPE TXCOM +000DCE Dynavac Technology Pte Ltd +000DCF Cidra Corp. +000DD0 TetraTec Instruments GmbH +000DD1 Stryker Corporation +000DD2 Simrad Optronics ASA +000DD3 SAMWOO Telecommunication Co.,Ltd. +000DD4 Revivio Inc. +000DD5 O'RITE TECHNOLOGY CO.,LTD +000DD7 Bright +000DD8 BBN +000DD9 Anton Paar GmbH +000DDA ALLIED TELESIS K.K. +000DDB AIRWAVE TECHNOLOGIES INC. +000DDC VAC +000DDD PROFÝLO TELRA ELEKTRONÝK SANAYÝ VE TÝCARET A.Þ. +000DDE Joyteck Co., Ltd. +000DDF Japan Image & Network Inc. +000DE0 ICPDAS Co.,LTD +000DE1 Control Products, Inc. +000DE2 CMZ Sistemi Elettronici +000DE3 AT Sweden AB +000DE4 DIGINICS, Inc. +000DE5 Samsung Thales +000DE6 YOUNGBO ENGINEERING CO.,LTD +000DE7 Snap-on OEM Group +000DE8 Nasaco Electronics Pte. Ltd +000DE9 Napatech Aps +000DEA Kingtel Telecommunication Corp. +000DEB CompXs Limited +000DEC Cisco Systems +000DED Cisco Systems +000DEF Soc. Coop. Bilanciai +000DF0 QCOM TECHNOLOGY INC. +000DF1 IONIX INC. +000DF3 Asmax Solutions +000DF4 Watertek Co. +000DF5 Teletronics International Inc. +000DF6 Technology Thesaurus Corp. +000DF7 Space Dynamics Lab +000DF8 ORGA Kartensysteme GmbH +000DF9 NDS Limited +000DFA Micro Control Systems Ltd. +000DFB Komax AG +000DFC ITFOR Inc. resarch and development +000DFD Huges Hi-Tech Inc., +000DFE Hauppauge Computer Works, Inc. +000DFF CHENMING MOLD INDUSTRY CORP. +000E01 ASIP Technologies Inc. +000E02 Advantech AMT Inc. +000E03 Aarohi Communications, Inc. +000E05 WIRELESS MATRIX CORP. +000E06 Team Simoco Ltd +000E07 Sony Ericsson Mobile Communications AB +000E08 Sipura Technology, Inc. +000E09 Shenzhen Coship Software Co.,LTD. +000E0B Netac Technology Co., Ltd. +000E0C Intel Corporation +000E0D HESCH Schröder GmbH +000E0E ESA elettronica S.P.A. +000E0F ERMME +000E11 BDT Büro- und Datentechnik GmbH & Co. KG +000E12 Adaptive Micro Systems Inc. +000E13 Accu-Sort Systems inc. +000E14 Visionary Solutions, Inc. +000E15 Tadlys LTD +000E16 SouthWing +000E18 MyA Technology +000E19 LogicaCMG Pty Ltd +000E1B IAV GmbH +000E1C Hach Company +000E1F TCL Networks Equipment Co., Ltd. +000E20 PalmSource, Inc. +000E21 MTU Friedrichshafen GmbH +000E23 Incipient, Inc. +000E25 Hannae Technology Co., Ltd +000E26 Gincom Technology Corp. +000E27 Crere Networks, Inc. +000E28 Dynamic Ratings P/L +000E29 Shester Communications Inc +000E2B Safari Technologies +000E2C Netcodec co. +000E2D Hyundai Digital Technology Co.,Ltd. +000E2E Edimax Technology Co., Ltd. +000E2F Disetronic Medical Systems AG +000E30 AERAS Networks, Inc. +000E31 Olympus BioSystems GmbH +000E32 Kontron Medical +000E33 Shuko Electronics Co.,Ltd +000E34 NexxGenCity +000E35 Intel Corp +000E36 HEINESYS, Inc. +000E37 Harms & Wende GmbH & Co.KG +000E38 Cisco Systems +000E39 Cisco Systems +000E3A Cirrus Logic +000E3B Hawking Technologies, Inc. +000E3C TransAct Technoloiges Inc. +000E3D Televic N.V. +000E3E Sun Optronics Inc +000E3F Soronti, Inc. +000E40 Nortel Networks +000E41 NIHON MECHATRONICS CO.,LTD. +000E42 Motic Incoporation Ltd. +000E43 G-Tek Electronics Sdn. Bhd. +000E44 Digital 5, Inc. +000E45 Beijing Newtry Electronic Technology Ltd +000E46 Niigata Seimitsu Co.,Ltd. +000E47 NCI System Co.,Ltd. +000E48 Lipman TransAction Solutions +000E49 Forsway Scandinavia AB +000E4A Changchun Huayu WEBPAD Co.,LTD +000E4B atrium c and i +000E4C Bermai Inc. +000E4D Numesa Inc. +000E4E Waveplus Technology Co., Ltd. +000E4F Trajet GmbH +000E50 Thomson Multi Media +000E51 tecna elettronica srl +000E52 Optium Corporation +000E53 AV TECH CORPORATION +000E54 AlphaCell Wireless Ltd. +000E55 AUVITRAN +000E56 4G Systems GmbH +000E57 Iworld Networking, Inc. +000E58 Rincon Networks +000E5A TELEFIELD inc. +000E5B ParkerVision - Direct2Data +000E5C Motorola BCS +000E5D Com-X Networks +000E5E Beijing Raisecom Science & Technology Development Co.,Ltd +000E5F activ-net GmbH & Co. KG +000E60 360SUN Digital Broadband Corporation +000E61 MICROTROL LIMITED +000E62 Nortel Networks +000E63 Lemke Diagnostics GmbH +000E64 Elphel, Inc +000E65 TransCore +000E66 Hitachi Advanced Digital, Inc. +000E67 Eltis Microelectronics Ltd. +000E68 E-TOP Network Technology Inc. +000E69 China Electric Power Research Institute +000E6A 3COM EUROPE LTD +000E6B Janitza electronics GmbH +000E6C Device Drivers Limited +000E6D Murata Manufacturing Co., Ltd. +000E6E MICRELEC ELECTRONICS S.A +000E6F IRIS Corporation Berhad +000E70 in2 Networks +000E71 Gemstar Technology Development Ltd. +000E72 CTS electronics +000E73 Tpack A/S +000E74 Solar Telecom. Tech +000E75 New York Air Brake Corp. +000E76 GEMSOC INNOVISION INC. +000E77 Decru, Inc. +000E78 Amtelco +000E79 Ample Communications Inc. +000E7B Toshiba +000E7D Electronics Line 3000 Ltd. +000E7E Comprog Oy +000E7F Hewlett Packard +000E81 Instant802 Networks Inc. +000E82 Commtech Wireless +000E83 Cisco Systems +000E84 Cisco Systems +000E85 Catalyst Enterprises, Inc. +000E86 Alcatel North America +000E87 adp Gauselmann GmbH +000E88 VIDEOTRON CORP. +000E89 CLEMATIC +000E8A Avara Technologies Pty. Ltd. +000E8B Astarte Technology Co, Ltd. +000E8C Siemens AG A&D ET +000E8D Systems in Progress Holding GmbH +000E8E SparkLAN Communications, Inc. +000E8F Sercomm Corp. +000E90 PONICO CORP. +000E92 Millinet Co., Ltd. +000E93 Milénio 3 Sistemas Electrónicos, Lda. +000E94 Maas International BV +000E95 Fujiya Denki Seisakusho Co.,Ltd. +000E96 Cubic Defense Applications, Inc. +000E97 Ultracker Technology CO., Inc +000E98 Vitec CC, INC. +000E99 Spectrum Digital, Inc +000E9A BOE TECHNOLOGY GROUP CO.,LTD +000E9C Pemstar +000E9D Video Networks Ltd +000E9E Topfield Co., Ltd +000E9F TEMIC SDS GmbH +000EA0 NetKlass Technology Inc. +000EA1 Formosa Teletek Corporation +000EA2 CyberGuard Corporation +000EA3 CNCR-IT CO.,LTD,HangZhou P.R.CHINA +000EA4 Certance Inc. +000EA5 BLIP Systems +000EA6 ASUSTEK COMPUTER INC. +000EA7 Endace Inc Ltd. +000EA8 United Technologists Europe Limited +000EA9 Shanghai Xun Shi Communications Equipment Ltd. Co. +000EAC MINTRON ENTERPRISE CO., LTD. +000EAD Metanoia Technologies, Inc. +000EAE GAWELL TECHNOLOGIES CORP. +000EAF CASTEL +000EB0 Solutions Radio BV +000EB1 Newcotech,Ltd +000EB2 Micro-Research Finland Oy +000EB3 LeftHand Networks +000EB4 GUANGZHOU GAOKE COMMUNICATIONS TECHNOLOGY CO.LTD. +000EB5 Ecastle Electronics Co., Ltd. +000EB6 Riverbed Technology, Inc. +000EB7 Knovative, Inc. +000EB8 Iiga co.,Ltd +000EB9 HASHIMOTO Electronics Industry Co.,Ltd. +000EBA HANMI SEMICONDUCTOR CO., LTD. +000EBB Everbee Networks +000EBC Cullmann GmbH +000EBD Burdick, a Quinton Compny +000EBE B&B Electronics Manufacturing Co. +000EC0 Nortel Networks +000EC1 MYNAH Technologies +000EC2 Lowrance Electronics, Inc. +000EC3 Logic Controls, Inc. +000EC4 Iskra Transmission d.d. +000EC6 ASIX ELECTRONICS CORP. +000EC7 Appeal Telecom Co.,Ltd. +000EC8 Zoran Corporation +000EC9 YOKO Technology Corp. +000ECB VineSys Technology +000ECC Tableau +000ECD SKOV A/S +000ECE S.I.T.T.I. S.p.A. +000ECF PROFIBUS Nutzerorganisation e.V. +000ED0 Privaris, Inc. +000ED1 Osaka Micro Computer. +000ED2 Filtronic plc +000ED3 Epicenter, Inc. +000ED4 CRESITT INDUSTRIE +000ED5 COPAN Systems Inc. +000ED6 Cisco Systems +000ED7 Cisco Systems +000ED8 Aktino, Inc. +000ED9 Aksys, Ltd. +000EDA C-TECH UNITED CORP. +000EDB XiNCOM Corp. +000EDC Tellion INC. +000EDD SHURE INCORPORATED +000EDE REMEC, Inc. +000EDF PLX Technology +000EE0 Mcharge +000EE1 ExtremeSpeed Inc. +000EE2 Custom Engineering S.p.A. +000EE3 Chiyu Technology Co.,Ltd +000EE5 bitWallet, Inc. +000EE6 Adimos Systems LTD +000EE7 AAC ELECTRONICS CORP. +000EE8 zioncom +000EE9 WayTech Development, Inc. +000EEA Shadong Luneng Jicheng Electronics,Co.,Ltd +000EEB Sandmartin(zhong shan)Electronics Co.,Ltd +000EEC Orban +000EED Nokia Danmark A/S +000EEE Muco Industrie BV +000EF0 Festo AG & Co. KG +000EF1 EZQUEST INC. +000EF3 Smarthome +000EF4 Shenzhen Kasda Digital Technology Co.,Ltd +000EF5 iPAC Technology Co., Ltd. +000EF6 E-TEN Information Systems Co., Ltd. +000EF7 Vulcan Portals Inc +000EF8 SBC ASI +000EF9 REA Elektronik GmbH +000EFA Optoway Technology Incorporation +000EFB Macey Enterprises +000EFC JTAG Technologies B.V. +000EFD FUJI PHOTO OPTICAL CO., LTD. +000EFE EndRun Technologies LLC +000EFF Megasolution,Inc. +000F00 Legra Systems, Inc. +000F01 DIGITALKS INC +000F02 Digicube Technology Co., Ltd +000F03 COM&C CO., LTD +000F04 cim-usa inc +000F05 3B SYSTEM INC. +000F06 Nortel Networks +000F07 Mangrove Systems, Inc. +000F08 Indagon Oy +000F0B Kentima Technologies AB +000F0C SYNCHRONIC ENGINEERING +000F0D Hunt Electronic Co., Ltd. +000F0E WaveSplitter Technologies, Inc. +000F0F Real ID Technology Co., Ltd. +000F10 RDM Corporation +000F11 Prodrive B.V. +000F12 Panasonic AVC Networks Germany GmbH +000F13 Nisca corporation +000F14 Mindray Co., Ltd. +000F15 Kjaerulff1 A/S +000F16 JAY HOW TECHNOLOGY CO., +000F17 Insta Elektro GmbH +000F18 Industrial Control Systems +000F19 Guidant Corporation +000F1A Gaming Support B.V. +000F1B Ego Systems Inc. +000F1C DigitAll World Co., Ltd +000F1D Cosmo Techs Co., Ltd. +000F1E Chengdu KT Electric Co.of High & New Technology +000F1F WW PCBA Test +000F20 WW Ops +000F21 Scientific Atlanta, Inc +000F22 Helius, Inc. +000F23 Cisco Systems +000F24 Cisco Systems +000F25 AimValley B.V. +000F26 WorldAccxx LLC +000F27 TEAL Electronics, Inc. +000F28 Itronix Corporation +000F29 Augmentix Corporation +000F2A Cableware Electronics +000F2B GREENBELL SYSTEMS +000F2C Uplogix, Inc. +001000 CABLE TELEVISION LABORATORIES, INC. 001001 MCK COMMUNICATIONS 001002 ACTIA 001003 IMATRON, INC. 001004 THE BRANTLEY COILE COMPANY,INC 001005 UEC COMMERCIAL -001006 RACAL RECORDERS LTD. +001006 Thales Contact Solutions Ltd. 001007 CISCO SYSTEMS, INC. 001008 VIENNA SYSTEMS CORPORATION 001009 HORO QUARTZ @@ -1673,20 +3787,20 @@ 001012 PROCESSOR SYSTEMS (I) PVT LTD 001013 INDUSTRIAL COMPUTER SOURCE 001014 CISCO SYSTEMS, INC. -001015 OOMON INC. +001015 OOmon Inc. 001016 T.SQWARE -001017 MICOS GMBH +001017 MICOS GmbH 001018 BROADCOM CORPORATION -001019 SIRONA DENTAL SYSTEMS -00101A PICTURETEL CORP. +001019 SIRONA DENTAL SYSTEMS GmbH & Co. KG +00101A PictureTel Corp. 00101B CORNET TECHNOLOGY, INC. 00101C OHM TECHNOLOGIES INTL, LLC 00101D WINBOND ELECTRONICS CORP. -00101E MATSUSHITA ELECTRONIC +00101E MATSUSHITA ELECTRONIC INSTRUMENTS CORP. 00101F CISCO SYSTEMS, INC. 001020 WELCH ALLYN, DATA COLLECTION 001021 ENCANTO NETWORKS, INC. -001022 SATCOM MEDIA CORPORATION +001022 SatCom Media Corporation 001023 FLOWWISE NETWORKS, INC. 001024 NAGOYA ELECTRIC WORKS CO., LTD 001025 GRAYHILL INC. @@ -1698,18 +3812,18 @@ 00102B UMAX DATA SYSTEMS, INC. 00102C Lasat Networks A/S 00102D HITACHI SOFTWARE ENGINEERING -00102E NETWORK SYSTEMS & TECHNOLOGIES +00102E NETWORK SYSTEMS & TECHNOLOGIES PVT. LTD. 00102F CISCO SYSTEMS, INC. -001030 WI-LAN, INC. +001030 Wi-LAN, Inc. 001031 OBJECTIVE COMMUNICATIONS, INC. 001032 ALTA TECHNOLOGY 001033 ACCESSLAN COMMUNICATIONS, INC. -001034 GNP COMPUTERS -001035 ELITEGROUP COMPUTER +001034 GNP Computers +001035 ELITEGROUP COMPUTER SYSTEMS CO., LTD 001036 INTER-TEL INTEGRATED SYSTEMS -001037 CYQ'VE TECHNOLOGY CO., LTD. +001037 CYQ've Technology Co., Ltd. 001038 MICRO RESEARCH INSTITUTE, INC. -001039 VECTRON SYSTEMS GMBH +001039 Vectron Systems AG 00103A DIAMOND NETWORK TECH 00103B HIPPI NETWORKING FORUM 00103C IC ENSEMBLE, INC. @@ -1718,9 +3832,9 @@ 00103F TOLLGRADE COMMUNICATIONS, INC. 001040 INTERMEC CORPORATION 001041 BRISTOL BABCOCK, INC. -001042 ALACRITECH +001042 AlacriTech 001043 A2 CORPORATION -001044 INNOLABS CORPORATION +001044 InnoLabs Corporation 001045 Nortel Networks 001046 ALCORN MCBRIDE INC. 001047 ECHO ELETRIC CO. LTD. @@ -1740,12 +3854,12 @@ 001055 FUJITSU MICROELECTRONICS, INC. 001056 SODICK CO., LTD. 001057 Rebel.com, Inc. -001058 ARROWPOINT COMMUNICATIONS,INC. +001058 ArrowPoint Communications 001059 DIABLO RESEARCH CO. LLC 00105A 3COM CORPORATION 00105B NET INSIGHT AB 00105C QUANTUM DESIGNS (H.K.) LTD. -00105D DRAGER, BUSINESS UNIT +00105D Draeger Medical 00105E HEKIMIAN LABORATORIES, INC. 00105F IN-SNEC 001060 BILLIONTON SYSTEMS, INC. @@ -1760,7 +3874,7 @@ 001069 HELIOSS COMMUNICATIONS, INC. 00106A DIGITAL MICROWAVE CORPORATION 00106B SONUS NETWORKS, INC. -00106C INFRATEC PLUS GMBH +00106C INFRATEC PLUS GmbH 00106D INTEGRITY COMMUNICATIONS, INC. 00106E TADIRAN COM. LTD. 00106F TRENTON TECHNOLOGY INC. @@ -1770,15 +3884,15 @@ 001073 TECHNOBOX, INC. 001074 ATEN INTERNATIONAL CO., LTD. 001075 Maxtor Corporation -001076 EUREM GMBH +001076 EUREM GmbH 001077 SAF DRIVE SYSTEMS, LTD. 001078 NUERA COMMUNICATIONS, INC. 001079 CISCO SYSTEMS, INC. -00107A AMBICOM, INC. +00107A AmbiCom, Inc. 00107B CISCO SYSTEMS, INC. 00107C P-COM, INC. 00107D AURORA COMMUNICATIONS, LTD. -00107E BACHMANN ELECTRONIC GMBH +00107E BACHMANN ELECTRONIC GmbH 00107F CRESTRON ELECTRONICS, INC. 001080 METAWAVE COMMUNICATIONS 001081 DPS, INC. @@ -1789,23 +3903,23 @@ 001086 ATTO TECHNOLOGY, INC. 001087 Xstreamis PLC 001088 AMERICAN NETWORKS INC. -001089 WEBSONIC -00108A TERALOGIC, INC. -00108B LASERANIMATION SOLLINGER GMBH -00108C FUJITSU TELECOMMUNICATIONS +001089 WebSonic +00108A TeraLogic, Inc. +00108B LASERANIMATION SOLLINGER GmbH +00108C FUJITSU TELECOMMUNICATIONS EUROPE, LTD. 00108D JOHNSON CONTROLS, INC. -00108E HUGH SYMONS CONCEPT +00108E HUGH SYMONS CONCEPT Technologies Ltd. 00108F RAPTOR SYSTEMS 001090 CIMETRICS, INC. 001091 NO WIRES NEEDED BV 001092 NETCORE INC. 001093 CMS COMPUTERS, LTD. -001094 ADTECH, INC. -001095 THOMSON CONSUMER ELECTRONICS +001094 Performance Analysis Broadband, Spirent plc +001095 Thomson Multimedia, Inc. 001096 TRACEWELL SYSTEMS, INC. -001097 WINNET METROPOLITAN +001097 WinNet Metropolitan Communications Systems, Inc. 001098 STARNET TECHNOLOGIES, INC. -001099 INNOMEDIA, INC. +001099 InnoMedia, Inc. 00109A NETLINE 00109B VIXEL CORPORATION 00109C M-SYSTEM CO., LTD. @@ -1840,10 +3954,10 @@ 0010B9 MAXTOR CORP. 0010BA MARTINHO-DAVIS SYSTEMS, INC. 0010BB DATA & INFORMATION TECHNOLOGY -0010BC Nortel Networks -0010BD THE TELECOMMUNICATION +0010BC Aastra Telecom +0010BD THE TELECOMMUNICATION TECHNOLOGY COMMITTEE 0010BE TELEXIS CORP. -0010BF INTER AIR WIRELESS +0010BF InterAir Wireless 0010C0 ARMA, INC. 0010C1 OI ELECTRIC CO., LTD. 0010C2 WILLNET, INC. @@ -1852,11 +3966,11 @@ 0010C5 PROTOCOL TECHNOLOGIES, INC. 0010C6 USI 0010C7 DATA TRANSMISSION NETWORK -0010C8 COMMUNICATIONS ELECTRONICS -0010C9 MITSUBISHI ELECTRONICS +0010C8 COMMUNICATIONS ELECTRONICS SECURITY GROUP +0010C9 MITSUBISHI ELECTRONICS LOGISTIC SUPPORT CO. 0010CA INTEGRAL ACCESS 0010CB FACIT K.K. -0010CC CLP COMPUTER LOGISTIK +0010CC CLP COMPUTER LOGISTIK PLANUNG GmbH 0010CD INTERFACE CONCEPT 0010CE VOLAMP, LTD. 0010CF FIBERLANE COMMUNICATIONS @@ -1866,40 +3980,39 @@ 0010D3 GRIPS ELECTRONIC GMBH 0010D4 STORAGE COMPUTER CORPORATION 0010D5 IMASDE CANARIAS, S.A. -0010D6 ITT A/CD +0010D6 ITT - A/CD 0010D7 ARGOSY RESEARCH INC. 0010D8 CALISTA 0010D9 IBM JAPAN, FUJISAWA MT+D 0010DA MOTION ENGINEERING, INC. -0010DB NETSCREEN TECHNOLOGIES, INC. -0010DC MICRO-STAR INTERNATIONAL +0010DB NetScreen Technologies, Inc. +0010DC MICRO-STAR INTERNATIONAL CO., LTD. 0010DD ENABLE SEMICONDUCTOR, INC. -0010DE INTERNATIONAL DATACASTING +0010DE INTERNATIONAL DATACASTING CORPORATION 0010DF RISE COMPUTER INC. 0010E0 COBALT MICROSERVER, INC. 0010E1 S.I. TECH, INC. -0010E2 ARRAYCOMM, INC. +0010E2 ArrayComm, Inc. 0010E3 COMPAQ COMPUTER CORPORATION 0010E4 NSI CORPORATION 0010E5 SOLECTRON TEXAS -0010E6 APPLIED INTELLIGENT -0010E7 BREEZECOM +0010E6 APPLIED INTELLIGENT SYSTEMS, INC. +0010E7 BreezeCom 0010E8 TELOCITY, INCORPORATED 0010E9 RAIDTEC LTD. 0010EA ADEPT TECHNOLOGY -0010EB SELSIUS SYSTEMS, ILNC. +0010EB SELSIUS SYSTEMS, INC. 0010EC RPCG, LLC 0010ED SUNDANCE TECHNOLOGY, INC. 0010EE CTI PRODUCTS, INC. -0010EF DB NETWORKS, INC. -0010F0 RITTAL-WERK RUDOLF LOH +0010EF DBTEL INCORPORATED 0010F1 I-O CORPORATION 0010F2 ANTEC -0010F3 NEXCOM INTERNATIONAL CO., LTD. +0010F3 Nexcom International Co., Ltd. 0010F4 VERTICAL NETWORKS, INC. 0010F5 AMHERST SYSTEMS, INC. 0010F6 CISCO SYSTEMS, INC. -0010F7 IRIICHI TECHNOLOGIES +0010F7 IRIICHI TECHNOLOGIES Inc. 0010F8 KENWOOD TMI CORPORATION 0010F9 UNIQUE SYSTEMS, INC. 0010FA ZAYANTE, INC. @@ -1934,14 +4047,14 @@ 002016 SHOWA ELECTRIC WIRE & CABLE CO 002017 ORBOTECH 002018 CIS TECHNOLOGY INC. -002019 OHLER GMBH +002019 OHLER GmbH 00201A N-BASE SWITCH COMMUNICATIONS 00201B NORTHERN TELECOM/NETWORK 00201C EXCEL, INC. 00201D KATANA PRODUCTS 00201E NETQUEST CORPORATION 00201F BEST POWER TECHNOLOGY, INC. -002020 MEGATRON COMPUTER INDUSTRIES +002020 MEGATRON COMPUTER INDUSTRIES PTY, LTD. 002021 ALGORITHMS SOFTWARE PVT. LTD. 002022 TEKNIQUE, INC. 002023 T.C. TECHNOLOGIES PTY. LTD @@ -1952,26 +4065,26 @@ 002028 WEST EGG SYSTEMS, INC. 002029 TELEPROCESSING PRODUCTS, INC. 00202A N.V. DZINE -00202B ADVANCED TELECOMMUNICATIONS +00202B ADVANCED TELECOMMUNICATIONS MODULES, LTD. 00202C WELLTRONIX CO., LTD. 00202D TAIYO CORPORATION 00202E DAYSTAR DIGITAL 00202F ZETA COMMUNICATIONS, LTD. 002030 ANALOG & DIGITAL SYSTEMS -002031 ERTEC GMBH +002031 ERTEC GmbH 002032 ALCATEL TAISEL 002033 SYNAPSE TECHNOLOGIES, INC. 002034 ROTEC INDUSTRIEAUTOMATION GMBH 002035 IBM CORPORATION 002036 BMC SOFTWARE 002037 SEAGATE TECHNOLOGY -002038 VME MICROSYSTEMS INTERNATIONAL +002038 VME MICROSYSTEMS INTERNATIONAL CORPORATION 002039 SCINETS 00203A DIGITAL BI0METRICS INC. 00203B WISDM LTD. 00203C EUROTIME AB 00203D NOVAR ELECTRONICS CORPORATION -00203E LOGICAN TECHNOLOGIES, INC. +00203E LogiCan Technologies, Inc. 00203F JUKI CORPORATION 002040 Motorola Broadband Communications Sector 002041 DATA NET @@ -1990,22 +4103,22 @@ 00204E NETWORK SECURITY SYSTEMS, INC. 00204F DEUTSCHE AEROSPACE AG 002050 KOREA COMPUTER INC. -002051 PHOENIX DATA COMMUNUNICATIONS +002051 Verilink Corporation 002052 RAGULA SYSTEMS 002053 HUNTSVILLE MICROSYSTEMS, INC. 002054 EASTERN RESEARCH, INC. 002055 ALTECH CO., LTD. 002056 NEOPRODUCTS -002057 TITZE DATENTECHNIK GMBH +002057 TITZE DATENTECHNIK GmbH 002058 ALLIED SIGNAL INC. 002059 MIRO COMPUTER PRODUCTS AG 00205A COMPUTER IDENTICS 00205B SKYLINE TECHNOLOGY -00205C INTERNET SYSTEMS/ FLORIDA INC. +00205C InterNet Systems of Florida, Inc. 00205D NANOMATIC OY 00205E CASTLE ROCK, INC. 00205F GAMMADATA COMPUTER GMBH -002060 ALCATEL ITALIA S.P.A. +002060 ALCATEL ITALIA S.p.A. 002061 DYNATECH COMMUNICATIONS, INC. 002062 SCORPION LOGIC, LTD. 002063 WIPRO INFOTECH LTD. @@ -2015,7 +4128,7 @@ 002068 ISDYNE 002069 ISDN SYSTEMS CORPORATION 00206A OSAKA COMPUTER CORP. -00206B MINOLTA CO., LTD. +00206B KONICA MINOLTA HOLDINGS, INC. 00206C EVERGREEN TECHNOLOGY CORP. 00206D DATA RACE, INC. 00206E XACT, INC. @@ -2030,11 +4143,11 @@ 002077 KARDIOS SYSTEMS CORP. 002078 RUNTOP, INC. 002079 MIKRON GMBH -00207A WISE COMMUNICATIONS, INC. -00207B LEVEL ONE COMMUNICATIONS -00207C AUTEC GMBH +00207A WiSE Communications, Inc. +00207B Intel Corporation +00207C AUTEC GmbH 00207D ADVANCED COMPUTER APPLICATIONS -00207E FINECOM CO., LTD. +00207E FINECOM Co., Ltd. 00207F KYOEI SANGYO CO., LTD. 002080 SYNERGY (UK) LTD. 002081 TITAN ELECTRONICS @@ -2052,13 +4165,13 @@ 00208D CMD TECHNOLOGY 00208E CHEVIN SOFTWARE ENG. LTD. 00208F ECI TELECOM LTD. -002090 ADVANCED COMPRESSION +002090 ADVANCED COMPRESSION TECHNOLOGY, INC. 002091 J125, NATIONAL SECURITY AGENCY 002092 CHESS ENGINEERING B.V. 002093 LANDINGS TECHNOLOGY CORP. 002094 CUBIX CORPORATION 002095 RIVA ELECTRONICS -002096 SIEBE ENVIRONMENTAL CONTROLS +002096 Invensys 002097 APPLIED SIGNAL TECHNOLOGY 002098 HECTRONIC AB 002099 BON ELECTRIC CO., LTD. @@ -2066,7 +4179,7 @@ 00209B ERSAT ELECTRONIC GMBH 00209C PRIMARY ACCESS CORP. 00209D LIPPERT AUTOMATIONSTECHNIK -00209E BROWN'S OPERATING SYSTEM +00209E BROWN'S OPERATING SYSTEM SERVICES, LTD. 00209F MERCURY COMPUTER SYSTEMS, INC. 0020A0 OA LABORATORY CO., LTD. 0020A1 DOVATRON @@ -2086,7 +4199,7 @@ 0020AF 3COM CORPORATION 0020B0 GATEWAY DEVICES, INC. 0020B1 COMTECH RESEARCH INC. -0020B2 GKD GESELLSCHAFT FUR +0020B2 GKD Gesellschaft Fur Kommunikation Und Datentechnik 0020B3 SCLTEC COMMUNICATIONS SYSTEMS 0020B4 TERMA ELEKTRONIK AS 0020B5 YASKAWA ELECTRIC CORPORATION @@ -2123,18 +4236,18 @@ 0020D4 CABLETRON - ZEITTNET INC. 0020D5 VIPA GMBH 0020D6 BREEZECOM -0020D7 JAPAN MINICOMPUTER SYSTEMS CO. -0020D8 NETWAVE TECHNOLOGIES, INC. -0020D9 PANASONIC TECHNOLOGIES, INC./ +0020D7 JAPAN MINICOMPUTER SYSTEMS CO., Ltd. +0020D8 Nortel Networks +0020D9 PANASONIC TECHNOLOGIES, INC./MIECO-US 0020DA XYLAN CORPORATION 0020DB XNET TECHNOLOGY, INC. 0020DC DENSITRON TAIWAN LTD. -0020DD AWA LTD. +0020DD Cybertec Pty Ltd 0020DE JAPAN DIGITAL LABORAT'Y CO.LTD 0020DF KYOSAN ELECTRIC MFG. CO., LTD. 0020E0 PREMAX ELECTRONICS, INC. 0020E1 ALAMAR ELECTRONICS -0020E2 INFORMATION RESOURCE +0020E2 INFORMATION RESOURCE ENGINEERING 0020E3 MCD KENCOM CORPORATION 0020E4 HSING TECH ENTERPRISE CO., LTD 0020E5 APEX DATA, INC. @@ -2214,7 +4327,7 @@ 00302F Smiths Industries 003030 HARMONIX CORPORATION 003031 LIGHTWAVE COMMUNICATIONS, INC. -003032 MAGICRAM, INC. +003032 MagicRam, Inc. 003033 ORIENT TELECOM CO., LTD. 003036 RMP ELEKTRONIKSYSTEME GMBH 003037 Packard Bell Nec Services @@ -2323,7 +4436,7 @@ 00309E WORKBIT CORPORATION. 00309F AMBER NETWORKS 0030A0 TYCO SUBMARINE SYSTEMS, LTD. -0030A1 OPTI TECH CO., LTD. +0030A1 WEBGATE Inc. 0030A2 Lightner Engineering 0030A3 CISCO SYSTEMS, INC. 0030A4 Woodwind Communications System @@ -2337,7 +4450,7 @@ 0030AC Systeme Lauer GmbH & Co., Ltd. 0030AD SHANGHAI COMMUNICATION 0030AE Times N System, Inc. -0030AF Honeywell Reqelsysteme GmbH +0030AF Honeywell GmbH 0030B0 Convergenet Technologies 0030B1 GOC GESELLSCHAFT FUR OPTISCHE 0030B2 WESCAM - HEALDSBURG @@ -2531,7 +4644,7 @@ 00406F SYNC RESEARCH INC. 004070 INTERWARE CO., LTD. 004071 ATM COMPUTER GMBH -004072 APPLIED INNOVATION, INC. +004072 Applied Innovation Inc. 004073 BASS ASSOCIATES 004074 CABLE AND WIRELESS 004075 M-TRADE (UK) LTD @@ -2544,7 +4657,7 @@ 00407C QUME CORPORATION 00407D EXTENSION TECHNOLOGY CORP. 00407E EVERGREEN SYSTEMS, INC. -00407F AGEMA INFRARED SYSTEMS AB +00407F FLIR Systems 004080 ATHENIX CORPORATION 004081 MANNESMANN SCANGRAPHIC GMBH 004082 LABORATORY EQUIPMENT CORP. @@ -2673,34 +4786,35 @@ 0040FD LXE 0040FE SYMPLEX COMMUNICATIONS 0040FF TELEBIT CORPORATION +004252 RLX Technologies 005000 NEXO COMMUNICATIONS, INC. 005001 YAMASHITA SYSTEMS CORP. 005002 OMNISEC AG 005003 GRETAG MACBETH AG 005004 3COM CORPORATION 005006 TAC AB -005007 SIEMENS TELECOMMUNICATION +005007 SIEMENS TELECOMMUNICATION SYSTEMS LIMITED 005008 TIVA MICROCOMPUTER CORP. (TMC) 005009 PHILIPS BROADBAND NETWORKS 00500A IRIS TECHNOLOGIES, INC. 00500B CISCO SYSTEMS, INC. -00500C ETEK LABS, INC. +00500C e-Tek Labs, Inc. 00500D SATORI ELECTORIC CO., LTD. -00500E CHROMATIS NETWORKS,INC. +00500E CHROMATIS NETWORKS, INC. 00500F CISCO SYSTEMS, INC. -005010 NOVANET LEARNING, INC. +005010 NovaNET Learning, Inc. 005012 CBL - GMBH -005013 Chaparral Technologies, Inc. +005013 Chaparral Network Storage 005014 CISCO SYSTEMS, INC. 005015 BRIGHT STAR ENGINEERING 005016 SST/WOODHEAD INDUSTRIES 005017 RSR S.R.L. -005018 ADVANCED MULTIMEDIA INTERNET +005018 ADVANCED MULTIMEDIA INTERNET TECHNOLOGY INC. 005019 SPRING TIDE NETWORKS, INC. 00501A UISIQN 00501B ABL CANADA, INC. 00501C JATOM SYSTEMS, INC. -00501E MIRANDA TECHNOLOGIES, INC. +00501E Miranda Technologies, Inc. 00501F MRG SYSTEMS, LTD. 005020 MEDIASTAR CO., LTD. 005021 EIS INTERNATIONAL, INC. @@ -2716,7 +4830,7 @@ 00502C SOYO COMPUTER, INC. 00502D ACCEL, INC. 00502E CAMBEX CORPORATION -00502F TOLLBRIDGE TECHNOLOGIES, INC. +00502F TollBridge Technologies, Inc. 005030 FUTURE PLUS SYSTEMS 005031 AEROFLEX LABORATORIES, INC. 005032 PICAZO COMMUNICATIONS, INC. @@ -2732,7 +4846,7 @@ 00503F ANCHOR GAMES 005040 EMWARE, INC. 005041 CTX OPTO ELECTRONIC CORP. -005042 SCI MANUFACTURING +005042 SCI MANUFACTURING SINGAPORE PTE, LTD. 005043 MARVELL SEMICONDUCTOR, INC. 005044 ASACA CORPORATION 005045 RIOWORKS SOLUTIONS, INC. @@ -2751,10 +4865,10 @@ 005053 CISCO SYSTEMS, INC. 005054 CISCO SYSTEMS, INC. 005055 DOMS A/S -005056 VMWARE, INC. +005056 VMWare, Inc. 005057 BROADBAND ACCESS SYSTEMS 005058 VEGASTREAM LIMITED -005059 SUITE TECHNOLOGY SYSTEMS +005059 SUITE TECHNOLOGY SYSTEMS NETWORK 00505A NETWORK ALCHEMY, INC. 00505B KAWASAKI LSI U.S.A., INC. 00505C TUNDO CORPORATION @@ -2765,10 +4879,10 @@ 005063 OY COMSEL SYSTEM AB 005064 CAE ELECTRONICS 005065 DENSEI-LAMBAD Co., Ltd. -005066 ATECOM GMBH ADVANCED +005066 AtecoM GmbH advanced telecomunication modules 005067 AEROCOMM, INC. -005068 ELECTRONIC INDUSTRIES -005069 PIXSTREAM INCORPORATED +005068 ELECTRONIC INDUSTRIES ASSOCIATION +005069 PixStream Incorporated 00506A EDEVA, INC. 00506B SPX-ATEG 00506C G & L BEIJER ELECTRONICS AB @@ -2789,7 +4903,7 @@ 00507C VIDEOCON AG 00507D IFP 00507E NEWER TECHNOLOGY -00507F DRAYTEK CORP. +00507F DrayTek Corp. 005080 CISCO SYSTEMS, INC. 005081 MURATA MACHINERY, LTD. 005082 FORESSON CORPORATION @@ -2811,29 +4925,29 @@ 005094 PACE MICRO TECHNOLOGY PLC 005095 PERACOM NETWORKS 005096 SALIX TECHNOLOGIES, INC. -005097 MMC-EMBEDDED +005097 MMC-EMBEDDED COMPUTERTECHNIK GmbH 005098 GLOBALOOP, LTD. 005099 3COM EUROPE, LTD. 00509A TAG ELECTRONIC SYSTEMS 00509B SWITCHCORE AB 00509C BETA RESEARCH 00509D THE INDUSTREE B.V. -00509E LES TECHNOLOGIES +00509E Les Technologies SoftAcoustik Inc. 00509F HORIZON COMPUTER 0050A0 DELTA COMPUTER SYSTEMS, INC. 0050A1 CARLO GAVAZZI, INC. 0050A2 CISCO SYSTEMS, INC. -0050A3 TRANSMEDIA COMMUNICATIONS, INC +0050A3 TransMedia Communications, Inc. 0050A4 IO TECH, INC. 0050A5 CAPITOL BUSINESS SYSTEMS, LTD. 0050A6 OPTRONICS 0050A7 CISCO SYSTEMS, INC. -0050A8 OPENCON SYSTEMS, INC. +0050A8 OpenCon Systems, Inc. 0050A9 MOLDAT WIRELESS TECHNOLGIES -0050AA KONICA CORPORATION +0050AA KONICA MINOLTA HOLDINGS, INC. 0050AB NALTEC, INC. 0050AC MAPLE COMPUTER CORPORATION -0050AD COMMUNIQUE WIRELESS CORP. +0050AD CommUnique Wireless Corp. 0050AE IWAKI ELECTRONICS CO., LTD. 0050AF INTERGON, INC. 0050B0 TECHNOLOGY ATLANTA CORPORATION @@ -2857,7 +4971,7 @@ 0050C2 IEEE REGISTRATION AUTHORITY 0050C4 IMD 0050C5 ADS TECHNOLOGIES, INC. -0050C6 LOOP TELECOMMUNICATION +0050C6 LOOP TELECOMMUNICATION INTERNATIONAL, INC. 0050C8 ADDONICS COMMUNICATIONS, INC. 0050C9 MASPRO DENKOH CORP. 0050CA NET TO NET TECHNOLOGIES @@ -2865,52 +4979,52 @@ 0050CC XYRATEX 0050CD DIGIANSWER A/S 0050CE LG INTERNATIONAL CORP. -0050CF VANLINK COMMUNICATION +0050CF VANLINK COMMUNICATION TECHNOLOGY RESEARCH INSTITUTE 0050D0 MINERVA SYSTEMS 0050D1 CISCO SYSTEMS, INC. 0050D2 BAE Systems Canada, Inc. -0050D3 DIGITAL AUDIO +0050D3 DIGITAL AUDIO PROCESSING PTY. LTD. 0050D4 JOOHONG INFORMATION & 0050D5 AD SYSTEMS CORP. 0050D6 ATLAS COPCO TOOLS AB 0050D7 TELSTRAT 0050D8 UNICORN COMPUTER CORP. -0050D9 ENGETRON-ENGENHARIA ELETRONICA +0050D9 ENGETRON-ENGENHARIA ELETRONICA IND. e COM. LTDA 0050DA 3COM CORPORATION 0050DB CONTEMPORARY CONTROL -0050DC TAS TELEFONBAU A. SCHWABE +0050DC TAS TELEFONBAU A. SCHWABE GMBH & CO. KG 0050DD SERRA SOLDADURA, S.A. 0050DE SIGNUM SYSTEMS CORP. -0050DF AIRFIBER, INC. +0050DF AirFiber, Inc. 0050E1 NS TECH ELECTRONICS SDN BHD 0050E2 CISCO SYSTEMS, INC. -0050E3 TELEGATE +0050E3 Terayon Communications Systems 0050E4 APPLE COMPUTER, INC. 0050E6 HAKUSAN CORPORATION 0050E7 PARADISE INNOVATIONS (ASIA) 0050E8 NOMADIX INC. -0050EA XEL COMMUNICTIONS, INC. +0050EA XEL COMMUNICATIONS, INC. 0050EB ALPHA-TOP CORPORATION 0050EC OLICOM A/S 0050ED ANDA NETWORKS 0050EE TEK DIGITEL CORPORATION -0050EF SPE SYSTEMHAUS GMBH +0050EF SPE Systemhaus GmbH 0050F0 CISCO SYSTEMS, INC. 0050F1 LIBIT SIGNAL PROCESSING, LTD. 0050F2 MICROSOFT CORP. -0050F3 GLOBAL NET INFORMATION CO.,LTD +0050F3 GLOBAL NET INFORMATION CO., Ltd. 0050F4 SIGMATEK GMBH & CO. KG -0050F6 PAN-INTERNATIONAL -0050F7 VENTURE MANUFACTURING +0050F6 PAN-INTERNATIONAL INDUSTRIAL CORP. +0050F7 VENTURE MANUFACTURING (SINGAPORE) LTD. 0050F8 ENTREGA TECHNOLOGIES, INC. 0050FA OXTEL, LTD. 0050FB VSK ELECTRONICS 0050FC EDIMAX TECHNOLOGY CO., LTD. -0050FD ISIONCOMM CO., LTD. -0050FE PCTVNET ASA +0050FD VISIONCOMM CO., LTD. +0050FE PCTVnet ASA 0050FF HAKKO ELECTRONICS CO., LTD. 006000 XYCOM INC. -006001 INNOSYS, INC. +006001 InnoSys, Inc. 006002 SCREEN SUBTITLING SYSTEMS, LTD 006003 TERAOKA WEIGH SYSTEM PTE, LTD. 006004 COMPUTADORES MODULARES SA @@ -2920,9 +5034,9 @@ 006008 3COM CORPORATION 006009 CISCO SYSTEMS, INC. 00600A SORD COMPUTER CORPORATION -00600B LOGWARE GMBH +00600B LOGWARE GmbH 00600C APPLIED DATA SYSTEMS, INC. -00600D MICRODESIGN GMBH +00600D Digital Logic GmbH 00600E WAVENET INTERNATIONAL, INC. 00600F WESTELL, INC. 006010 NETWORK MACHINES, INC. @@ -2934,7 +5048,7 @@ 006016 CLARIION 006017 TOKIMEC INC. 006018 STELLAR ONE CORPORATION -006019 BOEHRINGER MANNHEIM CORP. +006019 Roche Diagnostics 00601A KEITHLEY INSTRUMENTS 00601B MESA ELECTRONICS 00601C TELXON CORPORATION @@ -2951,24 +5065,24 @@ 006027 Superior Modular Products 006028 MACROVISION CORPORATION 006029 CARY PERIPHERALS INC. -00602A SYMICRON COMPUTER +00602A SYMICRON COMPUTER COMMUNICATIONS, LTD. 00602B PEAK AUDIO -00602C LINX DATA TERMINALS, INC. +00602C LINX Data Terminals, Inc. 00602D ALERTON TECHNOLOGIES, INC. 00602E CYCLADES CORPORATION 00602F CISCO SYSTEMS, INC. -006030 VILLAGE TRONIC +006030 VILLAGE TRONIC ENTWICKLUNG 006031 HRK SYSTEMS 006032 I-CUBE, INC. 006033 ACUITY IMAGING, INC. -006034 ROBERT BOSCH GMBH +006034 ROBERT BOSCH GmbH 006035 DALLAS SEMICONDUCTOR, INC. -006036 AUSTRIAN RESEARCH CENTER +006036 AUSTRIAN RESEARCH CENTER SEIBERSDORF 006037 PHILIPS SEMICONDUCTORS 006038 Nortel Networks -006039 SANCOM TECHNOLOGY, INC. +006039 SanCom Technology, Inc. 00603A QUICK CONTROLS LTD. -00603B AMTEC SPA +00603B AMTEC spa 00603C HAGIWARA SYS-COM CO., LTD. 00603D 3CX 00603E CISCO SYSTEMS, INC. @@ -2976,7 +5090,7 @@ 006040 NETRO CORP. 006041 Yokogawa Electric Corporation 006042 TKS (USA), INC. -006043 COMSOFT SYSTEMS, INC. +006043 ComSoft Systems, Inc. 006044 LITTON/POLY-SCIENTIFIC 006045 PATHLIGHT TECHNOLOGIES 006046 VMETRO, INC. @@ -2984,23 +5098,23 @@ 006048 EMC CORPORATION 006049 VINA TECHNOLOGIES 00604A SAIC IDEAS GROUP -00604B BIODATA GMBH +00604B BIODATA GmbH 00604C SAT 00604D MMC NETWORKS, INC. 00604E CYCLE COMPUTER CORPORATION, INC. 00604F SUZUKI MFG. CO., LTD. 006050 INTERNIX INC. 006051 QUALITY SEMICONDUCTOR -006052 PERIPHERALS ENTERPRISE CO., L. +006052 PERIPHERALS ENTERPRISE CO., Ltd. 006053 TOYODA MACHINE WORKS, LTD. 006054 CONTROLWARE GMBH 006055 CORNELL UNIVERSITY 006056 NETWORK TOOLS, INC. 006057 MURATA MANUFACTURING CO., LTD. -006058 COPPER MOUNTAIN +006058 COPPER MOUNTAIN COMMUNICATIONS, INC. 006059 TECHNICAL COMMUNICATIONS CORP. 00605A CELCORE, INC. -00605B INTRASERVER TECHNOLOGY INC. +00605B IntraServer Technology, Inc. 00605C CISCO SYSTEMS, INC. 00605D SCANIVALVE CORP. 00605E LIBERTY TECHNOLOGY NETWORKING @@ -3010,13 +5124,13 @@ 006062 TELESYNC, INC. 006063 PSION DACOM PLC. 006064 NETCOMM LIMITED -006065 BERNECKER & RAINER +006065 BERNECKER & RAINER INDUSTRIE-ELEKTRONIC GmbH 006066 LACROIX TECHNOLGIE 006067 ACER NETXUS INC. 006068 EICON TECHNOLOGY CORPORATION -006069 BROCADE COMMUNICATIONS SYSTEMS -00606A MITSUBISHI WIRELESS COMM. INC. -00606B AICHI ELECTRONICS CO.,LTD. +006069 BROCADE COMMUNICATIONS SYSTEMS, Inc. +00606A MITSUBISHI WIRELESS COMMUNICATIONS. INC. +00606B Synclayer Inc. 00606C ARESCOM 00606D DIGITAL EQUIPMENT CORP. 00606E DAVICOM SEMICONDUCTOR, INC. @@ -3027,13 +5141,13 @@ 006073 REDCREEK COMMUNICATIONS, INC. 006074 QSC AUDIO PRODUCTS 006075 PENTEK, INC. -006076 SCHLUMBERGER TECHNOLOGIES +006076 SCHLUMBERGER TECHNOLOGIES RETAIL PETROLEUM SYSTEMS 006077 PRISA NETWORKS 006078 POWER MEASUREMENT LTD. -006079 WAVEPHORE NETWORKS, INC. -00607A DVS GMBH +006079 Mainstream Data, Inc. +00607A DVS GmbH 00607B FORE SYSTEMS, INC. -00607C WAVEACCESS, LTD. +00607C WaveAccess, Ltd. 00607D SENTIENT NETWORKS INC. 00607E GIGALABS, INC. 00607F AURORA TECHNOLOGIES, INC. @@ -3042,16 +5156,16 @@ 006082 NOVALINK TECHNOLOGIES, INC. 006083 CISCO SYSTEMS, INC. 006084 DIGITAL VIDEO -006085 STORAGE CONCEPTS +006085 Storage Concepts 006086 LOGIC REPLACEMENT TECH. LTD. 006087 KANSAI ELECTRIC CO., LTD. 006088 WHITE MOUNTAIN DSP, INC. 006089 XATA 00608A CITADEL COMPUTER -00608B CONFERTECH INTERNATIONAL +00608B ConferTech International 00608C 3COM CORPORATION 00608D UNIPULSE CORP. -00608E HE ELECTRONICS, TECHNOLOGIE & +00608E HE ELECTRONICS, TECHNOLOGIE & SYSTEMTECHNIK GmbH 00608F TEKRAM TECHNOLOGY CO., LTD. 006090 ABLE COMMUNICATIONS, INC. 006091 FIRST PACIFIC NETWORKS, INC. @@ -3065,24 +5179,24 @@ 006099 LAN MEDIA CORPORATION 00609A NJK TECHNO CO. 00609B ASTRO-MED, INC. -00609C PERKIN-ELMER CORPORATION +00609C Perkin-Elmer Incorporated 00609D PMI FOOD EQUIPMENT GROUP -00609E X3 - INFORMATION TECHNOLOGY +00609E ASC X3 - INFORMATION TECHNOLOGY STANDARDS SECRETARIATS 00609F PHAST CORPORATION -0060A0 SWITCHED NETWORK -0060A1 VPNET +0060A0 SWITCHED NETWORK TECHNOLOGIES, INC. +0060A1 VPNet, Inc. 0060A2 NIHON UNISYS LIMITED CO. 0060A3 CONTINUUM TECHNOLOGY CORP. 0060A4 GRINAKER SYSTEM TECHNOLOGIES 0060A5 PERFORMANCE TELECOM CORP. 0060A6 PARTICLE MEASURING SYSTEMS -0060A7 MICROSENS GMBH & CO. KG +0060A7 MICROSENS GmbH & CO. KG 0060A8 TIDOMAT AB -0060A9 GESYTEC MBH +0060A9 GESYTEC MbH 0060AA INTELLIGENT DEVICES INC. (IDI) 0060AB LARSCOM INCORPORATED 0060AC RESILIENCE CORPORATION -0060AD MEGACHIPS CORPORATION +0060AD MegaChips Corporation 0060AE TRIO INFORMATION SYSTEMS AB 0060AF PACIFIC MICRO DATA, INC. 0060B0 HEWLETT-PACKARD CO. @@ -3090,19 +5204,19 @@ 0060B2 PROCESS CONTROL CORP. 0060B3 Z-COM, INC. 0060B4 GLENAYRE R&D INC. -0060B5 KEBA GMBH +0060B5 KEBA GmbH 0060B6 LAND COMPUTER CO., LTD. 0060B7 CHANNELMATIC, INC. 0060B8 CORELIS INC. 0060B9 NITSUKO CORPORATION 0060BA SAHARA NETWORKS, INC. 0060BB CABLETRON - NETLINK, INC. -0060BC KEUNYOUNG ELECTRONICS & +0060BC KeunYoung Electronics & Communication Co., Ltd. 0060BD HUBBELL-PULSECOM 0060BE WEBTRONICS 0060BF MACRAIGOR SYSTEMS, INC. 0060C0 NERA AS -0060C1 WAVESPAN CORPORATION +0060C1 WaveSpan Corporation 0060C2 MPL AG 0060C3 NETVISION CORPORATION 0060C4 SOLITON SYSTEMS K.K. @@ -3110,40 +5224,40 @@ 0060C6 DCS AG 0060C7 AMATI COMMUNICATIONS CORP. 0060C8 KUKA WELDING SYSTEMS & ROBOTS -0060C9 CONTROLNET, INC. +0060C9 ControlNet, Inc. 0060CA HARMONIC SYSTEMS INCORPORATED 0060CB HITACHI ZOSEN CORPORATION 0060CC EMTRAK, INCORPORATED -0060CD VIDEOSERVER, INC. +0060CD VideoServer, Inc. 0060CE ACCLAIM COMMUNICATIONS 0060CF ALTEON NETWORKS, INC. 0060D0 SNMP RESEARCH INCORPORATED 0060D1 CASCADE COMMUNICATIONS -0060D2 LUCENT TECHNOLOGIES TAIWAN +0060D2 LUCENT TECHNOLOGIES TAIWAN TELECOMMUNICATIONS CO., LTD. 0060D3 AT&T 0060D4 ELDAT COMMUNICATION LTD. 0060D5 MIYACHI TECHNOS CORP. -0060D6 NOVATEL WIRELESS TECHNOLOGIES -0060D7 ECOLE POLYTECHNIQUE FEDERALE +0060D6 NovAtel Wireless Technologies Ltd. +0060D7 ECOLE POLYTECHNIQUE FEDERALE DE LAUSANNE (EPFL) 0060D8 ELMIC SYSTEMS, INC. 0060D9 TRANSYS NETWORKS INC. 0060DA JBM ELECTRONICS CO. 0060DB NTP ELEKTRONIK A/S -0060DC TOYO COMMUNICATION EQUIPMENT +0060DC TOYO COMMUNICATION EQUIPMENT Co., Ltd. 0060DD MYRICOM, INC. -0060DE KAYSER-THREDE GMBH -0060DF INRANGE TECHNOLOGIES CORP. +0060DE KAYSER-THREDE GmbH +0060DF CNT Corporation 0060E0 AXIOM TECHNOLOGY CO., LTD. 0060E1 ORCKIT COMMUNICATIONS LTD. -0060E2 QUEST ENGINEERING & DEV. +0060E2 QUEST ENGINEERING & DEVELOPMENT 0060E3 ARBIN INSTRUMENTS 0060E4 COMPUSERVE, INC. 0060E5 FUJI AUTOMATION CO., LTD. 0060E6 SHOMITI SYSTEMS INCORPORATED 0060E7 RANDATA -0060E8 HITACHI COMPUTER PRODUCTS +0060E8 HITACHI COMPUTER PRODUCTS (AMERICA), INC. 0060E9 ATOP TECHNOLOGIES, INC. -0060EA STREAMLOGIC +0060EA StreamLogic 0060EB FOURTHTRACK SYSTEMS 0060EC HERMARY OPTO ELECTRONICS INC. 0060ED RICARDO TEST AUTOMATION LTD. @@ -3152,19 +5266,19 @@ 0060F0 JOHNSON & JOHNSON MEDICAL, INC 0060F1 EXP COMPUTER, INC. 0060F2 LASERGRAPHICS, INC. -0060F3 NETCOM SYSTEMS, INC. -0060F4 ADVANCED COMPUTER SOLUTIONS, +0060F3 Performance Analysis Broadband, Spirent plc +0060F4 ADVANCED COMPUTER SOLUTIONS, Inc. 0060F5 ICON WEST, INC. -0060F6 NEXTEST COMMUNICATION +0060F6 NEXTEST COMMUNICATIONS PRODUCTS, INC. 0060F7 DATAFUSION SYSTEMS -0060F8 LORAN INTERNATIONAL TECHN. INC +0060F8 Loran International Technologies Inc. 0060F9 DIAMOND LANE COMMUNICATIONS -0060FA EDUCATIONAL TECHNOLOGY +0060FA EDUCATIONAL TECHNOLOGY RESOURCES, INC. 0060FB PACKETEER, INC. -0060FC CONSERVATION THROUGH -0060FD NETICS, INC. +0060FC CONSERVATION THROUGH INNOVATION LTD. +0060FD NetICs, Inc. 0060FE LYNX SYSTEM DEVELOPERS, INC. -0060FF QUVIS, INC. +0060FF QuVis, Inc. 0070B0 M/A-COM INC. COMPANIES 0070B3 DATA RECALL LTD. 008000 MULTITECH SYSTEMS, INC. @@ -3200,7 +5314,7 @@ 00801E XINETRON, INC. 00801F KRUPP ATLAS ELECTRONIK GMBH 008020 NETWORK PRODUCTS -008021 NEWBRIDGE RESEARCH CORP. +008021 Alcatel Canada Inc. 008022 SCAN-OPTICS 008023 INTEGRATED BUSINESS NETWORKS 008024 KALPANA, INC. @@ -3361,7 +5475,7 @@ 0080BF TAKAOKA ELECTRIC MFG. CO. LTD. 0080C0 PENRIL DATACOMM 0080C1 LANEX CORPORATION -0080C2 IEEE 802 COMMITTEE +0080C2 IEEE 802.1 COMMITTEE 0080C3 BICC INFORMATION SYSTEMS & SVC 0080C4 DOCUMENT TECHNOLOGIES, INC. 0080C5 NOVELLCO DE MEXICO @@ -3382,7 +5496,7 @@ 0080D4 CHASE RESEARCH LTD. 0080D5 CADRE TECHNOLOGIES 0080D6 NUVOTECH, INC. -0080D7 FANTUM ENGINEERING, INC. +0080D7 Fantum Engineering 0080D8 NETWORK PERIPHERALS INC. 0080D9 EMK ELEKTRONIK 0080DA BRUEL & KJAER @@ -3400,14 +5514,14 @@ 0080E6 PEER NETWORKS, INC. 0080E7 LYNWOOD SCIENTIFIC DEV. LTD. 0080E8 CUMULUS CORPORATIION -0080E9 MADGE NETWORKS +0080E9 Madge Ltd. 0080EA ADVA Optical Networking Ltd. 0080EB COMPCONTROL B.V. 0080EC SUPERCOMPUTING SOLUTIONS, INC. 0080ED IQ TECHNOLOGIES, INC. 0080EE THOMSON CSF 0080EF RATIONAL -0080F0 KYUSHU MATSUSHITA ELECTRIC CO. +0080F0 Panasonic Communications Co., Ltd. 0080F1 OPUS SYSTEMS 0080F2 RAYCOM SYSTEMS INC 0080F3 SUN ELECTRONICS CORP. @@ -3424,23 +5538,23 @@ 0080FE AZURE TECHNOLOGIES, INC. 0080FF SOC. DE TELEINFORMATIQUE RTC 009000 DIAMOND MULTIMEDIA -009001 NISHIMU ELCTRONICS INDUSTRIES +009001 NISHIMU ELECTRONICS INDUSTRIES CO., LTD. 009002 ALLGON AB 009003 APLIO 009004 3COM EUROPE LTD. 009005 PROTECH SYSTEMS CO., LTD. 009006 HAMAMATSU PHOTONICS K.K. 009007 DOMEX TECHNOLOGY CORP. -009008 HAN A SYSTEMS, INC. +009008 HanA Systems Inc. 009009 i Controls, Inc. -00900A PROTON ELECTRONIC INDUSTRIAL +00900A PROTON ELECTRONIC INDUSTRIAL CO., LTD. 00900B LANNER ELECTRONICS, INC. 00900C CISCO SYSTEMS, INC. 00900D OVERLAND DATA INC. 00900E HANDLINK TECHNOLOGIES, INC. 00900F KAWASAKI HEAVY INDUSTRIES, LTD 009010 SIMULATION LABORATORIES, INC. -009011 WAVTRACE, INC. +009011 WAVTrace, Inc. 009012 GLOBESPAN SEMICONDUCTOR, INC. 009013 SAMSAN CORP. 009014 ROTORK INSTRUMENTS, LTD. @@ -3451,7 +5565,7 @@ 009019 HERMES ELECTRONICS CO., LTD. 00901A UNISPHERE SOLUTIONS 00901B DIGITAL CONTROLS -00901C MPS SOFTWARE GMBH +00901C mps Software Gmbh 00901D PEC (NZ) LTD. 00901E SELESTA INGEGNE RIA S.P.A. 00901F ADTEC PRODUCTIONS, INC. @@ -3461,44 +5575,44 @@ 009023 ZILOG INC. 009024 PIPELINKS, INC. 009025 VISION SYSTEMS LTD. PTY -009026 ADVANCED SWITCHING +009026 ADVANCED SWITCHING COMMUNICATIONS, INC. 009027 INTEL CORPORATION 009028 NIPPON SIGNAL CO., LTD. 009029 CRYPTO AG 00902A COMMUNICATION DEVICES, INC. 00902B CISCO SYSTEMS, INC. 00902C DATA & CONTROL EQUIPMENT LTD. -00902D DATA ELECTRONICS +00902D DATA ELECTRONICS (AUST.) PTY, LTD. 00902E NAMCO LIMITED 00902F NETCORE SYSTEMS, INC. 009030 HONEYWELL-DATING 009031 MYSTICOM, LTD. 009032 PELCOMBE GROUP LTD. -009033 INNOVAPHONE GMBH +009033 INNOVAPHONE GmbH 009034 IMAGIC, INC. 009035 ALPHA TELECOM, INC. -009036 ENS, INC. +009036 ens, inc. 009037 ACUCOMM, INC. 009038 FOUNTAIN TECHNOLOGIES, INC. 009039 SHASTA NETWORKS 00903A NIHON MEDIA TOOL INC. -00903B TRIEMS RESEARCH LAB, INC. +00903B TriEMS Research Lab, Inc. 00903C ATLANTIC NETWORK SYSTEMS 00903D BIOPAC SYSTEMS, INC. -00903E N.V. PHILIPS INDUSTRIAL +00903E N.V. PHILIPS INDUSTRIAL ACTIVITIES 00903F AZTEC RADIOMEDIA -009040 CASTLE NETWORKS, INC. +009040 Siemens Network Convergence LLC 009041 APPLIED DIGITAL ACCESS -009042 ECCS +009042 ECCS, Inc. 009043 NICHIBEI DENSHI CO., LTD. 009044 ASSURED DIGITAL, INC. -009045 MARIPOSA TECHNOLOGY +009045 Marconi Communications 009046 DEXDYNE, LTD. 009047 GIGA FAST E. LTD. 009048 ZEAL CORPORATION 009049 ENTRIDIA CORPORATION 00904A CONCUR SYSTEM TECHNOLOGIES -00904B GEMTEK TECHNOLOGY CO., LTD. +00904B GemTek Technology Co., Ltd. 00904C EPIGRAM, INC. 00904D SPEC S.A. 00904E DELEM BV @@ -3508,49 +5622,49 @@ 009052 SELCOM ELETTRONICA S.R.L. 009053 DAEWOO ELECTRONICS CO., LTD. 009054 INNOVATIVE SEMICONDUCTORS, INC -009055 PARKER HANNIFIN CORPORATION +009055 PARKER HANNIFIN CORPORATION COMPUMOTOR DIVISION 009056 TELESTREAM, INC. -009057 AANETCOM, INC. -009058 ULTRA ELECTRONICS LTD. +009057 AANetcom, Inc. +009058 Ultra Electronics Ltd., Command and Control Systems 009059 TELECOM DEVICE K.K. 00905A DEARBORN GROUP, INC. 00905B RAYMOND AND LAE ENGINEERING 00905C EDMI -00905D NETCOM SICHERHEITSTECHNIK GMBH +00905D NETCOM SICHERHEITSTECHNIK GmbH 00905E RAULAND-BORG CORPORATION 00905F CISCO SYSTEMS, INC. 009060 SYSTEM CREATE CORP. -009061 PACIFIC RESEARCH & ENGINEERING -009062 ICP VORTEX COMPUTERSYSTEME -009063 COHERENT COMMUNICATIONS +009061 PACIFIC RESEARCH & ENGINEERING CORPORATION +009062 ICP VORTEX COMPUTERSYSTEME GmbH +009063 COHERENT COMMUNICATIONS SYSTEMS CORPORATION 009064 THOMSON BROADCAST SYSTEMS 009065 FINISAR CORPORATION 009066 Troika Networks, Inc. -009067 WALKABOUT COMPUTERS, INC. +009067 WalkAbout Computers, Inc. 009068 DVT CORP. 009069 JUNIPER NETWORKS, INC. 00906A TURNSTONE SYSTEMS, INC. 00906B APPLIED RESOURCES, INC. -00906C GWT GLOBAL WEIGHING +00906C GWT GLOBAL WEIGHING TECHNOLOGIES GmbH 00906D CISCO SYSTEMS, INC. 00906E PRAXON, INC. 00906F CISCO SYSTEMS, INC. 009070 NEO NETWORKS, INC. -009071 BADGER TECHNOLOGY, INC. +009071 Applied Innovation Inc. 009072 SIMRAD AS 009073 GAIO TECHNOLOGY 009074 ARGON NETWORKS, INC. 009075 NEC DO BRASIL S.A. -009076 FMT AIRCRAFT GATE SUPPORT +009076 FMT AIRCRAFT GATE SUPPORT SYSTEMS AB 009077 ADVANCED FIBRE COMMUNICATIONS -009078 MER TELEMANAGEMENT -009079 CLEARONE INC. +009078 MER TELEMANAGEMENT SOLUTIONS, LTD. +009079 ClearOne, Inc. 00907A SPECTRALINK CORP. 00907B E-TECH, INC. 00907C DIGITALCAST, INC. -00907D HOME WIRELESS NETWORKS +00907D Lake Communications 00907E VETRONIX CORP. -00907F WATCHGUARD TECHNOLOGIES, INC. +00907F WatchGuard Technologies, Inc. 009080 NOT LIMITED, INC. 009081 ALOHA NETWORKS, INC. 009082 FORCE INSTITUTE @@ -3566,9 +5680,9 @@ 00908C ETREND ELECTRONICS, INC. 00908D VICKERS ELECTRONICS SYSTEMS 00908E Nortel Networks Broadband Access -00908F AUDIOCODES LTD. +00908F AUDIO CODES LTD. 009090 I-BUS -009091 DIGITALSCAPE, INC. +009091 DigitalScape, Inc. 009092 CISCO SYSTEMS, INC. 009093 NANAO CORPORATION 009094 OSPREY TECHNOLOGIES, INC. @@ -3576,28 +5690,28 @@ 009096 ASKEY COMPUTER CORP. 009097 SYCAMORE NETWORKS 009098 SBC DESIGNS, INC. -009099 ALLIED TELESIS,K.K. +009099 ALLIED TELESIS, K.K. 00909A ONE WORLD SYSTEMS, INC. 00909B MARKPOINT AB -00909C COMBOX, LTD. +00909C Terayon Communications Systems 00909D GSE SYSTEMS, INC. -00909E DELPHI ENGINEERING GROUP +00909E Critical IO, LLC 00909F DIGI-DATA CORPORATION 0090A0 8X8 INC. 0090A1 FLYING PIG SYSTEMS, LTD. 0090A2 CYBERTAN TECHNOLOGY, INC. -0090A3 MEDIALINCS CO., LTD. +0090A3 Corecess Inc. 0090A4 ALTIGA NETWORKS 0090A5 SPECTRA LOGIC 0090A6 CISCO SYSTEMS, INC. 0090A7 CLIENTEC CORPORATION -0090A8 NINETILES NETWORKS LTD. +0090A8 NineTiles Networks, Ltd. 0090A9 WESTERN DIGITAL -0090AA INDIGO ACTIVE VISION +0090AA INDIGO ACTIVE VISION SYSTEMS LIMITED 0090AB CISCO SYSTEMS, INC. 0090AC OPTIVISION, INC. 0090AD ASPECT ELECTRONICS, INC. -0090AE ITALTEL SPA +0090AE ITALTEL S.p.A. 0090AF J. MORITA MFG. CORP. 0090B0 VADEM 0090B1 CISCO SYSTEMS, INC. @@ -3610,46 +5724,46 @@ 0090B8 ROHDE & SCHWARZ GMBH & CO. KG 0090B9 BERAN INSTRUMENTS LTD. 0090BA VALID NETWORKS, INC. -0090BB TAINET COMMUNICATION SYSTEM +0090BB TAINET COMMUNICATION SYSTEM Corp. 0090BC TELEMANN CO., LTD. 0090BD OMNIA COMMUNICATIONS, INC. -0090BE IBC/INTEGRATED BUSINESS +0090BE IBC/INTEGRATED BUSINESS COMPUTERS 0090BF CISCO SYSTEMS, INC. 0090C0 K.J. LAW ENGINEERS, INC. -0090C1 EDA INDUSTRIES -0090C2 JK MICROSYSTEMS, INC. +0090C1 Peco II, Inc. +0090C2 JK microsystems, Inc. 0090C3 TOPIC SEMICONDUCTOR CORP. 0090C4 JAVELIN SYSTEMS, INC. 0090C5 INTERNET MAGIC, INC. 0090C6 OPTIM SYSTEMS, INC. 0090C7 ICOM INC. -0090C8 WAVERIDER COMMUNICATIONS -0090C9 PRODUCTIVITY ENHANCEMENT -0090CA ACCORD VIDEO -0090CB WIRELESS ONLINE, INC. -0090CC PLANEX COMMUNICATIONS, INC. -0090CD ENT-EMPRESA NACIONAL -0090CE TETRA GMBH +0090C8 WAVERIDER COMMUNICATIONS (CANADA) INC. +0090C9 DPAC Technologies +0090CA ACCORD VIDEO TELECOMMUNICATIONS, LTD. +0090CB Wireless OnLine, Inc. +0090CC PLANET COMMUNICATIONS, INC. +0090CD ENT-EMPRESA NACIONAL DE TELECOMMUNICACOES, S.A. +0090CE TETRA GmbH 0090CF NORTEL -0090D0 ALCATEL BELL +0090D0 Thomson Belgium 0090D1 LEICHU ENTERPRISE CO., LTD. 0090D2 ARTEL VIDEO SYSTEMS -0090D3 GIESECKE & DEVRIENT GMBH -0090D4 BINDVIEW DEVELOPMENT CORP. +0090D3 GIESECKE & DEVRIENT GmbH +0090D4 BindView Development Corp. 0090D5 EUPHONIX, INC. 0090D6 CRYSTAL GROUP -0090D7 NETBOOST CORP. +0090D7 NetBoost Corp. 0090D8 WHITECROSS SYSTEMS 0090D9 CISCO SYSTEMS, INC. 0090DA DYNARC, INC. 0090DB NEXT LEVEL COMMUNICATIONS 0090DC TECO INFORMATION SYSTEMS -0090DD THE MIHARU COMMUNICATIONS +0090DD THE MIHARU COMMUNICATIONS CO., LTD. 0090DE CARDKEY SYSTEMS, INC. -0090DF MITSUBISHI CHEMICAL +0090DF MITSUBISHI CHEMICAL AMERICA, INC. 0090E0 SYSTRAN CORP. 0090E1 TELENA S.P.A. -0090E2 DISTRIBUTED PROCESSING +0090E2 DISTRIBUTED PROCESSING TECHNOLOGY 0090E3 AVEX ELECTRONICS INC. 0090E4 NEC AMERICA, INC. 0090E5 TEKNEMA, INC. @@ -3660,8 +5774,8 @@ 0090EA ALPHA TECHNOLOGIES, INC. 0090EB SENTRY TELECOM SYSTEMS 0090EC PYRESCOM -0090ED CENTRAL SYSTEM RESEARCH -0090EE PERSONAL COMMUNICATIONS +0090ED CENTRAL SYSTEM RESEARCH CO., LTD. +0090EE PERSONAL COMMUNICATIONS TECHNOLOGIES 0090EF INTEGRIX, INC. 0090F0 HARMONIC LIGHTWAVES, LTD. 0090F1 DOT HILL SYSTEMS CORPORATION @@ -3673,20 +5787,21 @@ 0090F7 NBASE COMMUNICATIONS LTD. 0090F8 MEDIATRIX TELECOM 0090F9 LEITCH -0090FA GIGANET, INC. +0090FA GigaNet, Inc. 0090FB PORTWELL, INC. 0090FC NETWORK COMPUTING DEVICES -0090FD COPPERCOM, INC. -0090FE ELECOM CO., LTD. (LANEED DIV. +0090FD CopperCom, Inc. +0090FE ELECOM CO., LTD. (LANEED DIV.) 0090FF TELLUS TECHNOLOGY INC. +0091D6 Crystal Group, Inc. 009D8E CARDIAC RECORDERS, INC. 00A000 CENTILLION NETWORKS, INC. 00A001 WATKINS-JOHNSON COMPANY -00A002 LEEDS & NORTHRUP AUSTRALIA +00A002 LEEDS & NORTHRUP AUSTRALIA PTY LTD 00A003 STAEFA CONTROL SYSTEM 00A004 NETPOWER, INC. 00A005 DANIEL INSTRUMENTS, LTD. -00A006 IMAGE DATA PROCESSING +00A006 IMAGE DATA PROCESSING SYSTEM GROUP 00A007 APEXX TECHNOLOGY, INC. 00A008 NETCORP 00A009 WHITETREE NETWORK @@ -3714,8 +5829,8 @@ 00A01F TRICORD SYSTEMS, INC. 00A020 CITICORP/TTI 00A021 GENERAL DYNAMICS- -00A022 CENTRE FOR DEVELOPMENT OF -00A023 APPLIED CREATIVE TECHNOLOGY, +00A022 CENTRE FOR DEVELOPMENT OF ADVANCED COMPUTING +00A023 APPLIED CREATIVE TECHNOLOGY, INC. 00A024 3COM CORPORATION 00A025 REDCOM LABS INC. 00A026 TELDAT, S.A. @@ -3724,14 +5839,14 @@ 00A029 COULTER CORPORATION 00A02A TRANCELL SYSTEMS 00A02B TRANSITIONS RESEARCH CORP. -00A02C INTERWAVE COMMUNICATIONS +00A02C interWAVE Communications 00A02D 1394 Trade Association 00A02E BRAND COMMUNICATIONS, LTD. 00A02F PIRELLI CAVI 00A030 CAPTOR NV/SA 00A031 HAZELTINE CORPORATION, MS 1-17 00A032 GES SINGAPORE PTE. LTD. -00A033 IMC MESS-SYSTEME GMBH +00A033 imc MeBsysteme GmbH 00A034 AXEL 00A035 CYLINK CORPORATION 00A036 APPLIED NETWORK TECHNOLOGY @@ -3741,14 +5856,14 @@ 00A03A KUBOTEK CORPORATION 00A03B TOSHIN ELECTRIC CO., LTD. 00A03C EG&G NUCLEAR INSTRUMENTS -00A03D OPTO - 22 +00A03D OPTO-22 00A03E ATM FORUM -00A03F COMPUTER SOCIETY MICROPROCES'R +00A03F COMPUTER SOCIETY MICROPROCESSOR & MICROPROCESSOR STANDARDS C 00A040 APPLE COMPUTER 00A041 LEYBOLD-INFICON 00A042 SPUR PRODUCTS CORP. 00A043 AMERICAN TECHNOLOGY LABS, INC. -00A044 NTT INTELLIGENT TECHNOLOGY +00A044 NTT IT CO., LTD. 00A045 PHOENIX CONTACT GMBH & CO. 00A046 SCITEX CORP. LTD. 00A047 INTEGRATED FITNESS CORP. @@ -3756,7 +5871,7 @@ 00A049 DIGITECH INDUSTRIES, INC. 00A04A NISSHIN ELECTRIC CO., LTD. 00A04B TFL LAN INC. -00A04C INNOVATIVE SYSTEMS & TECH. INC +00A04C INNOVATIVE SYSTEMS & TECHNOLOGIES, INC. 00A04D EDA INSTRUMENTS, INC. 00A04E VOELKER TECHNOLOGIES, INC. 00A04F AMERITEC CORP. @@ -3764,15 +5879,15 @@ 00A051 ANGIA COMMUNICATIONS. INC. 00A052 STANILITE ELECTRONICS PTY. LTD 00A053 COMPACT DEVICES, INC. -00A055 LINKTECH, INC. +00A055 Data Device Corporation 00A056 MICROPROSS -00A057 ELSA AG +00A057 LANCOM Systems GmbH 00A058 GLORY, LTD. 00A059 HAMILTON HALLMARK 00A05A KOFAX IMAGE PRODUCTS 00A05B MARQUIP, INC. 00A05C INVENTORY CONVERSION, INC./ -00A05D CS COMPUTER SYSTEME GMBH +00A05D CS COMPUTER SYSTEME GmbH 00A05E MYRIAD LOGIC INC. 00A05F BTG ENGINEERING BV 00A060 ACER PERIPHERALS, INC. @@ -3784,10 +5899,10 @@ 00A066 ISA CO., LTD. 00A067 NETWORK SERVICES GROUP 00A068 BHP LIMITED -00A069 TrueTime -00A06A VERILINK CORP. +00A069 Symmetricom, Inc. +00A06A Verilink Corporation 00A06B DMS DORSCH MIKROSYSTEM GMBH -00A06C SHINDENGEN ELECTRIC MFG. +00A06C SHINDENGEN ELECTRIC MFG. CO., LTD. 00A06D MANNESMANN TALLY CORPORATION 00A06E AUSTRON, INC. 00A06F THE APPCON GROUP, INC. @@ -3801,7 +5916,7 @@ 00A077 FUJITSU NEXION, INC. 00A078 Marconi Communications 00A079 ALPS ELECTRIC (USA), INC. -00A07A ADVANCED PERIPHERALS +00A07A ADVANCED PERIPHERALS TECHNOLOGIES, INC. 00A07B DAWN COMPUTER INCORPORATION 00A07C TONYANG NYLON CO., LTD. 00A07D SEEQ TECHNOLOGY, INC. @@ -3813,28 +5928,28 @@ 00A083 ASIMMPHONY TURKEY 00A084 DATAPLEX PTY. LTD. 00A086 AMBER WAVE SYSTEMS, INC. -00A087 MITEL SEMICONDUCTOR, LTD. +00A087 Zarlink Semiconductor Ltd. 00A088 ESSENTIAL COMMUNICATIONS 00A089 XPOINT TECHNOLOGIES, INC. 00A08A BROOKTROUT TECHNOLOGY, INC. 00A08B ASTON ELECTRONIC DESIGNS LTD. -00A08C MULTIMEDIA LANS, INC. +00A08C MultiMedia LANs, Inc. 00A08D JACOMO CORPORATION 00A08E Nokia Internet Communications 00A08F DESKNET SYSTEMS, INC. -00A090 TIMESTEP CORPORATION +00A090 TimeStep Corporation 00A091 APPLICOM INTERNATIONAL 00A092 H. BOLLMANN MANUFACTURERS, LTD -00A093 B/E AEROSPACE +00A093 B/E AEROSPACE, Inc. 00A094 COMSAT CORPORATION 00A095 ACACIA NETWORKS, INC. -00A096 MITSUMI ELECTRIC CO., LTD. +00A096 MITUMI ELECTRIC CO., LTD. 00A097 JC INFORMATION SYSTEMS 00A098 NETWORK APPLIANCE CORP. 00A099 K-NET LTD. 00A09A NIHON KOHDEN AMERICA 00A09B QPSX COMMUNICATIONS, LTD. -00A09C XYPLEX, INC. +00A09C Xyplex, Inc. 00A09D JOHNATHON FREEMAN TECHNOLOGIES 00A09E ICTV 00A09F COMMVISION CORP. @@ -3847,7 +5962,7 @@ 00A0A6 M.I. SYSTEMS, K.K. 00A0A7 VORAX CORPORATION 00A0A8 RENEX CORPORATION -00A0A9 GN NETTEST (CANADA) INC. +00A0A9 GN NETTEST (CANADA) NAVTEL DIVISION 00A0AA SPACELABS MEDICAL 00A0AB NETCS INFORMATIONSTECHNIK GMBH 00A0AC GILAT SATELLITE NETWORKS, LTD. @@ -3868,7 +5983,7 @@ 00A0BB HILAN GMBH 00A0BC VIASAT, INCORPORATED 00A0BD I-TECH CORP. -00A0BE INTEGRATED CIRCUIT SYSTEMS,INC +00A0BE INTEGRATED CIRCUIT SYSTEMS, INC. COMMUNICATIONS GROUP 00A0BF WIRELESS DATA GROUP MOTOROLA 00A0C0 DIGITAL LINK CORP. 00A0C1 ORTIVUS MEDICAL AB @@ -3883,12 +5998,12 @@ 00A0CA FUJITSU DENSO LTD. 00A0CB ARK TELECOMMUNICATIONS, INC. 00A0CC LITE-ON COMMUNICATIONS, INC. -00A0CD DR. JOHANNES HEIDENHAIN GMBH +00A0CD DR. JOHANNES HEIDENHAIN GmbH 00A0CE ASTROCOM CORPORATION 00A0CF SOTAS, INC. 00A0D0 TEN X TECHNOLOGY, INC. 00A0D1 INVENTEC CORPORATION -00A0D2 ALLIED TELESIS INTERNATIONAL +00A0D2 ALLIED TELESIS INTERNATIONAL CORPORATION 00A0D3 INSTEM COMPUTER SYSTEMS, LTD. 00A0D4 RADIOLAN, INC. 00A0D5 SIERRA WIRELESS INC. @@ -3896,14 +6011,14 @@ 00A0D7 KASTEN CHASE APPLIED RESEARCH 00A0D8 SPECTRA - TEK 00A0D9 CONVEX COMPUTER CORPORATION -00A0DA INTEGRATED SYSTEMS +00A0DA INTEGRATED SYSTEMS Technology, Inc. 00A0DB FISHER & PAYKEL PRODUCTION 00A0DC O.N. ELECTRONIC CO., LTD. 00A0DD AZONIX CORPORATION 00A0DE YAMAHA CORPORATION 00A0DF STS TECHNOLOGIES, INC. 00A0E0 TENNYSON TECHNOLOGIES PTY LTD -00A0E1 WESTPORT RESEARCH +00A0E1 WESTPORT RESEARCH ASSOCIATES, INC. 00A0E2 KEISOKU GIKEN CORP. 00A0E3 XKL SYSTEMS CORP. 00A0E4 OPTIQUEST @@ -3911,9 +6026,9 @@ 00A0E6 DIALOGIC CORPORATION 00A0E7 CENTRAL DATA CORPORATION 00A0E8 REUTERS HOLDINGS PLC -00A0E9 ELECTRONIC RETAILING SYSTEMS +00A0E9 ELECTRONIC RETAILING SYSTEMS INTERNATIONAL 00A0EA ETHERCOM CORP. -00A0EB FASTCOMM COMMUNICATIONS CORP. +00A0EB Encore Networks 00A0EC TRANSMITTON LTD. 00A0ED PRI AUTOMATION 00A0EE NASHOBA NETWORKS @@ -3924,7 +6039,7 @@ 00A0F3 STAUBLI 00A0F4 GE 00A0F5 RADGUARD LTD. -00A0F6 AUTOGAS SYSTEMS, INC. +00A0F6 AutoGas Systems Inc. 00A0F7 V.I COMPUTER CORP. 00A0F8 SYMBOL TECHNOLOGIES, INC. 00A0F9 BINTEC COMMUNICATIONS GMBH @@ -4016,7 +6131,7 @@ 00C026 LANS TECHNOLOGY CO., LTD. 00C027 CIPHER SYSTEMS, INC. 00C028 JASCO CORPORATION -00C029 KABEL RHEYDT AG +00C029 Nexans Deutschland AG - ANS 00C02A OHKURA ELECTRIC CO., LTD. 00C02B GERLOFF GESELLSCHAFT FUR 00C02C CENTRUM COMMUNICATIONS, INC. @@ -4080,7 +6195,7 @@ 00C066 DOCUPOINT, INC. 00C067 UNITED BARCODE INDUSTRIES 00C068 PHILIP DRAKE ELECTRONICS LTD. -00C069 ADAPTIVE BROADBAND CORPORATION +00C069 Axxcelera Broadband Wireless 00C06A ZAHNER-ELEKTRIK GMBH & CO. KG 00C06B OSI PLUS CORPORATION 00C06C SVEC COMPUTER CORP. @@ -4157,7 +6272,7 @@ 00C0B3 COMSTAT DATACOMM CORPORATION 00C0B4 MYSON TECHNOLOGY, INC. 00C0B5 CORPORATE NETWORK SYSTEMS,INC. -00C0B6 MERIDIAN DATA, INC. +00C0B6 Snap Appliance, Inc. 00C0B7 AMERICAN POWER CONVERSION CORP 00C0B8 FRASER'S HILL LTD. 00C0B9 FUNK SOFTWARE, INC. @@ -4198,7 +6313,7 @@ 00C0DC EOS TECHNOLOGIES, INC. 00C0DD QLogic Corporation 00C0DE ZCOMM, INC. -00C0DF KYE SYSTEMS CORP. +00C0DF KYE Systems Corp. 00C0E0 DSC COMMUNICATION CORP. 00C0E1 SONIC SOLUTIONS 00C0E2 CALCOMP, INC. @@ -4275,7 +6390,7 @@ 00D027 APPLIED AUTOMATION, INC. 00D028 OMNEON VIDEO NETWORKS 00D029 WAKEFERN FOOD CORPORATION -00D02A FLEXION SYSTEMS +00D02A Voxent Systems Ltd. 00D02B JETCELL, INC. 00D02C CAMPBELL SCIENTIFIC, INC. 00D02D ADEMCO @@ -4294,6 +6409,7 @@ 00D03A ZONEWORX, INC. 00D03B VISION PRODUCTS PTY. LTD. 00D03C Vieo, Inc. +00D03D GALILEO TECHNOLOGY, LTD. 00D03E ROCKETCHIPS, INC. 00D03F AMERICAN COMMUNICATION 00D040 SYSMATE CO., LTD. @@ -4368,7 +6484,7 @@ 00D085 OTIS ELEVATOR COMPANY 00D086 FOVEON, INC. 00D087 MICROFIRST INC. -00D088 MAINSAIL NETWORKS, INC. +00D088 Terayon Communications Systems 00D089 DYNACOLOR, INC. 00D08A PHOTRON USA 00D08B ADVA Limited @@ -4384,7 +6500,7 @@ 00D095 XYLAN CORPORATION 00D096 3COM EUROPE LTD. 00D097 CISCO SYSTEMS, INC. -00D098 IPS AUTOMATION +00D098 Photon Dynamics Canada Inc. 00D099 ELCARD OY 00D09A FILANET CORPORATION 00D09B SPECTEL LTD. @@ -4413,9 +6529,9 @@ 00D0B2 XIOTECH CORPORATION 00D0B3 DRS FLIGHT SAFETY AND 00D0B4 KATSUJIMA CO., LTD. -00D0B5 DOTCOM +00D0B5 IPricot formerly DotCom 00D0B6 CRESCENT NETWORKS, INC. -00D0B7 INTEL CORPOTATION +00D0B7 INTEL CORPORATION 00D0B8 IOMEGA CORP. 00D0B9 MICROTEK INTERNATIONAL, INC. 00D0BA CISCO SYSTEMS, INC. @@ -4478,7 +6594,7 @@ 00D0F3 SOLARI DI UDINE SPA 00D0F4 CARINTHIAN TECH INSTITUTE 00D0F5 ORANGE MICRO, INC. -00D0F6 NORTHCHURCH COMMUNICATIONS INC +00D0F6 Alcatel Canada 00D0F7 NEXT NETS CORPORATION 00D0F8 FUJIAN STAR TERMINAL 00D0F9 ACUTE COMMUNICATIONS CORP. @@ -4520,28 +6636,28 @@ 00E00D RADIANT SYSTEMS 00E00E AVALON IMAGING SYSTEMS, INC. 00E00F SHANGHAI BAUD DATA -00E010 HESS SB-AUTOMATENBAU GMBH -00E011 UNIDEN SAN DIEGO -00E012 PLUTO TECHNOLOGIES +00E010 HESS SB-AUTOMATENBAU GmbH +00E011 UNIDEN SAN DIEGO R&D CENTER, INC. +00E012 PLUTO TECHNOLOGIES INTERNATIONAL INC. 00E013 EASTERN ELECTRONIC CO., LTD. 00E014 CISCO SYSTEMS, INC. 00E015 HEIWA CORPORATION 00E016 RAPID CITY COMMUNICATIONS -00E017 EXXACT GMBH +00E017 EXXACT GmbH 00E018 ASUSTEK COMPUTER INC. 00E019 ING. GIORDANO ELETTRONICA 00E01A COMTEC SYSTEMS. CO., LTD. 00E01B SPHERE COMMUNICATIONS, INC. 00E01C MOBILITY ELECTRONICSY -00E01D WEBTV NETWORKS, INC. +00E01D WebTV NETWORKS, INC. 00E01E CISCO SYSTEMS, INC. -00E01F AVIDIA SYSTEMS, INC. +00E01F AVIDIA Systems, Inc. 00E020 TECNOMEN OY 00E021 FREEGATE CORP. -00E022 MEDIALIGHT INC. +00E022 MediaLight, Inc. 00E023 TELRAD 00E024 GADZOOX NETWORKS -00E025 DIT CO., LTD. +00E025 dit CO., LTD. 00E026 EASTMAN KODAK CO. 00E027 DUX, INC. 00E028 APTIX CORPORATION @@ -4549,13 +6665,13 @@ 00E02A TANDBERG TELEVISION AS 00E02B EXTREME NETWORKS 00E02C AST COMPUTER -00E02D INNOMEDIALOGIC, INC. +00E02D InnoMediaLogic, Inc. 00E02E SPC ELECTRONICS CORPORATION 00E02F MCNS HOLDINGS, L.P. 00E030 MELITA INTERNATIONAL CORP. 00E031 HAGIWARA ELECTRIC CO., LTD. 00E032 MISYS FINANCIAL SYSTEMS, LTD. -00E033 E.E.P.D. GMBH +00E033 E.E.P.D. GmbH 00E034 CISCO SYSTEMS, INC. 00E035 LOUGHBOROUGH SOUND IMAGES, PLC 00E036 PIONEER CORPORATION @@ -4564,64 +6680,64 @@ 00E039 PARADYNE CORP. 00E03A CABLETRON SYSTEMS, INC. 00E03B PROMINET CORPORATION -00E03C ADVANSYS +00E03C AdvanSys 00E03D FOCON ELECTRONIC SYSTEMS A/S 00E03E ALFATECH, INC. 00E03F JATON CORPORATION -00E040 DESKSTATION TECHNOLOGY, INC. +00E040 DeskStation Technology, Inc. 00E041 CSPI -00E042 PACOM DATA LTD. -00E043 VITALCOM +00E042 Pacom Systems Ltd. +00E043 VitalCom 00E044 LSICS CORPORATION 00E045 TOUCHWAVE, INC. 00E046 BENTLY NEVADA CORP. 00E047 INFOCUS SYSTEMS 00E048 SDL COMMUNICATIONS, INC. -00E049 MICROWI ELECTRONIC GMBH -00E04A ENHANCED MESSAGING SYSTEMS,INC -00E04B JUMP INDUSTRIELLE +00E049 MICROWI ELECTRONIC GmbH +00E04A ENHANCED MESSAGING SYSTEMS, INC +00E04B JUMP INDUSTRIELLE COMPUTERTECHNIK GmbH 00E04C REALTEK SEMICONDUCTOR CORP. 00E04D INTERNET INITIATIVE JAPAN, INC 00E04E SANYO DENKI CO., LTD. 00E04F CISCO SYSTEMS, INC. -00E050 EXECUTONE INFORMATION +00E050 EXECUTONE INFORMATION SYSTEMS, INC. 00E051 TALX CORPORATION 00E052 FOUNDRY NETWORKS, INC. 00E053 CELLPORT LABS, INC. 00E054 KODAI HITEC CO., LTD. -00E055 INGENIERIA ELECTRONICA +00E055 INGENIERIA ELECTRONICA COMERCIAL INELCOM S.A. 00E056 HOLONTECH CORPORATION 00E057 HAN MICROTELECOM. CO., LTD. 00E058 PHASE ONE DENMARK A/S 00E059 CONTROLLED ENVIRONMENTS, LTD. 00E05A GALEA NETWORK SECURITY 00E05B WEST END SYSTEMS CORP. -00E05C MATSUSHITA KOTOBUKI +00E05C MATSUSHITA KOTOBUKI ELECTRONICS INDUSTRIES, LTD. 00E05D UNITEC CO., LTD. -00E05E JAPAN AVIATION ELECTRONICS -00E05F E-NET, INC. +00E05E JAPAN AVIATION ELECTRONICS INDUSTRY, LTD. +00E05F e-Net, Inc. 00E060 SHERWOOD -00E061 EDGEPOINT NETWORKS, INC. +00E061 EdgePoint Networks, Inc. 00E062 HOST ENGINEERING 00E063 CABLETRON - YAGO SYSTEMS, INC. 00E064 SAMSUNG ELECTRONICS 00E065 OPTICAL ACCESS INTERNATIONAL -00E066 PROMAX SYSTEMS, INC. -00E067 EAC AUTOMATION-CONSULTING GMBH +00E066 ProMax Systems, Inc. +00E067 eac AUTOMATION-CONSULTING GmbH 00E068 MERRIMAC SYSTEMS INC. -00E069 JAYCOR NETWORKS, INC. +00E069 JAYCOR 00E06A KAPSCH AG 00E06B W&G SPECIAL PRODUCTS -00E06C BALTIMORE TECHNOLOGIES, LTD. +00E06C AEP Systems International Ltd 00E06D COMPUWARE CORPORATION -00E06E FAR SYSTEMS SPA -00E06F TERAYON CORP. +00E06E FAR SYSTEMS S.p.A. +00E06F Terayon Communications Systems 00E070 DH TECHNOLOGY 00E071 EPIS MICROCOMPUTER 00E072 LYNK -00E073 NATIONAL AMUSEMENT +00E073 NATIONAL AMUSEMENT NETWORK, INC. 00E074 TIERNAN COMMUNICATIONS, INC. -00E075 ATLAS COMPUTER EQUIPMENT, INC. +00E075 Verilink Corporation 00E076 DEVELOPMENT CONCEPTS, INC. 00E077 WEBGEAR, INC. 00E078 BERKELEY NETWORKS @@ -4631,7 +6747,7 @@ 00E07C METTLER-TOLEDO, INC. 00E07D NETRONIX, INC. 00E07E WALT DISNEY IMAGINEERING -00E07F LOGISTISTEM SRL +00E07F LOGISTISTEM s.r.l. 00E080 CONTROL RESOURCES CORPORATION 00E081 TYAN COMPUTER CORP. 00E082 ANERMA @@ -4639,11 +6755,11 @@ 00E084 COMPULITE R&D 00E085 GLOBAL MAINTECH, INC. 00E086 CYBEX COMPUTER PRODUCTS -00E087 LECROY +00E087 LeCroy - Networking Productions Division 00E088 LTX CORPORATION 00E089 ION Networks, Inc. 00E08A GEC AVERY, LTD. -00E08B QLOGIC CORP. +00E08B QLogic Corp. 00E08C NEOPARADIGM LABS, INC. 00E08D PRESSURE SYSTEMS, INC. 00E08E UTSTARCOM @@ -4653,10 +6769,10 @@ 00E092 ADMTEK INCORPORATED 00E093 ACKFIN NETWORKS 00E094 OSAI SRL -00E095 ADVANCED-VISION TECHNOLGIES +00E095 ADVANCED-VISION TECHNOLGIES CORP. 00E096 SHIMADZU CORPORATION 00E097 CARRIER ACCESS CORPORATION -00E098 ABOCOM SYSTEMS, INC. +00E098 AboCom Systems, Inc. 00E099 SAMSON AG 00E09A POSITRON INDUSTRIES, INC. 00E09B ENGAGE NETWORKS, INC. @@ -4665,78 +6781,78 @@ 00E09E QUANTUM CORPORATION 00E09F PIXEL VISION 00E0A0 WILTRON CO. -00E0A1 HIMA PAUL HILDEBRANDT +00E0A1 HIMA PAUL HILDEBRANDT GmbH Co. KG 00E0A2 MICROSLATE INC. 00E0A3 CISCO SYSTEMS, INC. -00E0A4 ESAOTE S.P.A. -00E0A5 COMCORE SEMICONDUCTOR, INC. +00E0A4 ESAOTE S.p.A. +00E0A5 ComCore Semiconductor, Inc. 00E0A6 TELOGY NETWORKS, INC. 00E0A7 IPC INFORMATION SYSTEMS, INC. -00E0A8 SAT GMBH&CO +00E0A8 SAT GmbH & Co. 00E0A9 FUNAI ELECTRIC CO., LTD. 00E0AA ELECTROSONIC LTD. 00E0AB DIMAT S.A. 00E0AC MIDSCO, INC. 00E0AD EES TECHNOLOGY, LTD. 00E0AE XAQTI CORPORATION -00E0AF GENERAL DYNAMICS INFORMATION +00E0AF GENERAL DYNAMICS INFORMATION SYSTEMS 00E0B0 CISCO SYSTEMS, INC. 00E0B1 PACKET ENGINES, INC. 00E0B2 TELMAX COMMUNICATIONS CORP. -00E0B3 ETHERWAN SYSTEMS, INC. +00E0B3 EtherWAN Systems, Inc. 00E0B4 TECHNO SCOPE CO., LTD. 00E0B5 ARDENT COMMUNICATIONS CORP. 00E0B6 Entrada Networks 00E0B7 PI GROUP, LTD. 00E0B8 GATEWAY 2000 00E0B9 BYAS SYSTEMS -00E0BA BERGHOF AUTOMATIONSTECHNIK +00E0BA BERGHOF AUTOMATIONSTECHNIK GmbH 00E0BB NBX CORPORATION 00E0BC SYMON COMMUNICATIONS, INC. 00E0BD INTERFACE SYSTEMS, INC. 00E0BE GENROCO INTERNATIONAL, INC. -00E0BF TORRENT NETWORKING -00E0C0 SEIWA ERECTRIC MFG. CO., LTD. +00E0BF TORRENT NETWORKING TECHNOLOGIES CORP. +00E0C0 SEIWA ELECTRIC MFG. CO., LTD. 00E0C1 MEMOREX TELEX JAPAN, LTD. -00E0C2 NECSY SPA +00E0C2 NECSY S.p.A. 00E0C3 SAKAI SYSTEM DEVELOPMENT CORP. 00E0C4 HORNER ELECTRIC, INC. 00E0C5 BCOM ELECTRONICS INC. 00E0C6 LINK2IT, L.L.C. 00E0C7 EUROTECH SRL 00E0C8 VIRTUAL ACCESS, LTD. -00E0C9 AUTOMATEDLOGIC CORPORATION +00E0C9 AutomatedLogic Corporation 00E0CA BEST DATA PRODUCTS 00E0CB RESON, INC. 00E0CC HERO SYSTEMS, LTD. 00E0CD SENSIS CORPORATION 00E0CE ARN -00E0CF INTEGRATED DEVICE +00E0CF INTEGRATED DEVICE TECHNOLOGY, INC. 00E0D0 NETSPEED, INC. 00E0D1 TELSIS LIMITED 00E0D2 VERSANET COMMUNICATIONS, INC. -00E0D3 DATENTECHNIK GMBH +00E0D3 DATENTECHNIK GmbH 00E0D4 EXCELLENT COMPUTER 00E0D5 ARCXEL TECHNOLOGIES, INC. -00E0D6 COMPUTER & COMMUNICATION +00E0D6 COMPUTER & COMMUNICATION RESEARCH LAB. 00E0D7 SUNSHINE ELECTRONICS, INC. -00E0D8 LANBIT COMPUTER, INC. +00E0D8 LANBit Computer, Inc. 00E0D9 TAZMO CO., LTD. -00E0DA ASSURED ACCESS -00E0DB VIAVIDEO COMMUNICATIONS +00E0DA ASSURED ACCESS TECHNOLOGY, INC. +00E0DB ViaVideo Communications, Inc. 00E0DC NEXWARE CORP. 00E0DD ZENITH ELECTRONICS CORPORATION 00E0DE DATAX NV 00E0DF KE KOMMUNIKATIONS-ELECTRONIK 00E0E0 SI ELECTRONICS, LTD. -00E0E1 G2 NETWORKS, ILNC. +00E0E1 G2 NETWORKS, INC. 00E0E2 INNOVA CORP. -00E0E3 SK-ELEKTRONIK GMBH -00E0E4 FANUC ROBOTICS NORTH AMERICA, +00E0E3 SK-ELEKTRONIK GmbH +00E0E4 FANUC ROBOTICS NORTH AMERICA, Inc. 00E0E5 CINCO NETWORKS, INC. 00E0E6 INCAA DATACOM B.V. 00E0E7 RAYTHEON E-SYSTEMS, INC. -00E0E8 GRETACODER DATA SYSTEMS AG +00E0E8 GRETACODER Data Systems AG 00E0E9 DATA LABS, INC. 00E0EA INNOVAT COMMUNICATIONS, INC. 00E0EB DIGICOM SYSTEMS, INCORPORATED @@ -4747,19 +6863,19 @@ 00E0F0 ABLER TECHNOLOGY, INC. 00E0F1 THAT CORPORATION 00E0F2 ARLOTTO COMNET, INC. -00E0F3 WEBSPRINT COMMUNICATIONS, INC. -00E0F4 INSIDE TECHNOLOGY A/S +00E0F3 WebSprint Communications, Inc. +00E0F4 INSIDE Technology A/S 00E0F5 TELES AG 00E0F6 DECISION EUROPE 00E0F7 CISCO SYSTEMS, INC. -00E0F8 DIANA CONTROL AB +00E0F8 DICNA CONTROL AB 00E0F9 CISCO SYSTEMS, INC. 00E0FA TRL TECHNOLOGY, LTD. 00E0FB LEIGHTRONIX, INC. 00E0FC HUAWEI TECHNOLOGIES CO., LTD. 00E0FD A-TREND TECHNOLOGY CO., LTD. 00E0FE CISCO SYSTEMS, INC. -00E0FF SECURITY DYNAMICS TECHNOLOGIES +00E0FF SECURITY DYNAMICS TECHNOLOGIES, Inc. 00E6D3 NIXDORF COMPUTER CORP. 020701 RACAL-DATACOM 021C7C PERQ SYSTEMS CORPORATION @@ -4809,12 +6925,12 @@ 080020 SUN MICROSYSTEMS INC. 080021 3M COMPANY 080022 NBI INC. -080023 MATSUHITA GRAPHIC COMM SYS INC +080023 Panasonic Communications Co., Ltd. 080024 10NET COMMUNICATIONS/DCA 080025 CONTROL DATA 080026 NORSK DATA A.S. 080027 CADMUS COMPUTER SYSTEMS -080028 TEXAS INSTRUMENTS +080028 Texas Instruments 080029 MEGATEK CORPORATION 08002A MOSAIC TECHNOLOGIES INC. 08002B DIGITAL EQUIPMENT CORPORATION @@ -4905,10 +7021,10 @@ 080080 AES DATA INC. 080081 ,ASTECH INC. 080082 VERITAS SOFTWARE -080083 SEIKO INSTRUM. AND ELECTRONICS +080083 Seiko Instruments Inc. 080084 TOMEN ELECTRONICS CORP. 080085 ELXSI -080086 IMAGEN CORPORATION +080086 KONICA MINOLTA HOLDINGS, INC. 080087 XYPLEX 080088 MCDATA CORPORATION 080089 KINETICS @@ -4919,7 +7035,8 @@ 08008E TANDEM COMPUTERS 08008F CHIPCOM CORPORATION 080090 SONOMA SYSTEMS -08BBCC AK-NORD EDV VERTRIEBSGES. MBH +081443 UNIBRAIN S.A. +08BBCC AK-NORD EDV VERTRIEBSGES. mbH 10005A IBM CORPORATION 1000E8 NATIONAL SEMICONDUCTOR 800010 ATT BELL LABORATORIES diff -Nru a/drivers/ieee1394/raw1394.c b/drivers/ieee1394/raw1394.c --- a/drivers/ieee1394/raw1394.c Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/raw1394.c Thu Jan 15 21:41:53 2004 @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -1695,7 +1696,7 @@ spin_unlock_irqrestore(&host_info_lock, flags); return sizeof(struct raw1394_request); } - retval = hpsb_register_addrspace(&raw1394_highlevel, &arm_ops, req->req.address, + retval = hpsb_register_addrspace(&raw1394_highlevel, fi->host, &arm_ops, req->req.address, req->req.address + req->req.length); if (retval) { /* INSERT ENTRY */ @@ -1782,7 +1783,7 @@ spin_unlock_irqrestore(&host_info_lock, flags); return sizeof(struct raw1394_request); } - retval = hpsb_unregister_addrspace(&raw1394_highlevel, addr->start); + retval = hpsb_unregister_addrspace(&raw1394_highlevel, fi->host, addr->start); if (!retval) { printk(KERN_ERR "raw1394: arm_Unregister failed -> EINVAL\n"); spin_unlock_irqrestore(&host_info_lock, flags); @@ -2464,10 +2465,6 @@ { struct file_info *fi; - if (ieee1394_file_to_instance(file) > 0) { - return -ENXIO; - } - fi = kmalloc(sizeof(struct file_info), SLAB_KERNEL); if (fi == NULL) return -ENOMEM; @@ -2554,7 +2551,7 @@ } if (!another_host) { DBGMSG("raw1394_release: call hpsb_arm_unregister"); - retval = hpsb_unregister_addrspace(&raw1394_highlevel, addr->start); + retval = hpsb_unregister_addrspace(&raw1394_highlevel, fi->host, addr->start); if (!retval) { ++fail; printk(KERN_ERR "raw1394_release arm_Unregister failed\n"); @@ -2646,7 +2643,8 @@ .fcp_request = fcp_request, }; -static struct file_operations file_ops = { +static struct cdev raw1394_cdev; +static struct file_operations raw1394_fops = { .owner = THIS_MODULE, .read = raw1394_read, .write = raw1394_write, @@ -2664,8 +2662,10 @@ devfs_mk_cdev(MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_RAW1394 * 16), S_IFCHR | S_IRUSR | S_IWUSR, RAW1394_DEVICE_NAME); - if (ieee1394_register_chardev(IEEE1394_MINOR_BLOCK_RAW1394, - THIS_MODULE, &file_ops)) { + cdev_init(&raw1394_cdev, &raw1394_fops); + raw1394_cdev.owner = THIS_MODULE; + kobject_set_name(&raw1394_cdev.kobj, RAW1394_DEVICE_NAME); + if (cdev_add(&raw1394_cdev, IEEE1394_RAW1394_DEV, 1)) { HPSB_ERR("raw1394 failed to register minor device block"); devfs_remove(RAW1394_DEVICE_NAME); hpsb_unregister_highlevel(&raw1394_highlevel); @@ -2682,7 +2682,8 @@ static void __exit cleanup_raw1394(void) { hpsb_unregister_protocol(&raw1394_driver); - ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_RAW1394); + cdev_unmap(IEEE1394_RAW1394_DEV, 1); + cdev_del(&raw1394_cdev); devfs_remove(RAW1394_DEVICE_NAME); hpsb_unregister_highlevel(&raw1394_highlevel); } @@ -2690,3 +2691,4 @@ module_init(init_raw1394); module_exit(cleanup_raw1394); MODULE_LICENSE("GPL"); +MODULE_ALIAS_CHARDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_RAW1394 * 16); diff -Nru a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c --- a/drivers/ieee1394/sbp2.c Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/sbp2.c Thu Jan 15 21:41:53 2004 @@ -77,7 +77,7 @@ #include "sbp2.h" static char version[] __devinitdata = - "$Rev: 1082 $ Ben Collins "; + "$Rev: 1096 $ Ben Collins "; /* * Module load parameter definitions @@ -712,6 +712,18 @@ return NULL; } + /* Register our sbp2 status address space... */ + hpsb_register_addrspace(&sbp2_highlevel, host, &sbp2_ops, + SBP2_STATUS_FIFO_ADDRESS, + SBP2_STATUS_FIFO_ADDRESS + + SBP2_STATUS_FIFO_ENTRY_TO_OFFSET(SBP2SCSI_MAX_SCSI_IDS+1)); + + /* Handle data movement if physical dma is not enabled/supported + * on host controller */ +#ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA + hpsb_register_addrspace(&sbp2_highlevel, host, &sbp2_physdma_ops, 0x0ULL, 0xfffffffcULL); +#endif + hi = hpsb_create_hostinfo(&sbp2_highlevel, host, sizeof(*hi)); if (!hi) { SBP2_ERR("failed to allocate hostinfo"); @@ -2880,17 +2892,6 @@ /* Register our high level driver with 1394 stack */ hpsb_register_highlevel(&sbp2_highlevel); - - /* Register our sbp2 status address space... */ - hpsb_register_addrspace(&sbp2_highlevel, &sbp2_ops, SBP2_STATUS_FIFO_ADDRESS, - SBP2_STATUS_FIFO_ADDRESS + - SBP2_STATUS_FIFO_ENTRY_TO_OFFSET(SBP2SCSI_MAX_SCSI_IDS+1)); - - /* Handle data movement if physical dma is not enabled/supported - * on host controller */ -#ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA - hpsb_register_addrspace(&sbp2_highlevel, &sbp2_physdma_ops, 0x0ULL, 0xfffffffcULL); -#endif hpsb_register_protocol(&sbp2_driver); diff -Nru a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c --- a/drivers/ieee1394/video1394.c Thu Jan 15 21:41:53 2004 +++ b/drivers/ieee1394/video1394.c Thu Jan 15 21:41:53 2004 @@ -46,6 +46,7 @@ #include #include #include +#include #include "ieee1394.h" #include "ieee1394_types.h" @@ -1231,6 +1232,7 @@ return 0; } +static struct cdev video1394_cdev; static struct file_operations video1394_fops= { .owner = THIS_MODULE, @@ -1445,18 +1447,18 @@ hpsb_unregister_highlevel(&video1394_highlevel); devfs_remove(VIDEO1394_DRIVER_NAME); - ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_VIDEO1394); + cdev_unmap(IEEE1394_VIDEO1394_DEV, 16); + cdev_del(&video1394_cdev); PRINT_G(KERN_INFO, "Removed " VIDEO1394_DRIVER_NAME " module"); } static int __init video1394_init_module (void) { - int ret; - - ret = ieee1394_register_chardev(IEEE1394_MINOR_BLOCK_VIDEO1394, - THIS_MODULE, &video1394_fops); - if (ret) { + cdev_init(&video1394_cdev, &video1394_fops); + video1394_cdev.owner = THIS_MODULE; + kobject_set_name(&video1394_cdev.kobj, VIDEO1394_DRIVER_NAME); + if (cdev_add(&video1394_cdev, IEEE1394_VIDEO1394_DEV, 16)) { PRINT_G(KERN_ERR, "video1394: unable to get minor device block"); return -EIO; } @@ -1468,25 +1470,29 @@ hpsb_register_protocol(&video1394_driver); #ifdef CONFIG_COMPAT - /* First the compatible ones */ - ret = register_ioctl32_conversion(VIDEO1394_IOC_LISTEN_CHANNEL, NULL); - ret |= register_ioctl32_conversion(VIDEO1394_IOC_UNLISTEN_CHANNEL, NULL); - ret |= register_ioctl32_conversion(VIDEO1394_IOC_TALK_CHANNEL, NULL); - ret |= register_ioctl32_conversion(VIDEO1394_IOC_UNTALK_CHANNEL, NULL); - - /* These need translation */ - ret |= register_ioctl32_conversion(VIDEO1394_IOC32_LISTEN_QUEUE_BUFFER, - video1394_w_wait32); - ret |= register_ioctl32_conversion(VIDEO1394_IOC32_LISTEN_WAIT_BUFFER, - video1394_wr_wait32); - ret |= register_ioctl32_conversion(VIDEO1394_IOC_TALK_QUEUE_BUFFER, - video1394_queue_buf32); - ret |= register_ioctl32_conversion(VIDEO1394_IOC32_TALK_WAIT_BUFFER, - video1394_w_wait32); - ret |= register_ioctl32_conversion(VIDEO1394_IOC32_LISTEN_POLL_BUFFER, - video1394_wr_wait32); - if (ret) - PRINT_G(KERN_INFO, "Error registering ioctl32 translations"); + { + int ret; + + /* First the compatible ones */ + ret = register_ioctl32_conversion(VIDEO1394_IOC_LISTEN_CHANNEL, NULL); + ret |= register_ioctl32_conversion(VIDEO1394_IOC_UNLISTEN_CHANNEL, NULL); + ret |= register_ioctl32_conversion(VIDEO1394_IOC_TALK_CHANNEL, NULL); + ret |= register_ioctl32_conversion(VIDEO1394_IOC_UNTALK_CHANNEL, NULL); + + /* These need translation */ + ret |= register_ioctl32_conversion(VIDEO1394_IOC32_LISTEN_QUEUE_BUFFER, + video1394_w_wait32); + ret |= register_ioctl32_conversion(VIDEO1394_IOC32_LISTEN_WAIT_BUFFER, + video1394_wr_wait32); + ret |= register_ioctl32_conversion(VIDEO1394_IOC_TALK_QUEUE_BUFFER, + video1394_queue_buf32); + ret |= register_ioctl32_conversion(VIDEO1394_IOC32_TALK_WAIT_BUFFER, + video1394_w_wait32); + ret |= register_ioctl32_conversion(VIDEO1394_IOC32_LISTEN_POLL_BUFFER, + video1394_wr_wait32); + if (ret) + PRINT_G(KERN_INFO, "Error registering ioctl32 translations"); + } #endif PRINT_G(KERN_INFO, "Installed " VIDEO1394_DRIVER_NAME " module"); @@ -1496,3 +1502,4 @@ module_init(video1394_init_module); module_exit(video1394_exit_module); +MODULE_ALIAS_CHARDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_VIDEO1394 * 16); diff -Nru a/drivers/net/3c527.c b/drivers/net/3c527.c --- a/drivers/net/3c527.c Thu Jan 15 21:41:54 2004 +++ b/drivers/net/3c527.c Thu Jan 15 21:41:54 2004 @@ -1,9 +1,10 @@ -/* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4 +/* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4 and 2.6. * * (c) Copyright 1998 Red Hat Software Inc * Written by Alan Cox. * Further debugging by Carl Drougge. - * Modified by Richard Procter (rnp@netlink.co.nz) + * Initial SMP support by Felipe W Damasio + * Heavily modified by Richard Procter * * Based on skeleton.c written 1993-94 by Donald Becker and ne2.c * (for the MCA stuff) written by Wim Dumon. @@ -17,11 +18,11 @@ */ #define DRV_NAME "3c527" -#define DRV_VERSION "0.6a" -#define DRV_RELDATE "2001/11/17" +#define DRV_VERSION "0.7-SMP" +#define DRV_RELDATE "2003/09/21" static const char *version = -DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Proctor (rnp@netlink.co.nz)\n"; +DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Procter \n"; /** * DOC: Traps for the unwary @@ -100,7 +101,9 @@ #include #include #include +#include +#include #include #include #include @@ -143,19 +146,19 @@ static const int WORKAROUND_82586=1; /* Pointers to buffers and their on-card records */ - struct mc32_ring_desc { volatile struct skb_header *p; struct sk_buff *skb; }; - /* Information that needs to be kept for each board. */ struct mc32_local { - struct net_device_stats net_stats; int slot; + + u32 base; + struct net_device_stats net_stats; volatile struct mc32_mailbox *rx_box; volatile struct mc32_mailbox *tx_box; volatile struct mc32_mailbox *exec_box; @@ -165,22 +168,23 @@ u16 tx_len; /* Transmit list count */ u16 rx_len; /* Receive list count */ - u32 base; - u16 exec_pending; - u16 mc_reload_wait; /* a multicast load request is pending */ + u16 xceiver_desired_state; /* HALTED or RUNNING */ + u16 cmd_nonblocking; /* Thread is uninterested in command result */ + u16 mc_reload_wait; /* A multicast load request is pending */ u32 mc_list_valid; /* True when the mclist is set */ - u16 xceiver_state; /* Current transceiver state. bitmapped */ - u16 desired_state; /* The state we want the transceiver to be in */ - atomic_t tx_count; /* buffers left */ - wait_queue_head_t event; struct mc32_ring_desc tx_ring[TX_RING_LEN]; /* Host Transmit ring */ struct mc32_ring_desc rx_ring[RX_RING_LEN]; /* Host Receive ring */ + atomic_t tx_count; /* buffers left */ + atomic_t tx_ring_head; /* index to tx en-queue end */ u16 tx_ring_tail; /* index to tx de-queue end */ - u16 tx_ring_head; /* index to tx en-queue end */ u16 rx_ring_tail; /* index to rx de-queue end */ + + struct semaphore cmd_mutex; /* Serialises issuing of execute commands */ + struct completion execution_cmd; /* Card has completed an execute command */ + struct completion xceiver_cmd; /* Card has completed a tx or rx command */ }; /* The station (ethernet) address prefix, used for a sanity check. */ @@ -236,7 +240,6 @@ { static int current_mca_slot = -1; int i; - int adapter_found = 0; SET_MODULE_OWNER(dev); @@ -247,11 +250,11 @@ Autodetecting MCA cards is extremely simple. Just search for the card. */ - for(i = 0; (mc32_adapters[i].name != NULL) && !adapter_found; i++) { + for(i = 0; (mc32_adapters[i].name != NULL); i++) { current_mca_slot = mca_find_unused_adapter(mc32_adapters[i].id, 0); - if((current_mca_slot != MCA_NOTFOUND) && !adapter_found) { + if(current_mca_slot != MCA_NOTFOUND) { if(!mc32_probe1(dev, current_mca_slot)) { mca_set_adapter_name(current_mca_slot, @@ -409,7 +412,7 @@ * Grab the IRQ */ - i = request_irq(dev->irq, &mc32_interrupt, SA_SHIRQ, dev->name, dev); + i = request_irq(dev->irq, &mc32_interrupt, SA_SHIRQ | SA_SAMPLE_RANDOM, dev->name, dev); if (i) { release_region(dev->base_addr, MC32_IO_EXTENT); printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, dev->irq); @@ -498,7 +501,9 @@ lp->tx_len = lp->exec_box->data[9]; /* Transmit list count */ lp->rx_len = lp->exec_box->data[11]; /* Receive list count */ - init_waitqueue_head(&lp->event); + init_MUTEX_LOCKED(&lp->cmd_mutex); + init_completion(&lp->execution_cmd); + init_completion(&lp->xceiver_cmd); printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n", dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base); @@ -511,10 +516,6 @@ dev->tx_timeout = mc32_timeout; dev->watchdog_timeo = HZ*5; /* Board does all the work */ dev->ethtool_ops = &netdev_ethtool_ops; - - lp->xceiver_state = HALTED; - - lp->tx_ring_tail=lp->tx_ring_head=0; /* Fill in the fields of the device structure with ethernet values. */ ether_setup(dev); @@ -539,7 +540,7 @@ * status of any pending commands and takes very little time at all. */ -static void mc32_ready_poll(struct net_device *dev) +static inline void mc32_ready_poll(struct net_device *dev) { int ioaddr = dev->base_addr; while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); @@ -554,31 +555,38 @@ * @len: Length of the data block * * Send a command from interrupt state. If there is a command - * currently being executed then we return an error of -1. It simply - * isn't viable to wait around as commands may be slow. Providing we - * get in, we busy wait for the board to become ready to accept the - * command and issue it. We do not wait for the command to complete - * --- the card will interrupt us when it's done. + * currently being executed then we return an error of -1. It + * simply isn't viable to wait around as commands may be + * slow. This can theoretically be starved on SMP, but it's hard + * to see a realistic situation. We do not wait for the command + * to complete --- we rely on the interrupt handler to tidy up + * after us. */ static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len) { struct mc32_local *lp = (struct mc32_local *)dev->priv; int ioaddr = dev->base_addr; + int ret = -1; - if(lp->exec_pending) - return -1; - - lp->exec_pending=3; - lp->exec_box->mbox=0; - lp->exec_box->mbox=cmd; - memcpy((void *)lp->exec_box->data, data, len); - barrier(); /* the memcpy forgot the volatile so be sure */ + if (down_trylock(&lp->cmd_mutex) == 0) + { + lp->cmd_nonblocking=1; + lp->exec_box->mbox=0; + lp->exec_box->mbox=cmd; + memcpy((void *)lp->exec_box->data, data, len); + barrier(); /* the memcpy forgot the volatile so be sure */ + + /* Send the command */ + mc32_ready_poll(dev); + outb(1<<6, ioaddr+HOST_CMD); - /* Send the command */ - while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); - outb(1<<6, ioaddr+HOST_CMD); - return 0; + ret = 0; + + /* Interrupt handler will signal mutex on completion */ + } + + return ret; } @@ -592,76 +600,47 @@ * Sends exec commands in a user context. This permits us to wait around * for the replies and also to wait for the command buffer to complete * from a previous command before we execute our command. After our - * command completes we will complete any pending multicast reload + * command completes we will attempt any pending multicast reload * we blocked off by hogging the exec buffer. * * You feed the card a command, you wait, it interrupts you get a * reply. All well and good. The complication arises because you use * commands for filter list changes which come in at bh level from things * like IPV6 group stuff. - * - * We have a simple state machine - * - * 0 - nothing issued - * - * 1 - command issued, wait reply - * - * 2 - reply waiting - reader then goes to state 0 - * - * 3 - command issued, trash reply. In which case the irq - * takes it back to state 0 - * */ static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len) { struct mc32_local *lp = (struct mc32_local *)dev->priv; int ioaddr = dev->base_addr; - unsigned long flags; int ret = 0; + down(&lp->cmd_mutex); + /* - * Wait for a command - */ - - save_flags(flags); - cli(); - - while(lp->exec_pending) - sleep_on(&lp->event); - - /* - * Issue mine + * My Turn */ - lp->exec_pending=1; - - restore_flags(flags); - + lp->cmd_nonblocking=0; lp->exec_box->mbox=0; lp->exec_box->mbox=cmd; memcpy((void *)lp->exec_box->data, data, len); barrier(); /* the memcpy forgot the volatile so be sure */ - /* Send the command */ - while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR)); - outb(1<<6, ioaddr+HOST_CMD); - - save_flags(flags); - cli(); + mc32_ready_poll(dev); + outb(1<<6, ioaddr+HOST_CMD); - while(lp->exec_pending!=2) - sleep_on(&lp->event); - lp->exec_pending=0; - restore_flags(flags); + wait_for_completion(&lp->execution_cmd); if(lp->exec_box->mbox&(1<<13)) ret = -1; + up(&lp->cmd_mutex); + /* - * A multicast set got blocked - do it now - */ - + * A multicast set got blocked - try it now + */ + if(lp->mc_reload_wait) { mc32_reset_multicast_list(dev); @@ -678,11 +657,9 @@ * This may be called from the interrupt state, where it is used * to restart the rx ring if the card runs out of rx buffers. * - * First, we check if it's ok to start the transceiver. We then show - * the card where to start in the rx ring and issue the - * commands to start reception and transmission. We don't wait - * around for these to complete. - */ + * We must first check if it's ok to (re)start the transceiver. See + * mc32_close for details. + */ static void mc32_start_transceiver(struct net_device *dev) { @@ -690,24 +667,20 @@ int ioaddr = dev->base_addr; /* Ignore RX overflow on device closure */ - if (lp->desired_state==HALTED) + if (lp->xceiver_desired_state==HALTED) return; + /* Give the card the offset to the post-EOL-bit RX descriptor */ mc32_ready_poll(dev); - - lp->tx_box->mbox=0; lp->rx_box->mbox=0; - - /* Give the card the offset to the post-EOL-bit RX descriptor */ lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next; - outb(HOST_CMD_START_RX, ioaddr+HOST_CMD); mc32_ready_poll(dev); + lp->tx_box->mbox=0; outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD); /* card ignores this on RX restart */ /* We are not interrupted on start completion */ - lp->xceiver_state=RUNNING; } @@ -727,25 +700,17 @@ { struct mc32_local *lp = (struct mc32_local *)dev->priv; int ioaddr = dev->base_addr; - unsigned long flags; mc32_ready_poll(dev); - - lp->tx_box->mbox=0; lp->rx_box->mbox=0; - outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD); + wait_for_completion(&lp->xceiver_cmd); + mc32_ready_poll(dev); + lp->tx_box->mbox=0; outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD); - - save_flags(flags); - cli(); - - while(lp->xceiver_state!=HALTED) - sleep_on(&lp->event); - - restore_flags(flags); -} + wait_for_completion(&lp->xceiver_cmd); +} /** @@ -756,7 +721,7 @@ * the point where mc32_start_transceiver() can be called. * * The card sets up the receive ring for us. We are required to use the - * ring it provides although we can change the size of the ring. + * ring it provides, although the size of the ring is configurable. * * We allocate an sk_buff for each ring entry in turn and * initalise its house-keeping info. At the same time, we read @@ -777,7 +742,7 @@ rx_base=lp->rx_chain; - for(i=0;irx_ring[i].skb=alloc_skb(1532, GFP_KERNEL); skb_reserve(lp->rx_ring[i].skb, 18); @@ -814,21 +779,19 @@ * * Free the buffer for each ring slot. This may be called * before mc32_load_rx_ring(), eg. on error in mc32_open(). + * Requires rx skb pointers to point to a valid skb, or NULL. */ static void mc32_flush_rx_ring(struct net_device *dev) { struct mc32_local *lp = (struct mc32_local *)dev->priv; - - struct sk_buff *skb; int i; for(i=0; i < RX_RING_LEN; i++) { - skb = lp->rx_ring[i].skb; - if (skb!=NULL) { - kfree_skb(skb); - skb=NULL; + if (lp->rx_ring[i].skb) { + dev_kfree_skb(lp->rx_ring[i].skb); + lp->rx_ring[i].skb = NULL; } lp->rx_ring[i].p=NULL; } @@ -860,7 +823,7 @@ tx_base=lp->tx_box->data[0]; - for(i=0;itx_len;i++) + for(i=0 ; ibase+tx_base); lp->tx_ring[i].p=p; @@ -869,11 +832,12 @@ tx_base=p->next; } - /* -1 so that tx_ring_head cannot "lap" tx_ring_tail, */ - /* which would be bad news for mc32_tx_ring as cur. implemented */ + /* -1 so that tx_ring_head cannot "lap" tx_ring_tail */ + /* see mc32_tx_ring */ atomic_set(&lp->tx_count, TX_RING_LEN-1); - lp->tx_ring_head=lp->tx_ring_tail=0; + atomic_set(&lp->tx_ring_head, 0); + lp->tx_ring_tail=0; } @@ -881,47 +845,29 @@ * mc32_flush_tx_ring - free transmit ring * @lp: Local data of 3c527 to flush the tx ring of * - * We have to consider two cases here. We want to free the pending - * buffers only. If the ring buffer head is past the start then the - * ring segment we wish to free wraps through zero. The tx ring - * house-keeping variables are then reset. + * If the ring is non-empty, zip over the it, freeing any + * allocated skb_buffs. The tx ring house-keeping variables are + * then reset. Requires rx skb pointers to point to a valid skb, + * or NULL. */ static void mc32_flush_tx_ring(struct net_device *dev) { struct mc32_local *lp = (struct mc32_local *)dev->priv; - - if(lp->tx_ring_tail!=lp->tx_ring_head) + int i; + + for (i=0; i < TX_RING_LEN; i++) { - int i; - if(lp->tx_ring_tail < lp->tx_ring_head) + if (lp->tx_ring[i].skb) { - for(i=lp->tx_ring_tail;itx_ring_head;i++) - { - dev_kfree_skb(lp->tx_ring[i].skb); - lp->tx_ring[i].skb=NULL; - lp->tx_ring[i].p=NULL; - } - } - else - { - for(i=lp->tx_ring_tail; itx_ring[i].skb); - lp->tx_ring[i].skb=NULL; - lp->tx_ring[i].p=NULL; - } - for(i=0; itx_ring_head; i++) - { - dev_kfree_skb(lp->tx_ring[i].skb); - lp->tx_ring[i].skb=NULL; - lp->tx_ring[i].p=NULL; - } + dev_kfree_skb(lp->tx_ring[i].skb); + lp->tx_ring[i].skb = NULL; } } - + atomic_set(&lp->tx_count, 0); - lp->tx_ring_tail=lp->tx_ring_head=0; + atomic_set(&lp->tx_ring_head, 0); + lp->tx_ring_tail=0; } @@ -958,6 +904,12 @@ regs|=HOST_CTRL_INTE; outb(regs, ioaddr+HOST_CTRL); + /* + * Allow ourselves to issue commands + */ + + up(&lp->cmd_mutex); + /* * Send the indications on command @@ -1010,7 +962,7 @@ return -ENOBUFS; } - lp->desired_state = RUNNING; + lp->xceiver_desired_state = RUNNING; /* And finally, set the ball rolling... */ mc32_start_transceiver(dev); @@ -1047,61 +999,64 @@ * Transmit a buffer. This normally means throwing the buffer onto * the transmit queue as the queue is quite large. If the queue is * full then we set tx_busy and return. Once the interrupt handler - * gets messages telling it to reclaim transmit queue entries we will + * gets messages telling it to reclaim transmit queue entries, we will * clear tx_busy and the kernel will start calling this again. * - * We use cli rather than spinlocks. Since I have no access to an SMP - * MCA machine I don't plan to change it. It is probably the top - * performance hit for this driver on SMP however. + * We do not disable interrupts or acquire any locks; this can + * run concurrently with mc32_tx_ring(), and the function itself + * is serialised at a higher layer. However, similarly for the + * card itself, we must ensure that we update tx_ring_head only + * after we've established a valid packet on the tx ring (and + * before we let the card "see" it, to prevent it racing with the + * irq handler). + * */ static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev) { struct mc32_local *lp = (struct mc32_local *)dev->priv; - unsigned long flags; - + u32 head = atomic_read(&lp->tx_ring_head); + volatile struct skb_header *p, *np; netif_stop_queue(dev); - save_flags(flags); - cli(); - - if(atomic_read(&lp->tx_count)==0) - { - restore_flags(flags); + if(atomic_read(&lp->tx_count)==0) { return 1; } + skb = skb_padto(skb, ETH_ZLEN); + if (skb == NULL) { + netif_wake_queue(dev); + return 0; + } + atomic_dec(&lp->tx_count); /* P is the last sending/sent buffer as a pointer */ - p=lp->tx_ring[lp->tx_ring_head].p; + p=lp->tx_ring[head].p; - lp->tx_ring_head=next_tx(lp->tx_ring_head); + head = next_tx(head); /* NP is the buffer we will be loading */ - np=lp->tx_ring[lp->tx_ring_head].p; - - if (skb->len < ETH_ZLEN) { - skb = skb_padto(skb, ETH_ZLEN); - if (skb == NULL) - goto out; - } - + np=lp->tx_ring[head].p; + /* We will need this to flush the buffer out */ - lp->tx_ring[lp->tx_ring_head].skb = skb; - - np->length = (skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len; - + lp->tx_ring[head].skb=skb; + + np->length = unlikely(skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len; np->data = isa_virt_to_bus(skb->data); np->status = 0; np->control = CONTROL_EOP | CONTROL_EOL; wmb(); - p->control &= ~CONTROL_EOL; /* Clear EOL on p */ -out: - restore_flags(flags); + /* + * The new frame has been setup; we can now + * let the interrupt handler and card "see" it + */ + + atomic_set(&lp->tx_ring_head, head); + p->control &= ~CONTROL_EOL; netif_wake_queue(dev); return 0; @@ -1182,10 +1137,11 @@ { struct mc32_local *lp=dev->priv; volatile struct skb_header *p; - u16 rx_ring_tail = lp->rx_ring_tail; - u16 rx_old_tail = rx_ring_tail; - + u16 rx_ring_tail; + u16 rx_old_tail; int x=0; + + rx_old_tail = rx_ring_tail = lp->rx_ring_tail; do { @@ -1275,9 +1231,14 @@ struct mc32_local *lp=(struct mc32_local *)dev->priv; volatile struct skb_header *np; - /* NB: lp->tx_count=TX_RING_LEN-1 so that tx_ring_head cannot "lap" tail here */ + /* + * We rely on head==tail to mean 'queue empty'. + * This is why lp->tx_count=TX_RING_LEN-1: in order to prevent + * tx_ring_head wrapping to tail and confusing a 'queue empty' + * condition with 'queue full' + */ - while (lp->tx_ring_tail != lp->tx_ring_head) + while (lp->tx_ring_tail != atomic_read(&lp->tx_ring_head)) { u16 t; @@ -1388,8 +1349,7 @@ break; case 3: /* Halt */ case 4: /* Abort */ - lp->xceiver_state |= TX_HALTED; - wake_up(&lp->event); + complete(&lp->xceiver_cmd); break; default: printk("%s: strange tx ack %d\n", dev->name, status&7); @@ -1404,8 +1364,7 @@ break; case 3: /* Halt */ case 4: /* Abort */ - lp->xceiver_state |= RX_HALTED; - wake_up(&lp->event); + complete(&lp->xceiver_cmd); break; case 6: /* Out of RX buffers stat */ @@ -1421,26 +1380,17 @@ status>>=3; if(status&1) { - - /* 0=no 1=yes 2=replied, get cmd, 3 = wait reply & dump it */ - - if(lp->exec_pending!=3) { - lp->exec_pending=2; - wake_up(&lp->event); - } - else - { - lp->exec_pending=0; - - /* A new multicast set may have been - blocked while the old one was - running. If so, do it now. */ + /* + * No thread is waiting: we need to tidy + * up ourself. + */ + if (lp->cmd_nonblocking) { + up(&lp->cmd_mutex); if (lp->mc_reload_wait) mc32_reset_multicast_list(dev); - else - wake_up(&lp->event); } + else complete(&lp->execution_cmd); } if(status&2) { @@ -1493,12 +1443,12 @@ static int mc32_close(struct net_device *dev) { struct mc32_local *lp = (struct mc32_local *)dev->priv; - int ioaddr = dev->base_addr; + u8 regs; u16 one=1; - lp->desired_state = HALTED; + lp->xceiver_desired_state = HALTED; netif_stop_queue(dev); /* @@ -1511,11 +1461,10 @@ mc32_halt_transceiver(dev); - /* Catch any waiting commands */ + /* Ensure we issue no more commands beyond this point */ + + down(&lp->cmd_mutex); - while(lp->exec_pending==1) - sleep_on(&lp->event); - /* Ok the card is now stopping */ regs=inb(ioaddr+HOST_CTRL); @@ -1542,12 +1491,9 @@ static struct net_device_stats *mc32_get_stats(struct net_device *dev) { - struct mc32_local *lp; + struct mc32_local *lp = (struct mc32_local *)dev->priv; mc32_update_stats(dev); - - lp = (struct mc32_local *)dev->priv; - return &lp->net_stats; } diff -Nru a/drivers/net/3c527.h b/drivers/net/3c527.h --- a/drivers/net/3c527.h Thu Jan 15 21:41:53 2004 +++ b/drivers/net/3c527.h Thu Jan 15 21:41:53 2004 @@ -27,10 +27,8 @@ #define HOST_RAMPAGE 8 -#define RX_HALTED (1<<0) -#define TX_HALTED (1<<1) -#define HALTED (RX_HALTED | TX_HALTED) -#define RUNNING 0 +#define HALTED 0 +#define RUNNING 1 struct mc32_mailbox { diff -Nru a/drivers/net/68360enet.c b/drivers/net/68360enet.c --- a/drivers/net/68360enet.c Thu Jan 15 21:41:53 2004 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,951 +0,0 @@ -/* - * Ethernet driver for Motorola MPC8xx. - * Copyright (c) 2000 Michael Leslie - * Copyright (c) 1997 Dan Malek (dmalek@jlc.net) - * - * I copied the basic skeleton from the lance driver, because I did not - * know how to write the Linux driver, but I did know how the LANCE worked. - * - * This version of the driver is somewhat selectable for the different - * processor/board combinations. It works for the boards I know about - * now, and should be easily modified to include others. Some of the - * configuration information is contained in "commproc.h" and the - * remainder is here. - * - * Buffer descriptors are kept in the CPM dual port RAM, and the frame - * buffers are in the host memory. - * - * Right now, I am very watseful with the buffers. I allocate memory - * pages and then divide them into 2K frame buffers. This way I know I - * have buffers large enough to hold one frame within one buffer descriptor. - * Once I get this working, I will use 64 or 128 byte CPM buffers, which - * will be much more memory efficient and will easily handle lots of - * small packets. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -/* #include */ -/* #include */ -/* #include */ -#include -/* #include */ -#include - - -/* - * Theory of Operation - * - * The MPC8xx CPM performs the Ethernet processing on SCC1. It can use - * an aribtrary number of buffers on byte boundaries, but must have at - * least two receive buffers to prevent constant overrun conditions. - * - * The buffer descriptors are allocated from the CPM dual port memory - * with the data buffers allocated from host memory, just like all other - * serial communication protocols. The host memory buffers are allocated - * from the free page pool, and then divided into smaller receive and - * transmit buffers. The size of the buffers should be a power of two, - * since that nicely divides the page. This creates a ring buffer - * structure similar to the LANCE and other controllers. - * - * Like the LANCE driver: - * The driver runs as two independent, single-threaded flows of control. One - * is the send-packet routine, which enforces single-threaded use by the - * cep->tx_busy flag. The other thread is the interrupt handler, which is - * single threaded by the hardware and other software. - * - * The send packet thread has partial control over the Tx ring and the - * 'cep->tx_busy' flag. It sets the tx_busy flag whenever it's queuing a Tx - * packet. If the next queue slot is empty, it clears the tx_busy flag when - * finished otherwise it sets the 'lp->tx_full' flag. - * - * The MBX has a control register external to the MPC8xx that has some - * control of the Ethernet interface. Information is in the manual for - * your board. - * - * The RPX boards have an external control/status register. Consult the - * programming documents for details unique to your board. - * - * For the TQM8xx(L) modules, there is no control register interface. - * All functions are directly controlled using I/O pins. See commproc.h. - */ - - -/* The transmitter timeout - */ -#define TX_TIMEOUT (2*HZ) - -/* The number of Tx and Rx buffers. These are allocated statically here. - * We don't need to allocate pages for the transmitter. We just use - * the skbuffer directly. - */ -#ifdef CONFIG_ENET_BIG_BUFFERS -#define RX_RING_SIZE 64 -#define TX_RING_SIZE 64 /* Must be power of two */ -#define TX_RING_MOD_MASK 63 /* for this to work */ -#else -#define RX_RING_SIZE 8 -#define TX_RING_SIZE 8 /* Must be power of two */ -#define TX_RING_MOD_MASK 7 /* for this to work */ -#endif - -#define CPM_ENET_RX_FRSIZE 2048 /* overkill left over from ppc page-based allocation */ -static char rx_buf_pool[RX_RING_SIZE * CPM_ENET_RX_FRSIZE]; - - -/* The CPM stores dest/src/type, data, and checksum for receive packets. - */ -#define PKT_MAXBUF_SIZE 1518 -#define PKT_MINBUF_SIZE 64 -#define PKT_MAXBLR_SIZE 1520 - -/* The CPM buffer descriptors track the ring buffers. The rx_bd_base and - * tx_bd_base always point to the base of the buffer descriptors. The - * cur_rx and cur_tx point to the currently available buffer. - * The dirty_tx tracks the current buffer that is being sent by the - * controller. The cur_tx and dirty_tx are equal under both completely - * empty and completely full conditions. The empty/ready indicator in - * the buffer descriptor determines the actual condition. - */ -struct scc_enet_private { - /* The saved address of a sent-in-place packet/buffer, for skfree(). */ - struct sk_buff* tx_skbuff[TX_RING_SIZE]; - ushort skb_cur; - ushort skb_dirty; - - /* CPM dual port RAM relative addresses. - */ - QUICC_BD *rx_bd_base; /* Address of Rx and Tx buffers. */ - QUICC_BD *tx_bd_base; - QUICC_BD *cur_rx, *cur_tx; /* The next free ring entry */ - QUICC_BD *dirty_tx; /* The ring entries to be free()ed. */ - volatile struct scc_regs *sccp; - /* struct net_device_stats stats; */ - struct net_device_stats stats; - uint tx_full; - /* spinlock_t lock; */ - volatile unsigned int lock; -}; - - - -static int scc_enet_open(struct net_device *dev); -static int scc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); -static int scc_enet_rx(struct net_device *dev); -static irqreturn_t scc_enet_interrupt(int vec, void *dev_id, struct pt_regs *fp); -static int scc_enet_close(struct net_device *dev); -/* static struct net_device_stats *scc_enet_get_stats(struct net_device *dev); */ -static struct net_device_stats *scc_enet_get_stats(struct net_device *dev); -static void set_multicast_list(struct net_device *dev); - -/* Get this from various configuration locations (depends on board). -*/ -/*static ushort my_enet_addr[] = { 0x0800, 0x3e26, 0x1559 };*/ - -/* Typically, 860(T) boards use SCC1 for Ethernet, and other 8xx boards - * use SCC2. This is easily extended if necessary. - */ - -#define CONFIG_SCC1_ENET /* by default */ - -#ifdef CONFIG_SCC1_ENET -#define CPM_CR_ENET CPM_CR_CH_SCC1 -#define PROFF_ENET PROFF_SCC1 -#define SCC_ENET 0 -#define CPMVEC_ENET CPMVEC_SCC1 -#endif - -#ifdef CONFIG_SCC2_ENET -#define CPM_CR_ENET CPM_CR_CH_SCC2 -#define PROFF_ENET PROFF_SCC2 -#define SCC_ENET 1 /* Index, not number! */ -#define CPMVEC_ENET CPMVEC_SCC2 -#endif - -static int -scc_enet_open(struct net_device *dev) -{ - - /* I should reset the ring buffers here, but I don't yet know - * a simple way to do that. - * mleslie: That's no biggie. Worth doing, too. - */ - - /* netif_start_queue(dev); */ - return 0; /* Always succeed */ -} - - -static int -scc_enet_start_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct scc_enet_private *cep = (struct scc_enet_private *)dev->priv; - volatile QUICC_BD *bdp; - - /* Fill in a Tx ring entry */ - bdp = cep->cur_tx; - -#ifndef final_version - if (bdp->status & BD_ENET_TX_READY) { - /* Ooops. All transmit buffers are full. Bail out. - * This should not happen, since cep->tx_busy should be set. - */ - printk("%s: tx queue full!.\n", dev->name); - return 1; - } -#endif - - /* Clear all of the status flags. - */ - bdp->status &= ~BD_ENET_TX_STATS; - - /* If the frame is short, tell CPM to pad it. - */ - if (skb->len <= ETH_ZLEN) - bdp->status |= BD_ENET_TX_PAD; - else - bdp->status &= ~BD_ENET_TX_PAD; - - /* Set buffer length and buffer pointer. - */ - bdp->length = skb->len; - /* bdp->buf = __pa(skb->data); */ - bdp->buf = skb->data; - - /* Save skb pointer. - */ - cep->tx_skbuff[cep->skb_cur] = skb; - - /* cep->stats.tx_bytes += skb->len; */ /* TODO: It would really be nice... */ - - cep->skb_cur = (cep->skb_cur+1) & TX_RING_MOD_MASK; - - - /* Push the data cache so the CPM does not get stale memory - * data. - */ -/* flush_dcache_range((unsigned long)(skb->data), */ -/* (unsigned long)(skb->data + skb->len)); */ - - /* spin_lock_irq(&cep->lock); */ /* TODO: SPINLOCK */ - local_irq_disable(); - if (cep->lock > 0) { - printk ("scc_enet_start_xmit() lock == %d\n", cep->lock); - } else { - cep->lock++; - } - - /* Send it on its way. Tell CPM its ready, interrupt when done, - * its the last BD of the frame, and to put the CRC on the end. - */ - bdp->status |= (BD_ENET_TX_READY | BD_ENET_TX_INTR | BD_ENET_TX_LAST | BD_ENET_TX_TC); - - dev->trans_start = jiffies; - - /* If this was the last BD in the ring, start at the beginning again. - */ - if (bdp->status & BD_ENET_TX_WRAP) - bdp = cep->tx_bd_base; - else - bdp++; - - if (bdp->status & BD_ENET_TX_READY) { - /* netif_stop_queue(dev); */ - cep->tx_full = 1; - } - - cep->cur_tx = (QUICC_BD *)bdp; - - /* spin_unlock_irq(&cep->lock); */ /* TODO: SPINLOCK */ - cep->lock--; - sti(); - - return 0; -} - -#if 0 -static void -scc_enet_timeout(struct net_device *dev) -{ - struct scc_enet_private *cep = (struct scc_enet_private *)dev->priv; - - printk("%s: transmit timed out.\n", dev->name); - cep->stats.tx_errors++; -#ifndef final_version - { - int i; - QUICC_BD *bdp; - printk(" Ring data dump: cur_tx %p%s cur_rx %p.\n", - cep->cur_tx, cep->tx_full ? " (full)" : "", - cep->cur_rx); - bdp = cep->tx_bd_base; - for (i = 0 ; i < TX_RING_SIZE; i++, bdp++) - printk("%04x %04x %08x\n", - bdp->status, - bdp->length, - (int)(bdp->buf)); - bdp = cep->rx_bd_base; - for (i = 0 ; i < RX_RING_SIZE; i++, bdp++) - printk("%04x %04x %08x\n", - bdp->status, - bdp->length, - (int)(bdp->buf)); - } -#endif -/* if (!cep->tx_full) */ -/* netif_wake_queue(dev); */ -} -#endif - -/* The interrupt handler. - * This is called from the CPM handler, not the MPC core interrupt. - */ -static irqreturn_t scc_enet_interrupt(int vec, void *dev_id, struct pt_regs *fp) -{ - struct net_device *dev = (struct net_device *)dev_id; - volatile struct scc_enet_private *cep; - volatile QUICC_BD *bdp; - ushort int_events; - int must_restart; - - cep = (struct scc_enet_private *)dev->priv; - - /* Get the interrupt events that caused us to be here. - */ - int_events = cep->sccp->scc_scce; - cep->sccp->scc_scce = int_events; - must_restart = 0; - - /* Handle receive event in its own function. - */ - if (int_events & SCCE_ENET_RXF) - scc_enet_rx(dev_id); - - /* Check for a transmit error. The manual is a little unclear - * about this, so the debug code until I get it figured out. It - * appears that if TXE is set, then TXB is not set. However, - * if carrier sense is lost during frame transmission, the TXE - * bit is set, "and continues the buffer transmission normally." - * I don't know if "normally" implies TXB is set when the buffer - * descriptor is closed.....trial and error :-). - */ - - /* Transmit OK, or non-fatal error. Update the buffer descriptors. - */ - if (int_events & (SCCE_ENET_TXE | SCCE_ENET_TXB)) { - /* spin_lock(&cep->lock); */ /* TODO: SPINLOCK */ - /* local_irq_disable(); */ - if (cep->lock > 0) { - printk ("scc_enet_interrupt() lock == %d\n", cep->lock); - } else { - cep->lock++; - } - - bdp = cep->dirty_tx; - while ((bdp->status&BD_ENET_TX_READY)==0) { - if ((bdp==cep->cur_tx) && (cep->tx_full == 0)) - break; - - if (bdp->status & BD_ENET_TX_HB) /* No heartbeat */ - cep->stats.tx_heartbeat_errors++; - if (bdp->status & BD_ENET_TX_LC) /* Late collision */ - cep->stats.tx_window_errors++; - if (bdp->status & BD_ENET_TX_RL) /* Retrans limit */ - cep->stats.tx_aborted_errors++; - if (bdp->status & BD_ENET_TX_UN) /* Underrun */ - cep->stats.tx_fifo_errors++; - if (bdp->status & BD_ENET_TX_CSL) /* Carrier lost */ - cep->stats.tx_carrier_errors++; - - - /* No heartbeat or Lost carrier are not really bad errors. - * The others require a restart transmit command. - */ - if (bdp->status & - (BD_ENET_TX_LC | BD_ENET_TX_RL | BD_ENET_TX_UN)) { - must_restart = 1; - cep->stats.tx_errors++; - } - - cep->stats.tx_packets++; - - /* Deferred means some collisions occurred during transmit, - * but we eventually sent the packet OK. - */ - if (bdp->status & BD_ENET_TX_DEF) - cep->stats.collisions++; - - /* Free the sk buffer associated with this last transmit. - */ - /* dev_kfree_skb_irq(cep->tx_skbuff[cep->skb_dirty]); */ - dev_kfree_skb (cep->tx_skbuff[cep->skb_dirty]); - cep->skb_dirty = (cep->skb_dirty + 1) & TX_RING_MOD_MASK; - - /* Update pointer to next buffer descriptor to be transmitted. - */ - if (bdp->status & BD_ENET_TX_WRAP) - bdp = cep->tx_bd_base; - else - bdp++; - - /* I don't know if we can be held off from processing these - * interrupts for more than one frame time. I really hope - * not. In such a case, we would now want to check the - * currently available BD (cur_tx) and determine if any - * buffers between the dirty_tx and cur_tx have also been - * sent. We would want to process anything in between that - * does not have BD_ENET_TX_READY set. - */ - - /* Since we have freed up a buffer, the ring is no longer - * full. - */ - if (cep->tx_full) { - cep->tx_full = 0; -/* if (netif_queue_stopped(dev)) */ -/* netif_wake_queue(dev); */ - } - - cep->dirty_tx = (QUICC_BD *)bdp; - } - - if (must_restart) { - volatile QUICC *cp; - - /* Some transmit errors cause the transmitter to shut - * down. We now issue a restart transmit. Since the - * errors close the BD and update the pointers, the restart - * _should_ pick up without having to reset any of our - * pointers either. - */ - cp = pquicc; - cp->cp_cr = - mk_cr_cmd(CPM_CR_ENET, CPM_CR_RESTART_TX) | CPM_CR_FLG; - while (cp->cp_cr & CPM_CR_FLG); - } - /* spin_unlock(&cep->lock); */ /* TODO: SPINLOCK */ - /* sti(); */ - cep->lock--; - } - - /* Check for receive busy, i.e. packets coming but no place to - * put them. This "can't happen" because the receive interrupt - * is tossing previous frames. - */ - if (int_events & SCCE_ENET_BSY) { - cep->stats.rx_dropped++; - printk("CPM ENET: BSY can't happen.\n"); - } - - return IRQ_HANDLED; -} - -/* During a receive, the cur_rx points to the current incoming buffer. - * When we update through the ring, if the next incoming buffer has - * not been given to the system, we just set the empty indicator, - * effectively tossing the packet. - */ -static int -scc_enet_rx(struct net_device *dev) -{ - struct scc_enet_private *cep; - volatile QUICC_BD *bdp; - struct sk_buff *skb; - ushort pkt_len; - - cep = (struct scc_enet_private *)dev->priv; - - /* First, grab all of the stats for the incoming packet. - * These get messed up if we get called due to a busy condition. - */ - bdp = cep->cur_rx; - - for (;;) { - if (bdp->status & BD_ENET_RX_EMPTY) - break; - -#ifndef final_version - /* Since we have allocated space to hold a complete frame, both - * the first and last indicators should be set. - */ - if ((bdp->status & (BD_ENET_RX_FIRST | BD_ENET_RX_LAST)) != - (BD_ENET_RX_FIRST | BD_ENET_RX_LAST)) - printk("CPM ENET: rcv is not first+last\n"); -#endif - - /* Frame too long or too short. - */ - if (bdp->status & (BD_ENET_RX_LG | BD_ENET_RX_SH)) - cep->stats.rx_length_errors++; - if (bdp->status & BD_ENET_RX_NO) /* Frame alignment */ - cep->stats.rx_frame_errors++; - if (bdp->status & BD_ENET_RX_CR) /* CRC Error */ - cep->stats.rx_crc_errors++; - if (bdp->status & BD_ENET_RX_OV) /* FIFO overrun */ - cep->stats.rx_crc_errors++; - - /* Report late collisions as a frame error. - * On this error, the BD is closed, but we don't know what we - * have in the buffer. So, just drop this frame on the floor. - */ - if (bdp->status & BD_ENET_RX_CL) { - cep->stats.rx_frame_errors++; - } - else { - - /* Process the incoming frame. - */ - cep->stats.rx_packets++; - pkt_len = bdp->length; - /* cep->stats.rx_bytes += pkt_len; */ /* TODO: It would really be nice... */ - - /* This does 16 byte alignment, much more than we need. - * The packet length includes FCS, but we don't want to - * include that when passing upstream as it messes up - * bridging applications. - */ - skb = dev_alloc_skb(pkt_len-4); - - if (skb == NULL) { - printk("%s: Memory squeeze, dropping packet.\n", dev->name); - cep->stats.rx_dropped++; - } - else { - skb->dev = dev; - skb_put(skb,pkt_len-4); /* Make room */ - eth_copy_and_sum(skb, (unsigned char *)bdp->buf, pkt_len-4, 0); - skb->protocol=eth_type_trans(skb,dev); - netif_rx(skb); - } - } - - /* Clear the status flags for this buffer. - */ - bdp->status &= ~BD_ENET_RX_STATS; - - /* Mark the buffer empty. - */ - bdp->status |= BD_ENET_RX_EMPTY; - - /* Update BD pointer to next entry. - */ - if (bdp->status & BD_ENET_RX_WRAP) - bdp = cep->rx_bd_base; - else - bdp++; - - } - cep->cur_rx = (QUICC_BD *)bdp; - - return 0; -} - -static int -scc_enet_close(struct net_device *dev) -{ - /* Don't know what to do yet. - */ - /* netif_stop_queue(dev); */ - - return 0; -} - -/* static struct net_device_stats *scc_enet_get_stats(struct net_device *dev) */ -static struct net_device_stats *scc_enet_get_stats(struct net_device *dev) -{ - struct scc_enet_private *cep = (struct scc_enet_private *)dev->priv; - - return &cep->stats; -} - -/* Set or clear the multicast filter for this adaptor. - * Skeleton taken from sunlance driver. - * The CPM Ethernet implementation allows Multicast as well as individual - * MAC address filtering. Some of the drivers check to make sure it is - * a group multicast address, and discard those that are not. I guess I - * will do the same for now, but just remove the test if you want - * individual filtering as well (do the upper net layers want or support - * this kind of feature?). - */ - -static void set_multicast_list(struct net_device *dev) -{ - struct scc_enet_private *cep; - struct dev_mc_list *dmi; - u_char *mcptr, *tdptr; - volatile scc_enet_t *ep; - int i, j; - volatile QUICC *cp = pquicc; - - cep = (struct scc_enet_private *)dev->priv; - - /* Get pointer to SCC area in parameter RAM. - */ - ep = (scc_enet_t *)dev->base_addr; - - if (dev->flags&IFF_PROMISC) { - - /* Log any net taps. */ - printk("%s: Promiscuous mode enabled.\n", dev->name); - cep->sccp->scc_psmr |= ETHER_PRO; - } else { - - cep->sccp->scc_psmr &= ~ETHER_PRO; - - if (dev->flags & IFF_ALLMULTI) { - /* Catch all multicast addresses, so set the - * filter to all 1's. - */ - ep->sen_gaddr1 = 0xffff; - ep->sen_gaddr2 = 0xffff; - ep->sen_gaddr3 = 0xffff; - ep->sen_gaddr4 = 0xffff; - } - else { - /* Clear filter and add the addresses in the list. - */ - ep->sen_gaddr1 = 0; - ep->sen_gaddr2 = 0; - ep->sen_gaddr3 = 0; - ep->sen_gaddr4 = 0; - - dmi = dev->mc_list; - - for (i=0; imc_count; i++) { - - /* Only support group multicast for now. - */ - if (!(dmi->dmi_addr[0] & 1)) - continue; - - /* The address in dmi_addr is LSB first, - * and taddr is MSB first. We have to - * copy bytes MSB first from dmi_addr. - */ - mcptr = (u_char *)dmi->dmi_addr + 5; - tdptr = (u_char *)&ep->sen_taddrh; - for (j=0; j<6; j++) - *tdptr++ = *mcptr--; - - /* Ask CPM to run CRC and set bit in - * filter mask. - */ - cp->cp_cr = mk_cr_cmd(CPM_CR_ENET, CPM_CR_SET_GADDR) | CPM_CR_FLG; - /* this delay is necessary here -- Cort */ - udelay(10); - while (cp->cp_cr & CPM_CR_FLG); - } - } - } -} - - -/* Initialize the CPM Ethernet on SCC. - */ -int scc_enet_init(void) -{ - struct net_device *dev; - struct scc_enet_private *cep; - int i, j; - unsigned char *eap; - /* unsigned long mem_addr; */ - /* pte_t *pte; */ - /* bd_t *bd; */ /* `board tag' used by ppc - TODO: integrate uC bootloader vars */ - volatile QUICC_BD *bdp; - volatile QUICC *cp; - volatile struct scc_regs *sccp; - volatile struct ethernet_pram *ep; - /* volatile immap_t *immap; */ - - cp = pquicc; /* Get pointer to Communication Processor */ - - /* immap = (immap_t *)IMAP_ADDR; */ /* and to internal registers */ - - /* bd = (bd_t *)__res; */ - - /* Allocate some private information. - */ - cep = (struct scc_enet_private *)kmalloc(sizeof(*cep), GFP_KERNEL); - memset(cep, 0, sizeof(*cep)); - /* __clear_user(cep,sizeof(*cep)); */ - /* spin_lock_init(&cep->lock); */ /* TODO: SPINLOCK */ - - /* Create an Ethernet device instance. - */ - dev = init_etherdev(0, 0); - - /* Get pointer to SCC area in parameter RAM. - */ - /* ep = (ethernet_pram *)(&cp->cp_dparam[PROFF_ENET]); */ - ep = &pquicc->pram[SCC_ENET].enet_scc; - - /* And another to the SCC register area. - */ - sccp = &pquicc->scc_regs[SCC_ENET]; - cep->sccp = sccp; /* Keep the pointer handy */ - - /* Disable receive and transmit in case EPPC-Bug started it. - */ - sccp->scc_gsmr.w.low &= ~(SCC_GSMRL_ENR | SCC_GSMRL_ENT); - - /* Set up 360 pins for SCC interface to ethernet transceiver. - * Pin mappings (PA_xx and PC_xx) are defined in commproc.h - */ - - /* Configure port A pins for Txd and Rxd. - */ - pquicc->pio_papar |= (PA_ENET_RXD | PA_ENET_TXD); - pquicc->pio_padir &= ~(PA_ENET_RXD | PA_ENET_TXD); - pquicc->pio_paodr &= ~PA_ENET_TXD; - - /* Configure port C pins to enable CLSN and RENA. - */ - pquicc->pio_pcpar &= ~(PC_ENET_CLSN | PC_ENET_RENA); - pquicc->pio_pcdir &= ~(PC_ENET_CLSN | PC_ENET_RENA); - pquicc->pio_pcso |= (PC_ENET_CLSN | PC_ENET_RENA); - - /* Configure port A for TCLK and RCLK. - */ - pquicc->pio_papar |= (PA_ENET_TCLK | PA_ENET_RCLK); - pquicc->pio_padir &= ~(PA_ENET_TCLK | PA_ENET_RCLK); - - /* Configure Serial Interface clock routing. - * First, clear all SCC bits to zero, then set the ones we want. - */ - pquicc->si_sicr &= ~SICR_ENET_MASK; - pquicc->si_sicr |= SICR_ENET_CLKRT; - - - /* Allocate space for the buffer descriptors in the DP ram. - * These are relative offsets in the DP ram address space. - * Initialize base addresses for the buffer descriptors. - */ - i = m360_cpm_dpalloc(sizeof(QUICC_BD) * RX_RING_SIZE); - ep->rbase = i; - cep->rx_bd_base = (QUICC_BD *)((uint)pquicc + i); - - i = m360_cpm_dpalloc(sizeof(QUICC_BD) * TX_RING_SIZE); - ep->tbase = i; - cep->tx_bd_base = (QUICC_BD *)((uint)pquicc + i); - - cep->dirty_tx = cep->cur_tx = cep->tx_bd_base; - cep->cur_rx = cep->rx_bd_base; - - /* Issue init Rx BD command for SCC. - * Manual says to perform an Init Rx parameters here. We have - * to perform both Rx and Tx because the SCC may have been - * already running. [In uCquicc's case, I don't think that is so - mles] - * In addition, we have to do it later because we don't yet have - * all of the BD control/status set properly. - cp->cp_cpcr = mk_cr_cmd(CPM_CR_ENET, CPM_CR_INIT_RX) | CPM_CR_FLG; - while (cp->cp_cpcr & CPM_CR_FLG); - */ - - /* Initialize function code registers for big-endian. - */ - ep->rfcr = (SCC_EB | SCC_FC_DMA); - ep->tfcr = (SCC_EB | SCC_FC_DMA); - - /* Set maximum bytes per receive buffer. - * This appears to be an Ethernet frame size, not the buffer - * fragment size. It must be a multiple of four. - */ - ep->mrblr = PKT_MAXBLR_SIZE; - - /* Set CRC preset and mask. - */ - ep->c_pres = 0xffffffff; - ep->c_mask = 0xdebb20e3; /* see 360UM p. 7-247 */ - - ep->crcec = 0; /* CRC Error counter */ - ep->alec = 0; /* alignment error counter */ - ep->disfc = 0; /* discard frame counter */ - - ep->pads = 0x8888; /* Tx short frame pad character */ - ep->ret_lim = 0x000f; /* Retry limit threshold */ - - ep->mflr = PKT_MAXBUF_SIZE; /* maximum frame length register */ - ep->minflr = PKT_MINBUF_SIZE; /* minimum frame length register */ - - ep->maxd1 = PKT_MAXBLR_SIZE; /* maximum DMA1 length */ - ep->maxd2 = PKT_MAXBLR_SIZE; /* maximum DMA2 length */ - - /* Clear hash tables, group and individual. - */ - ep->gaddr1 = ep->gaddr2 = ep->gaddr3 = ep->gaddr4 = 0; - ep->iaddr1 = ep->iaddr2 = ep->iaddr3 = ep->iaddr4 = 0; - - /* Set Ethernet station address. - * - * The uCbootloader provides a hook to the kernel to retrieve - * stuff like the MAC address. This is retrieved in config_BSP() - */ -#if defined (CONFIG_UCQUICC) - { - extern unsigned char *scc1_hwaddr; - - eap = (char *)ep->paddr.b; - for (i=5; i>=0; i--) - *eap++ = dev->dev_addr[i] = scc1_hwaddr[i]; - } -#endif - - -/* #ifndef CONFIG_MBX */ -/* eap = (unsigned char *)&(ep->paddrh); */ - -/* for (i=5; i>=0; i--) */ -/* *eap++ = dev->dev_addr[i] = bd->bi_enetaddr[i]; */ -/* #else */ -/* for (i=5; i>=0; i--) */ -/* dev->dev_addr[i] = *eap++; */ -/* #endif */ - - ep->p_per = 0; /* 'cause the book says so */ - ep->taddr_l = 0; /* temp address (LSB) */ - ep->taddr_m = 0; - ep->taddr_h = 0; /* temp address (MSB) */ - - /* Now allocate the host memory pages and initialize the - * buffer descriptors. - */ - /* initialize rx buffer descriptors */ - bdp = cep->tx_bd_base; - for (j=0; j<(TX_RING_SIZE-1); j++) { - bdp->buf = 0; - bdp->status = 0; - bdp++; - } - bdp->buf = 0; - bdp->status = BD_SC_WRAP; - - - /* initialize rx buffer descriptors */ - bdp = cep->rx_bd_base; - for (j=0; j<(RX_RING_SIZE-1); j++) { - bdp->buf = &rx_buf_pool[j * CPM_ENET_RX_FRSIZE]; - bdp->status = BD_SC_EMPTY | BD_SC_INTRPT; - bdp++; - } - bdp->buf = &rx_buf_pool[j * CPM_ENET_RX_FRSIZE]; - bdp->status = BD_SC_WRAP | BD_SC_EMPTY | BD_SC_INTRPT; - - - - /* Let's re-initialize the channel now. We have to do it later - * than the manual describes because we have just now finished - * the BD initialization. - */ - cp->cp_cr = mk_cr_cmd(CPM_CR_ENET, CPM_CR_INIT_TRX) | CPM_CR_FLG; - while (cp->cp_cr & CPM_CR_FLG); - - cep->skb_cur = cep->skb_dirty = 0; - - sccp->scc_scce = 0xffff; /* Clear any pending events */ - - /* Enable interrupts for transmit error, complete frame - * received, and any transmit buffer we have also set the - * interrupt flag. - */ - sccp->scc_sccm = (SCCE_ENET_TXE | SCCE_ENET_RXF | SCCE_ENET_TXB); - - /* Install our interrupt handler. - */ - /* cpm_install_handler(CPMVEC_ENET, scc_enet_interrupt, dev); */ - request_irq(CPMVEC_ENET, scc_enet_interrupt, - IRQ_FLG_LOCK, dev->name, (void *)dev); - - /* Set GSMR_H to enable all normal operating modes. - * Set GSMR_L to enable Ethernet to MC68160. - */ - sccp->scc_gsmr.w.high = 0; - sccp->scc_gsmr.w.low = (SCC_GSMRL_TCI | SCC_GSMRL_TPL_48 | - SCC_GSMRL_TPP_10 | SCC_GSMRL_MODE_ENET); - - /* Set sync/delimiters. - */ - sccp->scc_dsr = 0xd555; - - /* Set processing mode. Use Ethernet CRC, catch broadcast, and - * start frame search 22 bit times after RENA. - */ - sccp->scc_psmr = (SCC_PMSR_ENCRC /* Ethernet CRC mode */ - /* | SCC_PSMR_HBC */ /* Enable heartbeat */ - /* | SCC_PMSR_PRO */ /* Promiscuous mode */ - /* | SCC_PMSR_FDE */ /* Full duplex enable */ - | ETHER_NIB_22); - /* sccp->scc_psmr = (SCC_PMSR_PRO | ETHER_CRC_32 | ETHER_NIB_22); */ - - - /* It is now OK to enable the Ethernet transmitter. - * Unfortunately, there are board implementation differences here. - */ -#if defined(CONFIG_UCQUICC) -/* immap->im_ioport.iop_pcpar |= PC_ENET_TENA; */ -/* immap->im_ioport.iop_pcdir &= ~PC_ENET_TENA; */ - cp->pio_pcpar |= PC_ENET_TENA; /* t_en */ - cp->pio_pcdir &= ~PC_ENET_TENA; - - cp->pip_pbpar &= ~(0x00000200); /* power up ethernet transceiver */ - cp->pip_pbdir |= (0x00000200); - cp->pip_pbdat |= (0x00000200); -#endif - - - dev->base_addr = (unsigned long)ep; - dev->priv = cep; -#if 0 - dev->name = "CPM_ENET"; -#endif - - /* The CPM Ethernet specific entries in the device structure. */ - dev->open = scc_enet_open; - dev->hard_start_xmit = scc_enet_start_xmit; - /* dev->tx_timeout = scc_enet_timeout; */ - /* dev->watchdog_timeo = TX_TIMEOUT; */ - dev->stop = scc_enet_close; - dev->get_stats = scc_enet_get_stats; - dev->set_multicast_list = set_multicast_list; - - /* And last, enable the transmit and receive processing. - */ - sccp->scc_gsmr.w.low |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT); - - printk("%s: CPM ENET Version 0.3, ", dev->name); - for (i=0; i<5; i++) - printk("%02x:", dev->dev_addr[i]); - printk("%02x\n", dev->dev_addr[5]); - - return 0; -} - - - -int m68360_enet_probe(struct device *dev) -{ - return(scc_enet_init ()); -} - - -/* - * Local variables: - * c-indent-level: 4 - * c-basic-offset: 4 - * tab-width: 4 - * End: - */ diff -Nru a/drivers/net/Kconfig b/drivers/net/Kconfig --- a/drivers/net/Kconfig Thu Jan 15 21:41:54 2004 +++ b/drivers/net/Kconfig Thu Jan 15 21:41:54 2004 @@ -657,7 +657,7 @@ config ELMC_II tristate "3c527 \"EtherLink/MC 32\" support (EXPERIMENTAL)" - depends on NET_VENDOR_3COM && MCA && EXPERIMENTAL && BROKEN_ON_SMP + depends on NET_VENDOR_3COM && MCA && MCA_LEGACY help If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from @@ -1283,6 +1283,19 @@ . The module will be called b44. +config FORCEDETH + tristate "Reverse Engineered nForce Ethernet support (EXPERIMENTAL)" + depends on NET_PCI && PCI && EXPERIMENTAL + help + If you have a network (Ethernet) controller of this type, say Y and + read the Ethernet-HOWTO, available from + . + + To compile this driver as a module, choose M here and read + . The module will be + called forcedeth. + + config CS89x0 tristate "CS89x0 support" depends on NET_PCI && ISA @@ -1957,9 +1970,11 @@ - EG1032 v2 Instant Gigabit Network Adapter - EG1064 v2 Instant Gigabit Network Adapter - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Abit) + - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Albatron) - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Asus) - Marvell 88E8001 Gigabit LOM Ethernet Adapter (ECS) - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Epox) + - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Foxconn) - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Gigabyte) - Marvell 88E8001 Gigabit LOM Ethernet Adapter (Iwill) - Marvell RDK-8001 Adapter @@ -2005,8 +2020,10 @@ Questions concerning this driver may be addressed to: linux@syskonnect.de - To compile this driver as a module, choose M here: the module - will be called sk98lin. This is recommended. + If you want to compile this driver as a module ( = code which can be + inserted in and removed from the running kernel whenever you want), + say M here and read Documentation/modules.txt. This is recommended. + The module will be called sk98lin. This is recommended. config TIGON3 tristate "Broadcom Tigon3 support" diff -Nru a/drivers/net/Makefile b/drivers/net/Makefile --- a/drivers/net/Makefile Thu Jan 15 21:41:54 2004 +++ b/drivers/net/Makefile Thu Jan 15 21:41:54 2004 @@ -95,6 +95,7 @@ obj-$(CONFIG_NE3210) += ne3210.o 8390.o obj-$(CONFIG_NET_SB1250_MAC) += sb1250-mac.o obj-$(CONFIG_B44) += b44.o +obj-$(CONFIG_FORCEDETH) += forcedeth.o obj-$(CONFIG_PPP) += ppp_generic.o slhc.o obj-$(CONFIG_PPP_ASYNC) += ppp_async.o diff -Nru a/drivers/net/dummy.c b/drivers/net/dummy.c --- a/drivers/net/dummy.c Thu Jan 15 21:41:54 2004 +++ b/drivers/net/dummy.c Thu Jan 15 21:41:54 2004 @@ -33,6 +33,9 @@ #include #include #include +#include + +static int numdummies = 1; static int dummy_xmit(struct sk_buff *skb, struct net_device *dev); static struct net_device_stats *dummy_get_stats(struct net_device *dev); @@ -83,10 +86,14 @@ return dev->priv; } -static struct net_device *dev_dummy; +static struct net_device **dummies; -static int __init dummy_init_module(void) +/* Number of dummy devices to be set up by this module. */ +module_param(numdummies, int, 0); + +static int __init dummy_init_one(int index) { + struct net_device *dev_dummy; int err; dev_dummy = alloc_netdev(sizeof(struct net_device_stats), @@ -98,15 +105,40 @@ if ((err = register_netdev(dev_dummy))) { kfree(dev_dummy); dev_dummy = NULL; + } else { + dummies[index] = dev_dummy; } + return err; } +static void __exit dummy_free_one(int index) +{ + unregister_netdev(dummies[index]); + free_netdev(dummies[index]); +} + +static int __init dummy_init_module(void) +{ + int i, err = 0; + dummies = kmalloc(numdummies * sizeof(void *), GFP_KERNEL); + if (!dummies) + return -ENOMEM; + for (i = 0; i < numdummies && !err; i++) + err = dummy_init_one(i); + if (err) { + while (--i >= 0) + dummy_free_one(i); + } + return err; +} + static void __exit dummy_cleanup_module(void) { - unregister_netdev(dev_dummy); - free_netdev(dev_dummy); - dev_dummy = NULL; + int i; + for (i = 0; i < numdummies; i++) + dummy_free_one(i); + kfree(dummies); } module_init(dummy_init_module); diff -Nru a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/net/forcedeth.c Thu Jan 15 21:41:55 2004 @@ -0,0 +1,1501 @@ +/* + * forcedeth: Ethernet driver for NVIDIA nForce media access controllers. + * + * Note: This driver is a cleanroom reimplementation based on reverse + * engineered documentation written by Carl-Daniel Hailfinger + * and Andrew de Quincey. It's neither supported nor endorsed + * by NVIDIA Corp. Use at your own risk. + * + * NVIDIA, nForce and other NVIDIA marks are trademarks or registered + * trademarks of NVIDIA Corporation in the United States and other + * countries. + * + * Copyright (C) 2003 Manfred Spraul + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Changelog: + * 0.01: 05 Oct 2003: First release that compiles without warnings. + * 0.02: 05 Oct 2003: Fix bug for drain_tx: do not try to free NULL skbs. + * Check all PCI BARs for the register window. + * udelay added to mii_rw. + * 0.03: 06 Oct 2003: Initialize dev->irq. + * 0.04: 07 Oct 2003: Initialize np->lock, reduce handled irqs, add printks. + * 0.05: 09 Oct 2003: printk removed again, irq status print tx_timeout. + * 0.06: 10 Oct 2003: MAC Address read updated, pff flag generation updated, + * irq mask updated + * 0.07: 14 Oct 2003: Further irq mask updates. + * 0.08: 20 Oct 2003: rx_desc.Length initialization added, alloc_rx refill + * added into irq handler, NULL check for drain_ring. + * 0.09: 20 Oct 2003: Basic link speed irq implementation. Only handle the + * requested interrupt sources. + * 0.10: 20 Oct 2003: First cleanup for release. + * 0.11: 21 Oct 2003: hexdump for tx added, rx buffer sizes increased. + * MAC Address init fix, set_multicast cleanup. + * 0.12: 23 Oct 2003: Cleanups for release. + * 0.13: 25 Oct 2003: Limit for concurrent tx packets increased to 10. + * Set link speed correctly. start rx before starting + * tx (start_rx sets the link speed). + * 0.14: 25 Oct 2003: Nic dependant irq mask. + * 0.15: 08 Nov 2003: fix smp deadlock with set_multicast_list during + * open. + * 0.16: 15 Nov 2003: include file cleanup for ppc64, rx buffer size + * increased to 1628 bytes. + * 0.17: 16 Nov 2003: undo rx buffer size increase. Substract 1 from + * the tx length. + * 0.18: 17 Nov 2003: fix oops due to late initialization of dev_stats + * 0.19: 29 Nov 2003: Handle RxNoBuf, detect & handle invalid mac + * addresses, really stop rx if already running + * in start_rx, clean up a bit. + * (C) Carl-Daniel Hailfinger + * 0.20: 07 Dev 2003: alloc fixes + * + * Known bugs: + * The irq handling is wrong - no tx done interrupts are generated. + * This means recovery from netif_stop_queue only happens in the hw timer + * interrupt (1/2 second on nForce2, 1/100 second on nForce3), or if an + * rx packet arrives by chance. + */ +#define FORCEDETH_VERSION "0.19" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#if 0 +#define dprintk printk +#else +#define dprintk(x...) do { } while (0) +#endif + + +/* + * Hardware access: + */ + +#define DEV_NEED_LASTPACKET1 0x0001 +#define DEV_IRQMASK_1 0x0002 +#define DEV_IRQMASK_2 0x0004 + +enum { + NvRegIrqStatus = 0x000, +#define NVREG_IRQSTAT_MIIEVENT 0x040 +#define NVREG_IRQSTAT_MASK 0x1ff + NvRegIrqMask = 0x004, +#define NVREG_IRQ_RX 0x0002 +#define NVREG_IRQ_RX_NOBUF 0x0004 +#define NVREG_IRQ_TX_ERR 0x0008 +#define NVREG_IRQ_TX2 0x0010 +#define NVREG_IRQ_TIMER 0x0020 +#define NVREG_IRQ_LINK 0x0040 +#define NVREG_IRQ_TX1 0x0100 +#define NVREG_IRQMASK_WANTED_1 0x005f +#define NVREG_IRQMASK_WANTED_2 0x0147 +#define NVREG_IRQ_UNKNOWN (~(NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF|NVREG_IRQ_TX_ERR|NVREG_IRQ_TX2|NVREG_IRQ_TIMER|NVREG_IRQ_LINK|NVREG_IRQ_TX1)) + + NvRegUnknownSetupReg6 = 0x008, +#define NVREG_UNKSETUP6_VAL 3 + + NvRegPollingInterval = 0x00c, + NvRegMisc1 = 0x080, +#define NVREG_MISC1_HD 0x02 +#define NVREG_MISC1_FORCE 0x3b0f3c + + NvRegTransmitterControl = 0x084, +#define NVREG_XMITCTL_START 0x01 + NvRegTransmitterStatus = 0x088, +#define NVREG_XMITSTAT_BUSY 0x01 + + NvRegPacketFilterFlags = 0x8c, +#define NVREG_PFF_ALWAYS 0x7F0008 +#define NVREG_PFF_PROMISC 0x80 +#define NVREG_PFF_MYADDR 0x20 + + NvRegOffloadConfig = 0x90, +#define NVREG_OFFLOAD_HOMEPHY 0x601 +#define NVREG_OFFLOAD_NORMAL 0x5ee + NvRegReceiverControl = 0x094, +#define NVREG_RCVCTL_START 0x01 + NvRegReceiverStatus = 0x98, +#define NVREG_RCVSTAT_BUSY 0x01 + + NvRegRandomSeed = 0x9c, +#define NVREG_RNDSEED_MASK 0x00ff +#define NVREG_RNDSEED_FORCE 0x7f00 + + NvRegUnknownSetupReg1 = 0xA0, +#define NVREG_UNKSETUP1_VAL 0x16070f + NvRegUnknownSetupReg2 = 0xA4, +#define NVREG_UNKSETUP2_VAL 0x16 + NvRegMacAddrA = 0xA8, + NvRegMacAddrB = 0xAC, + NvRegMulticastAddrA = 0xB0, +#define NVREG_MCASTADDRA_FORCE 0x01 + NvRegMulticastAddrB = 0xB4, + NvRegMulticastMaskA = 0xB8, + NvRegMulticastMaskB = 0xBC, + + NvRegTxRingPhysAddr = 0x100, + NvRegRxRingPhysAddr = 0x104, + NvRegRingSizes = 0x108, +#define NVREG_RINGSZ_TXSHIFT 0 +#define NVREG_RINGSZ_RXSHIFT 16 + NvRegUnknownTransmitterReg = 0x10c, + NvRegLinkSpeed = 0x110, +#define NVREG_LINKSPEED_FORCE 0x10000 +#define NVREG_LINKSPEED_10 10 +#define NVREG_LINKSPEED_100 100 +#define NVREG_LINKSPEED_1000 1000 + NvRegUnknownSetupReg5 = 0x130, +#define NVREG_UNKSETUP5_BIT31 (1<<31) + NvRegUnknownSetupReg3 = 0x134, +#define NVREG_UNKSETUP3_VAL1 0x200010 + NvRegTxRxControl = 0x144, +#define NVREG_TXRXCTL_KICK 0x0001 +#define NVREG_TXRXCTL_BIT1 0x0002 +#define NVREG_TXRXCTL_BIT2 0x0004 +#define NVREG_TXRXCTL_IDLE 0x0008 +#define NVREG_TXRXCTL_RESET 0x0010 + NvRegMIIStatus = 0x180, +#define NVREG_MIISTAT_ERROR 0x0001 +#define NVREG_MIISTAT_LINKCHANGE 0x0008 +#define NVREG_MIISTAT_MASK 0x000f +#define NVREG_MIISTAT_MASK2 0x000f + NvRegUnknownSetupReg4 = 0x184, +#define NVREG_UNKSETUP4_VAL 8 + + NvRegAdapterControl = 0x188, +#define NVREG_ADAPTCTL_START 0x02 +#define NVREG_ADAPTCTL_LINKUP 0x04 +#define NVREG_ADAPTCTL_PHYVALID 0x4000 +#define NVREG_ADAPTCTL_RUNNING 0x100000 +#define NVREG_ADAPTCTL_PHYSHIFT 24 + NvRegMIISpeed = 0x18c, +#define NVREG_MIISPEED_BIT8 (1<<8) +#define NVREG_MIIDELAY 5 + NvRegMIIControl = 0x190, +#define NVREG_MIICTL_INUSE 0x10000 +#define NVREG_MIICTL_WRITE 0x08000 +#define NVREG_MIICTL_ADDRSHIFT 5 + NvRegMIIData = 0x194, + NvRegWakeUpFlags = 0x200, +#define NVREG_WAKEUPFLAGS_VAL 0x7770 +#define NVREG_WAKEUPFLAGS_BUSYSHIFT 24 +#define NVREG_WAKEUPFLAGS_ENABLESHIFT 16 +#define NVREG_WAKEUPFLAGS_D3SHIFT 12 +#define NVREG_WAKEUPFLAGS_D2SHIFT 8 +#define NVREG_WAKEUPFLAGS_D1SHIFT 4 +#define NVREG_WAKEUPFLAGS_D0SHIFT 0 +#define NVREG_WAKEUPFLAGS_ACCEPT_MAGPAT 0x01 +#define NVREG_WAKEUPFLAGS_ACCEPT_WAKEUPPAT 0x02 +#define NVREG_WAKEUPFLAGS_ACCEPT_LINKCHANGE 0x04 + + NvRegPatternCRC = 0x204, + NvRegPatternMask = 0x208, + NvRegPowerCap = 0x268, +#define NVREG_POWERCAP_D3SUPP (1<<30) +#define NVREG_POWERCAP_D2SUPP (1<<26) +#define NVREG_POWERCAP_D1SUPP (1<<25) + NvRegPowerState = 0x26c, +#define NVREG_POWERSTATE_POWEREDUP 0x8000 +#define NVREG_POWERSTATE_VALID 0x0100 +#define NVREG_POWERSTATE_MASK 0x0003 +#define NVREG_POWERSTATE_D0 0x0000 +#define NVREG_POWERSTATE_D1 0x0001 +#define NVREG_POWERSTATE_D2 0x0002 +#define NVREG_POWERSTATE_D3 0x0003 +}; + +struct ring_desc { + u32 PacketBuffer; + u16 Length; + u16 Flags; +}; + +#define NV_TX_LASTPACKET (1<<0) +#define NV_TX_RETRYERROR (1<<3) +#define NV_TX_LASTPACKET1 (1<<8) +#define NV_TX_DEFERRED (1<<10) +#define NV_TX_CARRIERLOST (1<<11) +#define NV_TX_LATECOLLISION (1<<12) +#define NV_TX_UNDERFLOW (1<<13) +#define NV_TX_ERROR (1<<14) +#define NV_TX_VALID (1<<15) + +#define NV_RX_DESCRIPTORVALID (1<<0) +#define NV_RX_MISSEDFRAME (1<<1) +#define NV_RX_SUBSTRACT1 (1<<3) +#define NV_RX_ERROR1 (1<<7) +#define NV_RX_ERROR2 (1<<8) +#define NV_RX_ERROR3 (1<<9) +#define NV_RX_ERROR4 (1<<10) +#define NV_RX_CRCERR (1<<11) +#define NV_RX_OVERFLOW (1<<12) +#define NV_RX_FRAMINGERR (1<<13) +#define NV_RX_ERROR (1<<14) +#define NV_RX_AVAIL (1<<15) + +/* Miscelaneous hardware related defines: */ +#define NV_PCI_REGSZ 0x270 + +/* various timeout delays: all in usec */ +#define NV_TXRX_RESET_DELAY 4 +#define NV_TXSTOP_DELAY1 10 +#define NV_TXSTOP_DELAY1MAX 500000 +#define NV_TXSTOP_DELAY2 100 +#define NV_RXSTOP_DELAY1 10 +#define NV_RXSTOP_DELAY1MAX 500000 +#define NV_RXSTOP_DELAY2 100 +#define NV_SETUP5_DELAY 5 +#define NV_SETUP5_DELAYMAX 50000 +#define NV_POWERUP_DELAY 5 +#define NV_POWERUP_DELAYMAX 5000 +#define NV_MIIBUSY_DELAY 50 +#define NV_MIIPHY_DELAY 10 +#define NV_MIIPHY_DELAYMAX 10000 + +#define NV_WAKEUPPATTERNS 5 +#define NV_WAKEUPMASKENTRIES 4 + +/* General driver defaults */ +#define NV_WATCHDOG_TIMEO (2*HZ) +#define DEFAULT_MTU 1500 /* also maximum supported, at least for now */ + +#define RX_RING 128 +#define TX_RING 16 +/* limited to 1 packet until we understand NV_TX_LASTPACKET */ +#define TX_LIMIT_STOP 10 +#define TX_LIMIT_START 5 + +/* rx/tx mac addr + type + vlan + align + slack*/ +#define RX_NIC_BUFSIZE (DEFAULT_MTU + 64) +/* even more slack */ +#define RX_ALLOC_BUFSIZE (DEFAULT_MTU + 128) + +#define OOM_REFILL (1+HZ/20) +#define POLL_WAIT (1+HZ/100) + +/* + * SMP locking: + * All hardware access under dev->priv->lock, except the performance + * critical parts: + * - rx is (pseudo-) lockless: it relies on the single-threading provided + * by the arch code for interrupts. + * - tx setup is lockless: it relies on dev->xmit_lock. Actual submission + * needs dev->priv->lock :-( + * - set_multicast_list: preparation lockless, relies on dev->xmit_lock. + */ + +/* in dev: base, irq */ +struct fe_priv { + spinlock_t lock; + + /* General data: + * Locking: spin_lock(&np->lock); */ + struct net_device_stats stats; + int in_shutdown; + u32 linkspeed; + int duplex; + int phyaddr; + + /* General data: RO fields */ + dma_addr_t ring_addr; + struct pci_dev *pci_dev; + u32 orig_mac[2]; + u32 irqmask; + + /* rx specific fields. + * Locking: Within irq hander or disable_irq+spin_lock(&np->lock); + */ + struct ring_desc *rx_ring; + unsigned int cur_rx, refill_rx; + struct sk_buff *rx_skbuff[RX_RING]; + dma_addr_t rx_dma[RX_RING]; + unsigned int rx_buf_sz; + struct timer_list oom_kick; + struct timer_list nic_poll; + + /* + * tx specific fields. + */ + struct ring_desc *tx_ring; + unsigned int next_tx, nic_tx; + struct sk_buff *tx_skbuff[TX_RING]; + dma_addr_t tx_dma[TX_RING]; + u16 tx_flags; +}; + +/* + * Maximum number of loops until we assume that a bit in the irq mask + * is stuck. Overridable with module param. + */ +static int max_interrupt_work = 5; + +static inline struct fe_priv *get_nvpriv(struct net_device *dev) +{ + return (struct fe_priv *) dev->priv; +} + +static inline u8 *get_hwbase(struct net_device *dev) +{ + return (u8 *) dev->base_addr; +} + +static inline void pci_push(u8 * base) +{ + /* force out pending posted writes */ + readl(base); +} + +static int reg_delay(struct net_device *dev, int offset, u32 mask, u32 target, + int delay, int delaymax, const char *msg) +{ + u8 *base = get_hwbase(dev); + + pci_push(base); + do { + udelay(delay); + delaymax -= delay; + if (delaymax < 0) { + if (msg) + printk(msg); + return 1; + } + } while ((readl(base + offset) & mask) != target); + return 0; +} + +#define MII_READ (-1) +/* mii_rw: read/write a register on the PHY. + * + * Caller must guarantee serialization + */ +static int mii_rw(struct net_device *dev, int addr, int miireg, int value) +{ + u8 *base = get_hwbase(dev); + int was_running; + u32 reg; + int retval; + + writel(NVREG_MIISTAT_MASK, base + NvRegMIIStatus); + was_running = 0; + reg = readl(base + NvRegAdapterControl); + if (reg & NVREG_ADAPTCTL_RUNNING) { + was_running = 1; + writel(reg & ~NVREG_ADAPTCTL_RUNNING, base + NvRegAdapterControl); + } + reg = readl(base + NvRegMIIControl); + if (reg & NVREG_MIICTL_INUSE) { + writel(NVREG_MIICTL_INUSE, base + NvRegMIIControl); + udelay(NV_MIIBUSY_DELAY); + } + + reg = NVREG_MIICTL_INUSE | (addr << NVREG_MIICTL_ADDRSHIFT) | miireg; + if (value != MII_READ) { + writel(value, base + NvRegMIIData); + reg |= NVREG_MIICTL_WRITE; + } + writel(reg, base + NvRegMIIControl); + + if (reg_delay(dev, NvRegMIIControl, NVREG_MIICTL_INUSE, 0, + NV_MIIPHY_DELAY, NV_MIIPHY_DELAYMAX, NULL)) { + dprintk(KERN_DEBUG "%s: mii_rw of reg %d at PHY %d timed out.\n", + dev->name, miireg, addr); + retval = -1; + } else if (value != MII_READ) { + /* it was a write operation - fewer failures are detectable */ + dprintk(KERN_DEBUG "%s: mii_rw wrote 0x%x to reg %d at PHY %d\n", + dev->name, value, miireg, addr); + retval = 0; + } else if (readl(base + NvRegMIIStatus) & NVREG_MIISTAT_ERROR) { + dprintk(KERN_DEBUG "%s: mii_rw of reg %d at PHY %d failed.\n", + dev->name, miireg, addr); + retval = -1; + } else { + /* FIXME: why is that required? */ + udelay(50); + retval = readl(base + NvRegMIIData); + dprintk(KERN_DEBUG "%s: mii_rw read from reg %d at PHY %d: 0x%x.\n", + dev->name, miireg, addr, retval); + } + if (was_running) { + reg = readl(base + NvRegAdapterControl); + writel(reg | NVREG_ADAPTCTL_RUNNING, base + NvRegAdapterControl); + } + return retval; +} + +static void start_rx(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + + dprintk(KERN_DEBUG "%s: start_rx\n", dev->name); + /* Already running? Stop it. */ + if (readl(base + NvRegReceiverControl) & NVREG_RCVCTL_START) { + writel(0, base + NvRegReceiverControl); + pci_push(base); + } + writel(np->linkspeed, base + NvRegLinkSpeed); + pci_push(base); + writel(NVREG_RCVCTL_START, base + NvRegReceiverControl); + pci_push(base); +} + +static void stop_rx(struct net_device *dev) +{ + u8 *base = get_hwbase(dev); + + dprintk(KERN_DEBUG "%s: stop_rx\n", dev->name); + writel(0, base + NvRegReceiverControl); + reg_delay(dev, NvRegReceiverStatus, NVREG_RCVSTAT_BUSY, 0, + NV_RXSTOP_DELAY1, NV_RXSTOP_DELAY1MAX, + KERN_INFO "stop_rx: ReceiverStatus remained busy"); + + udelay(NV_RXSTOP_DELAY2); + writel(0, base + NvRegLinkSpeed); +} + +static void start_tx(struct net_device *dev) +{ + u8 *base = get_hwbase(dev); + + dprintk(KERN_DEBUG "%s: start_tx\n", dev->name); + writel(NVREG_XMITCTL_START, base + NvRegTransmitterControl); + pci_push(base); +} + +static void stop_tx(struct net_device *dev) +{ + u8 *base = get_hwbase(dev); + + dprintk(KERN_DEBUG "%s: stop_tx\n", dev->name); + writel(0, base + NvRegTransmitterControl); + reg_delay(dev, NvRegTransmitterStatus, NVREG_XMITSTAT_BUSY, 0, + NV_TXSTOP_DELAY1, NV_TXSTOP_DELAY1MAX, + KERN_INFO "stop_tx: TransmitterStatus remained busy"); + + udelay(NV_TXSTOP_DELAY2); + writel(0, base + NvRegUnknownTransmitterReg); +} + +static void txrx_reset(struct net_device *dev) +{ + u8 *base = get_hwbase(dev); + + dprintk(KERN_DEBUG "%s: txrx_reset\n", dev->name); + writel(NVREG_TXRXCTL_BIT2 | NVREG_TXRXCTL_RESET, base + NvRegTxRxControl); + pci_push(base); + udelay(NV_TXRX_RESET_DELAY); + writel(NVREG_TXRXCTL_BIT2, base + NvRegTxRxControl); + pci_push(base); +} + +/* + * get_stats: dev->get_stats function + * Get latest stats value from the nic. + * Called with read_lock(&dev_base_lock) held for read - + * only synchronized against unregister_netdevice. + */ +static struct net_device_stats *get_stats(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + + /* It seems that the nic always generates interrupts and doesn't + * accumulate errors internally. Thus the current values in np->stats + * are already up to date. + */ + return &np->stats; +} + + +/* + * nic_ioctl: dev->do_ioctl function + * Called with rtnl_lock held. + */ +static int nic_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) +{ + return -EOPNOTSUPP; +} + +/* + * alloc_rx: fill rx ring entries. + * Return 1 if the allocations for the skbs failed and the + * rx engine is without Available descriptors + */ +static int alloc_rx(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + unsigned int refill_rx = np->refill_rx; + + while (np->cur_rx != refill_rx) { + int nr = refill_rx % RX_RING; + struct sk_buff *skb; + + if (np->rx_skbuff[nr] == NULL) { + + skb = dev_alloc_skb(RX_ALLOC_BUFSIZE); + if (!skb) + break; + + skb->dev = dev; + np->rx_skbuff[nr] = skb; + } else { + skb = np->rx_skbuff[nr]; + } + np->rx_dma[nr] = pci_map_single(np->pci_dev, skb->data, skb->len, + PCI_DMA_FROMDEVICE); + np->rx_ring[nr].PacketBuffer = cpu_to_le32(np->rx_dma[nr]); + np->rx_ring[nr].Length = cpu_to_le16(RX_NIC_BUFSIZE); + wmb(); + np->rx_ring[nr].Flags = cpu_to_le16(NV_RX_AVAIL); + dprintk(KERN_DEBUG "%s: alloc_rx: Packet %d marked as Available\n", + dev->name, refill_rx); + refill_rx++; + } + np->refill_rx = refill_rx; + if (np->cur_rx - refill_rx == RX_RING) + return 1; + return 0; +} + +static void do_rx_refill(unsigned long data) +{ + struct net_device *dev = (struct net_device *) data; + struct fe_priv *np = get_nvpriv(dev); + + disable_irq(dev->irq); + if (alloc_rx(dev)) { + spin_lock(&np->lock); + if (!np->in_shutdown) + mod_timer(&np->oom_kick, jiffies + OOM_REFILL); + spin_unlock(&np->lock); + } + enable_irq(dev->irq); +} + +static int init_ring(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + int i; + + np->next_tx = np->nic_tx = 0; + for (i = 0; i < TX_RING; i++) { + np->tx_ring[i].Flags = 0; + } + + np->cur_rx = RX_RING; + np->refill_rx = 0; + for (i = 0; i < RX_RING; i++) { + np->rx_ring[i].Flags = 0; + } + return alloc_rx(dev); +} + +static void drain_tx(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + int i; + for (i = 0; i < TX_RING; i++) { + np->tx_ring[i].Flags = 0; + if (np->tx_skbuff[i]) { + pci_unmap_single(np->pci_dev, np->tx_dma[i], + np->tx_skbuff[i]->len, + PCI_DMA_TODEVICE); + dev_kfree_skb(np->tx_skbuff[i]); + np->tx_skbuff[i] = NULL; + np->stats.tx_dropped++; + } + } +} + +static void drain_rx(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + int i; + for (i = 0; i < RX_RING; i++) { + np->rx_ring[i].Flags = 0; + wmb(); + if (np->rx_skbuff[i]) { + pci_unmap_single(np->pci_dev, np->rx_dma[i], + np->rx_skbuff[i]->len, + PCI_DMA_FROMDEVICE); + dev_kfree_skb(np->rx_skbuff[i]); + np->rx_skbuff[i] = NULL; + } + } +} + +static void drain_ring(struct net_device *dev) +{ + drain_tx(dev); + drain_rx(dev); +} + +/* + * start_xmit: dev->hard_start_xmit function + * Called with dev->xmit_lock held. + */ +static int start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + int nr = np->next_tx % TX_RING; + + np->tx_skbuff[nr] = skb; + np->tx_dma[nr] = pci_map_single(np->pci_dev, skb->data,skb->len, + PCI_DMA_TODEVICE); + + np->tx_ring[nr].PacketBuffer = cpu_to_le32(np->tx_dma[nr]); + np->tx_ring[nr].Length = cpu_to_le16(skb->len-1); + + spin_lock_irq(&np->lock); + wmb(); + np->tx_ring[nr].Flags = np->tx_flags; + dprintk(KERN_DEBUG "%s: start_xmit: packet packet %d queued for transmission.\n", + dev->name, np->next_tx); + { + int j; + for (j=0; j<64; j++) { + if ((j%16) == 0) + dprintk("\n%03x:", j); + dprintk(" %02x", ((unsigned char*)skb->data)[j]); + } + dprintk("\n"); + } + + np->next_tx++; + + dev->trans_start = jiffies; + if (np->next_tx - np->nic_tx >= TX_LIMIT_STOP) + netif_stop_queue(dev); + spin_unlock_irq(&np->lock); + writel(NVREG_TXRXCTL_KICK, get_hwbase(dev) + NvRegTxRxControl); + return 0; +} + +/* + * tx_done: check for completed packets, release the skbs. + * + * Caller must own np->lock. + */ +static void tx_done(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + + while (np->nic_tx < np->next_tx) { + struct ring_desc *prd; + int i = np->nic_tx % TX_RING; + + prd = &np->tx_ring[i]; + + dprintk(KERN_DEBUG "%s: tx_done: looking at packet %d, Flags 0x%x.\n", + dev->name, np->nic_tx, prd->Flags); + if (prd->Flags & cpu_to_le16(NV_TX_VALID)) + break; + if (prd->Flags & cpu_to_le16(NV_TX_RETRYERROR|NV_TX_CARRIERLOST|NV_TX_LATECOLLISION| + NV_TX_UNDERFLOW|NV_TX_ERROR)) { + if (prd->Flags & cpu_to_le16(NV_TX_UNDERFLOW)) + np->stats.tx_fifo_errors++; + if (prd->Flags & cpu_to_le16(NV_TX_CARRIERLOST)) + np->stats.tx_carrier_errors++; + np->stats.tx_errors++; + } else { + np->stats.tx_packets++; + np->stats.tx_bytes += np->tx_skbuff[i]->len; + } + pci_unmap_single(np->pci_dev, np->tx_dma[i], + np->tx_skbuff[i]->len, + PCI_DMA_TODEVICE); + dev_kfree_skb_irq(np->tx_skbuff[i]); + np->tx_skbuff[i] = NULL; + np->nic_tx++; + } + if (np->next_tx - np->nic_tx < TX_LIMIT_START) + netif_wake_queue(dev); +} + +/* + * tx_timeout: dev->tx_timeout function + * Called with dev->xmit_lock held. + */ +static void tx_timeout(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + + dprintk(KERN_DEBUG "%s: Got tx_timeout. irq: %08x\n", dev->name, + readl(base + NvRegIrqStatus) & NVREG_IRQSTAT_MASK); + + spin_lock_irq(&np->lock); + + /* 1) stop tx engine */ + stop_tx(dev); + + /* 2) check that the packets were not sent already: */ + tx_done(dev); + + /* 3) if there are dead entries: clear everything */ + if (np->next_tx != np->nic_tx) { + printk(KERN_DEBUG "%s: tx_timeout: dead entries!\n", dev->name); + drain_tx(dev); + np->next_tx = np->nic_tx = 0; + writel((u32) (np->ring_addr + RX_RING*sizeof(struct ring_desc)), base + NvRegTxRingPhysAddr); + netif_wake_queue(dev); + } + + /* 4) restart tx engine */ + start_tx(dev); + spin_unlock_irq(&np->lock); +} + +static void rx_process(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + + for (;;) { + struct ring_desc *prd; + struct sk_buff *skb; + int len; + int i; + if (np->cur_rx - np->refill_rx >= RX_RING) + break; /* we scanned the whole ring - do not continue */ + + i = np->cur_rx % RX_RING; + prd = &np->rx_ring[i]; + dprintk(KERN_DEBUG "%s: rx_process: looking at packet %d, Flags 0x%x.\n", + dev->name, np->cur_rx, prd->Flags); + + if (prd->Flags & cpu_to_le16(NV_RX_AVAIL)) + break; /* still owned by hardware, */ + + /* + * the packet is for us - immediately tear down the pci mapping, and + * prefetch the first cacheline of the packet. + */ + pci_unmap_single(np->pci_dev, np->rx_dma[i], + np->rx_skbuff[i]->len, + PCI_DMA_FROMDEVICE); + prefetch(np->rx_skbuff[i]->data); + + { + int j; + dprintk(KERN_DEBUG "Dumping packet (flags 0x%x).",prd->Flags); + for (j=0; j<64; j++) { + if ((j%16) == 0) + dprintk("\n%03x:", j); + dprintk(" %02x", ((unsigned char*)np->rx_skbuff[i]->data)[j]); + } + dprintk("\n"); + } + /* look at what we actually got: */ + if (!(prd->Flags & cpu_to_le16(NV_RX_DESCRIPTORVALID))) + goto next_pkt; + + + len = le16_to_cpu(prd->Length); + + if (prd->Flags & cpu_to_le16(NV_RX_MISSEDFRAME)) { + np->stats.rx_missed_errors++; + np->stats.rx_errors++; + goto next_pkt; + } + if (prd->Flags & cpu_to_le16(NV_RX_ERROR1|NV_RX_ERROR2|NV_RX_ERROR3|NV_RX_ERROR4)) { + np->stats.rx_errors++; + goto next_pkt; + } + if (prd->Flags & cpu_to_le16(NV_RX_CRCERR)) { + np->stats.rx_crc_errors++; + np->stats.rx_errors++; + goto next_pkt; + } + if (prd->Flags & cpu_to_le16(NV_RX_OVERFLOW)) { + np->stats.rx_over_errors++; + np->stats.rx_errors++; + goto next_pkt; + } + if (prd->Flags & cpu_to_le16(NV_RX_ERROR)) { + /* framing errors are soft errors, the rest is fatal. */ + if (prd->Flags & cpu_to_le16(NV_RX_FRAMINGERR)) { + if (prd->Flags & cpu_to_le16(NV_RX_SUBSTRACT1)) { + len--; + } + } else { + np->stats.rx_errors++; + goto next_pkt; + } + } + /* got a valid packet - forward it to the network core */ + skb = np->rx_skbuff[i]; + np->rx_skbuff[i] = NULL; + + skb_put(skb, len); + skb->protocol = eth_type_trans(skb, dev); + dprintk(KERN_DEBUG "%s: rx_process: packet %d with %d bytes, proto %d accepted.\n", + dev->name, np->cur_rx, len, skb->protocol); + netif_rx(skb); + dev->last_rx = jiffies; + np->stats.rx_packets++; + np->stats.rx_bytes += len; +next_pkt: + np->cur_rx++; + } +} + +/* + * change_mtu: dev->change_mtu function + * Called with dev_base_lock held for read. + */ +static int change_mtu(struct net_device *dev, int new_mtu) +{ + if (new_mtu > DEFAULT_MTU) + return -EINVAL; + dev->mtu = new_mtu; + return 0; +} + +/* + * change_mtu: dev->change_mtu function + * Called with dev->xmit_lock held. + */ +static void set_multicast(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + u32 addr[2]; + u32 mask[2]; + u32 pff; + + memset(addr, 0, sizeof(addr)); + memset(mask, 0, sizeof(mask)); + + if (dev->flags & IFF_PROMISC) { + printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); + pff = NVREG_PFF_PROMISC; + } else { + pff = NVREG_PFF_MYADDR; + + if (dev->flags & IFF_ALLMULTI || dev->mc_list) { + u32 alwaysOff[2]; + u32 alwaysOn[2]; + + alwaysOn[0] = alwaysOn[1] = alwaysOff[0] = alwaysOff[1] = 0xffffffff; + if (dev->flags & IFF_ALLMULTI) { + alwaysOn[0] = alwaysOn[1] = alwaysOff[0] = alwaysOff[1] = 0; + } else { + struct dev_mc_list *walk; + + walk = dev->mc_list; + while (walk != NULL) { + u32 a, b; + a = le32_to_cpu(*(u32 *) walk->dmi_addr); + b = le16_to_cpu(*(u16 *) (&walk->dmi_addr[4])); + alwaysOn[0] &= a; + alwaysOff[0] &= ~a; + alwaysOn[1] &= b; + alwaysOff[1] &= ~b; + walk = walk->next; + } + } + addr[0] = alwaysOn[0]; + addr[1] = alwaysOn[1]; + mask[0] = alwaysOn[0] | alwaysOff[0]; + mask[1] = alwaysOn[1] | alwaysOff[1]; + } + } + addr[0] |= NVREG_MCASTADDRA_FORCE; + pff |= NVREG_PFF_ALWAYS; + spin_lock_irq(&np->lock); + stop_rx(dev); + writel(addr[0], base + NvRegMulticastAddrA); + writel(addr[1], base + NvRegMulticastAddrB); + writel(mask[0], base + NvRegMulticastMaskA); + writel(mask[1], base + NvRegMulticastMaskB); + writel(pff, base + NvRegPacketFilterFlags); + start_rx(dev); + spin_unlock_irq(&np->lock); +} + +static int update_linkspeed(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + int adv, lpa, newls, newdup; + + adv = mii_rw(dev, np->phyaddr, MII_ADVERTISE, MII_READ); + lpa = mii_rw(dev, np->phyaddr, MII_LPA, MII_READ); + dprintk(KERN_DEBUG "%s: update_linkspeed: PHY advertises 0x%04x, lpa 0x%04x.\n", + dev->name, adv, lpa); + + /* FIXME: handle parallel detection properly, handle gigabit ethernet */ + lpa = lpa & adv; + if (lpa & LPA_100FULL) { + newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_100; + newdup = 1; + } else if (lpa & LPA_100HALF) { + newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_100; + newdup = 0; + } else if (lpa & LPA_10FULL) { + newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10; + newdup = 1; + } else if (lpa & LPA_10HALF) { + newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10; + newdup = 0; + } else { + dprintk(KERN_DEBUG "%s: bad ability %04x - falling back to 10HD.\n", dev->name, lpa); + newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10; + newdup = 0; + } + if (np->duplex != newdup || np->linkspeed != newls) { + np->duplex = newdup; + np->linkspeed = newls; + return 1; + } + return 0; +} + +static void link_irq(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + u32 miistat; + int miival; + + miistat = readl(base + NvRegMIIStatus); + writel(NVREG_MIISTAT_MASK, base + NvRegMIIStatus); + printk(KERN_DEBUG "%s: link change notification, status 0x%x.\n", dev->name, miistat); + + miival = mii_rw(dev, np->phyaddr, MII_BMSR, MII_READ); + if (miival & BMSR_ANEGCOMPLETE) { + update_linkspeed(dev); + + if (netif_carrier_ok(dev)) { + stop_rx(dev); + } else { + netif_carrier_on(dev); + printk(KERN_INFO "%s: link up.\n", dev->name); + } + writel(NVREG_MISC1_FORCE | ( np->duplex ? 0 : NVREG_MISC1_HD), + base + NvRegMisc1); + start_rx(dev); + } else { + if (netif_carrier_ok(dev)) { + netif_carrier_off(dev); + printk(KERN_INFO "%s: link down.\n", dev->name); + stop_rx(dev); + } + writel(np->linkspeed, base + NvRegLinkSpeed); + pci_push(base); + } +} + +static irqreturn_t nic_irq(int foo, void *data, struct pt_regs *regs) +{ + struct net_device *dev = (struct net_device *) data; + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + u32 events; + int i; + + dprintk(KERN_DEBUG "%s: nic_irq\n", dev->name); + + for (i=0; ; i++) { + events = readl(base + NvRegIrqStatus) & NVREG_IRQSTAT_MASK; + writel(NVREG_IRQSTAT_MASK, base + NvRegIrqStatus); + pci_push(base); + dprintk(KERN_DEBUG "%s: irq: %08x\n", dev->name, events); + if (!(events & np->irqmask)) + break; + + if (events & (NVREG_IRQ_TX1|NVREG_IRQ_TX2|NVREG_IRQ_TX_ERR)) { + spin_lock(&np->lock); + tx_done(dev); + spin_unlock(&np->lock); + } + + if (events & (NVREG_IRQ_RX|NVREG_IRQ_RX_NOBUF)) { + rx_process(dev); + if (alloc_rx(dev)) { + spin_lock(&np->lock); + if (!np->in_shutdown) + mod_timer(&np->oom_kick, jiffies + OOM_REFILL); + spin_unlock(&np->lock); + } + } + + if (events & NVREG_IRQ_LINK) { + spin_lock(&np->lock); + link_irq(dev); + spin_unlock(&np->lock); + } + if (events & (NVREG_IRQ_TX_ERR)) { + dprintk(KERN_DEBUG "%s: received irq with events 0x%x. Probably TX fail.\n", + dev->name, events); + } + if (events & (NVREG_IRQ_UNKNOWN)) { + printk(KERN_DEBUG "%s: received irq with unknown events 0x%x. Please report\n", + dev->name, events); + } + if (i > max_interrupt_work) { + spin_lock(&np->lock); + /* disable interrupts on the nic */ + writel(0, base + NvRegIrqMask); + pci_push(base); + + if (!np->in_shutdown) + mod_timer(&np->nic_poll, jiffies + POLL_WAIT); + printk(KERN_DEBUG "%s: too many iterations (%d) in nic_irq.\n", dev->name, i); + spin_unlock(&np->lock); + break; + } + + } + dprintk(KERN_DEBUG "%s: nic_irq completed\n", dev->name); + + return IRQ_RETVAL(i); +} + +static void do_nic_poll(unsigned long data) +{ + struct net_device *dev = (struct net_device *) data; + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + + disable_irq(dev->irq); + /* + * reenable interrupts on the nic, we have to do this before calling + * nic_irq because that may decide to do otherwise + */ + writel(np->irqmask, base + NvRegIrqMask); + pci_push(base); + nic_irq((int) 0, (void *) data, (struct pt_regs *) NULL); + enable_irq(dev->irq); +} + +static int open(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + int ret, oom, i; + + dprintk(KERN_DEBUG "forcedeth: open\n"); + + /* 1) erase previous misconfiguration */ + /* 4.1-1: stop adapter: ignored, 4.3 seems to be overkill */ + writel(NVREG_MCASTADDRA_FORCE, base + NvRegMulticastAddrA); + writel(0, base + NvRegMulticastAddrB); + writel(0, base + NvRegMulticastMaskA); + writel(0, base + NvRegMulticastMaskB); + writel(0, base + NvRegPacketFilterFlags); + writel(0, base + NvRegAdapterControl); + writel(0, base + NvRegLinkSpeed); + writel(0, base + NvRegUnknownTransmitterReg); + txrx_reset(dev); + writel(0, base + NvRegUnknownSetupReg6); + + /* 2) initialize descriptor rings */ + np->in_shutdown = 0; + oom = init_ring(dev); + + /* 3) set mac address */ + { + u32 mac[2]; + + mac[0] = (dev->dev_addr[0] << 0) + (dev->dev_addr[1] << 8) + + (dev->dev_addr[2] << 16) + (dev->dev_addr[3] << 24); + mac[1] = (dev->dev_addr[4] << 0) + (dev->dev_addr[5] << 8); + + writel(mac[0], base + NvRegMacAddrA); + writel(mac[1], base + NvRegMacAddrB); + } + + /* 4) continue setup */ + np->linkspeed = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10; + np->duplex = 0; + writel(NVREG_UNKSETUP3_VAL1, base + NvRegUnknownSetupReg3); + writel(0, base + NvRegTxRxControl); + pci_push(base); + writel(NVREG_TXRXCTL_BIT1, base + NvRegTxRxControl); + reg_delay(dev, NvRegUnknownSetupReg5, NVREG_UNKSETUP5_BIT31, NVREG_UNKSETUP5_BIT31, + NV_SETUP5_DELAY, NV_SETUP5_DELAYMAX, + KERN_INFO "open: SetupReg5, Bit 31 remained off\n"); + writel(0, base + NvRegUnknownSetupReg4); + + /* 5) Find a suitable PHY */ + writel(NVREG_MIISPEED_BIT8|NVREG_MIIDELAY, base + NvRegMIISpeed); + for (i = 1; i < 32; i++) { + int id1, id2; + + id1 = mii_rw(dev, i, MII_PHYSID1, MII_READ); + if (id1 < 0) + continue; + id2 = mii_rw(dev, i, MII_PHYSID2, MII_READ); + if (id2 < 0) + continue; + dprintk(KERN_DEBUG "%s: open: Found PHY %04x:%04x at address %d.\n", + dev->name, id1, id2, i); + np->phyaddr = i; + + update_linkspeed(dev); + + break; + } + if (i == 32) { + printk(KERN_INFO "%s: open: failing due to lack of suitable PHY.\n", + dev->name); + ret = -EINVAL; + goto out_drain; + } + + /* 6) continue setup */ + writel(NVREG_MISC1_FORCE | ( np->duplex ? 0 : NVREG_MISC1_HD), + base + NvRegMisc1); + writel(readl(base + NvRegTransmitterStatus), base + NvRegTransmitterStatus); + writel(NVREG_PFF_ALWAYS, base + NvRegPacketFilterFlags); + writel(NVREG_OFFLOAD_NORMAL, base + NvRegOffloadConfig); + + writel(readl(base + NvRegReceiverStatus), base + NvRegReceiverStatus); + get_random_bytes(&i, sizeof(i)); + writel(NVREG_RNDSEED_FORCE | (i&NVREG_RNDSEED_MASK), base + NvRegRandomSeed); + writel(NVREG_UNKSETUP1_VAL, base + NvRegUnknownSetupReg1); + writel(NVREG_UNKSETUP2_VAL, base + NvRegUnknownSetupReg2); + writel(NVREG_UNKSETUP6_VAL, base + NvRegUnknownSetupReg6); + writel((np->phyaddr << NVREG_ADAPTCTL_PHYSHIFT)|NVREG_ADAPTCTL_PHYVALID, + base + NvRegAdapterControl); + writel(NVREG_UNKSETUP4_VAL, base + NvRegUnknownSetupReg4); + writel(NVREG_WAKEUPFLAGS_VAL, base + NvRegWakeUpFlags); + + /* 7) start packet processing */ + writel((u32) np->ring_addr, base + NvRegRxRingPhysAddr); + writel((u32) (np->ring_addr + RX_RING*sizeof(struct ring_desc)), base + NvRegTxRingPhysAddr); + writel( ((RX_RING-1) << NVREG_RINGSZ_RXSHIFT) + ((TX_RING-1) << NVREG_RINGSZ_TXSHIFT), + base + NvRegRingSizes); + + i = readl(base + NvRegPowerState); + if ( (i & NVREG_POWERSTATE_POWEREDUP) == 0) { + writel(NVREG_POWERSTATE_POWEREDUP|i, base + NvRegPowerState); + } + pci_push(base); + udelay(10); + writel(readl(base + NvRegPowerState) | NVREG_POWERSTATE_VALID, base + NvRegPowerState); + writel(NVREG_ADAPTCTL_RUNNING, base + NvRegAdapterControl); + + + writel(0, base + NvRegIrqMask); + pci_push(base); + writel(NVREG_IRQSTAT_MASK, base + NvRegIrqStatus); + pci_push(base); + writel(NVREG_MIISTAT_MASK2, base + NvRegMIIStatus); + writel(NVREG_IRQSTAT_MASK, base + NvRegIrqStatus); + pci_push(base); + + ret = request_irq(dev->irq, &nic_irq, SA_SHIRQ, dev->name, dev); + if (ret) + goto out_drain; + + writel(np->irqmask, base + NvRegIrqMask); + + spin_lock_irq(&np->lock); + writel(NVREG_MCASTADDRA_FORCE, base + NvRegMulticastAddrA); + writel(0, base + NvRegMulticastAddrB); + writel(0, base + NvRegMulticastMaskA); + writel(0, base + NvRegMulticastMaskB); + writel(NVREG_PFF_ALWAYS|NVREG_PFF_MYADDR, base + NvRegPacketFilterFlags); + start_rx(dev); + start_tx(dev); + netif_start_queue(dev); + if (oom) + mod_timer(&np->oom_kick, jiffies + OOM_REFILL); + if (!(mii_rw(dev, np->phyaddr, MII_BMSR, MII_READ) & BMSR_ANEGCOMPLETE)) { + printk("%s: no link during initialization.\n", dev->name); + netif_carrier_off(dev); + } + + spin_unlock_irq(&np->lock); + + return 0; +out_drain: + drain_ring(dev); + return ret; +} + +static int close(struct net_device *dev) +{ + struct fe_priv *np = get_nvpriv(dev); + + spin_lock_irq(&np->lock); + np->in_shutdown = 1; + spin_unlock_irq(&np->lock); + synchronize_irq(dev->irq); + + del_timer_sync(&np->oom_kick); + del_timer_sync(&np->nic_poll); + + netif_stop_queue(dev); + spin_lock_irq(&np->lock); + stop_tx(dev); + stop_rx(dev); + spin_unlock_irq(&np->lock); + + free_irq(dev->irq, dev); + + drain_ring(dev); + + /* FIXME: power down nic */ + + return 0; +} + +static int __devinit probe_nic(struct pci_dev *pci_dev, const struct pci_device_id *id) +{ + struct net_device *dev; + struct fe_priv *np; + unsigned long addr; + u8 *base; + int err, i; + + dev = alloc_etherdev(sizeof(struct fe_priv)); + np = get_nvpriv(dev); + err = -ENOMEM; + if (!dev) + goto out; + + np->pci_dev = pci_dev; + spin_lock_init(&np->lock); + SET_MODULE_OWNER(dev); + SET_NETDEV_DEV(dev, &pci_dev->dev); + + init_timer(&np->oom_kick); + np->oom_kick.data = (unsigned long) dev; + np->oom_kick.function = &do_rx_refill; /* timer handler */ + init_timer(&np->nic_poll); + np->nic_poll.data = (unsigned long) dev; + np->nic_poll.function = &do_nic_poll; /* timer handler */ + + err = pci_enable_device(pci_dev); + if (err) { + printk(KERN_INFO "forcedeth: pci_enable_dev failed (%d) for device %s\n", + err, pci_name(pci_dev)); + goto out_free; + } + + pci_set_master(pci_dev); + + err = pci_request_regions(pci_dev, dev->name); + if (err < 0) + goto out_disable; + + err = -EINVAL; + addr = 0; + for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { + dprintk(KERN_DEBUG "%s: resource %d start %p len %ld flags 0x%08lx.\n", + pci_name(pci_dev), i, (void*)pci_resource_start(pci_dev, i), + pci_resource_len(pci_dev, i), + pci_resource_flags(pci_dev, i)); + if (pci_resource_flags(pci_dev, i) & IORESOURCE_MEM && + pci_resource_len(pci_dev, i) >= NV_PCI_REGSZ) { + addr = pci_resource_start(pci_dev, i); + break; + } + } + if (i == DEVICE_COUNT_RESOURCE) { + printk(KERN_INFO "forcedeth: Couldn't find register window for device %s.\n", + pci_name(pci_dev)); + goto out_relreg; + } + + err = -ENOMEM; + dev->base_addr = (unsigned long) ioremap(addr, NV_PCI_REGSZ); + if (!dev->base_addr) + goto out_disable; + dev->irq = pci_dev->irq; + np->rx_ring = pci_alloc_consistent(pci_dev, sizeof(struct ring_desc) * (RX_RING + TX_RING), + &np->ring_addr); + if (!np->rx_ring) + goto out_unmap; + np->tx_ring = &np->rx_ring[RX_RING]; + + dev->open = open; + dev->stop = close; + dev->hard_start_xmit = start_xmit; + dev->get_stats = get_stats; + dev->change_mtu = change_mtu; + dev->set_multicast_list = set_multicast; + dev->do_ioctl = nic_ioctl; + dev->tx_timeout = tx_timeout; + dev->watchdog_timeo = NV_WATCHDOG_TIMEO; + + pci_set_drvdata(pci_dev, dev); + + + /* read the mac address */ + base = get_hwbase(dev); + np->orig_mac[0] = readl(base + NvRegMacAddrA); + np->orig_mac[1] = readl(base + NvRegMacAddrB); + + dev->dev_addr[0] = (np->orig_mac[1] >> 8) & 0xff; + dev->dev_addr[1] = (np->orig_mac[1] >> 0) & 0xff; + dev->dev_addr[2] = (np->orig_mac[0] >> 24) & 0xff; + dev->dev_addr[3] = (np->orig_mac[0] >> 16) & 0xff; + dev->dev_addr[4] = (np->orig_mac[0] >> 8) & 0xff; + dev->dev_addr[5] = (np->orig_mac[0] >> 0) & 0xff; + + if (!is_valid_ether_addr(dev->dev_addr)) { + /* + * Bad mac address. At least one bios sets the mac address + * to 01:23:45:67:89:ab + */ + printk(KERN_ERR "%s: Invalid Mac address detected: %02x:%02x:%02x:%02x:%02x:%02x\n", + pci_name(pci_dev), + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], + dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); + printk(KERN_ERR "Please complain to your hardware vendor. Switching to a random MAC.\n"); + dev->dev_addr[0] = 0x00; + dev->dev_addr[1] = 0x00; + dev->dev_addr[2] = 0x6c; + get_random_bytes(&dev->dev_addr[3], 3); + } + + dprintk(KERN_DEBUG "%s: MAC Address %02x:%02x:%02x:%02x:%02x:%02x\n", pci_name(pci_dev), + dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2], + dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); + + np->tx_flags = cpu_to_le16(NV_TX_LASTPACKET|NV_TX_LASTPACKET1|NV_TX_VALID); + if (id->driver_data & DEV_NEED_LASTPACKET1) + np->tx_flags |= cpu_to_le16(NV_TX_LASTPACKET1); + if (id->driver_data & DEV_IRQMASK_1) + np->irqmask = NVREG_IRQMASK_WANTED_1; + if (id->driver_data & DEV_IRQMASK_2) + np->irqmask = NVREG_IRQMASK_WANTED_2; + + err = register_netdev(dev); + if (err) { + printk(KERN_INFO "forcedeth: unable to register netdev: %d\n", err); + goto out_freering; + } + printk(KERN_INFO "%s: forcedeth.c: subsystem: %05x:%04x bound to %s\n", + dev->name, pci_dev->subsystem_vendor, pci_dev->subsystem_device, + pci_name(pci_dev)); + + return 0; + +out_freering: + pci_free_consistent(np->pci_dev, sizeof(struct ring_desc) * (RX_RING + TX_RING), + np->rx_ring, np->ring_addr); +out_unmap: + iounmap(get_hwbase(dev)); +out_relreg: + pci_release_regions(pci_dev); +out_disable: + pci_disable_device(pci_dev); +out_free: + free_netdev(dev); + pci_set_drvdata(pci_dev, NULL); +out: + return err; +} + +static void __devexit remove_nic(struct pci_dev *pci_dev) +{ + struct net_device *dev = pci_get_drvdata(pci_dev); + struct fe_priv *np = get_nvpriv(dev); + u8 *base = get_hwbase(dev); + + unregister_netdev(dev); + + /* special op: write back the misordered MAC address - otherwise + * the next probe_nic would see a wrong address. + */ + writel(np->orig_mac[0], base + NvRegMacAddrA); + writel(np->orig_mac[1], base + NvRegMacAddrB); + + /* free all structures */ + pci_free_consistent(np->pci_dev, sizeof(struct ring_desc) * (RX_RING + TX_RING), np->rx_ring, np->ring_addr); + iounmap(get_hwbase(dev)); + pci_release_regions(pci_dev); + pci_disable_device(pci_dev); + free_netdev(dev); + pci_set_drvdata(pci_dev, NULL); +} + +static struct pci_device_id pci_tbl[] = { + { /* nForce Ethernet Controller */ + .vendor = PCI_VENDOR_ID_NVIDIA, + .device = 0x1C3, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = DEV_IRQMASK_1, + }, + { /* nForce2 Ethernet Controller */ + .vendor = PCI_VENDOR_ID_NVIDIA, + .device = 0x0066, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = DEV_NEED_LASTPACKET1|DEV_IRQMASK_2, + }, + { /* nForce3 Ethernet Controller */ + .vendor = PCI_VENDOR_ID_NVIDIA, + .device = 0x00D6, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = DEV_NEED_LASTPACKET1|DEV_IRQMASK_2, + }, + {0,}, +}; + +static struct pci_driver driver = { + .name = "forcedeth", + .id_table = pci_tbl, + .probe = probe_nic, + .remove = __devexit_p(remove_nic), +}; + + +static int __init init_nic(void) +{ + printk(KERN_INFO "forcedeth.c: Reverse Engineered nForce ethernet driver. Version %s.\n", FORCEDETH_VERSION); + return pci_module_init(&driver); +} + +static void __exit exit_nic(void) +{ + pci_unregister_driver(&driver); +} + +MODULE_PARM(max_interrupt_work, "i"); +MODULE_PARM_DESC(max_interrupt_work, "forcedeth maximum events handled per interrupt"); + +MODULE_AUTHOR("Manfred Spraul "); +MODULE_DESCRIPTION("Reverse Engineered nForce ethernet driver"); +MODULE_LICENSE("GPL"); + +MODULE_DEVICE_TABLE(pci, pci_tbl); + +module_init(init_nic); +module_exit(exit_nic); diff -Nru a/drivers/net/irda/sir-dev.h b/drivers/net/irda/sir-dev.h --- a/drivers/net/irda/sir-dev.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/irda/sir-dev.h Thu Jan 15 21:41:54 2004 @@ -179,6 +179,7 @@ struct sir_fsm fsm; atomic_t enable_rx; + int raw_tx; spinlock_t tx_lock; u32 new_speed; diff -Nru a/drivers/net/irda/sir_dev.c b/drivers/net/irda/sir_dev.c --- a/drivers/net/irda/sir_dev.c Thu Jan 15 21:41:54 2004 +++ b/drivers/net/irda/sir_dev.c Thu Jan 15 21:41:54 2004 @@ -31,7 +31,9 @@ /* flush rx-buffer - should also help in case of problems with echo cancelation */ dev->rx_buff.data = dev->rx_buff.head; - dev->tx_buff.len = 0; + dev->rx_buff.len = 0; + dev->rx_buff.in_frame = FALSE; + dev->rx_buff.state = OUTSIDE_FRAME; atomic_set(&dev->enable_rx, 1); } @@ -62,24 +64,34 @@ int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len) { + unsigned long flags; int ret; if (unlikely(len > dev->tx_buff.truesize)) return -ENOSPC; - spin_lock_bh(&dev->tx_lock); /* serialize with other tx operations */ - while (dev->tx_buff.len > 0) { /* wait until tx idle */ - spin_unlock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); /* serialize with other tx operations */ + while (dev->tx_buff.len > 0) { /* wait until tx idle */ + spin_unlock_irqrestore(&dev->tx_lock, flags); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(MSECS_TO_JIFFIES(10)); - spin_lock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); } dev->tx_buff.data = dev->tx_buff.head; memcpy(dev->tx_buff.data, buf, len); + dev->tx_buff.len = len; ret = dev->drv->do_write(dev, dev->tx_buff.data, dev->tx_buff.len); - spin_unlock_bh(&dev->tx_lock); + if (ret > 0) { + IRDA_DEBUG(3, "%s(), raw-tx started\n", __FUNCTION__); + + dev->tx_buff.data += ret; + dev->tx_buff.len -= ret; + dev->raw_tx = 1; + ret = len; /* all data is going to be sent */ + } + spin_unlock_irqrestore(&dev->tx_lock, flags); return ret; } @@ -94,13 +106,13 @@ count = (len < dev->rx_buff.len) ? len : dev->rx_buff.len; - if (count > 0) - memcpy(buf, dev->rx_buff.head, count); + if (count > 0) { + memcpy(buf, dev->rx_buff.data, count); + dev->rx_buff.data += count; + dev->rx_buff.len -= count; + } - /* forget trailing stuff */ - dev->rx_buff.data = dev->rx_buff.head; - dev->rx_buff.len = 0; - dev->rx_buff.state = OUTSIDE_FRAME; + /* remaining stuff gets flushed when re-enabling normal rx */ return count; } @@ -114,11 +126,12 @@ void sirdev_write_complete(struct sir_dev *dev) { + unsigned long flags; struct sk_buff *skb; int actual = 0; int err; - spin_lock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); IRDA_DEBUG(3, "%s() - dev->tx_buff.len = %d\n", __FUNCTION__, dev->tx_buff.len); @@ -143,11 +156,24 @@ dev->tx_buff.len = 0; } if (dev->tx_buff.len > 0) { - spin_unlock_bh(&dev->tx_lock); + spin_unlock_irqrestore(&dev->tx_lock, flags); return; } } + if (unlikely(dev->raw_tx != 0)) { + /* in raw mode we are just done now after the buffer was sent + * completely. Since this was requested by some dongle driver + * running under the control of the irda-thread we must take + * care here not to re-enable the queue. The queue will be + * restarted when the irda-thread has completed the request. + */ + + IRDA_DEBUG(3, "%s(), raw-tx done\n", __FUNCTION__); + dev->raw_tx = 0; + return; + } + /* we have finished now sending this skb. * update statistics and free the skb. * finally we check and trigger a pending speed change, if any. @@ -190,7 +216,7 @@ netif_wake_queue(dev->netdev); } - spin_unlock_bh(&dev->tx_lock); + spin_unlock_irqrestore(&dev->tx_lock, flags); } /* called from client driver - likely with bh-context - to give us @@ -258,6 +284,7 @@ static int sirdev_hard_xmit(struct sk_buff *skb, struct net_device *ndev) { struct sir_dev *dev = ndev->priv; + unsigned long flags; int actual = 0; int err; s32 speed; @@ -307,7 +334,7 @@ } /* serialize with write completion */ - spin_lock_bh(&dev->tx_lock); + spin_lock_irqsave(&dev->tx_lock, flags); /* Copy skb to tx_buff while wrapping, stuffing and making CRC */ dev->tx_buff.len = async_wrap_skb(skb, dev->tx_buff.data, dev->tx_buff.truesize); @@ -337,7 +364,7 @@ dev->stats.tx_dropped++; netif_wake_queue(ndev); } - spin_unlock_bh(&dev->tx_lock); + spin_unlock_irqrestore(&dev->tx_lock, flags); return 0; } @@ -479,6 +506,7 @@ goto errout_free; sirdev_enable_rx(dev); + dev->raw_tx = 0; netif_start_queue(ndev); dev->irlap = irlap_open(ndev, &dev->qos, dev->hwname); diff -Nru a/drivers/net/irda/sir_kthread.c b/drivers/net/irda/sir_kthread.c --- a/drivers/net/irda/sir_kthread.c Thu Jan 15 21:41:54 2004 +++ b/drivers/net/irda/sir_kthread.c Thu Jan 15 21:41:54 2004 @@ -436,14 +436,13 @@ IRDA_DEBUG(2, "%s - state=0x%04x / param=%u\n", __FUNCTION__, initial_state, param); - if (in_interrupt()) { - if (down_trylock(&fsm->sem)) { + if (down_trylock(&fsm->sem)) { + if (in_interrupt() || in_atomic() || irqs_disabled()) { IRDA_DEBUG(1, "%s(), state machine busy!\n", __FUNCTION__); return -EWOULDBLOCK; - } + } else + down(&fsm->sem); } - else - down(&fsm->sem); if (fsm->state == SIRDEV_STATE_DEAD) { /* race with sirdev_close should never happen */ diff -Nru a/drivers/net/natsemi.c b/drivers/net/natsemi.c --- a/drivers/net/natsemi.c Thu Jan 15 21:41:53 2004 +++ b/drivers/net/natsemi.c Thu Jan 15 21:41:53 2004 @@ -765,19 +765,13 @@ SET_NETDEV_DEV(dev, &pdev->dev); i = pci_request_regions(pdev, dev->name); - if (i) { - free_netdev(dev); - return i; - } + if (i) + goto err_pci_request_regions; - { - void *mmio = ioremap (ioaddr, iosize); - if (!mmio) { - pci_release_regions(pdev); - free_netdev(dev); - return -ENOMEM; - } - ioaddr = (unsigned long) mmio; + ioaddr = (unsigned long) ioremap (ioaddr, iosize); + if (!ioaddr) { + i = -ENOMEM; + goto err_ioremap; } /* Work around the dropped serial bit. */ @@ -835,13 +829,9 @@ dev->mtu = mtu; i = register_netdev(dev); - if (i) { - pci_release_regions(pdev); - unregister_netdev(dev); - free_netdev(dev); - pci_set_drvdata(pdev, NULL); - return i; - } + if (i) + goto err_register_netdev; + netif_carrier_off(dev); if (netif_msg_drv(np)) { @@ -878,6 +868,17 @@ return 0; + + err_register_netdev: + iounmap ((void *) dev->base_addr); + + err_ioremap: + pci_release_regions(pdev); + pci_set_drvdata(pdev, NULL); + + err_pci_request_regions: + free_netdev(dev); + return i; } diff -Nru a/drivers/net/ne2k-pci.c b/drivers/net/ne2k-pci.c --- a/drivers/net/ne2k-pci.c Thu Jan 15 21:41:53 2004 +++ b/drivers/net/ne2k-pci.c Thu Jan 15 21:41:53 2004 @@ -115,6 +115,7 @@ CH_Winbond_W89C940F, CH_Holtek_HT80232, CH_Holtek_HT80229, + CH_Winbond_89C940_8c4a, }; @@ -132,6 +133,7 @@ {"Winbond W89C940F", 0}, {"Holtek HT80232", ONLY_16BIT_IO | HOLTEK_FDX}, {"Holtek HT80229", ONLY_32BIT_IO | HOLTEK_FDX | STOP_PG_0x60 }, + {"Winbond W89C940(misprogrammed)", 0}, {0,} }; @@ -147,6 +149,7 @@ { 0x1050, 0x5a5a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_W89C940F }, { 0x12c3, 0x0058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80232 }, { 0x12c3, 0x5598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80229 }, + { 0x8c4a, 0x1980, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940_8c4a }, { 0, } }; MODULE_DEVICE_TABLE(pci, ne2k_pci_tbl); diff -Nru a/drivers/net/pcmcia/Kconfig b/drivers/net/pcmcia/Kconfig --- a/drivers/net/pcmcia/Kconfig Thu Jan 15 21:41:54 2004 +++ b/drivers/net/pcmcia/Kconfig Thu Jan 15 21:41:54 2004 @@ -119,7 +119,7 @@ config PCMCIA_IBMTR tristate "IBM PCMCIA tokenring adapter support" - depends on NET_PCMCIA && IBMTR!=y && TR && PCMCIA + depends on NET_PCMCIA && IBMTR!=y && TR && PCMCIA && !64BIT help Say Y here if you intend to attach this type of Token Ring PCMCIA card to your computer. You then also need to say Y to "Token Ring diff -Nru a/drivers/net/pppoe.c b/drivers/net/pppoe.c --- a/drivers/net/pppoe.c Thu Jan 15 21:41:54 2004 +++ b/drivers/net/pppoe.c Thu Jan 15 21:41:54 2004 @@ -775,8 +775,8 @@ } -static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *m, - int total_len) +static int pppoe_sendmsg(struct kiocb *iocb, struct socket *sock, + struct msghdr *m, size_t total_len) { struct sk_buff *skb = NULL; struct sock *sk = sock->sk; @@ -939,7 +939,7 @@ }; static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock, - struct msghdr *m, int total_len, int flags) + struct msghdr *m, size_t total_len, int flags) { struct sock *sk = sock->sk; struct sk_buff *skb = NULL; diff -Nru a/drivers/net/sk98lin/Makefile b/drivers/net/sk98lin/Makefile --- a/drivers/net/sk98lin/Makefile Thu Jan 15 21:41:53 2004 +++ b/drivers/net/sk98lin/Makefile Thu Jan 15 21:41:53 2004 @@ -76,7 +76,7 @@ # SK_DBGCAT_DRV_INT_SRC 0x04000000 interrupts sources # SK_DBGCAT_DRV_EVENT 0x08000000 driver events -EXTRA_CFLAGS += -Idrivers/net/sk98lin -DSK_USE_CSUM -DGENESIS -DYUKON $(DBGDEF) $(SKPARAM) +EXTRA_CFLAGS += -Idrivers/net/sk98lin -DSK_DIAG_SUPPORT -DSK_USE_CSUM -DGENESIS -DYUKON $(DBGDEF) $(SKPARAM) clean: rm -f core *.o *.a *.s diff -Nru a/drivers/net/sk98lin/h/skcsum.h b/drivers/net/sk98lin/h/skcsum.h --- a/drivers/net/sk98lin/h/skcsum.h Thu Jan 15 21:41:53 2004 +++ b/drivers/net/sk98lin/h/skcsum.h Thu Jan 15 21:41:53 2004 @@ -2,8 +2,8 @@ * * Name: skcsum.h * Project: GEnesis - SysKonnect SK-NET Gigabit Ethernet (SK-98xx) - * Version: $Revision: 1.9 $ - * Date: $Date: 2001/02/06 11:21:39 $ + * Version: $Revision: 1.10 $ + * Date: $Date: 2003/08/20 13:59:57 $ * Purpose: Store/verify Internet checksum in send/receive packets. * ******************************************************************************/ @@ -26,6 +26,10 @@ * History: * * $Log: skcsum.h,v $ + * Revision 1.10 2003/08/20 13:59:57 mschmid + * Changed notation of #ifndef SkCsCalculateChecksum to + * #ifndef SK_CS_CALCULATE_CHECKSUM + * * Revision 1.9 2001/02/06 11:21:39 rassmann * Editorial changes. * @@ -226,11 +230,11 @@ /* function prototypes ********************************************************/ -#ifndef SkCsCalculateChecksum +#ifndef SK_CS_CALCULATE_CHECKSUM extern unsigned SkCsCalculateChecksum( void *pData, unsigned Length); -#endif +#endif /* SK_CS_CALCULATE_CHECKSUM */ extern int SkCsEvent( SK_AC *pAc, diff -Nru a/drivers/net/sk98lin/h/skdrv1st.h b/drivers/net/sk98lin/h/skdrv1st.h --- a/drivers/net/sk98lin/h/skdrv1st.h Thu Jan 15 21:41:53 2004 +++ b/drivers/net/sk98lin/h/skdrv1st.h Thu Jan 15 21:41:53 2004 @@ -2,15 +2,16 @@ * * Name: skdrv1st.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.1 $ - * Date: $Date: 2003/07/21 07:22:43 $ + * Version: $Revision: 1.4 $ + * Date: $Date: 2003/11/12 14:28:14 $ * Purpose: First header file for driver and all other modules * ******************************************************************************/ /****************************************************************************** * - * (C)Copyright 1998-2003 SysKonnect GmbH. + * (C)Copyright 1998-2002 SysKonnect GmbH. + * (C)Copyright 2002-2003 Marvell. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +27,15 @@ * History: * * $Log: skdrv1st.h,v $ + * Revision 1.4 2003/11/12 14:28:14 rroesler + * Fix: use dedicated ip_fast_csum() on X86_64 systems + * + * Revision 1.3 2003/10/07 08:16:52 mlindner + * Fix: Copyright changes + * + * Revision 1.2 2003/09/29 12:05:59 mlindner + * Fix: Added define SK_CS_CALCULSTE_CHECKSUM + * * Revision 1.1 2003/07/21 07:22:43 rroesler * Fix: Re-Enter after CVS crash * @@ -110,6 +120,9 @@ #ifndef __INC_SKDRV1ST_H #define __INC_SKDRV1ST_H +/* Check kernel version */ +#include + typedef struct s_AC SK_AC; /* Set card versions */ @@ -124,17 +137,15 @@ #define SK_PNMI_READ_U32(p,v) memcpy((char*)&(v),(char*)(p),4) #define SK_PNMI_READ_U64(p,v) memcpy((char*)&(v),(char*)(p),8) -#define SkCsCalculateChecksum(p,l) ((~ip_compute_csum(p, l)) & 0xffff) - #define SK_ADDR_EQUAL(a1,a2) (!memcmp(a1,a2,6)) - #if !defined(__OPTIMIZE__) || !defined(__KERNEL__) #warning You must compile this file with the correct options! #warning See the last lines of the source file. #error You must compile this driver with "-O". #endif +#include #include #include #include @@ -153,6 +164,13 @@ #include #include #include + +#define SK_CS_CALCULATE_CHECKSUM +#ifndef CONFIG_X86_64 +#define SkCsCalculateChecksum(p,l) ((~ip_compute_csum(p, l)) & 0xffff) +#else +#define SkCsCalculateChecksum(p,l) ((~ip_fast_csum(p, l)) & 0xffff) +#endif #include "h/sktypes.h" #include "h/skerror.h" diff -Nru a/drivers/net/sk98lin/h/skdrv2nd.h b/drivers/net/sk98lin/h/skdrv2nd.h --- a/drivers/net/sk98lin/h/skdrv2nd.h Thu Jan 15 21:41:55 2004 +++ b/drivers/net/sk98lin/h/skdrv2nd.h Thu Jan 15 21:41:55 2004 @@ -2,15 +2,16 @@ * * Name: skdrv2nd.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.3 $ - * Date: $Date: 2003/08/12 16:51:18 $ + * Version: $Revision: 1.10 $ + * Date: $Date: 2003/12/11 16:04:45 $ * Purpose: Second header file for driver and all other modules * ******************************************************************************/ /****************************************************************************** * - * (C)Copyright 1998-2003 SysKonnect GmbH. + * (C)Copyright 1998-2002 SysKonnect GmbH. + * (C)Copyright 2002-2003 Marvell. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +27,27 @@ * History: * * $Log: skdrv2nd.h,v $ + * Revision 1.10 2003/12/11 16:04:45 mlindner + * Add: New pnmi data backup structure + * + * Revision 1.9 2003/11/10 09:31:37 rroesler + * Add: pnmiBackup structure for DIAG backup restore + * + * Revision 1.8 2003/10/22 14:18:32 rroesler + * Fix: DIAG handling for DualNet cards + * + * Revision 1.7 2003/10/07 09:34:59 mlindner + * Add: New defines for lower and upper range values (interrupt moderation) + * + * Revision 1.6 2003/10/07 08:16:51 mlindner + * Fix: Copyright changes + * + * Revision 1.5 2003/09/01 13:10:39 rroesler + * Add: Prototypes for DIAG Attach/Detach functions + * + * Revision 1.4 2003/09/01 12:33:38 rroesler + * Add: Defines for optimized DIAG interaction + * * Revision 1.3 2003/08/12 16:51:18 mlindner * Fix: UDP and TCP Proto checks * Fix: UDP header offset @@ -206,6 +228,11 @@ extern int SkPciWriteCfgByte(SK_AC*, int, SK_U8); extern int SkDrvEvent(SK_AC*, SK_IOC IoC, SK_U32, SK_EVPARA); +#ifdef SK_DIAG_SUPPORT +extern int SkDrvEnterDiagMode(SK_AC *pAc); +extern int SkDrvLeaveDiagMode(SK_AC *pAc); +#endif + struct s_DrvRlmtMbuf { SK_MBUF *pNext; /* Pointer to next RLMT Mbuf. */ SK_U8 *pData; /* Data buffer (virtually contig.). */ @@ -247,6 +274,7 @@ #define SK_IOCTL_SETMIB (SK_IOCTL_BASE + 1) #define SK_IOCTL_PRESETMIB (SK_IOCTL_BASE + 2) #define SK_IOCTL_GEN (SK_IOCTL_BASE + 3) +#define SK_IOCTL_DIAG (SK_IOCTL_BASE + 4) typedef struct s_IOCTL SK_GE_IOCTL; @@ -462,6 +490,9 @@ #define C_INTS_PER_SEC_DEFAULT 2000 #define C_INT_MOD_ENABLE_PERCENTAGE 50 /* if higher 50% enable */ #define C_INT_MOD_DISABLE_PERCENTAGE 50 /* if lower 50% disable */ +#define C_INT_MOD_IPS_LOWER_RANGE 30 +#define C_INT_MOD_IPS_UPPER_RANGE 40000 + typedef struct s_DynIrqModInfo DIM_INFO; struct s_DynIrqModInfo { @@ -493,6 +524,11 @@ #define SK_ALLOC_IRQ 0x00000001 +#ifdef SK_DIAG_SUPPORT +#define DIAG_ACTIVE 1 +#define DIAG_NOTACTIVE 0 +#endif + /**************************************************************************** * Per board structure / Adapter Context structure: * Allocated within attach(9e) and freed within detach(9e). @@ -563,9 +599,18 @@ int PortUp; int PortDown; int ChipsetType; /* Chipset family type - * 0 == Genesis family support - * 1 == Yukon family support - */ + * 0 == Genesis family support + * 1 == Yukon family support + */ +#ifdef SK_DIAG_SUPPORT + SK_U32 DiagModeActive; /* is diag active? */ + SK_BOOL DiagFlowCtrl; /* for control purposes */ + SK_PNMI_STRUCT_DATA PnmiBackup; /* backup structure for all Pnmi-Data */ + SK_BOOL WasIfUp[SK_MAX_MACS]; /* for OpenClose while + * DIAG is busy with NIC + */ +#endif + }; diff -Nru a/drivers/net/sk98lin/h/skgehw.h b/drivers/net/sk98lin/h/skgehw.h --- a/drivers/net/sk98lin/h/skgehw.h Thu Jan 15 21:41:55 2004 +++ b/drivers/net/sk98lin/h/skgehw.h Thu Jan 15 21:41:55 2004 @@ -2,8 +2,8 @@ * * Name: skgehw.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.53 $ - * Date: $Date: 2003/07/04 12:39:01 $ + * Version: $Revision: 1.56 $ + * Date: $Date: 2003/09/23 09:01:00 $ * Purpose: Defines and Macros for the Gigabit Ethernet Adapter Product Family * ******************************************************************************/ @@ -26,6 +26,17 @@ * * History: * $Log: skgehw.h,v $ + * Revision 1.56 2003/09/23 09:01:00 malthoff + * Minor change: Define I2C device size constants as long. + * + * Revision 1.55 2003/09/16 14:03:34 rschmidt + * Added define for YUKON-Lite Rev. A1,A2 Chip Revision + * Moved defines for PHY power down modes to skgeinit.h + * Editorial changes + * + * Revision 1.54 2003/09/16 07:37:58 mschmid + * Added defines for Marvell PHY low power modes + * * Revision 1.53 2003/07/04 12:39:01 rschmidt * Added SK_FAR to pointers in XM_IN32() and GM_IN32() macros (for PXE) * Editorial changes @@ -84,7 +95,7 @@ * Editorial changes * * Revision 1.39 2002/06/10 09:37:07 rschmidt - * Added macros for the ADDR-Modul + * Added macros for the ADDR-Module * * Revision 1.38 2002/06/05 08:15:19 rschmidt * Added defines for WOL Registers @@ -628,12 +639,12 @@ #define B2_FAR 0x0120 /* 32 bit Flash-Prom Addr Reg/Cnt */ #define B2_FDP 0x0124 /* 8 bit Flash-Prom Data Port */ /* 0x0125 - 0x0127: reserved */ -#define B2_LD_CRTL 0x0128 /* 8 bit EPROM loader control register */ +#define B2_LD_CTRL 0x0128 /* 8 bit EPROM loader control register */ #define B2_LD_TEST 0x0129 /* 8 bit EPROM loader test register */ /* 0x012a - 0x012f: reserved */ #define B2_TI_INI 0x0130 /* 32 bit Timer Init Value */ #define B2_TI_VAL 0x0134 /* 32 bit Timer Value */ -#define B2_TI_CRTL 0x0138 /* 8 bit Timer Control */ +#define B2_TI_CTRL 0x0138 /* 8 bit Timer Control */ #define B2_TI_TEST 0x0139 /* 8 Bit Timer Test */ /* 0x013a - 0x013f: reserved */ #define B2_IRQM_INI 0x0140 /* 32 bit IRQ Moderation Timer Init Reg.*/ @@ -1021,7 +1032,7 @@ /* Bit 7: reserved */ #define RAP_RAP 0x3f /* Bit 6..0: 0 = block 0,..,6f = block 6f */ -/* B0_CTST 16 bit Control/Status register */ +/* B0_CTST 16 bit Control/Status register */ /* Bit 15..14: reserved */ #define CS_CLK_RUN_HOT BIT_13S /* CLK_RUN hot m. (YUKON-Lite only) */ #define CS_CLK_RUN_RST BIT_12S /* CLK_RUN reset (YUKON-Lite only) */ @@ -1038,7 +1049,7 @@ #define CS_RST_CLR BIT_1S /* Clear Software reset */ #define CS_RST_SET BIT_0S /* Set Software reset */ -/* B0_LED 8 Bit LED register */ +/* B0_LED 8 Bit LED register */ /* Bit 7.. 2: reserved */ #define LED_STAT_ON BIT_1S /* Status LED on */ #define LED_STAT_OFF BIT_0S /* Status LED off */ @@ -1053,9 +1064,9 @@ #define PC_VCC_ON BIT_1 /* Switch VCC On */ #define PC_VCC_OFF BIT_0 /* Switch VCC Off */ -/* B0_ISRC 32 bit Interrupt Source Register */ -/* B0_IMSK 32 bit Interrupt Mask Register */ -/* B0_SP_ISRC 32 bit Special Interrupt Source Reg */ +/* B0_ISRC 32 bit Interrupt Source Register */ +/* B0_IMSK 32 bit Interrupt Mask Register */ +/* B0_SP_ISRC 32 bit Special Interrupt Source Reg */ /* B2_IRQM_MSK 32 bit IRQ Moderation Mask */ #define IS_ALL_MSK 0xbfffffffUL /* All Interrupt bits */ #define IS_HW_ERR BIT_31 /* Interrupt HW Error */ @@ -1099,9 +1110,9 @@ #define IS_XA2_C BIT_0 /* Q_XA2 Encoding Error */ -/* B0_HWE_ISRC 32 bit HW Error Interrupt Src Reg */ -/* B0_HWE_IMSK 32 bit HW Error Interrupt Mask Reg */ -/* B2_IRQM_HWE_MSK 32 bit IRQ Moderation HW Error Mask */ +/* B0_HWE_ISRC 32 bit HW Error Interrupt Src Reg */ +/* B0_HWE_IMSK 32 bit HW Error Interrupt Mask Reg */ +/* B2_IRQM_HWE_MSK 32 bit IRQ Moderation HW Error Mask */ #define IS_ERR_MSK 0x00000fffL /* All Error bits */ /* Bit 31..14: reserved */ #define IS_IRQ_TIST_OV BIT_13 /* Time Stamp Timer Overflow (YUKON only) */ @@ -1119,29 +1130,32 @@ #define IS_R1_PAR_ERR BIT_1 /* Queue R1 Parity Error */ #define IS_R2_PAR_ERR BIT_0 /* Queue R2 Parity Error */ -/* B2_CONN_TYP 8 bit Connector type */ -/* B2_PMD_TYP 8 bit PMD type */ +/* B2_CONN_TYP 8 bit Connector type */ +/* B2_PMD_TYP 8 bit PMD type */ /* Values of connector and PMD type comply to SysKonnect internal std */ -/* B2_MAC_CFG 8 bit MAC Configuration / Chip Revision */ +/* B2_MAC_CFG 8 bit MAC Configuration / Chip Revision */ #define CFG_CHIP_R_MSK (0xf<<4) /* Bit 7.. 4: Chip Revision */ /* Bit 3.. 2: reserved */ #define CFG_DIS_M2_CLK BIT_1S /* Disable Clock for 2nd MAC */ #define CFG_SNG_MAC BIT_0S /* MAC Config: 0=2 MACs / 1=1 MAC*/ -/* B2_CHIP_ID 8 bit Chip Identification Number */ +/* B2_CHIP_ID 8 bit Chip Identification Number */ #define CHIP_ID_GENESIS 0x0a /* Chip ID for GENESIS */ #define CHIP_ID_YUKON 0xb0 /* Chip ID for YUKON */ -#define CHIP_ID_YUKON_LITE 0xb1 /* Chip ID for YUKON-Lite (Rev. A1) */ +#define CHIP_ID_YUKON_LITE 0xb1 /* Chip ID for YUKON-Lite (Rev. A1-A3) */ #define CHIP_ID_YUKON_LP 0xb2 /* Chip ID for YUKON-LP */ -/* B2_FAR 32 bit Flash-Prom Addr Reg/Cnt */ +#define CHIP_REV_YU_LITE_A1 3 /* Chip Rev. for YUKON-Lite A1,A2 */ +#define CHIP_REV_YU_LITE_A3 7 /* Chip Rev. for YUKON-Lite A3 */ + +/* B2_FAR 32 bit Flash-Prom Addr Reg/Cnt */ #define FAR_ADDR 0x1ffffL /* Bit 16.. 0: FPROM Address mask */ -/* B2_LD_CRTL 8 bit EPROM loader control register */ +/* B2_LD_CTRL 8 bit EPROM loader control register */ /* Bits are currently reserved */ -/* B2_LD_TEST 8 bit EPROM loader test register */ +/* B2_LD_TEST 8 bit EPROM loader test register */ /* Bit 7.. 4: reserved */ #define LD_T_ON BIT_3S /* Loader Test mode on */ #define LD_T_OFF BIT_2S /* Loader Test mode off */ @@ -1151,16 +1165,16 @@ /* * Timer Section */ -/* B2_TI_CRTL 8 bit Timer control */ +/* B2_TI_CTRL 8 bit Timer control */ /* B2_IRQM_CTRL 8 bit IRQ Moderation Timer Control */ /* Bit 7.. 3: reserved */ #define TIM_START BIT_2S /* Start Timer */ #define TIM_STOP BIT_1S /* Stop Timer */ #define TIM_CLR_IRQ BIT_0S /* Clear Timer IRQ (!IRQM) */ -/* B2_TI_TEST 8 Bit Timer Test */ +/* B2_TI_TEST 8 Bit Timer Test */ /* B2_IRQM_TEST 8 bit IRQ Moderation Timer Test */ -/* B28_DPT_TST 8 bit Descriptor Poll Timer Test Reg */ +/* B28_DPT_TST 8 bit Descriptor Poll Timer Test Reg */ /* Bit 7.. 3: reserved */ #define TIM_T_ON BIT_2S /* Test mode on */ #define TIM_T_OFF BIT_1S /* Test mode off */ @@ -1197,7 +1211,7 @@ #define TST_FRC_APERR_1M64 BIT_1S /* AddrPERR on 1. phase */ #define TST_FRC_APERR_2M64 BIT_0S /* AddrPERR on 2. phase */ -/* B2_GP_IO 32 bit General Purpose I/O Register */ +/* B2_GP_IO 32 bit General Purpose I/O Register */ /* Bit 31..26: reserved */ #define GP_DIR_9 BIT_25 /* IO_9 direct, 0=In/1=Out */ #define GP_DIR_8 BIT_24 /* IO_8 direct, 0=In/1=Out */ @@ -1221,28 +1235,28 @@ #define GP_IO_1 BIT_1 /* IO_1 pin */ #define GP_IO_0 BIT_0 /* IO_0 pin */ -/* B2_I2C_CTRL 32 bit I2C HW Control Register */ +/* B2_I2C_CTRL 32 bit I2C HW Control Register */ #define I2C_FLAG BIT_31 /* Start read/write if WR */ #define I2C_ADDR (0x7fffL<<16) /* Bit 30..16: Addr to be RD/WR */ #define I2C_DEV_SEL (0x7fL<<9) /* Bit 15.. 9: I2C Device Select */ /* Bit 8.. 5: reserved */ #define I2C_BURST_LEN BIT_4 /* Burst Len, 1/4 bytes */ -#define I2C_DEV_SIZE (7L<<1) /* Bit 3.. 1: I2C Device Size */ -#define I2C_025K_DEV (0L<<1) /* 0: 256 Bytes or smal. */ -#define I2C_05K_DEV (1L<<1) /* 1: 512 Bytes */ -#define I2C_1K_DEV (2L<<1) /* 2: 1024 Bytes */ -#define I2C_2K_DEV (3L<<1) /* 3: 2048 Bytes */ -#define I2C_4K_DEV (4L<<1) /* 4: 4096 Bytes */ -#define I2C_8K_DEV (5L<<1) /* 5: 8192 Bytes */ -#define I2C_16K_DEV (6L<<1) /* 6: 16384 Bytes */ -#define I2C_32K_DEV (7L<<1) /* 7: 32768 Bytes */ +#define I2C_DEV_SIZE (7<<1) /* Bit 3.. 1: I2C Device Size */ +#define I2C_025K_DEV (0<<1) /* 0: 256 Bytes or smal. */ +#define I2C_05K_DEV (1<<1) /* 1: 512 Bytes */ +#define I2C_1K_DEV (2<<1) /* 2: 1024 Bytes */ +#define I2C_2K_DEV (3<<1) /* 3: 2048 Bytes */ +#define I2C_4K_DEV (4<<1) /* 4: 4096 Bytes */ +#define I2C_8K_DEV (5<<1) /* 5: 8192 Bytes */ +#define I2C_16K_DEV (6<<1) /* 6: 16384 Bytes */ +#define I2C_32K_DEV (7<<1) /* 7: 32768 Bytes */ #define I2C_STOP BIT_0 /* Interrupt I2C transfer */ -/* B2_I2C_IRQ 32 bit I2C HW IRQ Register */ +/* B2_I2C_IRQ 32 bit I2C HW IRQ Register */ /* Bit 31.. 1 reserved */ #define I2C_CLR_IRQ BIT_0 /* Clear I2C IRQ */ -/* B2_I2C_SW 32 bit (8 bit access) I2C HW SW Port Register */ +/* B2_I2C_SW 32 bit (8 bit access) I2C HW SW Port Register */ /* Bit 7.. 3: reserved */ #define I2C_DATA_DIR BIT_2S /* direction of I2C_DATA */ #define I2C_DATA BIT_1S /* I2C Data Port */ @@ -1254,27 +1268,27 @@ #define I2C_SENS_ADDR LM80_ADDR /* I2C Sensor Address, (Volt and Temp)*/ -/* B2_BSC_CTRL 8 bit Blink Source Counter Control */ +/* B2_BSC_CTRL 8 bit Blink Source Counter Control */ /* Bit 7.. 2: reserved */ #define BSC_START BIT_1S /* Start Blink Source Counter */ #define BSC_STOP BIT_0S /* Stop Blink Source Counter */ -/* B2_BSC_STAT 8 bit Blink Source Counter Status */ +/* B2_BSC_STAT 8 bit Blink Source Counter Status */ /* Bit 7.. 1: reserved */ #define BSC_SRC BIT_0S /* Blink Source, 0=Off / 1=On */ -/* B2_BSC_TST 16 bit Blink Source Counter Test Reg */ +/* B2_BSC_TST 16 bit Blink Source Counter Test Reg */ #define BSC_T_ON BIT_2S /* Test mode on */ #define BSC_T_OFF BIT_1S /* Test mode off */ #define BSC_T_STEP BIT_0S /* Test step */ -/* B3_RAM_ADDR 32 bit RAM Address, to read or write */ +/* B3_RAM_ADDR 32 bit RAM Address, to read or write */ /* Bit 31..19: reserved */ #define RAM_ADR_RAN 0x0007ffffL /* Bit 18.. 0: RAM Address Range */ /* RAM Interface Registers */ -/* B3_RI_CTRL 16 bit RAM Iface Control Register */ +/* B3_RI_CTRL 16 bit RAM Iface Control Register */ /* Bit 15..10: reserved */ #define RI_CLR_RD_PERR BIT_9S /* Clear IRQ RAM Read Parity Err */ #define RI_CLR_WR_PERR BIT_8S /* Clear IRQ RAM Write Parity Err*/ @@ -1282,7 +1296,7 @@ #define RI_RST_CLR BIT_1S /* Clear RAM Interface Reset */ #define RI_RST_SET BIT_0S /* Set RAM Interface Reset */ -/* B3_RI_TEST 8 bit RAM Iface Test Register */ +/* B3_RI_TEST 8 bit RAM Iface Test Register */ /* Bit 15.. 4: reserved */ #define RI_T_EV BIT_3S /* Timeout Event occured */ #define RI_T_ON BIT_2S /* Timeout Timer Test On */ @@ -1309,7 +1323,7 @@ #define MA_DIS_REC_RX1 BIT_0S /* Disable Recovery Timer RX1 */ /* Packet Arbiter Registers */ -/* B3_PA_CTRL 16 bit Packet Arbiter Ctrl Register */ +/* B3_PA_CTRL 16 bit Packet Arbiter Ctrl Register */ /* Bit 15..14: reserved */ #define PA_CLR_TO_TX2 BIT_13S /* Clear IRQ Packet Timeout TX2 */ #define PA_CLR_TO_TX1 BIT_12S /* Clear IRQ Packet Timeout TX1 */ @@ -1332,7 +1346,7 @@ /* Rx/Tx Path related Arbiter Test Registers */ /* B3_MA_TO_TEST 16 bit MAC Arbiter Timeout Test Reg */ /* B3_MA_RC_TEST 16 bit MAC Arbiter Recovery Test Reg */ -/* B3_PA_TEST 16 bit Packet Arbiter Test Register */ +/* B3_PA_TEST 16 bit Packet Arbiter Test Register */ /* Bit 15, 11, 7, and 3 are reserved in B3_PA_TEST */ #define TX2_T_EV BIT_15S /* TX2 Timeout/Recv Event occured */ #define TX2_T_ON BIT_14S /* TX2 Timeout/Recv Timer Test On */ @@ -1353,14 +1367,14 @@ /* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */ -/* TXA_ITI_INI 32 bit Tx Arb Interval Timer Init Val */ -/* TXA_ITI_VAL 32 bit Tx Arb Interval Timer Value */ -/* TXA_LIM_INI 32 bit Tx Arb Limit Counter Init Val */ -/* TXA_LIM_VAL 32 bit Tx Arb Limit Counter Value */ +/* TXA_ITI_INI 32 bit Tx Arb Interval Timer Init Val */ +/* TXA_ITI_VAL 32 bit Tx Arb Interval Timer Value */ +/* TXA_LIM_INI 32 bit Tx Arb Limit Counter Init Val */ +/* TXA_LIM_VAL 32 bit Tx Arb Limit Counter Value */ /* Bit 31..24: reserved */ #define TXA_MAX_VAL 0x00ffffffUL/* Bit 23.. 0: Max TXA Timer/Cnt Val */ -/* TXA_CTRL 8 bit Tx Arbiter Control Register */ +/* TXA_CTRL 8 bit Tx Arbiter Control Register */ #define TXA_ENA_FSYNC BIT_7S /* Enable force of sync Tx queue */ #define TXA_DIS_FSYNC BIT_6S /* Disable force of sync Tx queue */ #define TXA_ENA_ALLOC BIT_5S /* Enable alloc of free bandwidth */ @@ -1370,7 +1384,7 @@ #define TXA_ENA_ARB BIT_1S /* Enable Tx Arbiter */ #define TXA_DIS_ARB BIT_0S /* Disable Tx Arbiter */ -/* TXA_TEST 8 bit Tx Arbiter Test Register */ +/* TXA_TEST 8 bit Tx Arbiter Test Register */ /* Bit 7.. 6: reserved */ #define TXA_INT_T_ON BIT_5S /* Tx Arb Interval Timer Test On */ #define TXA_INT_T_OFF BIT_4S /* Tx Arb Interval Timer Test Off */ @@ -1379,22 +1393,22 @@ #define TXA_LIM_T_OFF BIT_1S /* Tx Arb Limit Timer Test Off */ #define TXA_LIM_T_STEP BIT_0S /* Tx Arb Limit Timer Step */ -/* TXA_STAT 8 bit Tx Arbiter Status Register */ +/* TXA_STAT 8 bit Tx Arbiter Status Register */ /* Bit 7.. 1: reserved */ #define TXA_PRIO_XS BIT_0S /* sync queue has prio to send */ -/* Q_BC 32 bit Current Byte Counter */ +/* Q_BC 32 bit Current Byte Counter */ /* Bit 31..16: reserved */ #define BC_MAX 0xffff /* Bit 15.. 0: Byte counter */ /* BMU Control Status Registers */ -/* B0_R1_CSR 32 bit BMU Ctrl/Stat Rx Queue 1 */ -/* B0_R2_CSR 32 bit BMU Ctrl/Stat Rx Queue 2 */ -/* B0_XA1_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 1 */ -/* B0_XS1_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 1 */ -/* B0_XA2_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 2 */ -/* B0_XS2_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 2 */ -/* Q_CSR 32 bit BMU Control/Status Register */ +/* B0_R1_CSR 32 bit BMU Ctrl/Stat Rx Queue 1 */ +/* B0_R2_CSR 32 bit BMU Ctrl/Stat Rx Queue 2 */ +/* B0_XA1_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 1 */ +/* B0_XS1_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 1 */ +/* B0_XA2_CSR 32 bit BMU Ctrl/Stat Sync Tx Queue 2 */ +/* B0_XS2_CSR 32 bit BMU Ctrl/Stat Async Tx Queue 2 */ +/* Q_CSR 32 bit BMU Control/Status Register */ /* Bit 31..25: reserved */ #define CSR_SV_IDLE BIT_24 /* BMU SM Idle */ /* Bit 23..22: reserved */ @@ -1428,7 +1442,7 @@ CSR_SV_RUN | CSR_DREAD_RUN | CSR_DWRITE_RUN |\ CSR_TRANS_RUN) -/* Q_F 32 bit Flag Register */ +/* Q_F 32 bit Flag Register */ /* Bit 31..28: reserved */ #define F_ALM_FULL BIT_27 /* Rx FIFO: almost full */ #define F_EMPTY BIT_27 /* Tx FIFO: empty flag */ @@ -1439,17 +1453,17 @@ /* Bit 15..11: reserved */ #define F_WATER_MARK 0x0007ffL /* Bit 10.. 0: Watermark */ -/* Q_T1 32 bit Test Register 1 */ +/* Q_T1 32 bit Test Register 1 */ /* Holds four State Machine control Bytes */ -#define SM_CRTL_SV_MSK (0xffL<<24) /* Bit 31..24: Control Supervisor SM */ -#define SM_CRTL_RD_MSK (0xffL<<16) /* Bit 23..16: Control Read Desc SM */ -#define SM_CRTL_WR_MSK (0xffL<<8) /* Bit 15.. 8: Control Write Desc SM */ -#define SM_CRTL_TR_MSK 0xffL /* Bit 7.. 0: Control Transfer SM */ - -/* Q_T1_TR 8 bit Test Register 1 Transfer SM */ -/* Q_T1_WR 8 bit Test Register 1 Write Descriptor SM */ -/* Q_T1_RD 8 bit Test Register 1 Read Descriptor SM */ -/* Q_T1_SV 8 bit Test Register 1 Supervisor SM */ +#define SM_CTRL_SV_MSK (0xffL<<24) /* Bit 31..24: Control Supervisor SM */ +#define SM_CTRL_RD_MSK (0xffL<<16) /* Bit 23..16: Control Read Desc SM */ +#define SM_CTRL_WR_MSK (0xffL<<8) /* Bit 15.. 8: Control Write Desc SM */ +#define SM_CTRL_TR_MSK 0xffL /* Bit 7.. 0: Control Transfer SM */ + +/* Q_T1_TR 8 bit Test Register 1 Transfer SM */ +/* Q_T1_WR 8 bit Test Register 1 Write Descriptor SM */ +/* Q_T1_RD 8 bit Test Register 1 Read Descriptor SM */ +/* Q_T1_SV 8 bit Test Register 1 Supervisor SM */ /* The control status byte of each machine looks like ... */ #define SM_STATE 0xf0 /* Bit 7.. 4: State which shall be loaded */ @@ -1459,7 +1473,7 @@ #define SM_STEP BIT_0S /* Step the State Machine */ /* The encoding of the states is not supported by the Diagnostics Tool */ -/* Q_T2 32 bit Test Register 2 */ +/* Q_T2 32 bit Test Register 2 */ /* Bit 31.. 8: reserved */ #define T2_AC_T_ON BIT_7 /* Address Counter Test Mode on */ #define T2_AC_T_OFF BIT_6 /* Address Counter Test Mode off */ @@ -1470,23 +1484,23 @@ #define T2_STEP02 BIT_1 /* Inc AC/Dec BC by 2 */ #define T2_STEP01 BIT_0 /* Inc AC/Dec BC by 1 */ -/* Q_T3 32 bit Test Register 3 */ +/* Q_T3 32 bit Test Register 3 */ /* Bit 31.. 7: reserved */ #define T3_MUX_MSK (7<<4) /* Bit 6.. 4: Mux Position */ /* Bit 3: reserved */ #define T3_VRAM_MSK 7 /* Bit 2.. 0: Virtual RAM Buffer Address */ /* RAM Buffer Register Offsets, use RB_ADDR(Queue, Offs) to access */ -/* RB_START 32 bit RAM Buffer Start Address */ -/* RB_END 32 bit RAM Buffer End Address */ -/* RB_WP 32 bit RAM Buffer Write Pointer */ -/* RB_RP 32 bit RAM Buffer Read Pointer */ -/* RB_RX_UTPP 32 bit Rx Upper Threshold, Pause Pack */ -/* RB_RX_LTPP 32 bit Rx Lower Threshold, Pause Pack */ -/* RB_RX_UTHP 32 bit Rx Upper Threshold, High Prio */ -/* RB_RX_LTHP 32 bit Rx Lower Threshold, High Prio */ -/* RB_PC 32 bit RAM Buffer Packet Counter */ -/* RB_LEV 32 bit RAM Buffer Level Register */ +/* RB_START 32 bit RAM Buffer Start Address */ +/* RB_END 32 bit RAM Buffer End Address */ +/* RB_WP 32 bit RAM Buffer Write Pointer */ +/* RB_RP 32 bit RAM Buffer Read Pointer */ +/* RB_RX_UTPP 32 bit Rx Upper Threshold, Pause Pack */ +/* RB_RX_LTPP 32 bit Rx Lower Threshold, Pause Pack */ +/* RB_RX_UTHP 32 bit Rx Upper Threshold, High Prio */ +/* RB_RX_LTHP 32 bit Rx Lower Threshold, High Prio */ +/* RB_PC 32 bit RAM Buffer Packet Counter */ +/* RB_LEV 32 bit RAM Buffer Level Register */ /* Bit 31..19: reserved */ #define RB_MSK 0x0007ffff /* Bit 18.. 0: RAM Buffer Pointer Bits */ @@ -1519,17 +1533,17 @@ /* Receive and Transmit MAC FIFO Registers (GENESIS only) */ -/* RX_MFF_EA 32 bit Receive MAC FIFO End Address */ -/* RX_MFF_WP 32 bit Receive MAC FIFO Write Pointer */ -/* RX_MFF_RP 32 bit Receive MAC FIFO Read Pointer */ -/* RX_MFF_PC 32 bit Receive MAC FIFO Packet Counter */ -/* RX_MFF_LEV 32 bit Receive MAC FIFO Level */ -/* TX_MFF_EA 32 bit Transmit MAC FIFO End Address */ -/* TX_MFF_WP 32 bit Transmit MAC FIFO Write Pointer */ -/* TX_MFF_WSP 32 bit Transmit MAC FIFO WR Shadow Pointer */ -/* TX_MFF_RP 32 bit Transmit MAC FIFO Read Pointer */ -/* TX_MFF_PC 32 bit Transmit MAC FIFO Packet Cnt */ -/* TX_MFF_LEV 32 bit Transmit MAC FIFO Level */ +/* RX_MFF_EA 32 bit Receive MAC FIFO End Address */ +/* RX_MFF_WP 32 bit Receive MAC FIFO Write Pointer */ +/* RX_MFF_RP 32 bit Receive MAC FIFO Read Pointer */ +/* RX_MFF_PC 32 bit Receive MAC FIFO Packet Counter */ +/* RX_MFF_LEV 32 bit Receive MAC FIFO Level */ +/* TX_MFF_EA 32 bit Transmit MAC FIFO End Address */ +/* TX_MFF_WP 32 bit Transmit MAC FIFO Write Pointer */ +/* TX_MFF_WSP 32 bit Transmit MAC FIFO WR Shadow Pointer */ +/* TX_MFF_RP 32 bit Transmit MAC FIFO Read Pointer */ +/* TX_MFF_PC 32 bit Transmit MAC FIFO Packet Cnt */ +/* TX_MFF_LEV 32 bit Transmit MAC FIFO Level */ /* Bit 31.. 6: reserved */ #define MFF_MSK 0x007fL /* Bit 5.. 0: MAC FIFO Address/Ptr Bits */ @@ -1682,7 +1696,7 @@ #define RX_GMF_FL_THR_DEF 0x0a /* Rx GMAC FIFO Flush Threshold default */ -/* GMAC_TI_ST_CTRL 8 bit Time Stamp Timer Ctrl Reg (YUKON only) */ +/* GMAC_TI_ST_CTRL 8 bit Time Stamp Timer Ctrl Reg (YUKON only) */ /* Bit 7.. 3: reserved */ #define GMT_ST_START BIT_2S /* Start Time Stamp Timer */ #define GMT_ST_STOP BIT_1S /* Stop Time Stamp Timer */ @@ -1766,13 +1780,13 @@ #define GMAC_DEF_MSK (GM_IS_TX_CO_OV | GM_IS_RX_CO_OV | \ GM_IS_TX_FF_UR) -/* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */ +/* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */ /* Bits 15.. 2: reserved */ #define GMLC_RST_CLR BIT_1S /* Clear GMAC Link Reset */ #define GMLC_RST_SET BIT_0S /* Set GMAC Link Reset */ -/* WOL_CTRL_STAT 16 bit WOL Control/Status Reg */ +/* WOL_CTRL_STAT 16 bit WOL Control/Status Reg */ #define WOL_CTL_LINK_CHG_OCC BIT_15S #define WOL_CTL_MAGIC_PKT_OCC BIT_14S #define WOL_CTL_PATTERN_OCC BIT_13S @@ -1801,7 +1815,7 @@ WOL_CTL_DIS_PATTERN_UNIT | \ WOL_CTL_DIS_MAGIC_PKT_UNIT) -/* WOL_MATCH_CTL 8 bit WOL Match Control Reg */ +/* WOL_MATCH_CTL 8 bit WOL Match Control Reg */ #define WOL_CTL_PATT_ENA(x) (BIT_0 << (x)) #define SK_NUM_WOL_PATTERN 7 diff -Nru a/drivers/net/sk98lin/h/skgehwt.h b/drivers/net/sk98lin/h/skgehwt.h --- a/drivers/net/sk98lin/h/skgehwt.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/sk98lin/h/skgehwt.h Thu Jan 15 21:41:54 2004 @@ -1,9 +1,9 @@ /****************************************************************************** * * Name: skhwt.h - * Project: Gigabit Ethernet Adapters, Schedule-Modul - * Version: $Revision: 1.6 $ - * Date: $Date: 2003/05/13 17:57:48 $ + * Project: Gigabit Ethernet Adapters, Event Scheduler Module + * Version: $Revision: 1.7 $ + * Date: $Date: 2003/09/16 12:55:08 $ * Purpose: Defines for the hardware timer functions * ******************************************************************************/ @@ -27,6 +27,9 @@ * History: * * $Log: skgehwt.h,v $ + * Revision 1.7 2003/09/16 12:55:08 rschmidt + * Editorial changes + * * Revision 1.6 2003/05/13 17:57:48 mkarl * Editorial changes. * @@ -34,7 +37,7 @@ * Changed license header to GPL. * * Revision 1.4 1998/08/19 09:50:58 gklug - * fix: remove struct keyword from c-code (see CCC) add typedefs + * fix: remove struct keyword from C-code (see CCC) add typedefs * * Revision 1.3 1998/08/14 07:09:29 gklug * fix: chg pAc -> pAC @@ -44,10 +47,6 @@ * * Revision 1.1 1998/08/07 09:32:58 gklug * first version - * - * - * - * * ******************************************************************************/ @@ -64,14 +63,14 @@ * - use in Adapters context name pAC->Hwt */ typedef struct s_Hwt { - SK_U32 TStart ; /* HWT start */ - SK_U32 TStop ; /* HWT stop */ - int TActive ; /* HWT: flag : active/inactive */ + SK_U32 TStart; /* HWT start */ + SK_U32 TStop; /* HWT stop */ + int TActive; /* HWT: flag : active/inactive */ } SK_HWT; extern void SkHwtInit(SK_AC *pAC, SK_IOC Ioc); extern void SkHwtStart(SK_AC *pAC, SK_IOC Ioc, SK_U32 Time); extern void SkHwtStop(SK_AC *pAC, SK_IOC Ioc); -extern SK_U32 SkHwtRead(SK_AC *pAC,SK_IOC Ioc); +extern SK_U32 SkHwtRead(SK_AC *pAC, SK_IOC Ioc); extern void SkHwtIsr(SK_AC *pAC, SK_IOC Ioc); #endif /* _SKGEHWT_H_ */ diff -Nru a/drivers/net/sk98lin/h/skgei2c.h b/drivers/net/sk98lin/h/skgei2c.h --- a/drivers/net/sk98lin/h/skgei2c.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/sk98lin/h/skgei2c.h Thu Jan 15 21:41:54 2004 @@ -1,16 +1,17 @@ /****************************************************************************** * * Name: skgei2c.h - * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.23 $ - * Date: $Date: 2002/12/19 14:34:27 $ - * Purpose: Special GEnesis defines for TWSI + * Project: Gigabit Ethernet Adapters, TWSI-Module + * Version: $Revision: 1.25 $ + * Date: $Date: 2003/10/20 09:06:05 $ + * Purpose: Special defines for TWSI * ******************************************************************************/ /****************************************************************************** * - * (C)Copyright 1998-2002 SysKonnect GmbH. + * (C)Copyright 1998-2002 SysKonnect. + * (C)Copyright 2002-2003 Marvell. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +27,12 @@ * History: * * $Log: skgei2c.h,v $ + * Revision 1.25 2003/10/20 09:06:05 rschmidt + * Editorial changes. + * + * Revision 1.24 2003/09/23 09:31:15 malthoff + * Parameter dev_size added to macro definition of SK_I2C_CTL. + * * Revision 1.23 2002/12/19 14:34:27 rschmidt * Added cast in macros SK_I2C_SET_BIT() and SK_I2C_CLR_BIT() * Editorial changes (TWSI) @@ -107,8 +114,6 @@ * Revision 1.1 1998/07/17 11:27:56 gklug * Created. * - * - * ******************************************************************************/ /* @@ -121,12 +126,13 @@ /* * Macros to access the B2_I2C_CTRL */ -#define SK_I2C_CTL(IoC, flag, dev, reg, burst) \ +#define SK_I2C_CTL(IoC, flag, dev, dev_size, reg, burst) \ SK_OUT32(IoC, B2_I2C_CTRL,\ (flag ? 0x80000000UL : 0x0L) | \ - (((SK_U32) reg << 16) & I2C_ADDR) | \ - (((SK_U32) dev << 9) & I2C_DEV_SEL) | \ - (( burst << 4) & I2C_BURST_LEN)) + (((SK_U32)reg << 16) & I2C_ADDR) | \ + (((SK_U32)dev << 9) & I2C_DEV_SEL) | \ + (dev_size & I2C_DEV_SIZE) | \ + ((burst << 4) & I2C_BURST_LEN)) #define SK_I2C_STOP(IoC) { \ SK_U32 I2cCtrl; \ @@ -166,42 +172,42 @@ */ #define SK_LM80_VT_LSB 22 /* 22mV LSB resolution */ #define SK_LM80_TEMP_LSB 10 /* 1 degree LSB resolution */ -#define SK_LM80_TEMPEXT_LSB 5 /* 0.5 degree LSB resolution for the - * extension value - */ -#define SK_LM80_FAN_FAKTOR ((22500L*60)/(1*2)) -/* formula: counter = (22500*60)/(rpm * divisor * pulses/2) +#define SK_LM80_TEMPEXT_LSB 5 /* 0.5 degree LSB resolution for ext. val. */ + +/* + * formula: counter = (22500*60)/(rpm * divisor * pulses/2) * assuming: 6500rpm, 4 pulses, divisor 1 */ +#define SK_LM80_FAN_FAKTOR ((22500L*60)/(1*2)) /* * Define sensor management data - * Maximum is reached on copperfield with dual Broadcom. + * Maximum is reached on Genesis copper dual port and Yukon-64 * Board specific maximum is in pAC->I2c.MaxSens */ #define SK_MAX_SENSORS 8 /* maximal no. of installed sensors */ #define SK_MIN_SENSORS 5 /* minimal no. of installed sensors */ /* - * To watch the statemachine (JS) use the timer in two ways instead of one as hitherto + * To watch the state machine (SM) use the timer in two ways + * instead of one as hitherto */ -#define SK_TIMER_WATCH_STATEMACHINE 0 /* Watch the statemachine to finish in a specific time */ -#define SK_TIMER_NEW_GAUGING 1 /* Start a new gauging when timer expires */ - +#define SK_TIMER_WATCH_SM 0 /* Watch the SM to finish in a spec. time */ +#define SK_TIMER_NEW_GAUGING 1 /* Start a new gauging when timer expires */ /* - * Defines for the individual Thresholds + * Defines for the individual thresholds */ /* Temperature sensor */ -#define SK_SEN_TEMP_HIGH_ERR 800 /* Temperature High Err Threshold */ +#define SK_SEN_TEMP_HIGH_ERR 800 /* Temperature High Err Threshold */ #define SK_SEN_TEMP_HIGH_WARN 700 /* Temperature High Warn Threshold */ #define SK_SEN_TEMP_LOW_WARN 100 /* Temperature Low Warn Threshold */ -#define SK_SEN_TEMP_LOW_ERR 0 /* Temperature Low Err Threshold */ +#define SK_SEN_TEMP_LOW_ERR 0 /* Temperature Low Err Threshold */ /* VCC which should be 5 V */ -#define SK_SEN_PCI_5V_HIGH_ERR 5588 /* Voltage PCI High Err Threshold */ -#define SK_SEN_PCI_5V_HIGH_WARN 5346 /* Voltage PCI High Warn Threshold */ +#define SK_SEN_PCI_5V_HIGH_ERR 5588 /* Voltage PCI High Err Threshold */ +#define SK_SEN_PCI_5V_HIGH_WARN 5346 /* Voltage PCI High Warn Threshold */ #define SK_SEN_PCI_5V_LOW_WARN 4664 /* Voltage PCI Low Warn Threshold */ #define SK_SEN_PCI_5V_LOW_ERR 4422 /* Voltage PCI Low Err Threshold */ @@ -229,17 +235,16 @@ #define SK_SEN_PCI_IO_3V3_HIGH_ERR 3850 /* + 15% V PCI-IO High Err Threshold */ #define SK_SEN_PCI_IO_3V3_HIGH_WARN 3674 /* + 10% V PCI-IO High Warn Threshold */ /* 3300 mVolt */ -#define SK_SEN_PCI_IO_3V3_LOW_WARN 2926 /* - 10% V PCI-IO Low Warn Threshold */ -#define SK_SEN_PCI_IO_3V3_LOW_ERR 2772 /* - 15% V PCI-IO Low Err Threshold */ - +#define SK_SEN_PCI_IO_3V3_LOW_WARN 2926 /* - 10% V PCI-IO Low Warn Threshold */ +#define SK_SEN_PCI_IO_3V3_LOW_ERR 2772 /* - 15% V PCI-IO Low Err Threshold */ /* * VDD voltage */ -#define SK_SEN_VDD_HIGH_ERR 3630 /* Voltage ASIC High Err Threshold */ -#define SK_SEN_VDD_HIGH_WARN 3476 /* Voltage ASIC High Warn Threshold */ -#define SK_SEN_VDD_LOW_WARN 3146 /* Voltage ASIC Low Warn Threshold */ -#define SK_SEN_VDD_LOW_ERR 2970 /* Voltage ASIC Low Err Threshold */ +#define SK_SEN_VDD_HIGH_ERR 3630 /* Voltage ASIC High Err Threshold */ +#define SK_SEN_VDD_HIGH_WARN 3476 /* Voltage ASIC High Warn Threshold */ +#define SK_SEN_VDD_LOW_WARN 3146 /* Voltage ASIC Low Warn Threshold */ +#define SK_SEN_VDD_LOW_ERR 2970 /* Voltage ASIC Low Err Threshold */ /* * PHY PLL 3V3 voltage @@ -255,8 +260,8 @@ #define SK_SEN_VAUX_3V3_HIGH_ERR 3630 /* Voltage VAUX High Err Threshold */ #define SK_SEN_VAUX_3V3_HIGH_WARN 3476 /* Voltage VAUX High Warn Threshold */ #define SK_SEN_VAUX_3V3_LOW_WARN 3146 /* Voltage VAUX Low Warn Threshold */ -#define SK_SEN_VAUX_3V3_LOW_ERR 2970 /* Voltage VAUX Low Err Threshold */ -#define SK_SEN_VAUX_0V_WARN_ERR 0 /* if VAUX not present */ +#define SK_SEN_VAUX_3V3_LOW_ERR 2970 /* Voltage VAUX Low Err Threshold */ +#define SK_SEN_VAUX_0V_WARN_ERR 0 /* if VAUX not present */ #define SK_SEN_VAUX_RANGE_LIMITER 1000 /* 1000 mV range delimiter */ /* @@ -270,7 +275,7 @@ /* * ASIC Core 1V5 voltage (YUKON only) */ -#define SK_SEN_CORE_1V5_HIGH_ERR 1650 /* Voltage ASIC Core High Err Threshold */ +#define SK_SEN_CORE_1V5_HIGH_ERR 1650 /* Voltage ASIC Core High Err Threshold */ #define SK_SEN_CORE_1V5_HIGH_WARN 1575 /* Voltage ASIC Core High Warn Threshold */ #define SK_SEN_CORE_1V5_LOW_WARN 1425 /* Voltage ASIC Core Low Warn Threshold */ #define SK_SEN_CORE_1V5_LOW_ERR 1350 /* Voltage ASIC Core Low Err Threshold */ @@ -285,8 +290,8 @@ */ #define SK_SEN_FAN_HIGH_ERR 20000 /* FAN Speed High Err Threshold */ #define SK_SEN_FAN_HIGH_WARN 20000 /* FAN Speed High Warn Threshold */ -#define SK_SEN_FAN_LOW_WARN 5200 /* FAN Speed Low Warn Threshold */ -#define SK_SEN_FAN_LOW_ERR 4550 /* FAN Speed Low Err Threshold */ +#define SK_SEN_FAN_LOW_WARN 5200 /* FAN Speed Low Warn Threshold */ +#define SK_SEN_FAN_LOW_ERR 4550 /* FAN Speed Low Err Threshold */ /* * Some Voltages need dynamic thresholds diff -Nru a/drivers/net/sk98lin/h/skgeinit.h b/drivers/net/sk98lin/h/skgeinit.h --- a/drivers/net/sk98lin/h/skgeinit.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/sk98lin/h/skgeinit.h Thu Jan 15 21:41:54 2004 @@ -2,8 +2,8 @@ * * Name: skgeinit.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.81 $ - * Date: $Date: 2003/07/04 12:30:38 $ + * Version: $Revision: 1.83 $ + * Date: $Date: 2003/09/16 14:07:37 $ * Purpose: Structures and prototypes for the GE Init Module * ******************************************************************************/ @@ -27,6 +27,23 @@ * History: * * $Log: skgeinit.h,v $ + * Revision 1.83 2003/09/16 14:07:37 rschmidt + * Moved defines for PHY power down modes from skgehw.h + * Added prototypes for SkMacClearRst() + * Editorial changes + * + * Revision 1.82 2003/09/16 07:18:36 mschmid + * Added members to port structure for MAC control + * - PMacColThres + * - PMacJamLen + * - PMacJamIpgVal + * - PMacJamIpgData + * - PMacIpgData + * - PMacLimit4 + * Added PHY power state to port structure + * - PPhyPowerState + * Added function prototypes to enter and leave low power modes + * * Revision 1.81 2003/07/04 12:30:38 rschmidt * Added SK_FAR to pointers in MAC statistic functions (for PXE) * Editorial changes @@ -594,6 +611,13 @@ #define SK_PRT_INIT 2 /* the port is initialized */ #define SK_PRT_RUN 3 /* the port has an active link */ +/* PHY power down modes */ +#define PHY_PM_OPERATIONAL_MODE 0 /* PHY operational mode */ +#define PHY_PM_DEEP_SLEEP 1 /* coma mode --> minimal power */ +#define PHY_PM_IEEE_POWER_DOWN 2 /* IEEE 22.2.4.1.5 compl. power down */ +#define PHY_PM_ENERGY_DETECT 3 /* energy detect */ +#define PHY_PM_ENERGY_DETECT_PLUS 4 /* energy detect plus */ + /* Default receive frame limit for Workaround of XMAC Errata */ #define SK_DEF_RX_WA_LIM SK_CONSTU64(100) @@ -685,6 +709,13 @@ SK_U8 PCableLen; /* Cable Length */ SK_U8 PMdiPairLen[4]; /* MDI[0..3] Pair Length */ SK_U8 PMdiPairSts[4]; /* MDI[0..3] Pair Diagnostic Status */ + SK_U8 PPhyPowerState; /* PHY current power state */ + int PMacColThres; /* MAC Collision Threshold */ + int PMacJamLen; /* MAC Jam length */ + int PMacJamIpgVal; /* MAC Jam IPG */ + int PMacJamIpgData; /* MAC IPG Jam to Data */ + int PMacIpgData; /* MAC Data IPG */ + SK_BOOL PMacLimit4; /* reset collision counter and backoff algorithm */ } SK_GEPORT; /* @@ -865,6 +896,11 @@ SK_IOC IoC, int Port); +extern void SkMacClearRst( + SK_AC *pAC, + SK_IOC IoC, + int Port); + extern void SkXmInitMac( SK_AC *pAC, SK_IOC IoC, @@ -1040,6 +1076,17 @@ int Port, SK_BOOL StartTest); +extern int SkGmEnterLowPowerMode( + SK_AC *pAC, + SK_IOC IoC, + int Port, + SK_U8 Mode); + +extern int SkGmLeaveLowPowerMode( + SK_AC *pAC, + SK_IOC IoC, + int Port); + #ifdef SK_DIAG extern void SkGePhyRead( SK_AC *pAC, @@ -1101,6 +1148,7 @@ extern void SkMacRxTxDisable(); extern void SkMacSoftRst(); extern void SkMacHardRst(); +extern void SkMacClearRst(); extern void SkMacInitPhy(); extern int SkMacRxTxEnable(); extern void SkMacPromiscMode(); @@ -1131,6 +1179,8 @@ extern int SkXmOverflowStatus(); extern int SkGmOverflowStatus(); extern int SkGmCableDiagStatus(); +extern int SkGmEnterLowPowerMode(); +extern int SkGmLeaveLowPowerMode(); #ifdef SK_DIAG extern void SkGePhyRead(); diff -Nru a/drivers/net/sk98lin/h/skgepnmi.h b/drivers/net/sk98lin/h/skgepnmi.h --- a/drivers/net/sk98lin/h/skgepnmi.h Thu Jan 15 21:41:53 2004 +++ b/drivers/net/sk98lin/h/skgepnmi.h Thu Jan 15 21:41:53 2004 @@ -2,8 +2,8 @@ * * Name: skgepnmi.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.61 $ - * Date: $Date: 2003/05/23 12:53:52 $ + * Version: $Revision: 1.62 $ + * Date: $Date: 2003/08/15 12:31:52 $ * Purpose: Defines for Private Network Management Interface * ****************************************************************************/ @@ -27,6 +27,18 @@ * History: * * $Log: skgepnmi.h,v $ + * Revision 1.62 2003/08/15 12:31:52 tschilli + * Added new OIDs: + * OID_SKGE_DRIVER_RELDATE + * OID_SKGE_DRIVER_FILENAME + * OID_SKGE_CHIPID + * OID_SKGE_RAMSIZE + * OID_SKGE_VAUXAVAIL + * OID_SKGE_PHY_TYPE + * OID_SKGE_PHY_LP_MODE + * + * Added new define SK_DIAG_ATTACHED for OID_SKGE_DIAG_MODE handling. + * * Revision 1.61 2003/05/23 12:53:52 tschilli * Generic PNMI IOCTL subcommands added. * Function prototype SkPnmiGenIoctl() added. @@ -568,15 +580,23 @@ #define OID_SKGE_ALL_DATA 0xFF020190 /* Defines for VCT. */ -#define OID_SKGE_VCT_GET 0xFF020200 -#define OID_SKGE_VCT_SET 0xFF020201 -#define OID_SKGE_VCT_STATUS 0xFF020202 +#define OID_SKGE_VCT_GET 0xFF020200 +#define OID_SKGE_VCT_SET 0xFF020201 +#define OID_SKGE_VCT_STATUS 0xFF020202 #ifdef SK_DIAG_SUPPORT /* Defines for driver DIAG mode. */ -#define OID_SKGE_DIAG_MODE 0xFF020204 +#define OID_SKGE_DIAG_MODE 0xFF020204 #endif /* SK_DIAG_SUPPORT */ +/* New OIDs */ +#define OID_SKGE_DRIVER_RELDATE 0xFF020210 +#define OID_SKGE_DRIVER_FILENAME 0xFF020211 +#define OID_SKGE_CHIPID 0xFF020212 +#define OID_SKGE_RAMSIZE 0xFF020213 +#define OID_SKGE_VAUXAVAIL 0xFF020214 +#define OID_SKGE_PHY_TYPE 0xFF020215 +#define OID_SKGE_PHY_LP_MODE 0xFF020216 /* VCT struct to store a backup copy of VCT data after a port reset. */ typedef struct s_PnmiVct { @@ -613,6 +633,12 @@ #define OID_SKGE_TRAP_RLMT_PORT_UP 523 #define OID_SKGE_TRAP_RLMT_SEGMENTATION 524 +#ifdef SK_DIAG_SUPPORT +/* Defines for driver DIAG mode. */ +#define SK_DIAG_ATTACHED 2 +#define SK_DIAG_RUNNING 1 +#define SK_DIAG_IDLE 0 +#endif /* SK_DIAG_SUPPORT */ /* * Generic PNMI IOCTL subcommand definitions. @@ -730,6 +756,14 @@ #define SK_PNMI_ERR051MSG "SkPnmiEvent: Port switch suspicious" #define SK_PNMI_ERR052 (SK_ERRBASE_PNMI + 52) #define SK_PNMI_ERR052MSG "" +#define SK_PNMI_ERR053 (SK_ERRBASE_PNMI + 53) +#define SK_PNMI_ERR053MSG "General: Driver release date not initialized" +#define SK_PNMI_ERR054 (SK_ERRBASE_PNMI + 54) +#define SK_PNMI_ERR054MSG "General: Driver release date string too long" +#define SK_PNMI_ERR055 (SK_ERRBASE_PNMI + 55) +#define SK_PNMI_ERR055MSG "General: Driver file name not initialized" +#define SK_PNMI_ERR056 (SK_ERRBASE_PNMI + 56) +#define SK_PNMI_ERR056MSG "General: Driver file name string too long" /* * Management counter macros called by the driver @@ -740,6 +774,11 @@ #define SK_PNMI_SET_DRIVER_VER(pAC,v) ((pAC)->Pnmi.pDriverVersion = \ (char *)(v)) +#define SK_PNMI_SET_DRIVER_RELDATE(pAC,v) ((pAC)->Pnmi.pDriverReleaseDate = \ + (char *)(v)) + +#define SK_PNMI_SET_DRIVER_FILENAME(pAC,v) ((pAC)->Pnmi.pDriverFileName = \ + (char *)(v)) #define SK_PNMI_CNT_TX_QUEUE_LEN(pAC,v,p) \ { \ @@ -916,6 +955,8 @@ char ConfMacFactoryAddr[6]; SK_U8 ConfPMD; SK_U8 ConfConnector; + SK_U32 ConfPhyType; + SK_U32 ConfPhyMode; SK_U8 ConfLinkCapability; SK_U8 ConfLinkMode; SK_U8 ConfLinkModeStatus; @@ -964,9 +1005,14 @@ SK_U32 DeviceType; char DriverDescr[SK_PNMI_STRINGLEN1]; char DriverVersion[SK_PNMI_STRINGLEN2]; + char DriverReleaseDate[SK_PNMI_STRINGLEN1]; + char DriverFileName[SK_PNMI_STRINGLEN1]; char HwDescr[SK_PNMI_STRINGLEN1]; char HwVersion[SK_PNMI_STRINGLEN2]; SK_U16 Chipset; + SK_U32 ChipId; + SK_U8 VauxAvail; + SK_U32 RamSize; SK_U32 MtuSize; SK_U32 Action; SK_U32 TestResult; @@ -1090,6 +1136,8 @@ char *pDriverDescription; char *pDriverVersion; + char *pDriverReleaseDate; + char *pDriverFileName; int MacUpdatedFlag; int RlmtUpdatedFlag; @@ -1119,6 +1167,9 @@ SK_U8 VctStatus[SK_MAX_MACS]; SK_PNMI_VCT VctBackup[SK_MAX_MACS]; SK_PNMI_VCT_TIMER VctTimeout[SK_MAX_MACS]; +#ifdef SK_DIAG_SUPPORT + SK_U32 DiagAttached; +#endif /* SK_DIAG_SUPPORT */ } SK_PNMI; diff -Nru a/drivers/net/sk98lin/h/ski2c.h b/drivers/net/sk98lin/h/ski2c.h --- a/drivers/net/sk98lin/h/ski2c.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/sk98lin/h/ski2c.h Thu Jan 15 21:41:54 2004 @@ -1,16 +1,17 @@ /****************************************************************************** * * Name: ski2c.h - * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.34 $ - * Date: $Date: 2003/01/28 09:11:21 $ + * Project: Gigabit Ethernet Adapters, TWSI-Module + * Version: $Revision: 1.35 $ + * Date: $Date: 2003/10/20 09:06:30 $ * Purpose: Defines to access Voltage and Temperature Sensor * ******************************************************************************/ /****************************************************************************** * - * (C)Copyright 1998-2003 SysKonnect GmbH. + * (C)Copyright 1998-2002 SysKonnect. + * (C)Copyright 2002-2003 Marvell. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +27,10 @@ * History: * * $Log: ski2c.h,v $ + * Revision 1.35 2003/10/20 09:06:30 rschmidt + * Added prototypes for SkI2cRead() and SkI2cWrite(). + * Editorial changes. + * * Revision 1.34 2003/01/28 09:11:21 rschmidt * Editorial changes * @@ -137,7 +142,6 @@ * Revision 1.1 1998/06/19 14:30:10 malthoff * Created. Sources taken from ML Project. * - * ******************************************************************************/ /* @@ -252,7 +256,7 @@ SK_I32 SenThreWarnLow; /* Lower warning Threshold of the sensor */ int SenErrFlag; /* Sensor indicated an error */ SK_BOOL SenInit; /* Is sensor initialized ? */ - SK_U64 SenErrCts; /* Error trap counter */ + SK_U64 SenErrCts; /* Error trap counter */ SK_U64 SenWarnCts; /* Warning trap counter */ SK_U64 SenBegErrTS; /* Begin error timestamp */ SK_U64 SenBegWarnTS; /* Begin warning timestamp */ @@ -279,13 +283,17 @@ #endif /* !SK_DIAG */ } SK_I2C; +extern int SkI2cInit(SK_AC *pAC, SK_IOC IoC, int Level); +extern int SkI2cWrite(SK_AC *pAC, SK_IOC IoC, SK_U32 Data, int Dev, int Size, + int Reg, int Burst); extern int SkI2cReadSensor(SK_AC *pAC, SK_IOC IoC, SK_SENSOR *pSen); -#ifndef SK_DIAG +#ifdef SK_DIAG +extern SK_U32 SkI2cRead(SK_AC *pAC, SK_IOC IoC, int Dev, int Size, int Reg, + int Burst); +#else /* !SK_DIAG */ extern int SkI2cEvent(SK_AC *pAC, SK_IOC IoC, SK_U32 Event, SK_EVPARA Para); -extern int SkI2cInit(SK_AC *pAC, SK_IOC IoC, int Level); extern void SkI2cWaitIrq(SK_AC *pAC, SK_IOC IoC); extern void SkI2cIsr(SK_AC *pAC, SK_IOC IoC); - -#endif +#endif /* !SK_DIAG */ #endif /* n_SKI2C_H */ diff -Nru a/drivers/net/sk98lin/h/skqueue.h b/drivers/net/sk98lin/h/skqueue.h --- a/drivers/net/sk98lin/h/skqueue.h Thu Jan 15 21:41:55 2004 +++ b/drivers/net/sk98lin/h/skqueue.h Thu Jan 15 21:41:55 2004 @@ -1,9 +1,9 @@ /****************************************************************************** * * Name: skqueue.h - * Project: Gigabit Ethernet Adapters, Schedule-Modul - * Version: $Revision: 1.15 $ - * Date: $Date: 2003/05/13 17:54:57 $ + * Project: Gigabit Ethernet Adapters, Event Scheduler Module + * Version: $Revision: 1.16 $ + * Date: $Date: 2003/09/16 12:50:32 $ * Purpose: Defines for the Event queue * ******************************************************************************/ @@ -27,6 +27,9 @@ * History: * * $Log: skqueue.h,v $ + * Revision 1.16 2003/09/16 12:50:32 rschmidt + * Editorial changes + * * Revision 1.15 2003/05/13 17:54:57 mkarl * Editorial changes. * @@ -47,7 +50,7 @@ * add: typedef SK_QUEUE * * Revision 1.9 1998/08/19 09:50:59 gklug - * fix: remove struct keyword from c-code (see CCC) add typedefs + * fix: remove struct keyword from C-code (see CCC) add typedefs * * Revision 1.8 1998/08/18 07:00:01 gklug * fix: SK_PTR not defined use void * instead. @@ -74,8 +77,6 @@ * Revision 1.1 1998/07/30 14:52:12 gklug * Initial version. * Defines Event Classes, Event structs and queue management variables. - * - * * ******************************************************************************/ @@ -92,7 +93,7 @@ */ #define SKGE_DRV 1 /* Driver Event Class */ #define SKGE_RLMT 2 /* RLMT Event Class */ -#define SKGE_I2C 3 /* i2C Event Class */ +#define SKGE_I2C 3 /* I2C Event Class */ #define SKGE_PNMI 4 /* PNMI Event Class */ #define SKGE_CSUM 5 /* Checksum Event Class */ #define SKGE_HWAC 6 /* Hardware Access Event Class */ @@ -121,25 +122,25 @@ * Event Queue * skqueue.c * events are class/value pairs - * class is addressee, e.g. RMT, PCM etc. + * class is addressee, e.g. RLMT, PNMI etc. * value is command, e.g. line state change, ring op change etc. */ typedef struct s_EventElem { - SK_U32 Class ; /* Event class */ - SK_U32 Event ; /* Event value */ - SK_EVPARA Para ; /* Event parameter */ + SK_U32 Class; /* Event class */ + SK_U32 Event; /* Event value */ + SK_EVPARA Para; /* Event parameter */ } SK_EVENTELEM; typedef struct s_Queue { SK_EVENTELEM EvQueue[SK_MAX_EVENT]; - SK_EVENTELEM *EvPut ; - SK_EVENTELEM *EvGet ; + SK_EVENTELEM *EvPut; + SK_EVENTELEM *EvGet; } SK_QUEUE; extern void SkEventInit(SK_AC *pAC, SK_IOC Ioc, int Level); extern void SkEventQueue(SK_AC *pAC, SK_U32 Class, SK_U32 Event, SK_EVPARA Para); -extern int SkEventDispatcher(SK_AC *pAC,SK_IOC Ioc); +extern int SkEventDispatcher(SK_AC *pAC, SK_IOC Ioc); /* Define Error Numbers and messages */ diff -Nru a/drivers/net/sk98lin/h/sktimer.h b/drivers/net/sk98lin/h/sktimer.h --- a/drivers/net/sk98lin/h/sktimer.h Thu Jan 15 21:41:53 2004 +++ b/drivers/net/sk98lin/h/sktimer.h Thu Jan 15 21:41:53 2004 @@ -1,9 +1,9 @@ /****************************************************************************** * * Name: sktimer.h - * Project: Gigabit Ethernet Adapters, Schedule-Modul - * Version: $Revision: 1.10 $ - * Date: $Date: 2003/05/13 17:56:44 $ + * Project: Gigabit Ethernet Adapters, Event Scheduler Module + * Version: $Revision: 1.11 $ + * Date: $Date: 2003/09/16 12:58:18 $ * Purpose: Defines for the timer functions * ******************************************************************************/ @@ -27,6 +27,9 @@ * History: * * $Log: sktimer.h,v $ + * Revision 1.11 2003/09/16 12:58:18 rschmidt + * Editorial changes + * * Revision 1.10 2003/05/13 17:56:44 mkarl * Editorial changes. * @@ -40,7 +43,7 @@ * fix: SK_TIMCTRL needs to be defined * * Revision 1.6 1998/08/19 09:51:00 gklug - * fix: remove struct keyword from c-code (see CCC) add typedefs + * fix: remove struct keyword from C-code (see CCC) add typedefs * * Revision 1.5 1998/08/17 13:43:21 gklug * chg: Parameter will be union of 64bit para, 2 times SK_U32 or SK_PTR @@ -78,25 +81,25 @@ typedef struct s_Timer SK_TIMER; struct s_Timer { - SK_TIMER *TmNext ; /* linked list */ - SK_U32 TmClass ; /* Timer Event class */ - SK_U32 TmEvent ; /* Timer Event value */ - SK_EVPARA TmPara ; /* Timer Event parameter */ - SK_U32 TmDelta ; /* delta time */ - int TmActive ; /* flag : active/inactive */ -} ; + SK_TIMER *TmNext; /* linked list */ + SK_U32 TmClass; /* Timer Event class */ + SK_U32 TmEvent; /* Timer Event value */ + SK_EVPARA TmPara; /* Timer Event parameter */ + SK_U32 TmDelta; /* delta time */ + int TmActive; /* flag: active/inactive */ +}; /* * Timer control struct. * - use in Adapters context name pAC->Tim */ typedef struct s_TimCtrl { - SK_TIMER *StQueue ; /* Head of Timer queue */ -} SK_TIMCTRL ; + SK_TIMER *StQueue; /* Head of Timer queue */ +} SK_TIMCTRL; -extern void SkTimerInit(SK_AC *pAC,SK_IOC Ioc, int Level); -extern void SkTimerStop(SK_AC *pAC,SK_IOC Ioc,SK_TIMER *pTimer); -extern void SkTimerStart(SK_AC *pAC,SK_IOC Ioc,SK_TIMER *pTimer, - SK_U32 Time,SK_U32 Class,SK_U32 Event,SK_EVPARA Para); -extern void SkTimerDone(SK_AC *pAC,SK_IOC Ioc); +extern void SkTimerInit(SK_AC *pAC, SK_IOC Ioc, int Level); +extern void SkTimerStop(SK_AC *pAC, SK_IOC Ioc, SK_TIMER *pTimer); +extern void SkTimerStart(SK_AC *pAC, SK_IOC Ioc, SK_TIMER *pTimer, + SK_U32 Time, SK_U32 Class, SK_U32 Event, SK_EVPARA Para); +extern void SkTimerDone(SK_AC *pAC, SK_IOC Ioc); #endif /* _SKTIMER_H_ */ diff -Nru a/drivers/net/sk98lin/h/sktypes.h b/drivers/net/sk98lin/h/sktypes.h --- a/drivers/net/sk98lin/h/sktypes.h Thu Jan 15 21:41:55 2004 +++ b/drivers/net/sk98lin/h/sktypes.h Thu Jan 15 21:41:55 2004 @@ -2,15 +2,16 @@ * * Name: sktypes.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.1 $ - * Date: $Date: 2003/07/21 07:26:01 $ + * Version: $Revision: 1.2 $ + * Date: $Date: 2003/10/07 08:16:51 $ * Purpose: Define data types for Linux * ******************************************************************************/ /****************************************************************************** * - * (C)Copyright 1998-2003 SysKonnect GmbH. + * (C)Copyright 1998-2002 SysKonnect GmbH. + * (C)Copyright 2002-2003 Marvell. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +27,9 @@ * History: * * $Log: sktypes.h,v $ + * Revision 1.2 2003/10/07 08:16:51 mlindner + * Fix: Copyright changes + * * Revision 1.1 2003/07/21 07:26:01 rroesler * Fix: Re-Enter after CVS crash * diff -Nru a/drivers/net/sk98lin/h/skversion.h b/drivers/net/sk98lin/h/skversion.h --- a/drivers/net/sk98lin/h/skversion.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/sk98lin/h/skversion.h Thu Jan 15 21:41:54 2004 @@ -2,15 +2,16 @@ * * Name: version.h * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.3 $ - * Date: $Date: 2003/08/25 13:34:48 $ + * Version: $Revision: 1.5 $ + * Date: $Date: 2003/10/07 08:16:51 $ * Purpose: SK specific Error log support * ******************************************************************************/ /****************************************************************************** * - * (C)Copyright 1998-2003 SysKonnect GmbH. + * (C)Copyright 1998-2002 SysKonnect GmbH. + * (C)Copyright 2002-2003 Marvell. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,6 +26,12 @@ * * History: * $Log: skversion.h,v $ + * Revision 1.5 2003/10/07 08:16:51 mlindner + * Fix: Copyright changes + * + * Revision 1.4 2003/09/22 08:40:10 mlindner + * Add: Added DRIVER_FILE_NAME and DRIVER_REL_DATE + * * Revision 1.3 2003/08/25 13:34:48 mlindner * Fix: Lint changes * @@ -54,12 +61,14 @@ #ifdef lint static const char SysKonnectFileId[] = "@(#) (C) SysKonnect GmbH."; static const char SysKonnectBuildNumber[] = - "@(#)SK-BUILD: 6.18 PL: 01"; + "@(#)SK-BUILD: 6.21 PL: 01"; #endif /* !defined(lint) */ -#define BOOT_STRING "sk98lin: Network Device Driver v6.18\n" \ +#define BOOT_STRING "sk98lin: Network Device Driver v6.21\n" \ "(C)Copyright 1999-2003 Marvell(R)." -#define VER_STRING "6.18" +#define VER_STRING "6.21" +#define DRIVER_FILE_NAME "sk98lin" +#define DRIVER_REL_DATE "Dec-15-2003" diff -Nru a/drivers/net/sk98lin/h/xmac_ii.h b/drivers/net/sk98lin/h/xmac_ii.h --- a/drivers/net/sk98lin/h/xmac_ii.h Thu Jan 15 21:41:54 2004 +++ b/drivers/net/sk98lin/h/xmac_ii.h Thu Jan 15 21:41:54 2004 @@ -2,8 +2,8 @@ * * Name: xmac_ii.h * Project: Gigabit Ethernet Adapters, Common Modules - * Version: $Revision: 1.48 $ - * Date: $Date: 2003/05/13 17:17:55 $ + * Version: $Revision: 1.52 $ + * Date: $Date: 2003/10/02 16:35:50 $ * Purpose: Defines and Macros for Gigabit Ethernet Controller * ******************************************************************************/ @@ -27,6 +27,22 @@ * History: * * $Log: xmac_ii.h,v $ + * Revision 1.52 2003/10/02 16:35:50 rschmidt + * Added defines for default values of GMAC parameters + * Changed defines for setting GMAC parameters + * Editorial changes + * + * Revision 1.51 2003/09/23 09:04:27 malthoff + * Add bit definitions for PHY_MARV_EXT_P_STAT. + * + * Revision 1.50 2003/09/16 14:15:07 rschmidt + * Added defines for Extended PHY Specific Control + * Editorial changes + * + * Revision 1.49 2003/09/16 07:22:46 mschmid + * Added defines for Marvell PHY energy detect modes + * Added macros for MAC parameter setting in port structure + * * Revision 1.48 2003/05/13 17:17:55 mkarl * Editorial changes. * @@ -676,7 +692,7 @@ #define PHY_XMAC_AUNE_LP 0x05 /* 16 bit r/o Link Partner Abi Reg */ #define PHY_XMAC_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */ #define PHY_XMAC_NEPG 0x07 /* 16 bit r/w Next Page Register */ -#define PHY_XMAC_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */ +#define PHY_XMAC_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner */ /* 0x09 - 0x0e: reserved */ #define PHY_XMAC_EXT_STAT 0x0f /* 16 bit r/o Ext Status Register */ #define PHY_XMAC_RES_ABI 0x10 /* 16 bit r/o PHY Resolved Ability */ @@ -693,7 +709,7 @@ #define PHY_BCOM_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */ #define PHY_BCOM_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */ #define PHY_BCOM_NEPG 0x07 /* 16 bit r/w Next Page Register */ -#define PHY_BCOM_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */ +#define PHY_BCOM_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner */ /* Broadcom-specific registers */ #define PHY_BCOM_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Ctrl Reg */ #define PHY_BCOM_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */ @@ -702,7 +718,7 @@ #define PHY_BCOM_P_EXT_CTRL 0x10 /* 16 bit r/w PHY Extended Ctrl Reg */ #define PHY_BCOM_P_EXT_STAT 0x11 /* 16 bit r/o PHY Extended Stat Reg */ #define PHY_BCOM_RE_CTR 0x12 /* 16 bit r/w Receive Error Counter */ -#define PHY_BCOM_FC_CTR 0x13 /* 16 bit r/w False Carr Sense Cnt */ +#define PHY_BCOM_FC_CTR 0x13 /* 16 bit r/w False Carrier Sense Cnt */ #define PHY_BCOM_RNO_CTR 0x14 /* 16 bit r/w Receiver NOT_OK Cnt */ /* 0x15 - 0x17: reserved */ #define PHY_BCOM_AUX_CTRL 0x18 /* 16 bit r/w Auxiliary Control Reg */ @@ -724,7 +740,7 @@ #define PHY_MARV_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */ #define PHY_MARV_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */ #define PHY_MARV_NEPG 0x07 /* 16 bit r/w Next Page Register */ -#define PHY_MARV_NEPG_LP 0x08 /* 16 bit r/o Next Page Link P Reg */ +#define PHY_MARV_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner */ /* Marvel-specific registers */ #define PHY_MARV_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Ctrl Reg */ #define PHY_MARV_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */ @@ -757,7 +773,7 @@ #define PHY_LONE_AUNE_LP 0x05 /* 16 bit r/o Link Part Ability Reg */ #define PHY_LONE_AUNE_EXP 0x06 /* 16 bit r/o Auto-Neg. Expansion Reg */ #define PHY_LONE_NEPG 0x07 /* 16 bit r/w Next Page Register */ -#define PHY_LONE_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner*/ +#define PHY_LONE_NEPG_LP 0x08 /* 16 bit r/o Next Page Link Partner */ /* Level One-specific registers */ #define PHY_LONE_1000T_CTRL 0x09 /* 16 bit r/w 1000Base-T Control Reg*/ #define PHY_LONE_1000T_STAT 0x0a /* 16 bit r/o 1000Base-T Status Reg */ @@ -804,12 +820,13 @@ /* * PHY bit definitions * Bits defined as PHY_X_..., PHY_B_..., PHY_L_... or PHY_N_... are - * Xmac/Broadcom/LevelOne/National-specific. + * XMAC/Broadcom/LevelOne/National/Marvell-specific. * All other are general. */ /***** PHY_XMAC_CTRL 16 bit r/w PHY Control Register *****/ /***** PHY_BCOM_CTRL 16 bit r/w PHY Control Register *****/ +/***** PHY_MARV_CTRL 16 bit r/w PHY Status Register *****/ /***** PHY_LONE_CTRL 16 bit r/w PHY Control Register *****/ #define PHY_CT_RESET (1<<15) /* Bit 15: (sc) clear all PHY related regs */ #define PHY_CT_LOOP (1<<14) /* Bit 14: enable Loopback over PHY */ @@ -909,27 +926,20 @@ /***** PHY_XMAC_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/ /* Bit 15..4: reserved */ -#define PHY_AN_LP_NP (1<<3) /* Bit 3: Link Partner can Next Page */ -#define PHY_AN_LOC_NP (1<<2) /* Bit 2: Local PHY can Next Page */ -#define PHY_AN_RX_PG (1<<1) /* Bit 1: Page Received */ +#define PHY_ANE_LP_NP (1<<3) /* Bit 3: Link Partner can Next Page */ +#define PHY_ANE_LOC_NP (1<<2) /* Bit 2: Local PHY can Next Page */ +#define PHY_ANE_RX_PG (1<<1) /* Bit 1: Page Received */ /* Bit 0: reserved */ /***** PHY_BCOM_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/ - /* Bit 15..5: reserved */ -#define PHY_B_AN_PDF (1<<4) /* Bit 4: Parallel Detection Fault */ -/* PHY_AN_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */ -/* PHY_AN_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */ -/* PHY_AN_RX_PG (see XMAC) Bit 1: Page Received */ -#define PHY_B_AN_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */ - /***** PHY_LONE_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/ -#define PHY_L_AN_BP (1<<5) /* Bit 5: Base Page Indication */ -#define PHY_L_AN_PDF (1<<4) /* Bit 4: Parallel Detection Fault */ -/* PHY_AN_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */ -/* PHY_AN_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */ -/* PHY_AN_RX_PG (see XMAC) Bit 1: Page Received */ -#define PHY_B_AN_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */ - +/***** PHY_MARV_AUNE_EXP 16 bit r/o Auto-Negotiation Expansion Reg *****/ + /* Bit 15..5: reserved */ +#define PHY_ANE_PAR_DF (1<<4) /* Bit 4: Parallel Detection Fault */ +/* PHY_ANE_LP_NP (see XMAC) Bit 3: Link Partner can Next Page */ +/* PHY_ANE_LOC_NP (see XMAC) Bit 2: Local PHY can Next Page */ +/* PHY_ANE_RX_PG (see XMAC) Bit 1: Page Received */ +#define PHY_ANE_LP_CAP (1<<0) /* Bit 0: Link Partner Auto-Neg. Cap. */ /***** PHY_XMAC_NEPG 16 bit r/w Next Page Register *****/ /***** PHY_BCOM_NEPG 16 bit r/w Next Page Register *****/ @@ -958,7 +968,7 @@ #define PHY_X_RS_HD (1<<6) /* Bit 6: Half Duplex Mode selected */ #define PHY_X_RS_FD (1<<5) /* Bit 5: Full Duplex Mode selected */ #define PHY_X_RS_ABLMIS (1<<4) /* Bit 4: duplex or pause cap mismatch */ -#define PHY_X_RS_PAUMIS (1<<3) /* Bit 3: pause capability missmatch */ +#define PHY_X_RS_PAUMIS (1<<3) /* Bit 3: pause capability mismatch */ /* Bit 2..0: reserved */ /* * Remote Fault Bits (PHY_X_AN_RFB) encoding @@ -990,6 +1000,7 @@ /* Bit 7..0: reserved */ /***** PHY_BCOM_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/ +/***** PHY_MARV_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/ #define PHY_B_1000S_MSF (1<<15) /* Bit 15: Master/Slave Fault */ #define PHY_B_1000S_MSR (1<<14) /* Bit 14: Master/Slave Result */ #define PHY_B_1000S_LRS (1<<13) /* Bit 13: Local Receiver Status */ @@ -1309,7 +1320,6 @@ /* Bit 7..0: reserved */ /***** PHY_MARV_PHY_CTRL 16 bit r/w PHY Specific Ctrl Reg *****/ - #define PHY_M_PC_TX_FFD_MSK (3<<14) /* Bit 15..14: Tx FIFO Depth Mask */ #define PHY_M_PC_RX_FFD_MSK (3<<12) /* Bit 13..12: Rx FIFO Depth Mask */ #define PHY_M_PC_ASS_CRS_TX (1<<11) /* Bit 11: Assert CRS on Transmit */ @@ -1323,6 +1333,9 @@ #define PHY_M_PC_POL_R_DIS (1<<1) /* Bit 1: Polarity Reversal Disabled */ #define PHY_M_PC_DIS_JABBER (1<<0) /* Bit 0: Disable Jabber */ +#define PHY_M_PC_EN_DET SHIFT8(2) /* Energy Detect (Mode 1) */ +#define PHY_M_PC_EN_DET_PLUS SHIFT8(3) /* Energy Detect Plus (Mode 2) */ + #define PHY_M_PC_MDI_XMODE(x) SHIFT5(x) #define PHY_M_PC_MAN_MDI 0 /* 00 = Manual MDI configuration */ #define PHY_M_PC_MAN_MDIX 1 /* 01 = Manual MDIX configuration */ @@ -1373,6 +1386,7 @@ #define PHY_M_EC_M_DSC_MSK (3<<10) /* Bit 11..10: Master downshift counter */ #define PHY_M_EC_S_DSC_MSK (3<<8) /* Bit 9.. 8: Slave downshift counter */ #define PHY_M_EC_MAC_S_MSK (7<<4) /* Bit 6.. 4: Def. MAC interface speed */ +#define PHY_M_EC_FIB_AN_ENA (1<<3) /* Bit 3: Fiber Auto-Neg. Enable */ #define PHY_M_EC_M_DSC(x) SHIFT10(x) /* 00=1x; 01=2x; 10=3x; 11=4x */ #define PHY_M_EC_S_DSC(x) SHIFT8(x) /* 00=dis; 01=1x; 10=2x; 11=3x */ @@ -1434,6 +1448,18 @@ #define PHY_M_EC2_FO_BOOST (1<<3) /* Bit 3: Fiber Output Boost */ #define PHY_M_EC2_FO_AM_MSK 7 /* Bit 2.. 0: Fiber Output Amplitude */ +/***** PHY_MARV_EXT_P_STAT 16 bit r/w Ext. PHY Specific Status *****/ +#define PHY_M_FC_AUTO_SEL (1<<15) /* Bit 15: Fiber/Copper Auto Sel. dis. */ +#define PHY_M_FC_AN_REG_ACC (1<<14) /* Bit 14: Fiber/Copper Autoneg. reg acc */ +#define PHY_M_FC_RESULUTION (1<<13) /* Bit 13: Fiber/Copper Resulution */ +#define PHY_M_SER_IF_AN_BP (1<<12) /* Bit 12: Ser IF autoneg. bypass enable */ +#define PHY_M_SER_IF_BP_ST (1<<11) /* Bit 11: Ser IF autoneg. bypass status */ +#define PHY_M_IRQ_POLARITY (1<<10) /* Bit 10: IRQ polarity */ + /* Bit 9..4: reserved */ +#define PHY_M_UNDOC1 (1<< 7) /* undocumented bit !! */ +#define PHY_M_MODE_MASK (0xf<<0)/* Bit 3..0: copy of HWCFG MODE[3:0] */ + + /***** PHY_MARV_CABLE_DIAG 16 bit r/o Cable Diagnostic Reg *****/ #define PHY_M_CABD_ENA_TEST (1<<15) /* Bit 15: Enable Test */ #define PHY_M_CABD_STAT_MSK (3<<13) /* Bit 14..13: Status */ @@ -1531,7 +1557,7 @@ #define GM_RXF_SHT \ (GM_MIB_CNT_BASE + 80) /* Frames <64 Byte Received OK */ #define GM_RXE_FRAG \ - (GM_MIB_CNT_BASE + 88) /* Frames <64 Byte Receeived with FCS Err */ + (GM_MIB_CNT_BASE + 88) /* Frames <64 Byte Received with FCS Err */ #define GM_RXF_64B \ (GM_MIB_CNT_BASE + 96) /* 64 Byte Rx Frame */ #define GM_RXF_127B \ @@ -1606,7 +1632,6 @@ */ /* GM_GP_STAT 16 bit r/o General Purpose Status Register */ - #define GM_GPSR_SPEED (1<<15) /* Bit 15: Port Speed (1 = 100 Mbps) */ #define GM_GPSR_DUPLEX (1<<14) /* Bit 14: Duplex Mode (1 = Full) */ #define GM_GPSR_FC_TX_DIS (1<<13) /* Bit 13: Tx Flow-Control Mode Disabled */ @@ -1646,11 +1671,14 @@ GM_GPCR_AU_SPD_DIS) /* GM_TX_CTRL 16 bit r/w Transmit Control Register */ - #define GM_TXCR_FORCE_JAM (1<<15) /* Bit 15: Force Jam / Flow-Control */ #define GM_TXCR_CRC_DIS (1<<14) /* Bit 14: Disable insertion of CRC */ #define GM_TXCR_PAD_DIS (1<<13) /* Bit 13: Disable padding of packets */ -#define GM_TXCR_COL_THR (4<<10) /* Bit 12..10: Collision Threshold */ +#define GM_TXCR_COL_THR_MSK (1<<10) /* Bit 12..10: Collision Threshold */ + +#define TX_COL_THR(x) (SHIFT10(x) & GM_TXCR_COL_THR_MSK) + +#define TX_COL_DEF 0x04 /* GM_RX_CTRL 16 bit r/w Receive Control Register */ #define GM_RXCR_UCF_ENA (1<<15) /* Bit 15: Enable Unicast filtering */ @@ -1663,35 +1691,41 @@ #define GM_TXPA_JAMIPG_MSK (0x1f<<9) /* Bit 13..9: Jam IPG */ #define GM_TXPA_JAMDAT_MSK (0x1f<<4) /* Bit 8..4: IPG Jam to Data */ /* Bit 3..0: reserved */ -#define JAM_LEN_VAL(x) SHIFT14(x) -#define JAM_IPG_VAL(x) SHIFT9(x) -#define IPG_JAM_DATA(x) SHIFT4(x) + +#define TX_JAM_LEN_VAL(x) (SHIFT14(x) & GM_TXPA_JAMLEN_MSK) +#define TX_JAM_IPG_VAL(x) (SHIFT9(x) & GM_TXPA_JAMIPG_MSK) +#define TX_IPG_JAM_DATA(x) (SHIFT4(x) & GM_TXPA_JAMDAT_MSK) + +#define TX_JAM_LEN_DEF 0x03 +#define TX_JAM_IPG_DEF 0x0b +#define TX_IPG_JAM_DEF 0x1c /* GM_SERIAL_MODE 16 bit r/w Serial Mode Register */ -#define GM_SMOD_DATABL_MSK (0x1f<<11) /* Bit 15..11: Data Blinder */ +#define GM_SMOD_DATABL_MSK (0x1f<<11) /* Bit 15..11: Data Blinder (r/o) */ #define GM_SMOD_LIMIT_4 (1<<10) /* Bit 10: 4 consecutive Tx trials */ #define GM_SMOD_VLAN_ENA (1<<9) /* Bit 9: Enable VLAN (Max. Frame Len) */ #define GM_SMOD_JUMBO_ENA (1<<8) /* Bit 8: Enable Jumbo (Max. Frame Len) */ /* Bit 7..5: reserved */ #define GM_SMOD_IPG_MSK 0x1f /* Bit 4..0: Inter-Packet Gap (IPG) */ -#define DATA_BLIND_VAL(x) SHIFT11(x) -#define DATA_BLIND_FAST_ETH 0x1c -#define DATA_BLIND_GIGABIT 4 +#define DATA_BLIND_VAL(x) (SHIFT11(x) & GM_SMOD_DATABL_MSK) +#define DATA_BLIND_DEF 0x04 -#define IPG_VAL_FAST_ETH 0x1e -#define IPG_VAL_GIGABIT 6 +#define IPG_DATA_VAL(x) (x & GM_SMOD_IPG_MSK) +#define IPG_DATA_DEF 0x1e /* GM_SMI_CTRL 16 bit r/w SMI Control Register */ - -#define GM_SMI_CT_PHY_AD(x) SHIFT11(x) -#define GM_SMI_CT_REG_AD(x) SHIFT6(x) +#define GM_SMI_CT_PHY_A_MSK (0x1f<<11) /* Bit 15..11: PHY Device Address */ +#define GM_SMI_CT_REG_A_MSK (0x1f<<6) /* Bit 10.. 6: PHY Register Address */ #define GM_SMI_CT_OP_RD (1<<5) /* Bit 5: OpCode Read (0=Write)*/ #define GM_SMI_CT_RD_VAL (1<<4) /* Bit 4: Read Valid (Read completed) */ #define GM_SMI_CT_BUSY (1<<3) /* Bit 3: Busy (Operation in progress) */ /* Bit 2..0: reserved */ -/* GM_PHY_ADDR 16 bit r/w GPHY Address Register */ +#define GM_SMI_CT_PHY_AD(x) (SHIFT11(x) & GM_SMI_CT_PHY_A_MSK) +#define GM_SMI_CT_REG_AD(x) (SHIFT6(x) & GM_SMI_CT_REG_A_MSK) + + /* GM_PHY_ADDR 16 bit r/w GPHY Address Register */ /* Bit 15..6: reserved */ #define GM_PAR_MIB_CLR (1<<5) /* Bit 5: Set MIB Clear Counter Mode */ #define GM_PAR_MIB_TST (1<<4) /* Bit 4: MIB Load Counter (Test Mode) */ diff -Nru a/drivers/net/sk98lin/skcsum.c b/drivers/net/sk98lin/skcsum.c --- a/drivers/net/sk98lin/skcsum.c Thu Jan 15 21:41:53 2004 +++ b/drivers/net/sk98lin/skcsum.c Thu Jan 15 21:41:53 2004 @@ -2,8 +2,8 @@ * * Name: skcsum.c * Project: GEnesis, PCI Gigabit Ethernet Adapter - * Version: $Revision: 1.11 $ - * Date: $Date: 2003/03/11 14:05:55 $ + * Version: $Revision: 1.12 $ + * Date: $Date: 2003/08/20 13:55:53 $ * Purpose: Store/verify Internet checksum in send/receive packets. * ******************************************************************************/ @@ -26,6 +26,10 @@ * History: * * $Log: skcsum.c,v $ + * Revision 1.12 2003/08/20 13:55:5