kgdb --- diff/MAINTAINERS 2003-10-27 09:20:43.000000000 +0000 +++ source/MAINTAINERS 2003-10-29 11:19:22.000000000 +0000 @@ -1155,6 +1155,12 @@ W: http://developer.osdl.org/rddunlap/kj-patches/ S: Maintained +KGDB FOR I386 PLATFORM +P: George Anzinger +M: george@mvista.com +L: linux-net@vger.kernel.org +S: Supported + KERNEL NFSD P: Neil Brown M: neilb@cse.unsw.edu.au --- diff/arch/i386/Kconfig 2003-10-09 09:47:33.000000000 +0100 +++ source/arch/i386/Kconfig 2003-10-29 11:19:22.000000000 +0000 @@ -1209,14 +1209,195 @@ If you say Y here, various routines which may sleep will become very noisy if they are called with a spinlock held. +config KGDB + bool "Include kgdb kernel debugger" + depends on DEBUG_KERNEL + help + If you say Y here, the system will be compiled with the debug + option (-g) and a debugging stub will be included in the + kernel. This stub communicates with gdb on another (host) + computer via a serial port. The host computer should have + access to the kernel binary file (vmlinux) and a serial port + that is connected to the target machine. Gdb can be made to + configure the serial port or you can use stty and setserial to + do this. See the 'target' command in gdb. This option also + configures in the ability to request a breakpoint early in the + boot process. To request the breakpoint just include 'kgdb' + as a boot option when booting the target machine. The system + will then break as soon as it looks at the boot options. This + option also installs a breakpoint in panic and sends any + kernel faults to the debugger. For more information see the + Documentation/i386/kgdb.txt file. + +choice + depends on KGDB + prompt "Debug serial port BAUD" + default KGDB_115200BAUD + help + Gdb and the kernel stub need to agree on the baud rate to be + used. Some systems (x86 family at this writing) allow this to + be configured. + +config KGDB_9600BAUD + bool "9600" + +config KGDB_19200BAUD + bool "19200" + +config KGDB_38400BAUD + bool "38400" + +config KGDB_57600BAUD + bool "57600" + +config KGDB_115200BAUD + bool "115200" +endchoice + +config KGDB_PORT + hex "hex I/O port address of the debug serial port" + depends on KGDB + default 3f8 + help + Some systems (x86 family at this writing) allow the port + address to be configured. The number entered is assumed to be + hex, don't put 0x in front of it. The standard address are: + COM1 3f8 , irq 4 and COM2 2f8 irq 3. Setserial /dev/ttySx + will tell you what you have. It is good to test the serial + connection with a live system before trying to debug. + +config KGDB_IRQ + int "IRQ of the debug serial port" + depends on KGDB + default 4 + help + This is the irq for the debug port. If everything is working + correctly and the kernel has interrupts on a control C to the + port should cause a break into the kernel debug stub. + +config DEBUG_INFO + bool + depends on KGDB + default y + +config KGDB_MORE + bool "Add any additional compile options" + depends on KGDB + default n + help + Saying yes here turns on the ability to enter additional + compile options. + + +config KGDB_OPTIONS + depends on KGDB_MORE + string "Additional compile arguments" + default "-O1" + help + This option allows you enter additional compile options for + the whole kernel compile. Each platform will have a default + that seems right for it. For example on PPC "-ggdb -O1", and + for i386 "-O1". Note that by configuring KGDB "-g" is already + turned on. In addition, on i386 platforms + "-fomit-frame-pointer" is deleted from the standard compile + options. + +config NO_KGDB_CPUS + int "Number of CPUs" + depends on KGDB && SMP + default NR_CPUS + help + + This option sets the number of cpus for kgdb ONLY. It is used + to prune some internal structures so they look "nice" when + displayed with gdb. This is to overcome possibly larger + numbers that may have been entered above. Enter the real + number to get nice clean kgdb_info displays. + +config KGDB_TS + bool "Enable kgdb time stamp macros?" + depends on KGDB + default n + help + Kgdb event macros allow you to instrument your code with calls + to the kgdb event recording function. The event log may be + examined with gdb at a break point. Turning on this + capability also allows you to choose how many events to + keep. Kgdb always keeps the lastest events. + +choice + depends on KGDB_TS + prompt "Max number of time stamps to save?" + default KGDB_TS_128 + +config KGDB_TS_64 + bool "64" + +config KGDB_TS_128 + bool "128" + +config KGDB_TS_256 + bool "256" + +config KGDB_TS_512 + bool "512" + +config KGDB_TS_1024 + bool "1024" + +endchoice + +config STACK_OVERFLOW_TEST + bool "Turn on kernel stack overflow testing?" + depends on KGDB + default n + help + This option enables code in the front line interrupt handlers + to check for kernel stack overflow on interrupts and system + calls. This is part of the kgdb code on x86 systems. + +config KGDB_CONSOLE + bool "Enable serial console thru kgdb port" + depends on KGDB + default n + help + This option enables the command line "console=kgdb" option. + When the system is booted with this option in the command line + all kernel printk output is sent to gdb (as well as to other + consoles). For this to work gdb must be connected. For this + reason, this command line option will generate a breakpoint if + gdb has not yet connected. After the gdb continue command is + given all pent up console output will be printed by gdb on the + host machine. Neither this option, nor KGDB require the + serial driver to be configured. + +config KGDB_SYSRQ + bool "Turn on SysRq 'G' command to do a break?" + depends on KGDB + default y + help + This option includes an option in the SysRq code that allows + you to enter SysRq G which generates a breakpoint to the KGDB + stub. This will work if the keyboard is alive and can + interrupt the system. Because of constraints on when the + serial port interrupt can be enabled, this code may allow you + to interrupt the system before the serial port control C is + available. Just say yes here. + config FRAME_POINTER bool "Compile the kernel with frame pointers" + default KGDB help If you say Y here the resulting kernel image will be slightly larger and slower, but it will give very useful debugging information. If you don't debug the kernel, you can say N, but we may not be able to solve problems without frame pointers. +config MAGIC_SYSRQ + bool + depends on KGDB_SYSRQ + default y + config X86_EXTRA_IRQS bool depends on X86_LOCAL_APIC || X86_VOYAGER --- diff/arch/i386/Makefile 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/i386/Makefile 2003-10-29 11:19:22.000000000 +0000 @@ -84,6 +84,9 @@ # default subarch .h files mflags-y += -Iinclude/asm-i386/mach-default +mflags-$(CONFIG_KGDB) += -gdwarf-2 +mflags-$(CONFIG_KGDB_MORE) += $(shell echo $(CONFIG_KGDB_OPTIONS) | sed -e 's/"//g') + head-y := arch/i386/kernel/head.o arch/i386/kernel/init_task.o libs-y += arch/i386/lib/ --- diff/arch/i386/kernel/Makefile 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/i386/kernel/Makefile 2003-10-29 11:19:22.000000000 +0000 @@ -14,6 +14,7 @@ obj-$(CONFIG_ACPI_BOOT) += acpi/ obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o obj-$(CONFIG_MCA) += mca.o +obj-$(CONFIG_KGDB) += kgdb_stub.o obj-$(CONFIG_X86_MSR) += msr.o obj-$(CONFIG_X86_CPUID) += cpuid.o obj-$(CONFIG_MICROCODE) += microcode.o --- diff/arch/i386/kernel/entry.S 2003-10-09 09:47:33.000000000 +0100 +++ source/arch/i386/kernel/entry.S 2003-10-29 11:19:22.000000000 +0000 @@ -48,6 +48,18 @@ #include #include #include "irq_vectors.h" + /* We do not recover from a stack overflow, but at least + * we know it happened and should be able to track it down. + */ +#ifdef CONFIG_STACK_OVERFLOW_TEST +#define STACK_OVERFLOW_TEST \ + testl $7680,%esp; \ + jnz 10f; \ + call stack_overflow; \ +10: +#else +#define STACK_OVERFLOW_TEST +#endif EBX = 0x00 ECX = 0x04 @@ -98,7 +110,8 @@ pushl %ebx; \ movl $(__USER_DS), %edx; \ movl %edx, %ds; \ - movl %edx, %es; + movl %edx, %es; \ + STACK_OVERFLOW_TEST #define RESTORE_INT_REGS \ popl %ebx; \ @@ -298,6 +311,19 @@ testw $_TIF_ALLWORK_MASK, %cx # current->work jne syscall_exit_work restore_all: +#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS + movl EFLAGS(%esp), %eax # mix EFLAGS and CS + movb CS(%esp), %al + testl $(VM_MASK | 3), %eax + jz resume_kernelX # returning to kernel or vm86-space + + cmpl $0,TI_PRE_COUNT(%ebx) # non-zero preempt_count ? + jz resume_kernelX + + int $3 + +resume_kernelX: +#endif RESTORE_ALL # perform work that needs to be done immediately before resumption @@ -882,3 +908,57 @@ .long sys_ni_syscall /* sys_vserver */ nr_syscalls=(.-sys_call_table)/4 + + +# Here we do call frames. We cheat a bit as we only really need +# correct frames at locations we can actually look at from a +# debugger. Since the break instruction trap actually goes thru +# some of this code, we don't really need info on those areas, but +# only after the fact. I.e. if we can not step or break in a +# location or end up with a return address pointing at the +# location, we don't need a correct call frame for it. + +#if 0 + +#include +/* + * The register numbers as known by gdb + */ +#define _EAX 0 +#define _ECX 1 +#define _EDX 2 +#define _EBX 3 +#define _ESP 4 +#define _EBP 5 +#define _ESI 6 +#define _EDI 7 +#define _PC 8 +#define _EIP 8 +#define _PS 9 +#define _EFLAGS 9 +#define _CS 10 +#define _SS 11 +#define _DS 12 +#define _ES 13 +#define _FS 14 +#define _GS 15 + + CFI_preamble(c1,_PC,1,1) + CFA_define_reference(_ESP,OLDESP) + CFA_define_offset(_EIP,EIP) + CFA_define_offset(_EBX,EBX) + CFA_define_offset(_ECX,ECX) + CFA_define_offset(_EDX,EDX) + CFA_define_offset(_ESI,ESI) + CFA_define_offset(_EDI,EDI) + CFA_define_offset(_EBP,EBP) + CFA_define_offset(_EAX,EAX) + CFA_define_offset(_EFLAGS,EFLAGS) + CFA_define_offset(_CS,CS) + CFA_define_offset(_DS,DS) + CFA_define_offset(_ES,ES) + CFI_postamble(c1) + + FDE_preamble(c1,f1,ret_from_intr,(divide_error - ret_from_intr)) + FDE_postamble(f1) +#endif --- diff/arch/i386/kernel/irq.c 2003-10-27 09:20:43.000000000 +0000 +++ source/arch/i386/kernel/irq.c 2003-10-29 11:19:23.000000000 +0000 @@ -45,6 +45,7 @@ #include #include #include +#include /* * Linux has a controller-independent x86 interrupt architecture. @@ -502,6 +503,17 @@ irq_exit(); +#ifdef CONFIG_KGDB + /* + * We need to do this after clearing out of all the interrupt + * machinery because kgdb will reenter the NIC driver and the IRQ + * system. synchronize_irq() (at least) will deadlock. + */ + if (kgdb_eth_need_breakpoint[smp_processor_id()]) { + kgdb_eth_need_breakpoint[smp_processor_id()] = 0; + BREAKPOINT; + } +#endif return 1; } --- diff/arch/i386/kernel/nmi.c 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/i386/kernel/nmi.c 2003-10-29 11:19:22.000000000 +0000 @@ -31,7 +31,16 @@ #include #include +#ifdef CONFIG_KGDB +#include +#ifdef CONFIG_SMP +unsigned int nmi_watchdog = NMI_IO_APIC; +#else +unsigned int nmi_watchdog = NMI_LOCAL_APIC; +#endif +#else unsigned int nmi_watchdog = NMI_NONE; +#endif static unsigned int nmi_hz = HZ; unsigned int nmi_perfctr_msr; /* the MSR to reset in NMI handler */ extern void show_registers(struct pt_regs *regs); @@ -408,6 +417,9 @@ for (i = 0; i < NR_CPUS; i++) alert_counter[i] = 0; } +#ifdef CONFIG_KGDB +int tune_watchdog = 5*HZ; +#endif void nmi_watchdog_tick (struct pt_regs * regs) { @@ -421,12 +433,24 @@ sum = irq_stat[cpu].apic_timer_irqs; +#ifdef CONFIG_KGDB + if (! in_kgdb(regs) && last_irq_sums[cpu] == sum ) { + +#else if (last_irq_sums[cpu] == sum) { +#endif /* * Ayiee, looks like this CPU is stuck ... * wait a few IRQs (5 seconds) before doing the oops ... */ alert_counter[cpu]++; +#ifdef CONFIG_KGDB + if (alert_counter[cpu] == tune_watchdog) { + kgdb_handle_exception(2, SIGPWR, 0, regs); + last_irq_sums[cpu] = sum; + alert_counter[cpu] = 0; + } +#endif if (alert_counter[cpu] == 5*nmi_hz) { spin_lock(&nmi_print_lock); /* --- diff/arch/i386/kernel/smp.c 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/i386/kernel/smp.c 2003-10-29 11:19:22.000000000 +0000 @@ -466,7 +466,17 @@ { on_each_cpu(do_flush_tlb_all, 0, 1, 1); } - +#ifdef CONFIG_KGDB +/* + * By using the NMI code instead of a vector we just sneak thru the + * word generator coming out with just what we want. AND it does + * not matter if clustered_apic_mode is set or not. + */ +void smp_send_nmi_allbutself(void) +{ + send_IPI_allbutself(APIC_DM_NMI); +} +#endif /* * this function sends a 'reschedule' IPI to another CPU. * it goes straight through and wastes no time serializing --- diff/arch/i386/kernel/traps.c 2003-10-27 09:20:36.000000000 +0000 +++ source/arch/i386/kernel/traps.c 2003-10-29 11:19:22.000000000 +0000 @@ -91,6 +91,42 @@ asmlinkage void spurious_interrupt_bug(void); asmlinkage void machine_check(void); +#ifdef CONFIG_KGDB +extern void sysenter_entry(void); +#include +#include +extern void int3(void); +extern void debug(void); +void set_intr_gate(unsigned int n, void *addr); +static void set_intr_usr_gate(unsigned int n, void *addr); +/* + * Should be able to call this breakpoint() very early in + * bring up. Just hard code the call where needed. + * The breakpoint() code is here because set_?_gate() functions + * are local (static) to trap.c. They need be done only once, + * but it does not hurt to do them over. + */ +void breakpoint(void) +{ + set_intr_usr_gate(3,&int3); /* disable ints on trap */ + set_intr_gate(1,&debug); + set_intr_gate(14,&page_fault); + + BREAKPOINT; +} +#define CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,after) \ + { \ + if (!user_mode(regs) ) \ + { \ + kgdb_handle_exception(trapnr, signr, error_code, regs); \ + after; \ + } else if ((trapnr == 3) && (regs->eflags &0x200)) local_irq_enable(); \ + } +#else +#define CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,after) +#endif + + static int kstack_depth_to_print = 24; void show_trace(struct task_struct *task, unsigned long * stack) @@ -261,6 +297,15 @@ bust_spinlocks(1); handle_BUG(regs); printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); +#ifdef CONFIG_KGDB + /* This is about the only place we want to go to kgdb even if in + * user mode. But we must go in via a trap so within kgdb we will + * always be in kernel mode. + */ + if (user_mode(regs)) + BREAKPOINT; +#endif + CHK_REMOTE_DEBUG(0,SIGTRAP,err,regs,) show_registers(regs); bust_spinlocks(0); spin_unlock_irq(&die_lock); @@ -330,6 +375,7 @@ #define DO_ERROR(trapnr, signr, str, name) \ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ { \ + CHK_REMOTE_DEBUG(trapnr,signr,error_code,regs,)\ do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \ } @@ -347,7 +393,9 @@ #define DO_VM86_ERROR(trapnr, signr, str, name) \ asmlinkage void do_##name(struct pt_regs * regs, long error_code) \ { \ + CHK_REMOTE_DEBUG(trapnr, signr, error_code,regs, return)\ do_trap(trapnr, signr, str, 1, regs, error_code, NULL); \ + return; \ } #define DO_VM86_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \ @@ -394,8 +442,10 @@ return; gp_in_kernel: - if (!fixup_exception(regs)) + if (!fixup_exception(regs)){ + CHK_REMOTE_DEBUG(13,SIGSEGV,error_code,regs,) die("general protection fault", regs, error_code); + } } static void mem_parity_error(unsigned char reason, struct pt_regs * regs) @@ -557,8 +607,18 @@ * allowing programs to debug themselves without the ptrace() * interface. */ +#ifdef CONFIG_KGDB + /* + * I think this is the only "real" case of a TF in the kernel + * that really belongs to user space. Others are + * "Ours all ours!" + */ + if (((regs->xcs & 3) == 0) && ((void *)regs->eip == sysenter_entry)) + goto clear_TF_reenable; +#else if ((regs->xcs & 3) == 0) goto clear_TF_reenable; +#endif if ((tsk->ptrace & (PT_DTRACE|PT_PTRACED)) == PT_DTRACE) goto clear_TF; } @@ -570,6 +630,17 @@ info.si_errno = 0; info.si_code = TRAP_BRKPT; +#ifdef CONFIG_KGDB + /* + * If this is a kernel mode trap, we need to reset db7 to allow us + * to continue sanely ALSO skip the signal delivery + */ + if ((regs->xcs & 3) == 0) + goto clear_dr7; + + /* if not kernel, allow ints but only if they were on */ + if ( regs->eflags & 0x200) local_irq_enable(); +#endif /* If this is a kernel mode trap, save the user PC on entry to * the kernel, that's what the debugger can make sense of. */ @@ -584,6 +655,7 @@ __asm__("movl %0,%%db7" : /* no output */ : "r" (0)); + CHK_REMOTE_DEBUG(1,SIGTRAP,error_code,regs,) return; debug_vm86: @@ -832,6 +904,12 @@ { _set_gate(a,12,3,addr,__KERNEL_CS); } +#ifdef CONFIG_KGDB +void set_intr_usr_gate(unsigned int n, void *addr) +{ + _set_gate(idt_table+n,14,3,addr,__KERNEL_CS); +} +#endif static void __init set_task_gate(unsigned int n, unsigned int gdt_entry) { @@ -854,7 +932,11 @@ set_trap_gate(0,÷_error); set_intr_gate(1,&debug); set_intr_gate(2,&nmi); +#ifndef CONFIG_KGDB set_system_gate(3,&int3); /* int3-5 can be called from all */ +#else + set_intr_usr_gate(3,&int3); /* int3-5 can be called from all */ +#endif set_system_gate(4,&overflow); set_system_gate(5,&bounds); set_trap_gate(6,&invalid_op); --- diff/arch/i386/lib/Makefile 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/i386/lib/Makefile 2003-10-29 11:19:22.000000000 +0000 @@ -9,4 +9,5 @@ lib-$(CONFIG_X86_USE_3DNOW) += mmx.o lib-$(CONFIG_HAVE_DEC_LOCK) += dec_and_lock.o +lib-$(CONFIG_KGDB) += kgdb_serial.o lib-$(CONFIG_DEBUG_IOVIRT) += iodebug.o --- diff/arch/i386/mm/fault.c 2003-10-27 09:20:36.000000000 +0000 +++ source/arch/i386/mm/fault.c 2003-10-29 11:19:22.000000000 +0000 @@ -402,6 +402,12 @@ * Oops. The kernel tried to access some bad page. We'll have to * terminate things with extreme prejudice. */ +#ifdef CONFIG_KGDB + if (!user_mode(regs)){ + kgdb_handle_exception(14,SIGBUS, error_code, regs); + return; + } +#endif bust_spinlocks(1); --- diff/arch/x86_64/boot/compressed/head.S 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/x86_64/boot/compressed/head.S 2003-10-29 11:19:22.000000000 +0000 @@ -26,6 +26,7 @@ .code32 .text +#define IN_BOOTLOADER #include #include --- diff/arch/x86_64/boot/compressed/misc.c 2003-10-09 09:47:16.000000000 +0100 +++ source/arch/x86_64/boot/compressed/misc.c 2003-10-29 11:19:22.000000000 +0000 @@ -9,6 +9,7 @@ * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 */ +#define IN_BOOTLOADER #include "miscsetup.h" #include --- diff/drivers/char/keyboard.c 2003-10-27 09:20:43.000000000 +0000 +++ source/drivers/char/keyboard.c 2003-10-29 11:19:22.000000000 +0000 @@ -1052,6 +1052,9 @@ } if (sysrq_down && down && !rep) { handle_sysrq(kbd_sysrq_xlate[keycode], regs, tty); +#ifdef CONFIG_KGDB_SYSRQ + sysrq_down = 0; /* in case we miss the "up" event */ +#endif return; } #endif --- diff/drivers/char/sysrq.c 2003-10-09 09:47:16.000000000 +0100 +++ source/drivers/char/sysrq.c 2003-10-29 11:19:22.000000000 +0000 @@ -35,6 +35,25 @@ #include #include +#ifdef CONFIG_KGDB_SYSRQ + +#define GDB_OP &kgdb_op +static void kgdb_sysrq(int key, struct pt_regs *pt_regs, struct tty_struct *tty) +{ + printk("kgdb sysrq\n"); + breakpoint(); +} + +static struct sysrq_key_op kgdb_op = { + .handler = kgdb_sysrq, + .help_msg = "kGdb|Fgdb", + .action_msg = "Debug breakpoint\n", +}; + +#else +#define GDB_OP NULL +#endif + extern void reset_vc(unsigned int); @@ -238,8 +257,8 @@ /* c */ NULL, /* d */ NULL, /* e */ &sysrq_term_op, -/* f */ NULL, -/* g */ NULL, +/* f */ GDB_OP, +/* g */ GDB_OP, /* h */ NULL, /* i */ &sysrq_kill_op, /* j */ NULL, --- diff/drivers/net/3c59x.c 2003-10-09 09:47:16.000000000 +0100 +++ source/drivers/net/3c59x.c 2003-10-29 11:19:23.000000000 +0000 @@ -1063,6 +1063,22 @@ return rc; } +#ifdef CONFIG_NET_POLL_CONTROLLER +static void vortex_rx_poll(struct net_device *dev) +{ + disable_irq(dev->irq); + vortex_interrupt(dev->irq, (void *)dev, 0); + enable_irq(dev->irq); +} + +static void boomerang_rx_poll(struct net_device *dev) +{ + disable_irq(dev->irq); + boomerang_interrupt(dev->irq, (void *)dev, 0); + enable_irq(dev->irq); +} +#endif + /* * Start up the PCI/EISA device which is described by *gendev. * Return 0 on success. @@ -1450,6 +1466,13 @@ dev->set_multicast_list = set_rx_mode; dev->tx_timeout = vortex_tx_timeout; dev->watchdog_timeo = (watchdog * HZ) / 1000; +#ifdef CONFIG_NET_POLL_CONTROLLER + if (vp->full_bus_master_tx) + dev->poll_controller = boomerang_rx_poll; + else + dev->poll_controller = vortex_rx_poll; +#endif + if (pdev) { vp->pm_state_valid = 1; pci_save_state(VORTEX_PCI(vp), vp->power_state); --- diff/drivers/net/8139too.c 2003-10-27 09:20:38.000000000 +0000 +++ source/drivers/net/8139too.c 2003-10-29 11:19:23.000000000 +0000 @@ -619,6 +619,10 @@ static void rtl8139_hw_start (struct net_device *dev); static struct ethtool_ops rtl8139_ethtool_ops; +#ifdef CONFIG_NET_POLL_CONTROLLER +static void rtl8139_rx_poll (struct net_device *dev); +#endif + #ifdef USE_IO_OPS #define RTL_R8(reg) inb (((unsigned long)ioaddr) + (reg)) @@ -971,6 +975,10 @@ dev->tx_timeout = rtl8139_tx_timeout; dev->watchdog_timeo = TX_TIMEOUT; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = rtl8139_rx_poll; +#endif + /* note: the hardware is not capable of sg/csum/highdma, however * through the use of skb_copy_and_csum_dev we enable these * features @@ -2389,6 +2397,15 @@ return &tp->stats; } +#ifdef CONFIG_NET_POLL_CONTROLLER +static void rtl8139_rx_poll (struct net_device *dev) +{ + disable_irq(dev->irq); + rtl8139_interrupt(dev->irq, (void *)dev, 0); + enable_irq(dev->irq); +} +#endif + /* Set or clear the multicast filter for this adaptor. This routine is not state sensitive and need not be SMP locked. */ --- diff/drivers/net/Kconfig 2003-10-27 09:20:38.000000000 +0000 +++ source/drivers/net/Kconfig 2003-10-29 11:19:23.000000000 +0000 @@ -2441,6 +2441,9 @@ To compile this driver as a module, choose M here: the module will be called shaper. If unsure, say N. +config NET_POLL_CONTROLLER + def_bool KGDB + source "drivers/net/wan/Kconfig" source "drivers/net/pcmcia/Kconfig" --- diff/drivers/net/Makefile 2003-10-09 09:47:16.000000000 +0100 +++ source/drivers/net/Makefile 2003-10-29 11:19:22.000000000 +0000 @@ -32,6 +32,8 @@ obj-$(CONFIG_OAKNET) += oaknet.o 8390.o +obj-$(CONFIG_KGDB) += kgdb_eth.o + obj-$(CONFIG_DGRS) += dgrs.o obj-$(CONFIG_RCPCI) += rcpci.o obj-$(CONFIG_VORTEX) += 3c59x.o --- diff/drivers/net/e100/e100_main.c 2003-10-09 09:47:16.000000000 +0100 +++ source/drivers/net/e100/e100_main.c 2003-10-29 11:19:23.000000000 +0000 @@ -539,6 +539,15 @@ readw(&(bdp->scb->scb_status)); /* flushes last write, read-safe */ } +#ifdef CONFIG_NET_POLL_CONTROLLER +static void e100_rx_poll(struct net_device *dev) +{ + disable_irq(dev->irq); + e100intr(dev->irq, (void *)dev, 0); + enable_irq(dev->irq); +} +#endif + static int __devinit e100_found1(struct pci_dev *pcid, const struct pci_device_id *ent) { @@ -631,7 +640,9 @@ dev->set_multicast_list = &e100_set_multi; dev->set_mac_address = &e100_set_mac; dev->do_ioctl = &e100_ioctl; - +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = e100_rx_poll; +#endif if (bdp->flags & USE_IPCB) dev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; --- diff/drivers/net/eepro100.c 2003-10-09 09:47:16.000000000 +0100 +++ source/drivers/net/eepro100.c 2003-10-29 11:19:23.000000000 +0000 @@ -543,6 +543,9 @@ static int speedo_rx(struct net_device *dev); static void speedo_tx_buffer_gc(struct net_device *dev); static irqreturn_t speedo_interrupt(int irq, void *dev_instance, struct pt_regs *regs); +#ifdef CONFIG_NET_POLL_CONTROLLER +static void poll_speedo (struct net_device *dev); +#endif static int speedo_close(struct net_device *dev); static struct net_device_stats *speedo_get_stats(struct net_device *dev); static int speedo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); @@ -885,6 +888,9 @@ dev->get_stats = &speedo_get_stats; dev->set_multicast_list = &set_rx_mode; dev->do_ioctl = &speedo_ioctl; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = &poll_speedo; +#endif if (register_netdevice(dev)) goto err_free_unlock; @@ -1675,6 +1681,22 @@ return IRQ_RETVAL(handled); } +#ifdef CONFIG_NET_POLL_CONTROLLER + +/* + * Polling 'interrupt' - used by things like netconsole to send skbs + * without having to re-enable interrupts. It's not called while + * the interrupt routine is executing. + */ + +static void poll_speedo (struct net_device *dev) +{ + disable_irq(dev->irq); + speedo_interrupt (dev->irq, dev, NULL); + enable_irq(dev->irq); +} +#endif + static inline struct RxFD *speedo_rx_alloc(struct net_device *dev, int entry) { struct speedo_private *sp = (struct speedo_private *)dev->priv; --- diff/drivers/net/tg3.c 2003-10-27 09:20:43.000000000 +0000 +++ source/drivers/net/tg3.c 2003-10-29 11:19:23.000000000 +0000 @@ -34,6 +34,10 @@ #include #include +#ifdef CONFIG_KGDB +#include +#endif + #ifdef CONFIG_SPARC64 #include #include @@ -1454,6 +1458,17 @@ return 0; } +static irqreturn_t tg3_interrupt(int irq, void *dev_id, struct pt_regs *regs); +#ifdef CONFIG_KGDB +static void tg3_poll_controller(struct net_device *dev) +{ + disable_irq(dev->irq); + tg3_interrupt(dev->irq, (void *)dev, 0); + enable_irq(dev->irq); +} +#endif + + struct tg3_fiber_aneginfo { int state; #define ANEG_STATE_UNKNOWN 0 @@ -2183,6 +2198,100 @@ } #endif +#ifdef CONFIG_KGDB +/* Get skb from receive buffer */ +static void upcall_kgdb_hook(struct net_device *dev, int* drop) +{ + struct tg3 *tp = dev->priv; + u32 rx_rcb_ptr = tp->rx_rcb_ptr; + u16 hw_idx, sw_idx; + + hw_idx = tp->hw_status->idx[0].rx_producer; + sw_idx = rx_rcb_ptr % TG3_RX_RCB_RING_SIZE(tp); + while (sw_idx != hw_idx) { + struct tg3_rx_buffer_desc *desc = &tp->rx_rcb[sw_idx]; + unsigned int len; + struct sk_buff *skb; + dma_addr_t dma_addr; + u32 opaque_key, desc_idx ; + + desc_idx = desc->opaque & RXD_OPAQUE_INDEX_MASK; + opaque_key = desc->opaque & RXD_OPAQUE_RING_MASK; + if (opaque_key == RXD_OPAQUE_RING_STD) { + dma_addr = pci_unmap_addr(&tp->rx_std_buffers[desc_idx], + mapping); + skb = tp->rx_std_buffers[desc_idx].skb; + } else if (opaque_key == RXD_OPAQUE_RING_JUMBO) { + dma_addr = pci_unmap_addr(&tp->rx_jumbo_buffers[desc_idx], + mapping); + skb = tp->rx_jumbo_buffers[desc_idx].skb; + } + else { + goto next_pkt; + } + + + if ((desc->err_vlan & RXD_ERR_MASK) != 0 && + (desc->err_vlan != RXD_ERR_ODD_NIBBLE_RCVD_MII)) { + goto next_pkt; + } + + len = ((desc->idx_len & RXD_LEN_MASK) >> RXD_LEN_SHIFT) - 4; /* omit crc */ + + if (len > RX_COPY_THRESHOLD) { + int skb_size; + if (opaque_key == RXD_OPAQUE_RING_STD) + skb_size = RX_PKT_BUF_SZ; + else if (opaque_key == RXD_OPAQUE_RING_JUMBO) + skb_size = RX_JUMBO_PKT_BUF_SZ; + else + goto next_pkt; + skb = dev_alloc_skb(skb_size); + if (skb == NULL) + goto next_pkt; + skb->dev = tp->dev; + skb_reserve(skb, tp->rx_offset); + skb_put(skb, len); + } else { + struct sk_buff *copy_skb; + copy_skb = dev_alloc_skb(len + 2); + if (copy_skb == NULL) + goto next_pkt; + + copy_skb->dev = tp->dev; + skb_reserve(copy_skb, 2); + skb_put(copy_skb, len); + memcpy(copy_skb->data, skb->data, len); + + /* We'll reuse the original ring buffer. */ + skb = copy_skb; + } + if ((tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) && + (desc->type_flags & RXD_FLAG_TCPUDP_CSUM) && + (((desc->ip_tcp_csum & RXD_TCPCSUM_MASK) + >> RXD_TCPCSUM_SHIFT) == 0xffff)) + skb->ip_summed = CHECKSUM_UNNECESSARY; + else + skb->ip_summed = CHECKSUM_NONE; + + skb->protocol = eth_type_trans(skb, tp->dev); +/*into gdb driver*/ + if (!kgdb_net_interrupt(skb)) { + /* No.. if we're 'trapped' then junk it */ + if (kgdb_eth_is_trapped()) + *drop=1; + } else { + /* kgdb_eth ate the packet... drop it silently */ + *drop=1; + } + kfree_skb(skb); +next_pkt: + rx_rcb_ptr++; + sw_idx = rx_rcb_ptr % TG3_RX_RCB_RING_SIZE(tp); + } +} +#endif + /* The RX ring scheme is composed of multiple rings which post fresh * buffers to the chip, and one special ring the chip uses to report * status back to the host. @@ -2453,9 +2562,15 @@ tr32(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW); sblk->status &= ~SD_STATUS_UPDATED; - if (likely(tg3_has_work(dev, tp))) + if (likely(tg3_has_work(dev, tp))) { +#ifdef CONFIG_KGDB + if (dev->poll_controller != NULL) { + int drop=0; + upcall_kgdb_hook(dev, &drop); /*drop may be used later */ + } +#endif netif_rx_schedule(dev); /* schedule NAPI poll */ - else { + } else { /* no work, shared interrupt perhaps? re-enable * interrupts, and flush that PCI write */ @@ -7632,6 +7747,9 @@ dev->watchdog_timeo = TG3_TX_TIMEOUT; dev->change_mtu = tg3_change_mtu; dev->irq = pdev->irq; +#ifdef CONFIG_KGDB + dev->poll_controller = tg3_poll_controller; +#endif err = tg3_get_invariants(tp); if (err) { --- diff/drivers/net/tlan.c 2003-10-09 09:47:16.000000000 +0100 +++ source/drivers/net/tlan.c 2003-10-29 11:19:23.000000000 +0000 @@ -297,6 +297,7 @@ static int TLan_probe1( struct pci_dev *pdev, long ioaddr, int irq, int rev, const struct pci_device_id *ent); static void TLan_tx_timeout( struct net_device *dev); static int tlan_init_one( struct pci_dev *pdev, const struct pci_device_id *ent); +static void TLan_Poll(struct net_device *dev); static u32 TLan_HandleInvalid( struct net_device *, u16 ); static u32 TLan_HandleTxEOF( struct net_device *, u16 ); @@ -453,6 +454,25 @@ pci_set_drvdata( pdev, NULL ); } +#ifdef CONFIG_NET_POLL_CONTROLLER + +/* + * Polling 'interrupt' - used by things like netconsole to send skbs + * without having to re-enable interrupts. It's not called while + * the interrupt routine is executing. + */ + +static void TLan_Poll (struct net_device *dev) +{ + disable_irq(dev->irq); + TLan_HandleInterrupt(dev->irq, dev, NULL); + enable_irq(dev->irq); +} + +#endif + + + static struct pci_driver tlan_driver = { .name = "tlan", .id_table = tlan_pci_tbl, @@ -895,6 +915,9 @@ dev->do_ioctl = &TLan_ioctl; dev->tx_timeout = &TLan_tx_timeout; dev->watchdog_timeo = TX_TIMEOUT; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = &TLan_Poll; +#endif return 0; --- diff/drivers/net/tulip/tulip_core.c 2003-10-27 09:20:38.000000000 +0000 +++ source/drivers/net/tulip/tulip_core.c 2003-10-29 11:19:23.000000000 +0000 @@ -247,6 +247,9 @@ static struct net_device_stats *tulip_get_stats(struct net_device *dev); static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); static void set_rx_mode(struct net_device *dev); +#ifdef CONFIG_NET_POLL_CONTROLLER +static void poll_tulip(struct net_device *dev); +#endif @@ -1632,6 +1635,9 @@ dev->get_stats = tulip_get_stats; dev->do_ioctl = private_ioctl; dev->set_multicast_list = set_rx_mode; +#ifdef CONFIG_NET_POLL_CONTROLLER + dev->poll_controller = &poll_tulip; +#endif if (register_netdev(dev)) goto err_out_free_ring; @@ -1789,6 +1795,24 @@ } +#ifdef CONFIG_NET_POLL_CONTROLLER + +/* + * Polling 'interrupt' - used by things like netconsole to send skbs + * without having to re-enable interrupts. It's not called while + * the interrupt routine is executing. + */ + +static void poll_tulip (struct net_device *dev) +{ + disable_irq(dev->irq); + tulip_interrupt (dev->irq, dev, NULL); + enable_irq(dev->irq); +} + +#endif + + static struct pci_driver tulip_driver = { .name = DRV_NAME, .id_table = tulip_pci_tbl, --- diff/drivers/serial/8250.c 2003-10-27 09:20:43.000000000 +0000 +++ source/drivers/serial/8250.c 2003-10-29 11:19:22.000000000 +0000 @@ -844,7 +844,7 @@ if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) { tty->flip.work.func((void *)tty); if (tty->flip.count >= TTY_FLIPBUF_SIZE) - return; // if TTY_DONT_FLIP is set + return; /* if TTY_DONT_FLIP is set */ } ch = serial_inp(up, UART_RX); *tty->flip.char_buf_ptr = ch; @@ -1205,12 +1205,21 @@ spin_unlock_irqrestore(&up->port.lock, flags); } +#ifdef CONFIG_KGDB +static int kgdb_irq = -1; +#endif + static int serial8250_startup(struct uart_port *port) { struct uart_8250_port *up = (struct uart_8250_port *)port; unsigned long flags; int retval; +#ifdef CONFIG_KGDB + if (up->port.irq == kgdb_irq) + return -EBUSY; +#endif + up->capabilities = uart_config[up->port.type].flags; if (up->port.type == PORT_16C950) { @@ -1876,6 +1885,10 @@ for (i = 0; i < UART_NR; i++) { struct uart_8250_port *up = &serial8250_ports[i]; +#ifdef CONFIG_KGDB + if (up->port.irq == kgdb_irq) + up->port.kgdb = 1; +#endif up->port.line = i; up->port.ops = &serial8250_pops; init_timer(&up->timer); @@ -2145,6 +2158,31 @@ uart_resume_port(&serial8250_reg, &serial8250_ports[line].port); } +#ifdef CONFIG_KGDB +/* + * Find all the ports using the given irq and shut them down. + * Result should be that the irq will be released. + */ +void shutdown_for_kgdb(struct async_struct * info) +{ + int irq = info->state->irq; + struct uart_8250_port *up; + int ttyS; + + kgdb_irq = irq; /* save for later init */ + for (ttyS = 0; ttyS < UART_NR; ttyS++){ + up = &serial8250_ports[ttyS]; + if (up->port.irq == irq && (irq_lists + irq)->head) { +#ifdef CONFIG_DEBUG_SPINLOCK /* ugly business... */ + if(up->port.lock.magic != SPINLOCK_MAGIC) + spin_lock_init(&up->port.lock); +#endif + serial8250_shutdown(&up->port); + } + } +} +#endif /* CONFIG_KGDB */ + static int __init serial8250_init(void) { int ret, i; --- diff/drivers/serial/serial_core.c 2003-10-09 09:47:34.000000000 +0100 +++ source/drivers/serial/serial_core.c 2003-10-29 11:19:22.000000000 +0000 @@ -1972,6 +1972,11 @@ { unsigned int flags; +#ifdef CONFIG_KGDB + if (port->kgdb) + return; +#endif + /* * If there isn't a port here, don't do anything further. */ --- diff/include/asm-i386/bugs.h 2003-10-09 09:47:17.000000000 +0100 +++ source/include/asm-i386/bugs.h 2003-10-29 11:19:22.000000000 +0000 @@ -1,11 +1,11 @@ /* * include/asm-i386/bugs.h * - * Copyright (C) 1994 Linus Torvalds + * Copyright (C) 1994 Linus Torvalds * * Cyrix stuff, June 1998 by: * - Rafael R. Reilova (moved everything from head.S), - * + * * - Channing Corn (tests & fixes), * - Andrew D. Balsa (code cleanup). * @@ -25,7 +25,20 @@ #include #include #include - +#ifdef CONFIG_KGDB +/* + * Provied the command line "gdb" initial break + */ +int __init kgdb_initial_break(char * str) +{ + if (*str == '\0'){ + breakpoint(); + return 1; + } + return 0; +} +__setup("gdb",kgdb_initial_break); +#endif static int __init no_halt(char *s) { boot_cpu_data.hlt_works_ok = 0; @@ -140,7 +153,7 @@ : "ecx", "edi" ); /* If this fails, it means that any user program may lock the CPU hard. Too bad. */ if (res != 12345678) printk( "Buggy.\n" ); - else printk( "OK.\n" ); + else printk( "OK.\n" ); #endif } --- diff/include/linux/config.h 2003-10-09 09:47:17.000000000 +0100 +++ source/include/linux/config.h 2003-10-29 11:19:22.000000000 +0000 @@ -2,5 +2,8 @@ #define _LINUX_CONFIG_H #include +#if defined(__i386__) && !defined(IN_BOOTLOADER) +#include +#endif #endif --- diff/include/linux/netdevice.h 2003-10-27 09:20:44.000000000 +0000 +++ source/include/linux/netdevice.h 2003-10-29 11:19:23.000000000 +0000 @@ -456,6 +456,13 @@ /* bridge stuff */ struct net_bridge_port *br_port; +#ifdef CONFIG_KGDB + int kgdb_is_trapped; +#endif +#ifdef CONFIG_NET_POLL_CONTROLLER + void (*poll_controller)(struct net_device *); +#endif + #ifdef CONFIG_NET_FASTROUTE #define NETDEV_FASTROUTE_HMASK 0xF /* Semi-private data. Keep it at the end of device struct. */ @@ -532,6 +539,11 @@ extern struct net_device *dev_get_by_index(int ifindex); extern struct net_device *__dev_get_by_index(int ifindex); extern int dev_restart(struct net_device *dev); +#ifdef CONFIG_KGDB +extern int kgdb_eth_is_trapped(void); +extern int kgdb_net_interrupt(struct sk_buff *skb); +extern void kgdb_send_arp_request(void); +#endif typedef int gifconf_func_t(struct net_device * dev, char * bufptr, int len); extern int register_gifconf(unsigned int family, gifconf_func_t * gifconf); @@ -590,12 +602,22 @@ static inline void netif_wake_queue(struct net_device *dev) { +#ifdef CONFIG_KGDB + if (kgdb_eth_is_trapped()) { + return; + } +#endif if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state)) __netif_schedule(dev); } static inline void netif_stop_queue(struct net_device *dev) { +#ifdef CONFIG_KGDB + if (kgdb_eth_is_trapped()) { + return; + } +#endif set_bit(__LINK_STATE_XOFF, &dev->state); } --- diff/include/linux/serial_core.h 2003-10-09 09:47:17.000000000 +0100 +++ source/include/linux/serial_core.h 2003-10-29 11:19:22.000000000 +0000 @@ -158,7 +158,9 @@ unsigned char x_char; /* xon/xoff char */ unsigned char regshift; /* reg offset shift */ unsigned char iotype; /* io access style */ - +#ifdef CONFIG_KGDB + int kgdb; /* in use by kgdb */ +#endif #define UPIO_PORT (0) #define UPIO_HUB6 (1) #define UPIO_MEM (2) --- diff/include/linux/spinlock.h 2003-10-09 09:47:17.000000000 +0100 +++ source/include/linux/spinlock.h 2003-10-29 11:19:22.000000000 +0000 @@ -15,6 +15,12 @@ #include /* for cpu relax */ #include +#ifdef CONFIG_KGDB +#include +#define SET_WHO(x, him) (x)->who = him; +#else +#define SET_WHO(x, him) +#endif /* * Must define these before including other files, inline functions need them @@ -55,6 +61,9 @@ const char *module; char *owner; int oline; +#ifdef CONFIG_KGDB + struct task_struct *who; +#endif } spinlock_t; #define SPIN_LOCK_UNLOCKED (spinlock_t) { SPINLOCK_MAGIC, 0, 10, __FILE__ , NULL, 0} @@ -66,6 +75,7 @@ (x)->module = __FILE__; \ (x)->owner = NULL; \ (x)->oline = 0; \ + SET_WHO(x, NULL) \ } while (0) #define CHECK_LOCK(x) \ @@ -88,6 +98,7 @@ (x)->lock = 1; \ (x)->owner = __FILE__; \ (x)->oline = __LINE__; \ + SET_WHO(x, current) \ } while (0) /* without debugging, spin_is_locked on UP always says @@ -118,6 +129,7 @@ (x)->lock = 1; \ (x)->owner = __FILE__; \ (x)->oline = __LINE__; \ + SET_WHO(x, current) \ 1; \ }) --- diff/kernel/pid.c 2003-10-27 09:20:39.000000000 +0000 +++ source/kernel/pid.c 2003-10-29 11:19:22.000000000 +0000 @@ -268,6 +268,9 @@ * machine. From a minimum of 16 slots up to 4096 slots at one gigabyte or * more. */ +#ifdef CONFIG_KGDB +int kgdb_pid_init_done; /* so we don't call prior to... */ +#endif void __init pidhash_init(void) { int i, j, pidhash_size; @@ -289,6 +292,9 @@ for (j = 0; j < pidhash_size; j++) INIT_LIST_HEAD(&pid_hash[i][j]); } +#ifdef CONFIG_KGDB + kgdb_pid_init_done++; +#endif } void __init pidmap_init(void) --- diff/kernel/sched.c 2003-10-27 09:20:44.000000000 +0000 +++ source/kernel/sched.c 2003-10-29 11:19:22.000000000 +0000 @@ -1876,6 +1876,13 @@ EXPORT_SYMBOL(set_user_nice); +#if defined( CONFIG_KGDB) +struct task_struct * kgdb_get_idle(int this_cpu) +{ + return cpu_rq(this_cpu)->idle; +} +#endif + #ifndef __alpha__ /* --- diff/net/core/dev.c 2003-10-27 09:20:44.000000000 +0000 +++ source/net/core/dev.c 2003-10-29 11:19:23.000000000 +0000 @@ -111,6 +111,10 @@ #endif /* CONFIG_NET_RADIO */ #include +#ifdef CONFIG_KGDB +#include +#endif + /* This define, if set, will randomly drop a packet when congestion * is more than moderate. It helps fairness in the multi-interface * case when one of them is a hog, but it kills performance for the @@ -1354,7 +1358,6 @@ } #endif - /** * netif_rx - post buffer to the network code * @skb: buffer to post @@ -1379,6 +1382,21 @@ struct softnet_data *queue; unsigned long flags; +#ifdef CONFIG_KGDB + /* See if kgdb_eth wants this packet */ + if (!kgdb_net_interrupt(skb)) { + /* No.. if we're 'trapped' then junk it */ + if (kgdb_eth_is_trapped()) { + kfree_skb(skb); + return NET_RX_DROP; + } + } else { + /* kgdb_eth ate the packet... drop it silently */ + kfree_skb(skb); + return NET_RX_DROP; + } +#endif + if (!skb->stamp.tv_sec) do_gettimeofday(&skb->stamp); --- diff/Documentation/i386/kgdb/andthen 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/andthen 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,100 @@ + +define set_andthen + set var $thp=0 + set var $thp=(struct kgdb_and_then_struct *)&kgdb_data[0] + set var $at_size = (sizeof kgdb_data)/(sizeof *$thp) + set var $at_oc=kgdb_and_then_count + set var $at_cc=$at_oc +end + +define andthen_next + set var $at_cc=$arg0 +end + +define andthen + andthen_set_edge + if ($at_cc >= $at_oc) + printf "Outside window. Window size is %d\n",($at_oc-$at_low) + else + printf "%d: ",$at_cc + output *($thp+($at_cc++ % $at_size )) + printf "\n" + end +end +define andthen_set_edge + set var $at_oc=kgdb_and_then_count + set var $at_low = $at_oc - $at_size + if ($at_low < 0 ) + set var $at_low = 0 + end + if (( $at_cc > $at_oc) || ($at_cc < $at_low)) + printf "Count outside of window, setting count to " + if ($at_cc >= $at_oc) + set var $at_cc = $at_oc + else + set var $at_cc = $at_low + end + printf "%d\n",$at_cc + end +end + +define beforethat + andthen_set_edge + if ($at_cc <= $at_low) + printf "Outside window. Window size is %d\n",($at_oc-$at_low) + else + printf "%d: ",$at_cc-1 + output *($thp+(--$at_cc % $at_size )) + printf "\n" + end +end + +document andthen_next + andthen_next + . sets the number of the event to display next. If this event + . is not in the event pool, either andthen or beforethat will + . correct it to the nearest event pool edge. The event pool + . ends at the last event recorded and begins + . prior to that. If beforethat is used next, it will display + . event -1. +. + andthen commands are: set_andthen, andthen_next, andthen and beforethat +end + + +document andthen + andthen +. displays the next event in the list. sets up to display +. the oldest saved event first. +. (optional) count of the event to display. +. note the number of events saved is specified at configure time. +. if events are saved between calls to andthen the index will change +. but the displayed event will be the next one (unless the event buffer +. is overrun). +. +. andthen commands are: set_andthen, andthen_next, andthen and beforethat +end + +document set_andthen + set_andthen +. sets up to use the and commands. +. if you have defined your own struct, use the above and +. then enter the following: +. p $thp=(struct kgdb_and_then_structX *)&kgdb_data[0] +. where is the name of your structure. +. +. andthen commands are: set_andthen, andthen_next, andthen and beforethat +end + +document beforethat + beforethat +. displays the next prior event in the list. sets up to +. display the last occuring event first. +. +. note the number of events saved is specified at configure time. +. if events are saved between calls to beforethat the index will change +. but the displayed event will be the next one (unless the event buffer +. is overrun). +. +. andthen commands are: set_andthen, andthen_next, andthen and beforethat +end --- diff/Documentation/i386/kgdb/debug-nmi.txt 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/debug-nmi.txt 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,37 @@ +Subject: Debugging with NMI +Date: Mon, 12 Jul 1999 11:28:31 -0500 +From: David Grothe +Organization: Gcom, Inc +To: David Grothe + +Kernel hackers: + +Maybe this is old hat, but it is new to me -- + +On an ISA bus machine, if you short out the A1 and B1 pins of an ISA +slot you will generate an NMI to the CPU. This interrupts even a +machine that is hung in a loop with interrupts disabled. Used in +conjunction with kgdb < +ftp://ftp.gcom.com/pub/linux/src/kgdb-2.3.35/kgdb-2.3.35.tgz > you can +gain debugger control of a machine that is hung in the kernel! Even +without kgdb the kernel will print a stack trace so you can find out +where it was hung. + +The A1/B1 pins are directly opposite one another and the farthest pins +towards the bracket end of the ISA bus socket. You can stick a paper +clip or multi-meter probe between them to short them out. + +I had a spare ISA bus to PC104 bus adapter around. The PC104 end of the +board consists of two rows of wire wrap pins. So I wired a push button +between the A1/B1 pins and now have an ISA board that I can stick into +any ISA bus slot for debugger entry. + +Microsoft has a circuit diagram of a PCI card at +http://www.microsoft.com/hwdev/DEBUGGING/DMPSW.HTM. If you want to +build one you will have to mail them and ask for the PAL equations. +Nobody makes one comercially. + +[THIS TIP COMES WITH NO WARRANTY WHATSOEVER. It works for me, but if +your machine catches fire, it is your problem, not mine.] + +-- Dave (the kgdb guy) --- diff/Documentation/i386/kgdb/gdb-globals.txt 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/gdb-globals.txt 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,71 @@ +Sender: akale@veritas.com +Date: Fri, 23 Jun 2000 19:26:35 +0530 +From: "Amit S. Kale" +Organization: Veritas Software (India) +To: Dave Grothe , linux-kernel@vger.rutgers.edu +CC: David Milburn , + "Edouard G. Parmelan" , + ezannoni@cygnus.com, Keith Owens +Subject: Re: Module debugging using kgdb + +Dave Grothe wrote: +> +> Amit: +> +> There is a 2.4.0 version of kgdb on our ftp site: +> ftp://ftp.gcom.com/pub/linux/src/kgdb. I mirrored your version of gdb +> and loadmodule.sh there. +> +> Have a look at the README file and see if I go it right. If not, send +> me some corrections and I will update it. +> +> Does your version of gdb solve the global variable problem? + +Yes. +Thanks to Elena Zanoni, gdb (developement version) can now calculate +correctly addresses of dynamically loaded object files. I have not been +following gdb developement for sometime and am not sure when symbol +address calculation fix is going to appear in a gdb stable version. + +Elena, any idea when the fix will make it to a prebuilt gdb from a +redhat release? + +For the time being I have built a gdb developement version. It can be +used for module debugging with loadmodule.sh script. + +The problem with calculating of module addresses with previous versions +of gdb was as follows: +gdb did not use base address of a section while calculating address of +a symbol in the section in an object file loaded via 'add-symbol-file'. +It used address of .text segment instead. Due to this addresses of +symbols in .data, .bss etc. (e.g. global variables) were calculated incorrectly. + +Above mentioned fix allow gdb to use base address of a segment while +calculating address of a symbol in it. It adds a parameter '-s' to +'add-symbol-file' command for specifying base address of a segment. + +loadmodule.sh script works as follows. + +1. Copy a module file to target machine. +2. Load the module on the target machine using insmod with -m parameter. +insmod produces a module load map which contains base addresses of all +sections in the module and addresses of symbols in the module file. +3. Find all sections and their base addresses in the module from +the module map. +4. Generate a script that loads the module file. The script uses +'add-symbol-file' and specifies address of text segment followed by +addresses of all segments in the module. + +Here is an example gdb script produced by loadmodule.sh script. + +add-symbol-file foo 0xd082c060 -s .text.lock 0xd08cbfb5 +-s .fixup 0xd08cfbdf -s .rodata 0xd08cfde0 -s __ex_table 0xd08e3b38 +-s .data 0xd08e3d00 -s .bss 0xd08ec8c0 -s __ksymtab 0xd08ee838 + +With this command gdb can calculate addresses of symbols in ANY segment +in a module file. + +Regards. +-- +Amit Kale +Veritas Software ( http://www.veritas.com ) --- diff/Documentation/i386/kgdb/gdbinit 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/gdbinit 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,14 @@ +shell echo -e "\003" >/dev/ttyS0 +set remotebaud 38400 +target remote /dev/ttyS0 +define si +stepi +printf "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", $eax, $ebx, $ecx, $edx +printf "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n", $esi, $edi, $ebp, $esp +x/i $eip +end +define ni +nexti +printf "EAX=%08x EBX=%08x ECX=%08x EDX=%08x\n", $eax, $ebx, $ecx, $edx +printf "ESI=%08x EDI=%08x EBP=%08x ESP=%08x\n", $esi, $edi, $ebp, $esp +x/i $eip --- diff/Documentation/i386/kgdb/gdbinit-modules 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/gdbinit-modules 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,146 @@ +# +# Usefull GDB user-command to debug Linux Kernel Modules with gdbstub. +# +# This don't work for Linux-2.0 or older. +# +# Author Edouard G. Parmelan +# +# +# Fri Apr 30 20:33:29 CEST 1999 +# First public release. +# +# Major cleanup after experiment Linux-2.0 kernel without success. +# Symbols of a module are not in the correct order, I can't explain +# why :( +# +# Fri Mar 19 15:41:40 CET 1999 +# Initial version. +# +# Thu Jan 6 16:29:03 CST 2000 +# A little fixing by Dave Grothe +# +# Mon Jun 19 09:33:13 CDT 2000 +# Alignment changes from Edouard Parmelan +# +# The basic idea is to find where insmod load the module and inform +# GDB to load the symbol table of the module with the GDB command +# ``add-symbol-file
''. +# +# The Linux kernel holds the list of all loaded modules in module_list, +# this list end with &kernel_module (exactly with module->next == NULL, +# but the last module is not a real module). +# +# Insmod allocates the struct module before the object file. Since +# Linux-2.1, this structure contain his size. The real address of +# the object file is then (char*)module + module->size_of_struct. +# +# You can use three user functions ``mod-list'', ``mod-print-symbols'' +# and ``add-module-symbols''. +# +# mod-list list all loaded modules with the format: +# +# +# As soon as you have found the address of your module, you can +# print its exported symbols (mod-print-symbols) or inform GDB to add +# symbols from your module file (mod-add-symbols). +# +# The argument that you give to mod-print-symbols or mod-add-symbols +# is the from the mod-list command. +# +# When using the mod-add-symbols command you must also give the full +# pathname of the modules object code file. +# +# The command mod-add-lis is an example of how to make this easier. +# You can edit this macro to contain the path name of your own +# favorite module and then use it as a shorthand to load it. You +# still need the module-address, however. +# +# The internal function ``mod-validate'' set the GDB variable $mod +# as a ``struct module*'' if the kernel known the module otherwise +# $mod is set to NULL. This ensure to not add symbols for a wrong +# address. +# +# Have a nice hacking day ! +# +# +define mod-list + set $mod = (struct module*)module_list + # the last module is the kernel, ignore it + while $mod != &kernel_module + printf "%p\t%s\n", (long)$mod, ($mod)->name + set $mod = $mod->next + end +end +document mod-list +List all modules in the form: +Use the as the argument for the other +mod-commands: mod-print-symbols, mod-add-symbols. +end + +define mod-validate + set $mod = (struct module*)module_list + while ($mod != $arg0) && ($mod != &kernel_module) + set $mod = $mod->next + end + if $mod == &kernel_module + set $mod = 0 + printf "%p is not a module\n", $arg0 + end +end +document mod-validate +mod-validate +Internal user-command used to validate the module parameter. +If is a real loaded module, set $mod to it otherwise set $mod to 0. +end + + +define mod-print-symbols + mod-validate $arg0 + if $mod != 0 + set $i = 0 + while $i < $mod->nsyms + set $sym = $mod->syms[$i] + printf "%p\t%s\n", $sym->value, $sym->name + set $i = $i + 1 + end + end +end +document mod-print-symbols +mod-print-symbols +Print all exported symbols of the module. see mod-list +end + + +define mod-add-symbols-align + mod-validate $arg0 + if $mod != 0 + set $mod_base = ($mod->size_of_struct + (long)$mod) + if ($arg2 != 0) && (($mod_base & ($arg2 - 1)) != 0) + set $mod_base = ($mod_base | ($arg2 - 1)) + 1 + end + add-symbol-file $arg1 $mod_base + end +end +document mod-add-symbols-align +mod-add-symbols-align +Load the symbols table of the module from the object file where +first section aligment is . +To retreive alignment, use `objdump -h '. +end + +define mod-add-symbols + mod-add-symbols-align $arg0 $arg1 sizeof(long) +end +document mod-add-symbols +mod-add-symbols +Load the symbols table of the module from the object file. +Default alignment is 4. See mod-add-symbols-align. +end + +define mod-add-lis + mod-add-symbols-align $arg0 /usr/src/LiS/streams.o 16 +end +document mod-add-lis +mod-add-lis +Does mod-add-symbols /usr/src/LiS/streams.o +end --- diff/Documentation/i386/kgdb/gdbinit.hw 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/gdbinit.hw 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,117 @@ + +#Using ia-32 hardware breakpoints. +# +#4 hardware breakpoints are available in ia-32 processors. These breakpoints +#do not need code modification. They are set using debug registers. +# +#Each hardware breakpoint can be of one of the +#three types: execution, write, access. +#1. An Execution breakpoint is triggered when code at the breakpoint address is +#executed. +#2. A write breakpoint ( aka watchpoints ) is triggered when memory location +#at the breakpoint address is written. +#3. An access breakpoint is triggered when memory location at the breakpoint +#address is either read or written. +# +#As hardware breakpoints are available in limited number, use software +#breakpoints ( br command in gdb ) instead of execution hardware breakpoints. +# +#Length of an access or a write breakpoint defines length of the datatype to +#be watched. Length is 1 for char, 2 short , 3 int. +# +#For placing execution, write and access breakpoints, use commands +#hwebrk, hwwbrk, hwabrk +#To remove a breakpoint use hwrmbrk command. +# +#These commands take following types of arguments. For arguments associated +#with each command, use help command. +#1. breakpointno: 0 to 3 +#2. length: 1 to 3 +#3. address: Memory location in hex ( without 0x ) e.g c015e9bc +# +#Use the command exinfo to find which hardware breakpoint occured. + +#hwebrk breakpointno address +define hwebrk + maintenance packet Y$arg0,0,0,$arg1 +end +document hwebrk + hwebrk
+ Places a hardware execution breakpoint + = 0 - 3 +
= Hex digits without leading "0x". +end + +#hwwbrk breakpointno length address +define hwwbrk + maintenance packet Y$arg0,1,$arg1,$arg2 +end +document hwwbrk + hwwbrk
+ Places a hardware write breakpoint + = 0 - 3 + = 1 (1 byte), 2 (2 byte), 3 (4 byte) +
= Hex digits without leading "0x". +end + +#hwabrk breakpointno length address +define hwabrk + maintenance packet Y$arg0,1,$arg1,$arg2 +end +document hwabrk + hwabrk
+ Places a hardware access breakpoint + = 0 - 3 + = 1 (1 byte), 2 (2 byte), 3 (4 byte) +
= Hex digits without leading "0x". +end + +#hwrmbrk breakpointno +define hwrmbrk + maintenance packet y$arg0 +end +document hwrmbrk + hwrmbrk + = 0 - 3 + Removes a hardware breakpoint +end + +define reboot + maintenance packet r +end +#exinfo +define exinfo + maintenance packet qE +end +document exinfo + exinfo + Gives information about a breakpoint. +end +define get_th + p $th=(struct thread_info *)((int)$esp & ~8191) +end +document get_th + get_tu + Gets and prints the current thread_info pointer, Defines th to be it. +end +define get_cu + p $cu=((struct thread_info *)((int)$esp & ~8191))->task +end +document get_cu + get_cu + Gets and print the "current" value. Defines $cu to be it. +end +define int_off + set var $flags=$eflags + set $eflags=$eflags&~0x200 + end +define int_on + set var $eflags|=$flags&0x200 + end +document int_off + saves the current interrupt state and clears the processor interrupt + flag. Use int_on to restore the saved flag. +end +document int_on + Restores the interrupt flag saved by int_off. +end --- diff/Documentation/i386/kgdb/kgdb.txt 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/kgdb.txt 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,775 @@ +Last edit: <20030806.1637.12> +This file has information specific to the i386 kgdb option. Other +platforms with the kgdb option may behave in a similar fashion. + +New features: +============ +20030806.1557.37 +This version was made against the 2.6.0-test2 kernel. We have made the +following changes: + +- The getthread() code in the stub calls find_task_by_pid(). It fails + if we are early in the bring up such that the pid arrays have yet to + be allocated. We have added a line to kernel/pid.c to make + "kgdb_pid_init_done" true once the arrays are allocated. This way the + getthread() code knows not to call. This is only used by the thread + debugging stuff and threads will not yet exist at this point in the + boot. + +- For some reason, gdb was not asking for a new thread list when the + "info thread" command was given. We changed to the newer version of + the thread info command and gdb now seems to ask when needed. Result, + we now get all threads in the thread list. + +- We now respond to the ThreadExtraInfo request from gdb with the thread + name from task_struct .comm. This then appears in the thread list. + Thoughts on additional options for this are welcome. Things such as + "has BKL" and "Preempted" come to mind. I think we could have a flag + word that could enable different bits of info here. + +- We now honor, sort of, the C and S commands. These are continue and + single set after delivering a signal. We ignore the signal and do the + requested action. This only happens when we told gdb that a signal + was the reason for entry, which is only done on memory faults. The + result is that you can now continue into the Oops. + +- We changed the -g to -gdwarf-2. This seems to be the same as -ggdb, + but it is more exact on what language to use. + +- We added two dwarf2 include files and a bit of code at the end of + entry.S. This does not yet work, so it is disabled. Still we want to + keep track of the code and "maybe" someone out there can fix it. + +- Randy Dunlap sent some fix ups for this file which are now merged. + +- Hugh Dickins sent a fix to a bit of code in traps.c that prevents a + compiler warning if CONFIG_KGDB is off (now who would do that :). + +- Andrew Morton sent a fix for the serial driver which is now merged. + +- Andrew also sent a change to the stub around the cpu managment code + which is also merged. + +- Andrew also sent a patch to make "f" as well as "g" work as SysRq + commands to enter kgdb, merged. + +- If CONFIG_KGDB and CONFIG_DEBUG_SPINLOCKS are both set we added a + "who" field to the spinlock data struct. This is filled with + "current" when ever the spinlock suceeds. Useful if you want to know + who has the lock. + +_ And last, but not least, we fixed the "get_cu" macro to properly get + the current value of "current". + +New features: +============ +20030505.1827.27 +We are starting to align with the sourceforge version, at least in +commands. To this end, the boot command string to start kgdb at +boot time has been changed from "kgdb" to "gdb". + +Andrew Morton sent a couple of patches which are now included as follows: +1.) We now return a flag to the interrupt handler. +2.) We no longer use smp_num_cpus (a conflict with the lock meter). +3.) And from William Lee Irwin III code to make + sure high-mem is set up before we attempt to register our interrupt + handler. +We now include asm/kgdb.h from config.h so you will most likely never +have to include it. It also 'NULLS' the kgdb macros you might have in +your code when CONFIG_KGDB is not defined. This allows you to just +turn off CONFIG_KGDB to turn off all the kgdb_ts() calls and such. +This include is conditioned on the machine being an x86 so as to not +mess with other archs. + +20020801.1129.03 +This is currently the version for the 2.4.18 (and beyond?) kernel. + +We have several new "features" beginning with this version: + +1.) Kgdb now syncs the "other" CPUs with a cross-CPU NMI. No more + waiting and it will pull that guy out of an IRQ off spin lock :) + +2.) We doctored up the code that tells where a task is waiting and + included it so that the "info thread" command will show a bit more + than "schedule()". Try it... + +3.) Added the ability to call a function from gdb. All the standard gdb + issues apply, i.e. if you hit a breakpoint in the function, you are + not allowed to call another (gdb limitation, not kgdb). To help + this capability we added a memory allocation function. Gdb does not + return this memory (it is used for strings that you pass to that function + you are calling from gdb) so we fixed up a way to allow you to + manually return the memory (see below). + +4.) Kgdb time stamps (kgdb_ts()) are enhanced to expand what was the + interrupt flag to now also include the preemption count and the + "in_interrupt" info. The flag is now called "with_pif" to indicate + the order, preempt_count, in_interrupt, flag. The preempt_count is + shifted left by 4 bits so you can read the count in hex by dropping + the low order digit. In_interrupt is in bit 1, and the flag is in + bit 0. + +5.) The command: "p kgdb_info" is now expanded and prints something + like: +(gdb) p kgdb_info +$2 = {used_malloc = 0, called_from = 0xc0107506, entry_tsc = 67468627259, + errcode = 0, vector = 3, print_debug_info = 0, hold_on_sstep = 1, + cpus_waiting = {{task = 0xc027a000, pid = 32768, hold = 0, + regs = 0xc027bf84}, {task = 0x0, pid = 0, hold = 0, regs = 0x0}}} + + Things to note here: a.) used_malloc is the amount of memory that + has been malloc'ed to do calls from gdb. You can reclaim this + memory like this: "p kgdb_info.used_malloc=0" Cool, huh? b.) + cpus_waiting is now "sized" by the number of CPUs you enter at + configure time in the kgdb configure section. This is NOT used + anywhere else in the system, but it is "nice" here. c.) The task's + "pid" is now in the structure. This is the pid you will need to use + to decode to the thread id to get gdb to look at that thread. + Remember that the "info thread" command prints a list of threads + wherein it numbers each thread with its reference number followed + by the thread's pid. Note that the per-CPU idle threads actually + have pids of 0 (yes, there is more than one pid 0 in an SMP system). + To avoid confusion, kgdb numbers these threads with numbers beyond + the MAX_PID. That is why you see 32768 and above. + +6.) A subtle change, we now provide the complete register set for tasks + that are active on the other CPUs. This allows better trace back on + those tasks. + + And, let's mention what we could not fix. Back-trace from all but the + thread that we trapped will, most likely, have a bogus entry in it. + The problem is that gdb does not recognize the entry code for + functions that use "current" near (at all?) the entry. The compiler + is putting the "current" decode as the first two instructions of the + function where gdb expects to find %ebp changing code. Back trace + also has trouble with interrupt frames. I am talking with Daniel + Jacobowitz about some way to fix this, but don't hold your breath. + +20011220.0050.35 +Major enhancement with this version is the ability to hold one or more +CPUs in an SMP system while allowing the others to continue. Also, by +default only the current CPU is enabled on single-step commands (please +note that gdb issues single-step commands at times other than when you +use the si command). + +Another change is to collect some useful information in +a global structure called "kgdb_info". You should be able to just: + +p kgdb_info + +although I have seen cases where the first time this is done gdb just +prints the first member but prints the whole structure if you then enter +CR (carriage return or enter). This also works: + +p *&kgdb_info + +Here is a sample: +(gdb) p kgdb_info +$4 = {called_from = 0xc010732c, entry_tsc = 32804123790856, errcode = 0, + vector = 3, print_debug_info = 0} + +"Called_from" is the return address from the current entry into kgdb. +Sometimes it is useful to know why you are in kgdb, for example, was +it an NMI or a real breakpoint? The simple way to interrogate this +return address is: + +l *0xc010732c + +which will print the surrounding few lines of source code. + +"Entry_tsc" is the CPU TSC on entry to kgdb (useful to compare to the +kgdb_ts entries). + +"errcode" and "vector" are other entry parameters which may be helpful on +some traps. + +"print_debug_info" is the internal debugging kgdb print enable flag. Yes, +you can modify it. + +In SMP systems kgdb_info also includes the "cpus_waiting" structure and +"hold_on_step": + +(gdb) p kgdb_info +$7 = {called_from = 0xc0112739, entry_tsc = 1034936624074, errcode = 0, + vector = 2, print_debug_info = 0, hold_on_sstep = 1, cpus_waiting = {{ + task = 0x0, hold = 0, regs = 0x0}, {task = 0xc71b8000, hold = 0, + regs = 0xc71b9f70}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0, + hold = 0, regs = 0x0}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0, + hold = 0, regs = 0x0}, {task = 0x0, hold = 0, regs = 0x0}, {task = 0x0, + hold = 0, regs = 0x0}}} + +"Cpus_waiting" has an entry for each CPU other than the current one that +has been stopped. Each entry contains the task_struct address for that +CPU, the address of the regs for that task and a hold flag. All these +have the proper typing so that, for example: + +p *kgdb_info.cpus_waiting[1].regs + +will print the registers for CPU 1. + +"Hold_on_sstep" is a new feature with this version and comes up set or +true. What this means is that whenever kgdb is asked to single-step all +other CPUs are held (i.e. not allowed to execute). The flag applies to +all but the current CPU and, again, can be changed: + +p kgdb_info.hold_on_sstep=0 + +restores the old behavior of letting all CPUs run during single-stepping. + +Likewise, each CPU has a "hold" flag, which if set, locks that CPU out +of execution. Note that this has some risk in cases where the CPUs need +to communicate with each other. If kgdb finds no CPU available on exit, +it will push a message thru gdb and stay in kgdb. Note that it is legal +to hold the current CPU as long as at least one CPU can execute. + +20010621.1117.09 +This version implements an event queue. Events are signaled by calling +a function in the kgdb stub and may be examined from gdb. See EVENTS +below for details. This version also tightens up the interrupt and SMP +handling to not allow interrupts on the way to kgdb from a breakpoint +trap. It is fine to allow these interrupts for user code, but not +system debugging. + +Version +======= + +This version of the kgdb package was developed and tested on +kernel version 2.4.16. It will not install on any earlier kernels. +It is possible that it will continue to work on later versions +of 2.4 and then versions of 2.5 (I hope). + + +Debugging Setup +=============== + +Designate one machine as the "development" machine. This is the +machine on which you run your compiles and which has your source +code for the kernel. Designate a second machine as the "target" +machine. This is the machine that will run your experimental +kernel. + +The two machines will be connected together via a serial line out +one or the other of the COM ports of the PC. You will need the +appropriate modem eliminator (null modem) cable(s) for this. + +Decide on which tty port you want the machines to communicate, then +connect them up back-to-back using the null modem cable. COM1 is +/dev/ttyS0 and COM2 is /dev/ttyS1. You should test this connection +with the two machines prior to trying to debug a kernel. Once you +have it working, on the TARGET machine, enter: + +setserial /dev/ttyS0 (or what ever tty you are using) + +and record the port address and the IRQ number. + +On the DEVELOPMENT machine you need to apply the patch for the kgdb +hooks. You have probably already done that if you are reading this +file. + +On your DEVELOPMENT machine, go to your kernel source directory and do +"make Xconfig" where X is one of "x", "menu", or "". If you are +configuring in the standard serial driver, it must not be a module. +Either yes or no is ok, but making the serial driver a module means it +will initialize after kgdb has set up the UART interrupt code and may +cause a failure of the control-C option discussed below. The configure +question for the serial driver is under the "Character devices" heading +and is: + +"Standard/generic (8250/16550 and compatible UARTs) serial support" + +Go down to the kernel debugging menu item and open it up. Enable the +kernel kgdb stub code by selecting that item. You can also choose to +turn on the "-ggdb -O1" compile options. The -ggdb causes the compiler +to put more debug info (like local symbols) in the object file. On the +i386 -g and -ggdb are the same so this option just reduces to "O1". The +-O1 reduces the optimization level. This may be helpful in some cases, +be aware, however, that this may also mask the problem you are looking +for. + +The baud rate. Default is 115200. What ever you choose be sure that +the host machine is set to the same speed. I recommend the default. + +The port. This is the I/O address of the serial UART that you should +have gotten using setserial as described above. The standard COM1 port +(3f8) using IRQ 4 is default. COM2 is 2f8 which by convention uses IRQ +3. + +The port IRQ (see above). + +Stack overflow test. This option makes a minor change in the trap, +system call and interrupt code to detect stack overflow and transfer +control to kgdb if it happens. (Some platforms have this in the +baseline code, but the i386 does not.) + +You can also configure the system to recognize the boot option +"console=kgdb" which if given will cause all console output during +booting to be put thru gdb as well as other consoles. This option +requires that gdb and kgdb be connected prior to sending console output +so, if they are not, a breakpoint is executed to force the connection. +This will happen before any kernel output (it is going thru gdb, right), +and will stall the boot until the connection is made. + +You can also configure in a patch to SysRq to enable the kGdb SysRq. +This request generates a breakpoint. Since the serial port IRQ line is +set up after any serial drivers, it is possible that this command will +work when the control-C will not. + +Save and exit the Xconfig program. Then do "make clean" , "make dep" +and "make bzImage" (or whatever target you want to make). This gets the +kernel compiled with the "-g" option set -- necessary for debugging. + +You have just built the kernel on your DEVELOPMENT machine that you +intend to run on your TARGET machine. + +To install this new kernel, use the following installation procedure. +Remember, you are on the DEVELOPMENT machine patching the kernel source +for the kernel that you intend to run on the TARGET machine. + +Copy this kernel to your target machine using your usual procedures. I +usually arrange to copy development: +/usr/src/linux/arch/i386/boot/bzImage to /vmlinuz on the TARGET machine +via a LAN based NFS access. That is, I run the cp command on the target +and copy from the development machine via the LAN. Run Lilo (see "man +lilo" for details on how to set this up) on the new kernel on the target +machine so that it will boot! Then boot the kernel on the target +machine. + +On the DEVELOPMENT machine, create a file called .gdbinit in the +directory /usr/src/linux. An example .gdbinit file looks like this: + +shell echo -e "\003" >/dev/ttyS0 +set remotebaud 38400 (or what ever speed you have chosen) +target remote /dev/ttyS0 + + +Change the "echo" and "target" definition so that it specifies the tty +port that you intend to use. Change the "remotebaud" definition to +match the data rate that you are going to use for the com line. + +You are now ready to try it out. + +Boot your target machine with "kgdb" in the boot command i.e. something +like: + +lilo> test kgdb + +or if you also want console output thru gdb: + +lilo> test kgdb console=kgdb + +You should see the lilo message saying it has loaded the kernel and then +all output stops. The kgdb stub is trying to connect with gdb. Start +gdb something like this: + + +On your DEVELOPMENT machine, cd /usr/src/linux and enter "gdb vmlinux". +When gdb gets the symbols loaded it will read your .gdbinit file and, if +everything is working correctly, you should see gdb print out a few +lines indicating that a breakpoint has been taken. It will actually +show a line of code in the target kernel inside the kgdb activation +code. + +The gdb interaction should look something like this: + + linux-dev:/usr/src/linux# gdb vmlinux + GDB is free software and you are welcome to distribute copies of it + under certain conditions; type "show copying" to see the conditions. + There is absolutely no warranty for GDB; type "show warranty" for details. + GDB 4.15.1 (i486-slackware-linux), + Copyright 1995 Free Software Foundation, Inc... + breakpoint () at i386-stub.c:750 + 750 } + (gdb) + +You can now use whatever gdb commands you like to set breakpoints. +Enter "continue" to start your target machine executing again. At this +point the target system will run at full speed until it encounters +your breakpoint or gets a segment violation in the kernel, or whatever. + +If you have the kgdb console enabled when you continue, gdb will print +out all the console messages. + +The above example caused a breakpoint relatively early in the boot +process. For the i386 kgdb it is possible to code a break instruction +as the first C-language point in init/main.c, i.e. as the first instruction +in start_kernel(). This could be done as follows: + +#include + breakpoint(); + +This breakpoint() is really a function that sets up the breakpoint and +single-step hardware trap cells and then executes a breakpoint. Any +early hard coded breakpoint will need to use this function. Once the +trap cells are set up they need not be set again, but doing it again +does not hurt anything, so you don't need to be concerned about which +breakpoint is hit first. Once the trap cells are set up (and the kernel +sets them up in due course even if breakpoint() is never called) the +macro: + +BREAKPOINT; + +will generate an inline breakpoint. This may be more useful as it stops +the processor at the instruction instead of in a function a step removed +from the location of interest. In either case must be +included to define both breakpoint() and BREAKPOINT. + +Triggering kgdbstub at other times +================================== + +Often you don't need to enter the debugger until much later in the boot +or even after the machine has been running for some time. Once the +kernel is booted and interrupts are on, you can force the system to +enter the debugger by sending a control-C to the debug port. This is +what the first line of the recommended .gdbinit file does. This allows +you to start gdb any time after the system is up as well as when the +system is already at a breakpoint. (In the case where the system is +already at a breakpoint the control-C is not needed, however, it will +be ignored by the target so no harm is done. Also note the the echo +command assumes that the port speed is already set. This will be true +once gdb has connected, but it is best to set the port speed before you +run gdb.) + +Another simple way to do this is to put the following file in you ~/bin +directory: + +#!/bin/bash +echo -e "\003" > /dev/ttyS0 + +Here, the ttyS0 should be replaced with what ever port you are using. +The "\003" is control-C. Once you are connected with gdb, you can enter +control-C at the command prompt. + +An alternative way to get control to the debugger is to enable the kGdb +SysRq command. Then you would enter Alt-SysRq-g (all three keys at the +same time, but push them down in the order given). To refresh your +memory of the available SysRq commands try Alt-SysRq-=. Actually any +undefined command could replace the "=", but I like to KNOW that what I +am pushing will never be defined. + +Debugging hints +=============== + +You can break into the target machine at any time from the development +machine by typing ^C (see above paragraph). If the target machine has +interrupts enabled this will stop it in the kernel and enter the +debugger. + +There is unfortunately no way of breaking into the kernel if it is +in a loop with interrupts disabled, so if this happens to you then +you need to place exploratory breakpoints or printk's into the kernel +to find out where it is looping. The exploratory breakpoints can be +entered either thru gdb or hard coded into the source. This is very +handy if you do something like: + +if () BREAKPOINT; + + +There is a copy of an e-mail in the Documentation/i386/kgdb/ directory +(debug-nmi.txt) which describes how to create an NMI on an ISA bus +machine using a paper clip. I have a sophisticated version of this made +by wiring a push button switch into a PC104/ISA bus adapter card. The +adapter card nicely furnishes wire wrap pins for all the ISA bus +signals. + +When you are done debugging the kernel on the target machine it is a +good idea to leave it in a running state. This makes reboots faster, +bypassing the fsck. So do a gdb "continue" as the last gdb command if +this is possible. To terminate gdb itself on the development machine +and leave the target machine running, first clear all breakpoints and +continue, then type ^Z to suspend gdb and then kill it with "kill %1" or +something similar. + +If gdbstub Does Not Work +======================== + +If it doesn't work, you will have to troubleshoot it. Do the easy +things first like double checking your cabling and data rates. You +might try some non-kernel based programs to see if the back-to-back +connection works properly. Just something simple like cat /etc/hosts +>/dev/ttyS0 on one machine and cat /dev/ttyS0 on the other will tell you +if you can send data from one machine to the other. Make sure it works +in both directions. There is no point in tearing out your hair in the +kernel if the line doesn't work. + +All of the real action takes place in the file +/usr/src/linux/arch/i386/kernel/kgdb_stub.c. That is the code on the target +machine that interacts with gdb on the development machine. In gdb you can +turn on a debug switch with the following command: + + set remotedebug + +This will print out the protocol messages that gdb is exchanging with +the target machine. + +Another place to look is /usr/src/arch/i386/lib/kgdb_serial.c. This is +the code that talks to the serial port on the target side. There might +be a problem there. In particular there is a section of this code that +tests the UART which will tell you what UART you have if you define +"PRNT" (just remove "_off" from the #define PRNT_off). To view this +report you will need to boot the system without any beakpoints. This +allows the kernel to run to the point where it calls kgdb to set up +interrupts. At this time kgdb will test the UART and print out the type +it finds. (You need to wait so that the printks are actually being +printed. Early in the boot they are cached, waiting for the console to +be enabled. Also, if kgdb is entered thru a breakpoint it is possible +to cause a dead lock by calling printk when the console is locked. The +stub thus avoids doing printks from breakpoints, especially in the +serial code.) At this time, if the UART fails to do the expected thing, +kgdb will print out (using printk) information on what failed. (These +messages will be buried in all the other boot up messages. Look for +lines that start with "gdb_hook_interrupt:". You may want to use dmesg +once the system is up to view the log. If this fails or if you still +don't connect, review your answers for the port address. Use: + +setserial /dev/ttyS0 + +to get the current port and IRQ information. This command will also +tell you what the system found for the UART type. The stub recognizes +the following UART types: + +16450, 16550, and 16550A + +If you are really desperate you can use printk debugging in the +kgdbstub code in the target kernel until you get it working. In particular, +there is a global variable in /usr/src/linux/arch/i386/kernel/kgdb_stub.c +named "remote_debug". Compile your kernel with this set to 1, rather +than 0 and the debug stub will print out lots of stuff as it does +what it does. Likewise there are debug printks in the kgdb_serial.c +code that can be turned on with simple changes in the macro defines. + + +Debugging Loadable Modules +========================== + +This technique comes courtesy of Edouard Parmelan + + +When you run gdb, enter the command + +source gdbinit-modules + +This will read in a file of gdb macros that was installed in your +kernel source directory when kgdb was installed. This file implements +the following commands: + +mod-list + Lists the loaded modules in the form + +mod-print-symbols + Prints all the symbols in the indicated module. + +mod-add-symbols + Loads the symbols from the object file and associates them + with the indicated module. + +After you have loaded the module that you want to debug, use the command +mod-list to find the of your module. Then use that +address in the mod-add-symbols command to load your module's symbols. +From that point onward you can debug your module as if it were a part +of the kernel. + +The file gdbinit-modules also contains a command named mod-add-lis as +an example of how to construct a command of your own to load your +favorite module. The idea is to "can" the pathname of the module +in the command so you don't have to type so much. + +Threads +======= + +Each process in a target machine is seen as a gdb thread. gdb thread +related commands (info threads, thread n) can be used. + +ia-32 hardware breakpoints +========================== + +kgdb stub contains support for hardware breakpoints using debugging features +of ia-32(x86) processors. These breakpoints do not need code modification. +They use debugging registers. 4 hardware breakpoints are available in ia-32 +processors. + +Each hardware breakpoint can be of one of the following three types. + +1. Execution breakpoint - An Execution breakpoint is triggered when code + at the breakpoint address is executed. + + As limited number of hardware breakpoints are available, it is + advisable to use software breakpoints ( break command ) instead + of execution hardware breakpoints, unless modification of code + is to be avoided. + +2. Write breakpoint - A write breakpoint is triggered when memory + location at the breakpoint address is written. + + A write or can be placed for data of variable length. Length of + a write breakpoint indicates length of the datatype to be + watched. Length is 1 for 1 byte data , 2 for 2 byte data, 3 for + 4 byte data. + +3. Access breakpoint - An access breakpoint is triggered when memory + location at the breakpoint address is either read or written. + + Access breakpoints also have lengths similar to write breakpoints. + +IO breakpoints in ia-32 are not supported. + +Since gdb stub at present does not use the protocol used by gdb for hardware +breakpoints, hardware breakpoints are accessed through gdb macros. gdb macros +for hardware breakpoints are described below. + +hwebrk - Places an execution breakpoint + hwebrk breakpointno address +hwwbrk - Places a write breakpoint + hwwbrk breakpointno length address +hwabrk - Places an access breakpoint + hwabrk breakpointno length address +hwrmbrk - Removes a breakpoint + hwrmbrk breakpointno +exinfo - Tells whether a software or hardware breakpoint has occurred. + Prints number of the hardware breakpoint if a hardware breakpoint has + occurred. + +Arguments required by these commands are as follows +breakpointno - 0 to 3 +length - 1 to 3 +address - Memory location in hex digits ( without 0x ) e.g c015e9bc + +SMP support +========== + +When a breakpoint occurs or user issues a break ( Ctrl + C ) to gdb +client, all the processors are forced to enter the debugger. Current +thread corresponds to the thread running on the processor where +breakpoint occurred. Threads running on other processor(s) appear +similar to other non-running threads in the 'info threads' output. +Within the kgdb stub there is a structure "waiting_cpus" in which kgdb +records the values of "current" and "regs" for each CPU other than the +one that hit the breakpoint. "current" is a pointer to the task +structure for the task that CPU is running, while "regs" points to the +saved registers for the task. This structure can be examined with the +gdb "p" command. + +ia-32 hardware debugging registers on all processors are set to same +values. Hence any hardware breakpoints may occur on any processor. + +gdb troubleshooting +=================== + +1. gdb hangs +Kill it. restart gdb. Connect to target machine. + +2. gdb cannot connect to target machine (after killing a gdb and +restarting another) If the target machine was not inside debugger when +you killed gdb, gdb cannot connect because the target machine won't +respond. In this case echo "Ctrl+C"(ASCII 3) to the serial line. +e.g. echo -e "\003" > /dev/ttyS1 +This forces that target machine into the debugger, after which you +can connect. + +3. gdb cannot connect even after echoing Ctrl+C into serial line +Try changing serial line settings min to 1 and time to 0 +e.g. stty min 1 time 0 < /dev/ttyS1 +Try echoing again + +Check serial line speed and set it to correct value if required +e.g. stty ispeed 115200 ospeed 115200 < /dev/ttyS1 + +EVENTS +====== + +Ever want to know the order of things happening? Which CPU did what and +when? How did the spinlock get the way it is? Then events are for +you. Events are defined by calls to an event collection interface and +saved for later examination. In this case, kgdb events are saved by a +very fast bit of code in kgdb which is fully SMP and interrupt protected +and they are examined by using gdb to display them. Kgdb keeps only +the last N events, where N must be a power of two and is defined at +configure time. + + +Events are signaled to kgdb by calling: + +kgdb_ts(data0,data1) + +For each call kgdb records each call in an array along with other info. +Here is the array definition: + +struct kgdb_and_then_struct { +#ifdef CONFIG_SMP + int on_cpu; +#endif + long long at_time; + int from_ln; + char * in_src; + void *from; + int with_if; + int data0; + int data1; +}; + +For SMP machines the CPU is recorded, for all machines the TSC is +recorded (gets a time stamp) as well as the line number and source file +the call was made from. The address of the (from), the "if" (interrupt +flag) and the two data items are also recorded. The macro kgdb_ts casts +the types to int, so you can put any 32-bit values here. There is a +configure option to select the number of events you want to keep. A +nice number might be 128, but you can keep up to 1024 if you want. The +number must be a power of two. An "andthen" macro library is provided +for gdb to help you look at these events. It is also possible to define +a different structure for the event storage and cast the data to this +structure. For example the following structure is defined in kgdb: + +struct kgdb_and_then_struct2 { +#ifdef CONFIG_SMP + int on_cpu; +#endif + long long at_time; + int from_ln; + char * in_src; + void *from; + int with_if; + struct task_struct *t1; + struct task_struct *t2; +}; + +If you use this for display, the data elements will be displayed as +pointers to task_struct entries. You may want to define your own +structure to use in casting. You should only change the last two items +and you must keep the structure size the same. Kgdb will handle these +as 32-bit ints, but within that constraint you can define a structure to +cast to any 32-bit quantity. This need only be available to gdb and is +only used for casting in the display code. + +Final Items +=========== + +I picked up this code from Amit S. Kale and enhanced it. + +If you make some really cool modification to this stuff, or if you +fix a bug, please let me know. + +George Anzinger + + +Amit S. Kale + + +(First kgdb by David Grothe ) + +(modified by Tigran Aivazian ) + Putting gdbstub into the kernel config menu. + +(modified by Scott Foehner ) + Hooks for entering gdbstub at boot time. + +(modified by Amit S. Kale ) + Threads, ia-32 hw debugging, mp support, console support, + nmi watchdog handling. + +(modified by George Anzinger ) + Extended threads to include the idle threads. + Enhancements to allow breakpoint() at first C code. + Use of module_init() and __setup() to automate the configure. + Enhanced the cpu "collection" code to work in early bring-up. + Added ability to call functions from gdb + Print info thread stuff without going back to schedule() + Now collect the "other" cpus with an IPI/ NMI. --- diff/Documentation/i386/kgdb/kgdbeth.txt 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/kgdbeth.txt 2003-10-29 11:19:23.000000000 +0000 @@ -0,0 +1,118 @@ +KGDB over ethernet +================== + +Authors +------- + +Robert Walsh (2.6 port) +wangdi (2.6 port) +San Mehat (original 2.4 code) + + +Introduction +------------ + +KGDB supports debugging over ethernet. Only a limited set of ethernet +devices are supported right now, but adding support for new devices +should not be too complicated. See "New Devices" below for details. + + +Terminology +----------- + +This document uses the following terms: + + TARGET: the machine being debugged. + HOST: the machine running gdb. + + +Usage +----- + +You need to use the following command-line options on the TARGET kernel: + + gdbeth=DEVICENUM + gdbeth_remoteip=HOSTIPADDR + gdbeth_remotemac=REMOTEMAC + gdbeth_localmac=LOCALMAC + +kgdbeth=DEVICENUM sets the ethernet device number to listen on for +debugging packets. e.g. kgdbeth=0 listens on eth0. + +kgdbeth_remoteip=HOSTIPADDR sets the IP address of the HOST machine. +Only packets originating from this IP address will be accepted by the +debugger. e.g. kgdbeth_remoteip=192.168.2.2 + +kgdbeth_remotemac=REMOTEMAC sets the ethernet address of the HOST machine. +e.g. kgdbeth_remotemac=00:07:70:12:4E:F5 + +kgdbeth_localmac=LOCALMAC sets the ethernet address of the TARGET machine. +e.g. kgdbeth_localmac=00:10:9F:18:21:3C + +You can also set the following command-line option on the TARGET kernel: + + kgdbeth_listenport=PORT + +kgdbeth_listenport sets the UDP port to listen on for gdb debugging +packets. The default value is "6443". e.g. kgdbeth_listenport=7654 +causes the kernel to listen on UDP port 7654 for debugging packets. + +On the HOST side, run gdb as normal and use a remote UDP host as the +target: + + % gdb ./vmlinux + GNU gdb Red Hat Linux (5.3post-0.20021129.18rh) + Copyright 2003 Free Software Foundation, Inc. + GDB is free software, covered by the GNU General Public License, and you are + welcome to change it and/or distribute copies of it under certain conditions. + Type "show copying" to see the conditions. + There is absolutely no warranty for GDB. Type "show warranty" for details. + This GDB was configured as "i386-redhat-linux-gnu"... + (gdb) target remote udp:HOSTNAME:6443 + +You can now continue as if you were debugging over a serial line. + +Observations +------------ + +I've used this with NFS and various other network applications (ssh, +etc.) and it's doesn't appear to interfere with their operation in +any way. It doesn't seem to effect the NIC it uses - i.e. you don't +need a dedicated NIC for this. + +Limitations +----------- + +In the inital release of this code you _must_ break into the system with the +debugger by hand, early after boot, as described above. + +Otherwise, the first time the kernel tries to enter the debugger (say, via an +oops or a BUG), the kgdb stub will doublefault and die because things aren't +fully set up yet. + +Supported devices +----------------- + +Right now, the following drivers are supported: + + e100 driver (drivers/net/e100/*) + 3c59x driver (drivers/net/3c59x.c) + + +New devices +----------- + +Supporting a new device is straightforward. Just add a "poll" routine to +the driver and hook it into the poll_controller field in the netdevice +structure. For an example, look in drivers/net/3c59x.c and search +for CONFIG_KGDB (two places.) + +The poll routine is usually quite simple - it's usually enough to just +disable interrupts, call the device's interrupt routine and re-enable +interrupts again. + + +Bug reports +----------- + +Send bug reports to Robert Walsh . --- diff/Documentation/i386/kgdb/loadmodule.sh 1970-01-01 01:00:00.000000000 +0100 +++ source/Documentation/i386/kgdb/loadmodule.sh 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,78 @@ +#/bin/sh +# This script loads a module on a target machine and generates a gdb script. +# source generated gdb script to load the module file at appropriate addresses +# in gdb. +# +# Usage: +# Loading the module on target machine and generating gdb script) +# [foo]$ loadmodule.sh +# +# Loading the module file into gdb +# (gdb) source +# +# Modify following variables according to your setup. +# TESTMACHINE - Name of the target machine +# GDBSCRIPTS - The directory where a gdb script will be generated +# +# Author: Amit S. Kale (akale@veritas.com). +# +# If you run into problems, please check files pointed to by following +# variables. +# ERRFILE - /tmp/.errs contains stderr output of insmod +# MAPFILE - /tmp/.map contains stdout output of insmod +# GDBSCRIPT - $GDBSCRIPTS/load gdb script. + +TESTMACHINE=foo +GDBSCRIPTS=/home/bar + +if [ $# -lt 1 ] ; then { + echo Usage: $0 modulefile + exit +} ; fi + +MODULEFILE=$1 +MODULEFILEBASENAME=`basename $1` + +if [ $MODULEFILE = $MODULEFILEBASENAME ] ; then { + MODULEFILE=`pwd`/$MODULEFILE +} fi + +ERRFILE=/tmp/$MODULEFILEBASENAME.errs +MAPFILE=/tmp/$MODULEFILEBASENAME.map +GDBSCRIPT=$GDBSCRIPTS/load$MODULEFILEBASENAME + +function findaddr() { + local ADDR=0x$(echo "$SEGMENTS" | \ + grep "$1" | sed 's/^[^ ]*[ ]*[^ ]*[ ]*//' | \ + sed 's/[ ]*[^ ]*$//') + echo $ADDR +} + +function checkerrs() { + if [ "`cat $ERRFILE`" != "" ] ; then { + cat $ERRFILE + exit + } fi +} + +#load the module +echo Copying $MODULEFILE to $TESTMACHINE +rcp $MODULEFILE root@${TESTMACHINE}: + +echo Loading module $MODULEFILE +rsh -l root $TESTMACHINE /sbin/insmod -m ./`basename $MODULEFILE` \ + > $MAPFILE 2> $ERRFILE +checkerrs + +SEGMENTS=`head -n 11 $MAPFILE | tail -n 10` +TEXTADDR=$(findaddr "\\.text[^.]") +LOADSTRING="add-symbol-file $MODULEFILE $TEXTADDR" +SEGADDRS=`echo "$SEGMENTS" | awk '//{ + if ($1 != ".text" && $1 != ".this" && + $1 != ".kstrtab" && $1 != ".kmodtab") { + print " -s " $1 " 0x" $3 " " + } +}'` +LOADSTRING="$LOADSTRING $SEGADDRS" +echo Generating script $GDBSCRIPT +echo $LOADSTRING > $GDBSCRIPT --- diff/arch/i386/kernel/kgdb_stub.c 1970-01-01 01:00:00.000000000 +0100 +++ source/arch/i386/kernel/kgdb_stub.c 2003-10-29 11:19:23.000000000 +0000 @@ -0,0 +1,2492 @@ +/* + * + * 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, 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. + * + */ + +/* + * Copyright (c) 2000 VERITAS Software Corporation. + * + */ +/**************************************************************************** + * Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $ + * + * Module name: remcom.c $ + * Revision: 1.34 $ + * Date: 91/03/09 12:29:49 $ + * Contributor: Lake Stevens Instrument Division$ + * + * Description: low level support for gdb debugger. $ + * + * Considerations: only works on target hardware $ + * + * Written by: Glenn Engel $ + * Updated by: David Grothe + * Updated by: Robert Walsh + * Updated by: wangdi + * ModuleState: Experimental $ + * + * NOTES: See Below $ + * + * Modified for 386 by Jim Kingdon, Cygnus Support. + * Compatibility with 2.1.xx kernel by David Grothe + * + * Changes to allow auto initilization. All that is needed is that it + * be linked with the kernel and a break point (int 3) be executed. + * The header file defines BREAKPOINT to allow one to do + * this. It should also be possible, once the interrupt system is up, to + * call putDebugChar("+"). Once this is done, the remote debugger should + * get our attention by sending a ^C in a packet. George Anzinger + * + * Integrated into 2.2.5 kernel by Tigran Aivazian + * Added thread support, support for multiple processors, + * support for ia-32(x86) hardware debugging. + * Amit S. Kale ( akale@veritas.com ) + * + * Modified to support debugging over ethernet by Robert Walsh + * and wangdi , based on + * code by San Mehat. + * + * + * To enable debugger support, two things need to happen. One, a + * call to set_debug_traps() is necessary in order to allow any breakpoints + * or error conditions to be properly intercepted and reported to gdb. + * Two, a breakpoint needs to be generated to begin communication. This + * is most easily accomplished by a call to breakpoint(). Breakpoint() + * simulates a breakpoint by executing an int 3. + * + ************* + * + * The following gdb commands are supported: + * + * command function Return value + * + * g return the value of the CPU registers hex data or ENN + * G set the value of the CPU registers OK or ENN + * + * mAA..AA,LLLL Read LLLL bytes at address AA..AA hex data or ENN + * MAA..AA,LLLL: Write LLLL bytes at address AA.AA OK or ENN + * + * c Resume at current address SNN ( signal NN) + * cAA..AA Continue at address AA..AA SNN + * + * s Step one instruction SNN + * sAA..AA Step one instruction from AA..AA SNN + * + * k kill + * + * ? What was the last sigval ? SNN (signal NN) + * + * All commands and responses are sent with a packet which includes a + * checksum. A packet consists of + * + * $#. + * + * where + * :: + * :: < two hex digits computed as modulo 256 sum of > + * + * When a packet is received, it is first acknowledged with either '+' or '-'. + * '+' indicates a successful transfer. '-' indicates a failed transfer. + * + * Example: + * + * Host: Reply: + * $m0,10#2a +$00010203040506070809101112131415#42 + * + ****************************************************************************/ +#define KGDB_VERSION "<20030915.1651.33>" +#include +#include +#include /* for strcpy */ +#include +#include +#include +#include +#include /* for linux pt_regs struct */ +#include +#include +#include +#include +#include +#include +#include +#include + +/************************************************************************ + * + * external low-level support routines + */ +typedef void (*Function) (void); /* pointer to a function */ + +/* Thread reference */ +typedef unsigned char threadref[8]; + +extern int tty_putDebugChar(int); /* write a single character */ +extern int tty_getDebugChar(void); /* read and return a single char */ +extern void tty_flushDebugChar(void); /* flush pending characters */ +extern int eth_putDebugChar(int); /* write a single character */ +extern int eth_getDebugChar(void); /* read and return a single char */ +extern void eth_flushDebugChar(void); /* flush pending characters */ +extern void kgdb_eth_set_trapmode(int); +extern void kgdb_eth_reply_arp(void); /*send arp request */ +extern volatile int kgdb_eth_is_initializing; + + +/************************************************************************/ +/* BUFMAX defines the maximum number of characters in inbound/outbound buffers*/ +/* at least NUMREGBYTES*2 are needed for register packets */ +/* Longer buffer is needed to list all threads */ +#define BUFMAX 400 + +char *kgdb_version = KGDB_VERSION; + +/* debug > 0 prints ill-formed commands in valid packets & checksum errors */ +int debug_regs = 0; /* set to non-zero to print registers */ + +/* filled in by an external module */ +char *gdb_module_offsets; + +static const char hexchars[] = "0123456789abcdef"; + +/* Number of bytes of registers. */ +#define NUMREGBYTES 64 +/* + * Note that this register image is in a different order than + * the register image that Linux produces at interrupt time. + * + * Linux's register image is defined by struct pt_regs in ptrace.h. + * Just why GDB uses a different order is a historical mystery. + */ +enum regnames { _EAX, /* 0 */ + _ECX, /* 1 */ + _EDX, /* 2 */ + _EBX, /* 3 */ + _ESP, /* 4 */ + _EBP, /* 5 */ + _ESI, /* 6 */ + _EDI, /* 7 */ + _PC /* 8 also known as eip */ , + _PS /* 9 also known as eflags */ , + _CS, /* 10 */ + _SS, /* 11 */ + _DS, /* 12 */ + _ES, /* 13 */ + _FS, /* 14 */ + _GS /* 15 */ +}; + +/*************************** ASSEMBLY CODE MACROS *************************/ +/* + * Put the error code here just in case the user cares. + * Likewise, the vector number here (since GDB only gets the signal + * number through the usual means, and that's not very specific). + * The called_from is the return address so he can tell how we entered kgdb. + * This will allow him to seperate out the various possible entries. + */ +#define REMOTE_DEBUG 0 /* set != to turn on printing (also available in info) */ + +#define PID_MAX PID_MAX_DEFAULT + +#ifdef CONFIG_SMP +void smp_send_nmi_allbutself(void); +#define IF_SMP(x) x +#undef MAX_NO_CPUS +#ifndef CONFIG_NO_KGDB_CPUS +#define CONFIG_NO_KGDB_CPUS 2 +#endif +#if CONFIG_NO_KGDB_CPUS > NR_CPUS +#define MAX_NO_CPUS NR_CPUS +#else +#define MAX_NO_CPUS CONFIG_NO_KGDB_CPUS +#endif +#define hold_init hold_on_sstep: 1, +#define MAX_CPU_MASK (unsigned long)((1LL << MAX_NO_CPUS) - 1LL) +#define NUM_CPUS num_online_cpus() +#else +#define IF_SMP(x) +#define hold_init +#undef MAX_NO_CPUS +#define MAX_NO_CPUS 1 +#define NUM_CPUS 1 +#endif +#define NOCPU (struct task_struct *)0xbad1fbad +/* *INDENT-OFF* */ +struct kgdb_info { + int used_malloc; + void *called_from; + long long entry_tsc; + int errcode; + int vector; + int print_debug_info; +#ifdef CONFIG_SMP + int hold_on_sstep; + struct { + volatile struct task_struct *task; + int pid; + int hold; + struct pt_regs *regs; + } cpus_waiting[MAX_NO_CPUS]; +#endif +} kgdb_info = {hold_init print_debug_info:REMOTE_DEBUG, vector:-1}; + +/* *INDENT-ON* */ + +#define used_m kgdb_info.used_malloc +/* + * This is little area we set aside to contain the stack we + * need to build to allow gdb to call functions. We use one + * per cpu to avoid locking issues. We will do all this work + * with interrupts off so that should take care of the protection + * issues. + */ +#define LOOKASIDE_SIZE 200 /* should be more than enough */ +#define MALLOC_MAX 200 /* Max malloc size */ +struct { + unsigned int esp; + int array[LOOKASIDE_SIZE]; +} fn_call_lookaside[MAX_NO_CPUS]; + +static int trap_cpu; +static unsigned int OLD_esp; + +#define END_OF_LOOKASIDE &fn_call_lookaside[trap_cpu].array[LOOKASIDE_SIZE] +#define IF_BIT 0x200 +#define TF_BIT 0x100 + +#define MALLOC_ROUND 8-1 + +static char malloc_array[MALLOC_MAX]; +IF_SMP(static void to_gdb(const char *mess)); +void * +malloc(int size) +{ + + if (size <= (MALLOC_MAX - used_m)) { + int old_used = used_m; + used_m += ((size + MALLOC_ROUND) & (~MALLOC_ROUND)); + return &malloc_array[old_used]; + } else { + return NULL; + } +} + +/* + * I/O dispatch functions... + * Based upon kgdb_eth, either call the ethernet + * handler or the serial one.. + */ +void +putDebugChar(int c) +{ + if (kgdb_eth == -1) { + tty_putDebugChar(c); + } else { + eth_putDebugChar(c); + } +} + +int +getDebugChar(void) +{ + if (kgdb_eth == -1) { + return tty_getDebugChar(); + } else { + return eth_getDebugChar(); + } +} + +void +flushDebugChar(void) +{ + if (kgdb_eth == -1) { + tty_flushDebugChar(); + } else { + eth_flushDebugChar(); + } +} + +/* + * Gdb calls functions by pushing agruments, including a return address + * on the stack and the adjusting EIP to point to the function. The + * whole assumption in GDB is that we are on a different stack than the + * one the "user" i.e. code that hit the break point, is on. This, of + * course is not true in the kernel. Thus various dodges are needed to + * do the call without directly messing with EIP (which we can not change + * as it is just a location and not a register. To adjust it would then + * require that we move every thing below EIP up or down as needed. This + * will not work as we may well have stack relative pointer on the stack + * (such as the pointer to regs, for example). + + * So here is what we do: + * We detect gdb attempting to store into the stack area and instead, store + * into the fn_call_lookaside.array at the same relative location as if it + * were the area ESP pointed at. We also trap ESP modifications + * and uses these to adjust fn_call_lookaside.esp. On entry + * fn_call_lookaside.esp will be set to point at the last entry in + * fn_call_lookaside.array. This allows us to check if it has changed, and + * if so, on exit, we add the registers we will use to do the move and a + * trap/ interrupt return exit sequence. We then adjust the eflags in the + * regs array (remember we now have a copy in the fn_call_lookaside.array) to + * kill the interrupt bit, AND we change EIP to point at our set up stub. + * As part of the register set up we preset the registers to point at the + * begining and end of the fn_call_lookaside.array, so all the stub needs to + * do is move words from the array to the stack until ESP= the desired value + * then do the rti. This will then transfer to the desired function with + * all the correct registers. Nifty huh? + */ +extern asmlinkage void fn_call_stub(void); +extern asmlinkage void fn_rtn_stub(void); +/* *INDENT-OFF* */ +__asm__("fn_rtn_stub:\n\t" + "movl %eax,%esp\n\t" + "fn_call_stub:\n\t" + "1:\n\t" + "addl $-4,%ebx\n\t" + "movl (%ebx), %eax\n\t" + "pushl %eax\n\t" + "cmpl %esp,%ecx\n\t" + "jne 1b\n\t" + "popl %eax\n\t" + "popl %ebx\n\t" + "popl %ecx\n\t" + "iret \n\t"); +/* *INDENT-ON* */ +#define gdb_i386vector kgdb_info.vector +#define gdb_i386errcode kgdb_info.errcode +#define waiting_cpus kgdb_info.cpus_waiting +#define remote_debug kgdb_info.print_debug_info +#define hold_cpu(cpu) kgdb_info.cpus_waiting[cpu].hold +/* gdb locks */ + +#ifdef CONFIG_SMP +static int in_kgdb_called; +static spinlock_t waitlocks[MAX_NO_CPUS] = + {[0 ... MAX_NO_CPUS - 1] = SPIN_LOCK_UNLOCKED }; +/* + * The following array has the thread pointer of each of the "other" + * cpus. We make it global so it can be seen by gdb. + */ +volatile int in_kgdb_entry_log[MAX_NO_CPUS]; +volatile struct pt_regs *in_kgdb_here_log[MAX_NO_CPUS]; +/* +static spinlock_t continuelocks[MAX_NO_CPUS]; +*/ +spinlock_t kgdb_spinlock = SPIN_LOCK_UNLOCKED; +/* waiters on our spinlock plus us */ +static atomic_t spinlock_waiters = ATOMIC_INIT(1); +static int spinlock_count = 0; +static int spinlock_cpu = 0; +/* + * Note we use nested spin locks to account for the case where a break + * point is encountered when calling a function by user direction from + * kgdb. Also there is the memory exception recursion to account for. + * Well, yes, but this lets other cpus thru too. Lets add a + * cpu id to the lock. + */ +#define KGDB_SPIN_LOCK(x) if( spinlock_count == 0 || \ + spinlock_cpu != smp_processor_id()){\ + atomic_inc(&spinlock_waiters); \ + while (! spin_trylock(x)) {\ + in_kgdb(®s);\ + }\ + atomic_dec(&spinlock_waiters); \ + spinlock_count = 1; \ + spinlock_cpu = smp_processor_id(); \ + }else{ \ + spinlock_count++; \ + } +#define KGDB_SPIN_UNLOCK(x) if( --spinlock_count == 0) spin_unlock(x) +#else +unsigned kgdb_spinlock = 0; +#define KGDB_SPIN_LOCK(x) --*x +#define KGDB_SPIN_UNLOCK(x) ++*x +#endif + +int +hex(char ch) +{ + if ((ch >= 'a') && (ch <= 'f')) + return (ch - 'a' + 10); + if ((ch >= '0') && (ch <= '9')) + return (ch - '0'); + if ((ch >= 'A') && (ch <= 'F')) + return (ch - 'A' + 10); + return (-1); +} + +/* scan for the sequence $# */ +void +getpacket(char *buffer) +{ + unsigned char checksum; + unsigned char xmitcsum; + int i; + int count; + char ch; + + do { + /* wait around for the start character, ignore all other characters */ + while ((ch = (getDebugChar() & 0x7f)) != '$') ; + checksum = 0; + xmitcsum = -1; + + count = 0; + + /* now, read until a # or end of buffer is found */ + while (count < BUFMAX) { + ch = getDebugChar() & 0x7f; + if (ch == '#') + break; + checksum = checksum + ch; + buffer[count] = ch; + count = count + 1; + } + buffer[count] = 0; + + if (ch == '#') { + xmitcsum = hex(getDebugChar() & 0x7f) << 4; + xmitcsum += hex(getDebugChar() & 0x7f); + if ((remote_debug) && (checksum != xmitcsum)) { + printk + ("bad checksum. My count = 0x%x, sent=0x%x. buf=%s\n", + checksum, xmitcsum, buffer); + } + + if (checksum != xmitcsum) + putDebugChar('-'); /* failed checksum */ + else { + putDebugChar('+'); /* successful transfer */ + /* if a sequence char is present, reply the sequence ID */ + if (buffer[2] == ':') { + putDebugChar(buffer[0]); + putDebugChar(buffer[1]); + /* remove sequence chars from buffer */ + count = strlen(buffer); + for (i = 3; i <= count; i++) + buffer[i - 3] = buffer[i]; + } + } + } + } while (checksum != xmitcsum); + + if (remote_debug) + printk("R:%s\n", buffer); + flushDebugChar(); +} + +/* send the packet in buffer. */ + +void +putpacket(char *buffer) +{ + unsigned char checksum; + int count; + char ch; + + /* $#. */ + + if (kgdb_eth == -1) { + do { + if (remote_debug) + printk("T:%s\n", buffer); + putDebugChar('$'); + checksum = 0; + count = 0; + + while ((ch = buffer[count])) { + putDebugChar(ch); + checksum += ch; + count += 1; + } + + putDebugChar('#'); + putDebugChar(hexchars[checksum >> 4]); + putDebugChar(hexchars[checksum % 16]); + flushDebugChar(); + + } while ((getDebugChar() & 0x7f) != '+'); + } else { + /* + * For udp, we can not transfer too much bytes once. + * We only transfer MAX_SEND_COUNT size bytes each time + */ + +#define MAX_SEND_COUNT 30 + + int send_count = 0, i = 0; + char send_buf[MAX_SEND_COUNT]; + + do { + if (remote_debug) + printk("T:%s\n", buffer); + putDebugChar('$'); + checksum = 0; + count = 0; + send_count = 0; + while ((ch = buffer[count])) { + if (send_count >= MAX_SEND_COUNT) { + for(i = 0; i < MAX_SEND_COUNT; i++) { + putDebugChar(send_buf[i]); + } + flushDebugChar(); + send_count = 0; + } else { + send_buf[send_count] = ch; + checksum += ch; + count ++; + send_count++; + } + } + for(i = 0; i < send_count; i++) + putDebugChar(send_buf[i]); + putDebugChar('#'); + putDebugChar(hexchars[checksum >> 4]); + putDebugChar(hexchars[checksum % 16]); + flushDebugChar(); + } while ((getDebugChar() & 0x7f) != '+'); + } +} + +static char remcomInBuffer[BUFMAX]; +static char remcomOutBuffer[BUFMAX]; +static short error; + +void +debug_error(char *format, char *parm) +{ + if (remote_debug) + printk(format, parm); +} + +static void +print_regs(struct pt_regs *regs) +{ + printk("EAX=%08lx ", regs->eax); + printk("EBX=%08lx ", regs->ebx); + printk("ECX=%08lx ", regs->ecx); + printk("EDX=%08lx ", regs->edx); + printk("\n"); + printk("ESI=%08lx ", regs->esi); + printk("EDI=%08lx ", regs->edi); + printk("EBP=%08lx ", regs->ebp); + printk("ESP=%08lx ", (long) ®s->esp); + printk("\n"); + printk(" DS=%08x ", regs->xds); + printk(" ES=%08x ", regs->xes); + printk(" SS=%08x ", __KERNEL_DS); + printk(" FL=%08lx ", regs->eflags); + printk("\n"); + printk(" CS=%08x ", regs->xcs); + printk(" IP=%08lx ", regs->eip); +#if 0 + printk(" FS=%08x ", regs->fs); + printk(" GS=%08x ", regs->gs); +#endif + printk("\n"); + +} /* print_regs */ + +#define NEW_esp fn_call_lookaside[trap_cpu].esp + +static void +regs_to_gdb_regs(int *gdb_regs, struct pt_regs *regs) +{ + gdb_regs[_EAX] = regs->eax; + gdb_regs[_EBX] = regs->ebx; + gdb_regs[_ECX] = regs->ecx; + gdb_regs[_EDX] = regs->edx; + gdb_regs[_ESI] = regs->esi; + gdb_regs[_EDI] = regs->edi; + gdb_regs[_EBP] = regs->ebp; + gdb_regs[_DS] = regs->xds; + gdb_regs[_ES] = regs->xes; + gdb_regs[_PS] = regs->eflags; + gdb_regs[_CS] = regs->xcs; + gdb_regs[_PC] = regs->eip; + /* Note, as we are a debugging the kernel, we will always + * trap in kernel code, this means no priviledge change, + * and so the pt_regs structure is not completely valid. In a non + * privilege change trap, only EFLAGS, CS and EIP are put on the stack, + * SS and ESP are not stacked, this means that the last 2 elements of + * pt_regs is not valid (they would normally refer to the user stack) + * also, using regs+1 is no good because you end up will a value that is + * 2 longs (8) too high. This used to cause stepping over functions + * to fail, so my fix is to use the address of regs->esp, which + * should point at the end of the stack frame. Note I have ignored + * completely exceptions that cause an error code to be stacked, such + * as double fault. Stuart Hughes, Zentropix. + * original code: gdb_regs[_ESP] = (int) (regs + 1) ; + + * this is now done on entry and moved to OLD_esp (as well as NEW_esp). + */ + gdb_regs[_ESP] = NEW_esp; + gdb_regs[_SS] = __KERNEL_DS; + gdb_regs[_FS] = 0xFFFF; + gdb_regs[_GS] = 0xFFFF; +} /* regs_to_gdb_regs */ + +static void +gdb_regs_to_regs(int *gdb_regs, struct pt_regs *regs) +{ + regs->eax = gdb_regs[_EAX]; + regs->ebx = gdb_regs[_EBX]; + regs->ecx = gdb_regs[_ECX]; + regs->edx = gdb_regs[_EDX]; + regs->esi = gdb_regs[_ESI]; + regs->edi = gdb_regs[_EDI]; + regs->ebp = gdb_regs[_EBP]; + regs->xds = gdb_regs[_DS]; + regs->xes = gdb_regs[_ES]; + regs->eflags = gdb_regs[_PS]; + regs->xcs = gdb_regs[_CS]; + regs->eip = gdb_regs[_PC]; + NEW_esp = gdb_regs[_ESP]; /* keep the value */ +#if 0 /* can't change these */ + regs->esp = gdb_regs[_ESP]; + regs->xss = gdb_regs[_SS]; + regs->fs = gdb_regs[_FS]; + regs->gs = gdb_regs[_GS]; +#endif + +} /* gdb_regs_to_regs */ +extern void scheduling_functions_start_here(void); +extern void scheduling_functions_end_here(void); +#define first_sched ((unsigned long) scheduling_functions_start_here) +#define last_sched ((unsigned long) scheduling_functions_end_here) + +int thread_list = 0; + +void +get_gdb_regs(struct task_struct *p, struct pt_regs *regs, int *gdb_regs) +{ + unsigned long stack_page; + int count = 0; + IF_SMP(int i); + if (!p || p == current) { + regs_to_gdb_regs(gdb_regs, regs); + return; + } +#ifdef CONFIG_SMP + for (i = 0; i < MAX_NO_CPUS; i++) { + if (p == kgdb_info.cpus_waiting[i].task) { + regs_to_gdb_regs(gdb_regs, + kgdb_info.cpus_waiting[i].regs); + gdb_regs[_ESP] = + (int) &kgdb_info.cpus_waiting[i].regs->esp; + + return; + } + } +#endif + memset(gdb_regs, 0, NUMREGBYTES); + gdb_regs[_ESP] = p->thread.esp; + gdb_regs[_PC] = p->thread.eip; + gdb_regs[_EBP] = *(int *) gdb_regs[_ESP]; + gdb_regs[_EDI] = *(int *) (gdb_regs[_ESP] + 4); + gdb_regs[_ESI] = *(int *) (gdb_regs[_ESP] + 8); + +/* + * This code is to give a more informative notion of where a process + * is waiting. It is used only when the user asks for a thread info + * list. If he then switches to the thread, s/he will find the task + * is in schedule, but a back trace should show the same info we come + * up with. This code was shamelessly purloined from process.c. It was + * then enhanced to provide more registers than simply the program + * counter. + */ + + if (!thread_list) { + return; + } + + if (p->state == TASK_RUNNING) + return; + stack_page = (unsigned long) p->thread_info; + if (gdb_regs[_ESP] < stack_page || gdb_regs[_ESP] > 8188 + stack_page) + return; + /* include/asm-i386/system.h:switch_to() pushes ebp last. */ + do { + if (gdb_regs[_EBP] < stack_page || + gdb_regs[_EBP] > 8184 + stack_page) + return; + gdb_regs[_PC] = *(unsigned long *) (gdb_regs[_EBP] + 4); + gdb_regs[_ESP] = gdb_regs[_EBP] + 8; + gdb_regs[_EBP] = *(unsigned long *) gdb_regs[_EBP]; + if (gdb_regs[_PC] < first_sched || gdb_regs[_PC] >= last_sched) + return; + } while (count++ < 16); + return; +} + +/* Indicate to caller of mem2hex or hex2mem that there has been an + error. */ +static volatile int mem_err = 0; +static volatile int mem_err_expected = 0; +static volatile int mem_err_cnt = 0; +static int garbage_loc = -1; + +int +get_char(char *addr) +{ + return *addr; +} + +void +set_char(char *addr, int val, int may_fault) +{ + /* + * This code traps references to the area mapped to the kernel + * stack as given by the regs and, instead, stores to the + * fn_call_lookaside[cpu].array + */ + if (may_fault && + (unsigned int) addr < OLD_esp && + ((unsigned int) addr > (OLD_esp - (unsigned int) LOOKASIDE_SIZE))) { + addr = (char *) END_OF_LOOKASIDE - ((char *) OLD_esp - addr); + } + *addr = val; +} + +/* convert the memory pointed to by mem into hex, placing result in buf */ +/* return a pointer to the last char put in buf (null) */ +/* If MAY_FAULT is non-zero, then we should set mem_err in response to + a fault; if zero treat a fault like any other fault in the stub. */ +char * +mem2hex(char *mem, char *buf, int count, int may_fault) +{ + int i; + unsigned char ch; + + if (may_fault) { + mem_err_expected = 1; + mem_err = 0; + } + for (i = 0; i < count; i++) { + /* printk("%lx = ", mem) ; */ + + ch = get_char(mem++); + + /* printk("%02x\n", ch & 0xFF) ; */ + if (may_fault && mem_err) { + if (remote_debug) + printk("Mem fault fetching from addr %lx\n", + (long) (mem - 1)); + *buf = 0; /* truncate buffer */ + return (buf); + } + *buf++ = hexchars[ch >> 4]; + *buf++ = hexchars[ch % 16]; + } + *buf = 0; + if (may_fault) + mem_err_expected = 0; + return (buf); +} + +/* convert the hex array pointed to by buf into binary to be placed in mem */ +/* return a pointer to the character AFTER the last byte written */ +/* NOTE: We use the may fault flag to also indicate if the write is to + * the registers (0) or "other" memory (!=0) + */ +char * +hex2mem(char *buf, char *mem, int count, int may_fault) +{ + int i; + unsigned char ch; + + if (may_fault) { + mem_err_expected = 1; + mem_err = 0; + } + for (i = 0; i < count; i++) { + ch = hex(*buf++) << 4; + ch = ch + hex(*buf++); + set_char(mem++, ch, may_fault); + + if (may_fault && mem_err) { + if (remote_debug) + printk("Mem fault storing to addr %lx\n", + (long) (mem - 1)); + return (mem); + } + } + if (may_fault) + mem_err_expected = 0; + return (mem); +} + +/**********************************************/ +/* WHILE WE FIND NICE HEX CHARS, BUILD AN INT */ +/* RETURN NUMBER OF CHARS PROCESSED */ +/**********************************************/ +int +hexToInt(char **ptr, int *intValue) +{ + int numChars = 0; + int hexValue; + + *intValue = 0; + + while (**ptr) { + hexValue = hex(**ptr); + if (hexValue >= 0) { + *intValue = (*intValue << 4) | hexValue; + numChars++; + } else + break; + + (*ptr)++; + } + + return (numChars); +} + +#define stubhex(h) hex(h) +#ifdef old_thread_list + +static int +stub_unpack_int(char *buff, int fieldlength) +{ + int nibble; + int retval = 0; + + while (fieldlength) { + nibble = stubhex(*buff++); + retval |= nibble; + fieldlength--; + if (fieldlength) + retval = retval << 4; + } + return retval; +} +#endif +static char * +pack_hex_byte(char *pkt, int byte) +{ + *pkt++ = hexchars[(byte >> 4) & 0xf]; + *pkt++ = hexchars[(byte & 0xf)]; + return pkt; +} + +#define BUF_THREAD_ID_SIZE 16 + +static char * +pack_threadid(char *pkt, threadref * id) +{ + char *limit; + unsigned char *altid; + + altid = (unsigned char *) id; + limit = pkt + BUF_THREAD_ID_SIZE; + while (pkt < limit) + pkt = pack_hex_byte(pkt, *altid++); + return pkt; +} + +#ifdef old_thread_list +static char * +unpack_byte(char *buf, int *value) +{ + *value = stub_unpack_int(buf, 2); + return buf + 2; +} + +static char * +unpack_threadid(char *inbuf, threadref * id) +{ + char *altref; + char *limit = inbuf + BUF_THREAD_ID_SIZE; + int x, y; + + altref = (char *) id; + + while (inbuf < limit) { + x = stubhex(*inbuf++); + y = stubhex(*inbuf++); + *altref++ = (x << 4) | y; + } + return inbuf; +} +#endif +void +int_to_threadref(threadref * id, int value) +{ + unsigned char *scan; + + scan = (unsigned char *) id; + { + int i = 4; + while (i--) + *scan++ = 0; + } + *scan++ = (value >> 24) & 0xff; + *scan++ = (value >> 16) & 0xff; + *scan++ = (value >> 8) & 0xff; + *scan++ = (value & 0xff); +} +int +int_to_hex_v(unsigned char * id, int value) +{ + unsigned char *start = id; + int shift; + int ch; + + for (shift = 28; shift >= 0; shift -= 4) { + if ((ch = (value >> shift) & 0xf) || (id != start)) { + *id = hexchars[ch]; + id++; + } + } + if (id == start) + *id++ = '0'; + return id - start; +} +#ifdef old_thread_list + +static int +threadref_to_int(threadref * ref) +{ + int i, value = 0; + unsigned char *scan; + + scan = (char *) ref; + scan += 4; + i = 4; + while (i-- > 0) + value = (value << 8) | ((*scan++) & 0xff); + return value; +} +#endif +static int +cmp_str(char *s1, char *s2, int count) +{ + while (count--) { + if (*s1++ != *s2++) + return 0; + } + return 1; +} + +#if 1 /* this is a hold over from 2.4 where O(1) was "sometimes" */ +extern struct task_struct *kgdb_get_idle(int cpu); +#define idle_task(cpu) kgdb_get_idle(cpu) +#else +#define idle_task(cpu) init_tasks[cpu] +#endif + +extern int kgdb_pid_init_done; + +struct task_struct * +getthread(int pid) +{ + struct task_struct *thread; + if (pid >= PID_MAX && pid <= (PID_MAX + MAX_NO_CPUS)) { + + return idle_task(pid - PID_MAX); + } else { + /* + * find_task_by_pid is relatively safe all the time + * Other pid functions require lock downs which imply + * that we may be interrupting them (as we get here + * in the middle of most any lock down). + * Still we don't want to call until the table exists! + */ + if (kgdb_pid_init_done){ + thread = find_task_by_pid(pid); + if (thread) { + return thread; + } + } + } + return NULL; +} +/* *INDENT-OFF* */ +struct hw_breakpoint { + unsigned enabled; + unsigned type; + unsigned len; + unsigned addr; +} breakinfo[4] = { {enabled:0}, + {enabled:0}, + {enabled:0}, + {enabled:0}}; +/* *INDENT-ON* */ +unsigned hw_breakpoint_status; +void +correct_hw_break(void) +{ + int breakno; + int correctit; + int breakbit; + unsigned dr7; + + asm volatile ("movl %%db7, %0\n":"=r" (dr7) + :); + /* *INDENT-OFF* */ + do { + unsigned addr0, addr1, addr2, addr3; + asm volatile ("movl %%db0, %0\n" + "movl %%db1, %1\n" + "movl %%db2, %2\n" + "movl %%db3, %3\n" + :"=r" (addr0), "=r"(addr1), + "=r"(addr2), "=r"(addr3) + :); + } while (0); + /* *INDENT-ON* */ + correctit = 0; + for (breakno = 0; breakno < 3; breakno++) { + breakbit = 2 << (breakno << 1); + if (!(dr7 & breakbit) && breakinfo[breakno].enabled) { + correctit = 1; + dr7 |= breakbit; + dr7 &= ~(0xf0000 << (breakno << 2)); + dr7 |= (((breakinfo[breakno].len << 2) | + breakinfo[breakno].type) << 16) << + (breakno << 2); + switch (breakno) { + case 0: + asm volatile ("movl %0, %%dr0\n"::"r" + (breakinfo[breakno].addr)); + break; + + case 1: + asm volatile ("movl %0, %%dr1\n"::"r" + (breakinfo[breakno].addr)); + break; + + case 2: + asm volatile ("movl %0, %%dr2\n"::"r" + (breakinfo[breakno].addr)); + break; + + case 3: + asm volatile ("movl %0, %%dr3\n"::"r" + (breakinfo[breakno].addr)); + break; + } + } else if ((dr7 & breakbit) && !breakinfo[breakno].enabled) { + correctit = 1; + dr7 &= ~breakbit; + dr7 &= ~(0xf0000 << (breakno << 2)); + } + } + if (correctit) { + asm volatile ("movl %0, %%db7\n"::"r" (dr7)); + } +} + +int +remove_hw_break(unsigned breakno) +{ + if (!breakinfo[breakno].enabled) { + return -1; + } + breakinfo[breakno].enabled = 0; + return 0; +} + +int +set_hw_break(unsigned breakno, unsigned type, unsigned len, unsigned addr) +{ + if (breakinfo[breakno].enabled) { + return -1; + } + breakinfo[breakno].enabled = 1; + breakinfo[breakno].type = type; + breakinfo[breakno].len = len; + breakinfo[breakno].addr = addr; + return 0; +} + +#ifdef CONFIG_SMP +static int in_kgdb_console = 0; + +int +in_kgdb(struct pt_regs *regs) +{ + unsigned flags; + int cpu = smp_processor_id(); + in_kgdb_called = 1; + if (!spin_is_locked(&kgdb_spinlock)) { + if (in_kgdb_here_log[cpu] || /* we are holding this cpu */ + in_kgdb_console) { /* or we are doing slow i/o */ + return 1; + } + return 0; + } + + /* As I see it the only reason not to let all cpus spin on + * the same spin_lock is to allow selected ones to proceed. + * This would be a good thing, so we leave it this way. + * Maybe someday.... Done ! + + * in_kgdb() is called from an NMI so we don't pretend + * to have any resources, like printk() for example. + */ + + kgdb_local_irq_save(flags); /* only local here, to avoid hanging */ + /* + * log arival of this cpu + * The NMI keeps on ticking. Protect against recurring more + * than once, and ignor the cpu that has the kgdb lock + */ + in_kgdb_entry_log[cpu]++; + in_kgdb_here_log[cpu] = regs; + if (cpu == spinlock_cpu || waiting_cpus[cpu].task) { + goto exit_in_kgdb; + } + /* + * For protection of the initilization of the spin locks by kgdb + * it locks the kgdb spinlock before it gets the wait locks set + * up. We wait here for the wait lock to be taken. If the + * kgdb lock goes away first?? Well, it could be a slow exit + * sequence where the wait lock is removed prior to the kgdb lock + * so if kgdb gets unlocked, we just exit. + */ + while (spin_is_locked(&kgdb_spinlock) && + !spin_is_locked(waitlocks + cpu)) ; + if (!spin_is_locked(&kgdb_spinlock)) { + goto exit_in_kgdb; + } + waiting_cpus[cpu].task = current; + waiting_cpus[cpu].pid = (current->pid) ? : (PID_MAX + cpu); + waiting_cpus[cpu].regs = regs; + + spin_unlock_wait(waitlocks + cpu); + /* + * log departure of this cpu + */ + waiting_cpus[cpu].task = 0; + waiting_cpus[cpu].pid = 0; + waiting_cpus[cpu].regs = 0; + correct_hw_break(); + exit_in_kgdb: + in_kgdb_here_log[cpu] = 0; + kgdb_local_irq_restore(flags); + return 1; + /* + spin_unlock(continuelocks + smp_processor_id()); + */ +} + +void +smp__in_kgdb(struct pt_regs regs) +{ + ack_APIC_irq(); + in_kgdb(®s); +} +#else +int +in_kgdb(struct pt_regs *regs) +{ + return (kgdb_spinlock); +} +#endif + +void +printexceptioninfo(int exceptionNo, int errorcode, char *buffer) +{ + unsigned dr6; + int i; + switch (exceptionNo) { + case 1: /* debug exception */ + break; + case 3: /* breakpoint */ + sprintf(buffer, "Software breakpoint"); + return; + default: + sprintf(buffer, "Details not available"); + return; + } + asm volatile ("movl %%db6, %0\n":"=r" (dr6) + :); + if (dr6 & 0x4000) { + sprintf(buffer, "Single step"); + return; + } + for (i = 0; i < 4; ++i) { + if (dr6 & (1 << i)) { + sprintf(buffer, "Hardware breakpoint %d", i); + return; + } + } + sprintf(buffer, "Unknown trap"); + return; +} + +/* + * This function does all command procesing for interfacing to gdb. + * + * NOTE: The INT nn instruction leaves the state of the interrupt + * enable flag UNCHANGED. That means that when this routine + * is entered via a breakpoint (INT 3) instruction from code + * that has interrupts enabled, then interrupts will STILL BE + * enabled when this routine is entered. The first thing that + * we do here is disable interrupts so as to prevent recursive + * entries and bothersome serial interrupts while we are + * trying to run the serial port in polled mode. + * + * For kernel version 2.1.xx the kgdb_cli() actually gets a spin lock so + * it is always necessary to do a restore_flags before returning + * so as to let go of that lock. + */ +int +kgdb_handle_exception(int exceptionVector, + int signo, int err_code, struct pt_regs *linux_regs) +{ + struct task_struct *usethread = NULL; + struct task_struct *thread_list_start = 0, *thread = NULL; + int addr, length; + unsigned long address; + int breakno, breaktype; + char *ptr; + int newPC; + threadref thref; + int threadid; + int thread_min = PID_MAX + MAX_NO_CPUS; +#ifdef old_thread_list + int maxthreads; +#endif + int nothreads; + unsigned long flags; + int gdb_regs[NUMREGBYTES / 4]; + int dr6; + IF_SMP(int entry_state = 0); /* 0, ok, 1, no nmi, 2 sync failed */ +#define NO_NMI 1 +#define NO_SYNC 2 +#define regs (*linux_regs) +#define NUMREGS NUMREGBYTES/4 + /* + * If the entry is not from the kernel then return to the Linux + * trap handler and let it process the interrupt normally. + */ + if ((linux_regs->eflags & VM_MASK) || (3 & linux_regs->xcs)) { + printk("ignoring non-kernel exception\n"); + print_regs(®s); + return (0); + } + /* + * If we're using eth mode, set the 'mode' in the netdevice. + */ + + __asm__("movl %%cr2,%0":"=r" (address)); + + if (kgdb_eth != -1) { + kgdb_eth_set_trapmode(1); + } + + kgdb_local_irq_save(flags); + + /* Get kgdb spinlock */ + + KGDB_SPIN_LOCK(&kgdb_spinlock); + rdtscll(kgdb_info.entry_tsc); + /* + * We depend on this spinlock and the NMI watch dog to control the + * other cpus. They will arrive at "in_kgdb()" as a result of the + * NMI and will wait there for the following spin locks to be + * released. + */ +#ifdef CONFIG_SMP + +#if 0 + if (cpu_callout_map & ~MAX_CPU_MASK) { + printk("kgdb : too many cpus, possibly not mapped" + " in contiguous space, change MAX_NO_CPUS" + " in kgdb_stub and make new kernel.\n" + " cpu_callout_map is %lx\n", cpu_callout_map); + goto exit_just_unlock; + } +#endif + if (spinlock_count == 1) { + int time, end_time, dum; + int i; + int cpu_logged_in[MAX_NO_CPUS] = {[0 ... MAX_NO_CPUS - 1] = (0) + }; + if (remote_debug) { + printk("kgdb : cpu %d entry, syncing others\n", + smp_processor_id()); + } + for (i = 0; i < MAX_NO_CPUS; i++) { + /* + * Use trylock as we may already hold the lock if + * we are holding the cpu. Net result is all + * locked. + */ + spin_trylock(&waitlocks[i]); + } + for (i = 0; i < MAX_NO_CPUS; i++) + cpu_logged_in[i] = 0; + /* + * Wait for their arrival. We know the watch dog is active if + * in_kgdb() has ever been called, as it is always called on a + * watchdog tick. + */ + rdtsc(dum, time); + end_time = time + 2; /* Note: we use the High order bits! */ + i = 1; + if (num_online_cpus() > 1) { + int me_in_kgdb = in_kgdb_entry_log[smp_processor_id()]; + smp_send_nmi_allbutself(); + while (i < num_online_cpus() && time != end_time) { + int j; + for (j = 0; j < MAX_NO_CPUS; j++) { + if (waiting_cpus[j].task && + !cpu_logged_in[j]) { + i++; + cpu_logged_in[j] = 1; + if (remote_debug) { + printk + ("kgdb : cpu %d arrived at kgdb\n", + j); + } + break; + } else if (!waiting_cpus[j].task && + !cpu_online(j)) { + waiting_cpus[j].task = NOCPU; + cpu_logged_in[j] = 1; + waiting_cpus[j].hold = 1; + break; + } + if (!waiting_cpus[j].task && + in_kgdb_here_log[j]) { + + int wait = 100000; + while (wait--) ; + if (!waiting_cpus[j].task && + in_kgdb_here_log[j]) { + printk + ("kgdb : cpu %d stall" + " in in_kgdb\n", + j); + i++; + cpu_logged_in[j] = 1; + waiting_cpus[j].task = + (struct task_struct + *) 1; + } + } + } + + if (in_kgdb_entry_log[smp_processor_id()] > + (me_in_kgdb + 10)) { + break; + } + + rdtsc(dum, time); + } + if (i < num_online_cpus()) { + printk + ("kgdb : time out, proceeding without sync\n"); +#if 0 + printk("kgdb : Waiting_cpus: 0 = %d, 1 = %d\n", + waiting_cpus[0].task != 0, + waiting_cpus[1].task != 0); + printk("kgdb : Cpu_logged in: 0 = %d, 1 = %d\n", + cpu_logged_in[0], cpu_logged_in[1]); + printk + ("kgdb : in_kgdb_here_log in: 0 = %d, 1 = %d\n", + in_kgdb_here_log[0] != 0, + in_kgdb_here_log[1] != 0); +#endif + entry_state = NO_SYNC; + } else { +#if 0 + int ent = + in_kgdb_entry_log[smp_processor_id()] - + me_in_kgdb; + printk("kgdb : sync after %d entries\n", ent); +#endif + } + } else { + if (remote_debug) { + printk + ("kgdb : %d cpus, but watchdog not active\n" + "proceeding without locking down other cpus\n", + num_online_cpus()); + entry_state = NO_NMI; + } + } + } +#endif + + if (remote_debug) { + printk("handle_exception(exceptionVector=%d, " + "signo=%d, err_code=%d, linux_regs=%p)\n", + exceptionVector, signo, err_code, linux_regs); + printk(" address: %lx\n", address); + + if (debug_regs) { + print_regs(®s); + show_trace(current, (unsigned long *)®s); + } + } + + /* Disable hardware debugging while we are in kgdb */ + /* Get the debug register status register */ +/* *INDENT-OFF* */ + __asm__("movl %0,%%db7" + : /* no output */ + :"r"(0)); + + asm volatile ("movl %%db6, %0\n" + :"=r" (hw_breakpoint_status) + :); + +/* *INDENT-ON* */ + switch (exceptionVector) { + case 0: /* divide error */ + case 1: /* debug exception */ + case 2: /* NMI */ + case 3: /* breakpoint */ + case 4: /* overflow */ + case 5: /* bounds check */ + case 6: /* invalid opcode */ + case 7: /* device not available */ + case 8: /* double fault (errcode) */ + case 10: /* invalid TSS (errcode) */ + case 12: /* stack fault (errcode) */ + case 16: /* floating point error */ + case 17: /* alignment check (errcode) */ + default: /* any undocumented */ + break; + case 11: /* segment not present (errcode) */ + case 13: /* general protection (errcode) */ + case 14: /* page fault (special errcode) */ + case 19: /* cache flush denied */ + if (mem_err_expected) { + /* + * This fault occured because of the + * get_char or set_char routines. These + * two routines use either eax of edx to + * indirectly reference the location in + * memory that they are working with. + * For a page fault, when we return the + * instruction will be retried, so we + * have to make sure that these + * registers point to valid memory. + */ + mem_err = 1; /* set mem error flag */ + mem_err_expected = 0; + mem_err_cnt++; /* helps in debugging */ + /* make valid address */ + regs.eax = (long) &garbage_loc; + /* make valid address */ + regs.edx = (long) &garbage_loc; + if (remote_debug) + printk("Return after memory error: " + "mem_err_cnt=%d\n", mem_err_cnt); + if (debug_regs) + print_regs(®s); + goto exit_kgdb; + } + break; + } + if (remote_debug) + printk("kgdb : entered kgdb on cpu %d\n", smp_processor_id()); + + gdb_i386vector = exceptionVector; + gdb_i386errcode = err_code; + kgdb_info.called_from = __builtin_return_address(0); +#ifdef CONFIG_SMP + /* + * OK, we can now communicate, lets tell gdb about the sync. + * but only if we had a problem. + */ + switch (entry_state) { + case NO_NMI: + to_gdb("NMI not active, other cpus not stopped\n"); + break; + case NO_SYNC: + to_gdb("Some cpus not stopped, see 'kgdb_info' for details\n"); + default:; + } + +#endif +/* + * Set up the gdb function call area. + */ + trap_cpu = smp_processor_id(); + OLD_esp = NEW_esp = (int) (&linux_regs->esp); + + IF_SMP(once_again:) + /* reply to host that an exception has occurred */ + remcomOutBuffer[0] = 'S'; + remcomOutBuffer[1] = hexchars[signo >> 4]; + remcomOutBuffer[2] = hexchars[signo % 16]; + remcomOutBuffer[3] = 0; + + if (kgdb_eth_is_initializing) { + kgdb_eth_is_initializing = 0; + } else { + putpacket(remcomOutBuffer); + } + + kgdb_eth_reply_arp(); + while (1 == 1) { + error = 0; + remcomOutBuffer[0] = 0; + getpacket(remcomInBuffer); + switch (remcomInBuffer[0]) { + case '?': + remcomOutBuffer[0] = 'S'; + remcomOutBuffer[1] = hexchars[signo >> 4]; + remcomOutBuffer[2] = hexchars[signo % 16]; + remcomOutBuffer[3] = 0; + break; + case 'd': + remote_debug = !(remote_debug); /* toggle debug flag */ + printk("Remote debug %s\n", + remote_debug ? "on" : "off"); + break; + case 'g': /* return the value of the CPU registers */ + get_gdb_regs(usethread, ®s, gdb_regs); + mem2hex((char *) gdb_regs, + remcomOutBuffer, NUMREGBYTES, 0); + break; + case 'G': /* set the value of the CPU registers - return OK */ + hex2mem(&remcomInBuffer[1], + (char *) gdb_regs, NUMREGBYTES, 0); + if (!usethread || usethread == current) { + gdb_regs_to_regs(gdb_regs, ®s); + strcpy(remcomOutBuffer, "OK"); + } else { + strcpy(remcomOutBuffer, "E00"); + } + break; + + case 'P':{ /* set the value of a single CPU register - + return OK */ + /* + * For some reason, gdb wants to talk about psudo + * registers (greater than 15). These may have + * meaning for ptrace, but for us it is safe to + * ignor them. We do this by dumping them into + * _GS which we also ignor, but do have memory for. + */ + int regno; + + ptr = &remcomInBuffer[1]; + regs_to_gdb_regs(gdb_regs, ®s); + if ((!usethread || usethread == current) && + hexToInt(&ptr, ®no) && + *ptr++ == '=' && (regno >= 0)) { + regno = + (regno >= NUMREGS ? _GS : regno); + hex2mem(ptr, (char *) &gdb_regs[regno], + 4, 0); + gdb_regs_to_regs(gdb_regs, ®s); + strcpy(remcomOutBuffer, "OK"); + break; + } + strcpy(remcomOutBuffer, "E01"); + break; + } + + /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */ + case 'm': + /* TRY TO READ %x,%x. IF SUCCEED, SET PTR = 0 */ + ptr = &remcomInBuffer[1]; + if (hexToInt(&ptr, &addr) && + (*(ptr++) == ',') && (hexToInt(&ptr, &length))) { + ptr = 0; + /* + * hex doubles the byte count + */ + if (length > (BUFMAX / 2)) + length = BUFMAX / 2; + mem2hex((char *) addr, + remcomOutBuffer, length, 1); + if (mem_err) { + strcpy(remcomOutBuffer, "E03"); + debug_error("memory fault\n", NULL); + } + } + + if (ptr) { + strcpy(remcomOutBuffer, "E01"); + debug_error + ("malformed read memory command: %s\n", + remcomInBuffer); + } + break; + + /* MAA..AA,LLLL: + Write LLLL bytes at address AA.AA return OK */ + case 'M': + /* TRY TO READ '%x,%x:'. IF SUCCEED, SET PTR = 0 */ + ptr = &remcomInBuffer[1]; + if (hexToInt(&ptr, &addr) && + (*(ptr++) == ',') && + (hexToInt(&ptr, &length)) && (*(ptr++) == ':')) { + hex2mem(ptr, (char *) addr, length, 1); + + if (mem_err) { + strcpy(remcomOutBuffer, "E03"); + debug_error("memory fault\n", NULL); + } else { + strcpy(remcomOutBuffer, "OK"); + } + + ptr = 0; + } + if (ptr) { + strcpy(remcomOutBuffer, "E02"); + debug_error + ("malformed write memory command: %s\n", + remcomInBuffer); + } + break; + case 'S': + remcomInBuffer[0] = 's'; + case 'C': + /* Csig;AA..AA where ;AA..AA is optional + * continue with signal + * Since signals are meaning less to us, delete that + * part and then fall into the 'c' code. + */ + ptr = &remcomInBuffer[1]; + length = 2; + while (*ptr && *ptr != ';') { + length++; + ptr++; + } + if (*ptr) { + do { + ptr++; + *(ptr - length++) = *ptr; + } while (*ptr); + } else { + remcomInBuffer[1] = 0; + } + + /* cAA..AA Continue at address AA..AA(optional) */ + /* sAA..AA Step one instruction from AA..AA(optional) */ + /* D detach, reply OK and then continue */ + case 'c': + case 's': + case 'D': + + /* try to read optional parameter, + pc unchanged if no parm */ + ptr = &remcomInBuffer[1]; + if (hexToInt(&ptr, &addr)) { + if (remote_debug) + printk("Changing EIP to 0x%x\n", addr); + + regs.eip = addr; + } + + newPC = regs.eip; + + if (kgdb_eth != -1) { + kgdb_eth_set_trapmode(0); + } + + /* clear the trace bit */ + regs.eflags &= 0xfffffeff; + + /* set the trace bit if we're stepping */ + if (remcomInBuffer[0] == 's') + regs.eflags |= 0x100; + + /* detach is a friendly version of continue. Note that + debugging is still enabled (e.g hit control C) + */ + if (remcomInBuffer[0] == 'D') { + strcpy(remcomOutBuffer, "OK"); + putpacket(remcomOutBuffer); + } + + if (remote_debug) { + printk("Resuming execution\n"); + print_regs(®s); + } + asm volatile ("movl %%db6, %0\n":"=r" (dr6) + :); + if (!(dr6 & 0x4000)) { + for (breakno = 0; breakno < 4; ++breakno) { + if (dr6 & (1 << breakno) && + (breakinfo[breakno].type == 0)) { + /* Set restore flag */ + regs.eflags |= 0x10000; + break; + } + } + } + correct_hw_break(); + asm volatile ("movl %0, %%db6\n"::"r" (0)); + goto exit_kgdb; + + /* kill the program */ + case 'k': /* do nothing */ + break; + + /* query */ + case 'q': + nothreads = 0; + switch (remcomInBuffer[1]) { + case 'f': + threadid = 1; + thread_list = 2; + thread_list_start = (usethread ? : current); + case 's': + if (!cmp_str(&remcomInBuffer[2], + "ThreadInfo", 10)) + break; + + remcomOutBuffer[nothreads++] = 'm'; + for (; threadid < PID_MAX + MAX_NO_CPUS; + threadid++) { + thread = getthread(threadid); + if (thread) { + nothreads += int_to_hex_v( + &remcomOutBuffer[ + nothreads], + threadid); + if (thread_min > threadid) + thread_min = threadid; + remcomOutBuffer[ + nothreads] = ','; + nothreads++; + if (nothreads > BUFMAX - 10) + break; + } + } + if (remcomOutBuffer[nothreads - 1] == 'm') { + remcomOutBuffer[nothreads - 1] = 'l'; + } else { + nothreads--; + } + remcomOutBuffer[nothreads] = 0; + break; + +#ifdef old_thread_list /* Old thread info request */ + case 'L': + /* List threads */ + thread_list = 2; + thread_list_start = (usethread ? : current); + unpack_byte(remcomInBuffer + 3, &maxthreads); + unpack_threadid(remcomInBuffer + 5, &thref); + do { + int buf_thread_limit = + (BUFMAX - 22) / BUF_THREAD_ID_SIZE; + if (maxthreads > buf_thread_limit) { + maxthreads = buf_thread_limit; + } + } while (0); + remcomOutBuffer[0] = 'q'; + remcomOutBuffer[1] = 'M'; + remcomOutBuffer[4] = '0'; + pack_threadid(remcomOutBuffer + 5, &thref); + + threadid = threadref_to_int(&thref); + for (nothreads = 0; + nothreads < maxthreads && + threadid < PID_MAX + MAX_NO_CPUS; + threadid++) { + thread = getthread(threadid); + if (thread) { + int_to_threadref(&thref, + threadid); + pack_threadid(remcomOutBuffer + + 21 + + nothreads * 16, + &thref); + nothreads++; + if (thread_min > threadid) + thread_min = threadid; + } + } + + if (threadid == PID_MAX + MAX_NO_CPUS) { + remcomOutBuffer[4] = '1'; + } + pack_hex_byte(remcomOutBuffer + 2, nothreads); + remcomOutBuffer[21 + nothreads * 16] = '\0'; + break; +#endif + case 'C': + /* Current thread id */ + remcomOutBuffer[0] = 'Q'; + remcomOutBuffer[1] = 'C'; + threadid = current->pid; + if (!threadid) { + /* + * idle thread + */ + for (threadid = PID_MAX; + threadid < PID_MAX + MAX_NO_CPUS; + threadid++) { + if (current == + idle_task(threadid - + PID_MAX)) + break; + } + } + int_to_threadref(&thref, threadid); + pack_threadid(remcomOutBuffer + 2, &thref); + remcomOutBuffer[18] = '\0'; + break; + + case 'E': + /* Print exception info */ + printexceptioninfo(exceptionVector, + err_code, remcomOutBuffer); + break; + case 'T':{ + char * nptr; + /* Thread extra info */ + if (!cmp_str(&remcomInBuffer[2], + "hreadExtraInfo,", 15)) { + break; + } + ptr = &remcomInBuffer[17]; + hexToInt(&ptr, &threadid); + thread = getthread(threadid); + nptr = &thread->comm[0]; + length = 0; + ptr = &remcomOutBuffer[0]; + do { + length++; + ptr = pack_hex_byte(ptr, *nptr++); + } while (*nptr && length < 16); + /* + * would like that 16 to be the size of + * task_struct.comm but don't know the + * syntax.. + */ + *ptr = 0; + } + } + break; + + /* task related */ + case 'H': + switch (remcomInBuffer[1]) { + case 'g': + ptr = &remcomInBuffer[2]; + hexToInt(&ptr, &threadid); + thread = getthread(threadid); + if (!thread) { + remcomOutBuffer[0] = 'E'; + remcomOutBuffer[1] = '\0'; + break; + } + /* + * Just in case I forget what this is all about, + * the "thread info" command to gdb causes it + * to ask for a thread list. It then switches + * to each thread and asks for the registers. + * For this (and only this) usage, we want to + * fudge the registers of tasks not on the run + * list (i.e. waiting) to show the routine that + * called schedule. Also, gdb, is a minimalist + * in that if the current thread is the last + * it will not re-read the info when done. + * This means that in this case we must show + * the real registers. So here is how we do it: + * Each entry we keep track of the min + * thread in the list (the last that gdb will) + * get info for. We also keep track of the + * starting thread. + * "thread_list" is cleared when switching back + * to the min thread if it is was current, or + * if it was not current, thread_list is set + * to 1. When the switch to current comes, + * if thread_list is 1, clear it, else do + * nothing. + */ + usethread = thread; + if ((thread_list == 1) && + (thread == thread_list_start)) { + thread_list = 0; + } + if (thread_list && (threadid == thread_min)) { + if (thread == thread_list_start) { + thread_list = 0; + } else { + thread_list = 1; + } + } + /* follow through */ + case 'c': + remcomOutBuffer[0] = 'O'; + remcomOutBuffer[1] = 'K'; + remcomOutBuffer[2] = '\0'; + break; + } + break; + + /* Query thread status */ + case 'T': + ptr = &remcomInBuffer[1]; + hexToInt(&ptr, &threadid); + thread = getthread(threadid); + if (thread) { + remcomOutBuffer[0] = 'O'; + remcomOutBuffer[1] = 'K'; + remcomOutBuffer[2] = '\0'; + if (thread_min > threadid) + thread_min = threadid; + } else { + remcomOutBuffer[0] = 'E'; + remcomOutBuffer[1] = '\0'; + } + break; + + case 'Y': /* set up a hardware breakpoint */ + ptr = &remcomInBuffer[1]; + hexToInt(&ptr, &breakno); + ptr++; + hexToInt(&ptr, &breaktype); + ptr++; + hexToInt(&ptr, &length); + ptr++; + hexToInt(&ptr, &addr); + if (set_hw_break(breakno & 0x3, + breaktype & 0x3, + length & 0x3, addr) == 0) { + strcpy(remcomOutBuffer, "OK"); + } else { + strcpy(remcomOutBuffer, "ERROR"); + } + break; + + /* Remove hardware breakpoint */ + case 'y': + ptr = &remcomInBuffer[1]; + hexToInt(&ptr, &breakno); + if (remove_hw_break(breakno & 0x3) == 0) { + strcpy(remcomOutBuffer, "OK"); + } else { + strcpy(remcomOutBuffer, "ERROR"); + } + break; + + case 'r': /* reboot */ + strcpy(remcomOutBuffer, "OK"); + putpacket(remcomOutBuffer); + /*to_gdb("Rebooting\n"); */ + /* triplefault no return from here */ + { + static long no_idt[2]; + __asm__ __volatile__("lidt %0"::"m"(no_idt[0])); + BREAKPOINT; + } + + } /* switch */ + + /* reply to the request */ + putpacket(remcomOutBuffer); + } /* while(1==1) */ + /* + * reached by goto only. + */ + exit_kgdb: + /* + * Here is where we set up to trap a gdb function call. NEW_esp + * will be changed if we are trying to do this. We handle both + * adding and subtracting, thus allowing gdb to put grung on + * the stack which it removes later. + */ + if (NEW_esp != OLD_esp) { + int *ptr = END_OF_LOOKASIDE; + if (NEW_esp < OLD_esp) + ptr -= (OLD_esp - NEW_esp) / sizeof (int); + *--ptr = linux_regs->eflags; + *--ptr = linux_regs->xcs; + *--ptr = linux_regs->eip; + *--ptr = linux_regs->ecx; + *--ptr = linux_regs->ebx; + *--ptr = linux_regs->eax; + linux_regs->ecx = NEW_esp - (sizeof (int) * 6); + linux_regs->ebx = (unsigned int) END_OF_LOOKASIDE; + if (NEW_esp < OLD_esp) { + linux_regs->eip = (unsigned int) fn_call_stub; + } else { + linux_regs->eip = (unsigned int) fn_rtn_stub; + linux_regs->eax = NEW_esp; + } + linux_regs->eflags &= ~(IF_BIT | TF_BIT); + } +#ifdef CONFIG_SMP + /* + * Release gdb wait locks + * Sanity check time. Must have at least one cpu to run. Also single + * step must not be done if the current cpu is on hold. + */ + if (spinlock_count == 1) { + int ss_hold = (regs.eflags & 0x100) && kgdb_info.hold_on_sstep; + int cpu_avail = 0; + int i; + + for (i = 0; i < MAX_NO_CPUS; i++) { + if (!cpu_online(i)) + break; + if (!hold_cpu(i)) { + cpu_avail = 1; + } + } + /* + * Early in the bring up there will be NO cpus on line... + */ + if (!cpu_avail && !cpus_empty(cpu_online_map)) { + to_gdb("No cpus unblocked, see 'kgdb_info.hold_cpu'\n"); + goto once_again; + } + if (hold_cpu(smp_processor_id()) && (regs.eflags & 0x100)) { + to_gdb + ("Current cpu must be unblocked to single step\n"); + goto once_again; + } + if (!(ss_hold)) { + int i; + for (i = 0; i < MAX_NO_CPUS; i++) { + if (!hold_cpu(i)) { + spin_unlock(&waitlocks[i]); + } + } + } else { + spin_unlock(&waitlocks[smp_processor_id()]); + } + /* Release kgdb spinlock */ + KGDB_SPIN_UNLOCK(&kgdb_spinlock); + /* + * If this cpu is on hold, this is where we + * do it. Note, the NMI will pull us out of here, + * but will return as the above lock is not held. + * We will stay here till another cpu releases the lock for us. + */ + spin_unlock_wait(waitlocks + smp_processor_id()); + kgdb_local_irq_restore(flags); + return (0); + } +#if 0 +exit_just_unlock: +#endif +#endif + /* Release kgdb spinlock */ + KGDB_SPIN_UNLOCK(&kgdb_spinlock); + kgdb_local_irq_restore(flags); + return (0); +} + +/* this function is used to set up exception handlers for tracing and + * breakpoints. + * This function is not needed as the above line does all that is needed. + * We leave it for backward compatitability... + */ +void +set_debug_traps(void) +{ + /* + * linux_debug_hook is defined in traps.c. We store a pointer + * to our own exception handler into it. + + * But really folks, every hear of labeled common, an old Fortran + * concept. Lots of folks can reference it and it is define if + * anyone does. Only one can initialize it at link time. We do + * this with the hook. See the statement above. No need for any + * executable code and it is ready as soon as the kernel is + * loaded. Very desirable in kernel debugging. + + linux_debug_hook = handle_exception ; + */ + + /* In case GDB is started before us, ack any packets (presumably + "$?#xx") sitting there. + putDebugChar ('+'); + + initialized = 1; + */ +} + +/* This function will generate a breakpoint exception. It is used at the + beginning of a program to sync up with a debugger and can be used + otherwise as a quick means to stop program execution and "break" into + the debugger. */ +/* But really, just use the BREAKPOINT macro. We will handle the int stuff + */ + +#ifdef later +/* + * possibly we should not go thru the traps.c code at all? Someday. + */ +void +do_kgdb_int3(struct pt_regs *regs, long error_code) +{ + kgdb_handle_exception(3, 5, error_code, regs); + return; +} +#endif +#undef regs +#ifdef CONFIG_TRAP_BAD_SYSCALL_EXITS +asmlinkage void +bad_sys_call_exit(int stuff) +{ + struct pt_regs *regs = (struct pt_regs *) &stuff; + printk("Sys call %d return with %x preempt_count\n", + (int) regs->orig_eax, preempt_count()); +} +#endif +#ifdef CONFIG_STACK_OVERFLOW_TEST +#include +asmlinkage void +stack_overflow(void) +{ +#ifdef BREAKPOINT + BREAKPOINT; +#else + printk("Kernel stack overflow, looping forever\n"); +#endif + while (1) { + } +} +#endif + +#if defined(CONFIG_SMP) || defined(CONFIG_KGDB_CONSOLE) +char gdbconbuf[BUFMAX]; + +static void +kgdb_gdb_message(const char *s, unsigned count) +{ + int i; + int wcount; + char *bufptr; + /* + * This takes care of NMI while spining out chars to gdb + */ + IF_SMP(in_kgdb_console = 1); + gdbconbuf[0] = 'O'; + bufptr = gdbconbuf + 1; + while (count > 0) { + if ((count << 1) > (BUFMAX - 2)) { + wcount = (BUFMAX - 2) >> 1; + } else { + wcount = count; + } + count -= wcount; + for (i = 0; i < wcount; i++) { + bufptr = pack_hex_byte(bufptr, s[i]); + } + *bufptr = '\0'; + s += wcount; + + putpacket(gdbconbuf); + + } + IF_SMP(in_kgdb_console = 0); +} +#endif +#ifdef CONFIG_SMP +static void +to_gdb(const char *s) +{ + int count = 0; + while (s[count] && (count++ < BUFMAX)) ; + kgdb_gdb_message(s, count); +} +#endif +#ifdef CONFIG_KGDB_CONSOLE +#include +#include +#include +#include +#include + +void +kgdb_console_write(struct console *co, const char *s, unsigned count) +{ + + if (gdb_i386vector == -1) { + /* + * We have not yet talked to gdb. What to do... + * lets break, on continue we can do the write. + * But first tell him whats up. Uh, well no can do, + * as this IS the console. Oh well... + * We do need to wait or the messages will be lost. + * Other option would be to tell the above code to + * ignore this breakpoint and do an auto return, + * but that might confuse gdb. Also this happens + * early enough in boot up that we don't have the traps + * set up yet, so... + */ + breakpoint(); + } + kgdb_gdb_message(s, count); +} + +/* + * ------------------------------------------------------------ + * Serial KGDB driver + * ------------------------------------------------------------ + */ + +static struct console kgdbcons = { + name:"kgdb", + write:kgdb_console_write, +#ifdef CONFIG_KGDB_USER_CONSOLE + device:kgdb_console_device, +#endif + flags:CON_PRINTBUFFER | CON_ENABLED, + index:-1, +}; + +/* + * The trick here is that this file gets linked before printk.o + * That means we get to peer at the console info in the command + * line before it does. If we are up, we register, otherwise, + * do nothing. By returning 0, we allow printk to look also. + */ +static int kgdb_console_enabled; + +int __init +kgdb_console_init(char *str) +{ + if ((strncmp(str, "kgdb", 4) == 0) || (strncmp(str, "gdb", 3) == 0)) { + register_console(&kgdbcons); + kgdb_console_enabled = 1; + } + return 0; /* let others look at the string */ +} + +__setup("console=", kgdb_console_init); + +#ifdef CONFIG_KGDB_USER_CONSOLE +static kdev_t kgdb_console_device(struct console *c); +/* This stuff sort of works, but it knocks out telnet devices + * we are leaving it here in case we (or you) find time to figure it out + * better.. + */ + +/* + * We need a real char device as well for when the console is opened for user + * space activities. + */ + +static int +kgdb_consdev_open(struct inode *inode, struct file *file) +{ + return 0; +} + +static ssize_t +kgdb_consdev_write(struct file *file, const char *buf, + size_t count, loff_t * ppos) +{ + int size, ret = 0; + static char kbuf[128]; + static DECLARE_MUTEX(sem); + + /* We are not reentrant... */ + if (down_interruptible(&sem)) + return -ERESTARTSYS; + + while (count > 0) { + /* need to copy the data from user space */ + size = count; + if (size > sizeof (kbuf)) + size = sizeof (kbuf); + if (copy_from_user(kbuf, buf, size)) { + ret = -EFAULT; + break;; + } + kgdb_console_write(&kgdbcons, kbuf, size); + count -= size; + ret += size; + buf += size; + } + + up(&sem); + + return ret; +} + +struct file_operations kgdb_consdev_fops = { + open:kgdb_consdev_open, + write:kgdb_consdev_write +}; +static kdev_t +kgdb_console_device(struct console *c) +{ + return MKDEV(TTYAUX_MAJOR, 1); +} + +/* + * This routine gets called from the serial stub in the i386/lib + * This is so it is done late in bring up (just before the console open). + */ +void +kgdb_console_finit(void) +{ + if (kgdb_console_enabled) { + char *cptr = cdevname(MKDEV(TTYAUX_MAJOR, 1)); + char *cp = cptr; + while (*cptr && *cptr != '(') + cptr++; + *cptr = 0; + unregister_chrdev(TTYAUX_MAJOR, cp); + register_chrdev(TTYAUX_MAJOR, "kgdb", &kgdb_consdev_fops); + } +} +#endif +#endif +#ifdef CONFIG_KGDB_TS +#include /* time stamp code */ +#include /* in_interrupt */ +#ifdef CONFIG_KGDB_TS_64 +#define DATA_POINTS 64 +#endif +#ifdef CONFIG_KGDB_TS_128 +#define DATA_POINTS 128 +#endif +#ifdef CONFIG_KGDB_TS_256 +#define DATA_POINTS 256 +#endif +#ifdef CONFIG_KGDB_TS_512 +#define DATA_POINTS 512 +#endif +#ifdef CONFIG_KGDB_TS_1024 +#define DATA_POINTS 1024 +#endif +#ifndef DATA_POINTS +#define DATA_POINTS 128 /* must be a power of two */ +#endif +#define INDEX_MASK (DATA_POINTS - 1) +#if (INDEX_MASK & DATA_POINTS) +#error "CONFIG_KGDB_TS_COUNT must be a power of 2" +#endif +struct kgdb_and_then_struct { +#ifdef CONFIG_SMP + int on_cpu; +#endif + struct task_struct *task; + long long at_time; + int from_ln; + char *in_src; + void *from; + int *with_shpf; + int data0; + int data1; +}; +struct kgdb_and_then_struct2 { +#ifdef CONFIG_SMP + int on_cpu; +#endif + struct task_struct *task; + long long at_time; + int from_ln; + char *in_src; + void *from; + int *with_shpf; + struct task_struct *t1; + struct task_struct *t2; +}; +struct kgdb_and_then_struct kgdb_data[DATA_POINTS]; + +struct kgdb_and_then_struct *kgdb_and_then = &kgdb_data[0]; +int kgdb_and_then_count; + +void +kgdb_tstamp(int line, char *source, int data0, int data1) +{ + static spinlock_t ts_spin = SPIN_LOCK_UNLOCKED; + int flags; + kgdb_local_irq_save(flags); + spin_lock(&ts_spin); + rdtscll(kgdb_and_then->at_time); +#ifdef CONFIG_SMP + kgdb_and_then->on_cpu = smp_processor_id(); +#endif + kgdb_and_then->task = current; + kgdb_and_then->from_ln = line; + kgdb_and_then->in_src = source; + kgdb_and_then->from = __builtin_return_address(0); + kgdb_and_then->with_shpf = (int *) (((flags & IF_BIT) >> 9) | + (preempt_count() << 8)); + kgdb_and_then->data0 = data0; + kgdb_and_then->data1 = data1; + kgdb_and_then = &kgdb_data[++kgdb_and_then_count & INDEX_MASK]; + spin_unlock(&ts_spin); + kgdb_local_irq_restore(flags); +#ifdef CONFIG_PREEMPT + +#endif + return; +} +#endif +typedef int gdb_debug_hook(int exceptionVector, + int signo, int err_code, struct pt_regs *linux_regs); +gdb_debug_hook *linux_debug_hook = &kgdb_handle_exception; /* histerical reasons... */ + +static int __init kgdb_opt_kgdbeth(char *str) +{ + kgdb_eth = simple_strtoul(str, NULL, 10); + return 1; +} + +static int __init kgdb_opt_kgdbeth_remoteip(char *str) +{ + kgdb_remoteip = in_aton(str); + return 1; +} + +static int __init kgdb_opt_kgdbeth_listenport(char *str) +{ + kgdb_listenport = simple_strtoul(str, NULL, 10); + kgdb_sendport = kgdb_listenport - 1; + return 1; +} + +static int __init parse_hw_addr(char *str, unsigned char *addr) +{ + int i; + char *p; + + p = str; + i = 0; + while(1) + { + unsigned int c; + + sscanf(p, "%x:", &c); + addr[i++] = c; + while((*p != 0) && (*p != ':')) { + p++; + } + if (*p == 0) { + break; + } + p++; + } + + return 1; +} + +static int __init kgdb_opt_kgdbeth_remotemac(char *str) +{ + return parse_hw_addr(str, kgdb_remotemac); +} +static int __init kgdb_opt_kgdbeth_localmac(char *str) +{ + return parse_hw_addr(str, kgdb_localmac); +} + + +__setup("gdbeth=", kgdb_opt_kgdbeth); +__setup("gdbeth_remoteip=", kgdb_opt_kgdbeth_remoteip); +__setup("gdbeth_listenport=", kgdb_opt_kgdbeth_listenport); +__setup("gdbeth_remotemac=", kgdb_opt_kgdbeth_remotemac); +__setup("gdbeth_localmac=", kgdb_opt_kgdbeth_localmac); + --- diff/arch/i386/lib/kgdb_serial.c 1970-01-01 01:00:00.000000000 +0100 +++ source/arch/i386/lib/kgdb_serial.c 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,499 @@ +/* + * Serial interface GDB stub + * + * Written (hacked together) by David Grothe (dave@gcom.com) + * Modified to allow invokation early in boot see also + * kgdb.h for instructions by George Anzinger(george@mvista.com) + * Modified to handle debugging over ethernet by Robert Walsh + * and wangdi , based on + * code by San Mehat. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef CONFIG_KGDB_USER_CONSOLE +extern void kgdb_console_finit(void); +#endif +#define PRNT_off +#define TEST_EXISTANCE +#ifdef PRNT +#define dbprintk(s) printk s +#else +#define dbprintk(s) +#endif +#define TEST_INTERRUPT_off +#ifdef TEST_INTERRUPT +#define intprintk(s) printk s +#else +#define intprintk(s) +#endif + +#define IRQ_T(info) ((info->flags & ASYNC_SHARE_IRQ) ? SA_SHIRQ : SA_INTERRUPT) + +#define GDB_BUF_SIZE 512 /* power of 2, please */ + +static char gdb_buf[GDB_BUF_SIZE]; +static int gdb_buf_in_inx; +static atomic_t gdb_buf_in_cnt; +static int gdb_buf_out_inx; + +struct async_struct *gdb_async_info; +static int gdb_async_irq; + +#define outb_px(a,b) outb_p(b,a) + +static void program_uart(struct async_struct *info); +static void write_char(struct async_struct *info, int chr); +/* + * Get a byte from the hardware data buffer and return it + */ +static int +read_data_bfr(struct async_struct *info) +{ + char it = inb_p(info->port + UART_LSR); + + if (it & UART_LSR_DR) + return (inb_p(info->port + UART_RX)); + /* + * If we have a framing error assume somebody messed with + * our uart. Reprogram it and send '-' both ways... + */ + if (it & 0xc) { + program_uart(info); + write_char(info, '-'); + return ('-'); + } + return (-1); + +} /* read_data_bfr */ + +/* + * Get a char if available, return -1 if nothing available. + * Empty the receive buffer first, then look at the interface hardware. + + * Locking here is a bit of a problem. We MUST not lock out communication + * if we are trying to talk to gdb about a kgdb entry. ON the other hand + * we can loose chars in the console pass thru if we don't lock. It is also + * possible that we could hold the lock or be waiting for it when kgdb + * NEEDS to talk. Since kgdb locks down the world, it does not need locks. + * We do, of course have possible issues with interrupting a uart operation, + * but we will just depend on the uart status to help keep that straight. + + */ +static spinlock_t uart_interrupt_lock = SPIN_LOCK_UNLOCKED; +#ifdef CONFIG_SMP +extern spinlock_t kgdb_spinlock; +#endif + +static int +read_char(struct async_struct *info) +{ + int chr; + unsigned long flags; + local_irq_save(flags); +#ifdef CONFIG_SMP + if (!spin_is_locked(&kgdb_spinlock)) { + spin_lock(&uart_interrupt_lock); + } +#endif + if (atomic_read(&gdb_buf_in_cnt) != 0) { /* intr routine has q'd chars */ + chr = gdb_buf[gdb_buf_out_inx++]; + gdb_buf_out_inx &= (GDB_BUF_SIZE - 1); + atomic_dec(&gdb_buf_in_cnt); + } else { + chr = read_data_bfr(info); + } +#ifdef CONFIG_SMP + if (!spin_is_locked(&kgdb_spinlock)) { + spin_unlock(&uart_interrupt_lock); + } +#endif + local_irq_restore(flags); + return (chr); +} + +/* + * Wait until the interface can accept a char, then write it. + */ +static void +write_char(struct async_struct *info, int chr) +{ + while (!(inb_p(info->port + UART_LSR) & UART_LSR_THRE)) ; + + outb_p(chr, info->port + UART_TX); + +} /* write_char */ + +/* + * Mostly we don't need a spinlock, but since the console goes + * thru here with interrutps on, well, we need to catch those + * chars. + */ +/* + * This is the receiver interrupt routine for the GDB stub. + * It will receive a limited number of characters of input + * from the gdb host machine and save them up in a buffer. + * + * When the gdb stub routine tty_getDebugChar() is called it + * draws characters out of the buffer until it is empty and + * then reads directly from the serial port. + * + * We do not attempt to write chars from the interrupt routine + * since the stubs do all of that via tty_putDebugChar() which + * writes one byte after waiting for the interface to become + * ready. + * + * The debug stubs like to run with interrupts disabled since, + * after all, they run as a consequence of a breakpoint in + * the kernel. + * + * Perhaps someone who knows more about the tty driver than I + * care to learn can make this work for any low level serial + * driver. + */ +static irqreturn_t +gdb_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + struct async_struct *info; + unsigned long flags; + + info = gdb_async_info; + if (!info || !info->tty || irq != gdb_async_irq) + return IRQ_NONE; + + local_irq_save(flags); + spin_lock(&uart_interrupt_lock); + do { + int chr = read_data_bfr(info); + intprintk(("Debug char on int: %x hex\n", chr)); + if (chr < 0) + continue; + + if (chr == 3) { /* Ctrl-C means remote interrupt */ + BREAKPOINT; + continue; + } + + if (atomic_read(&gdb_buf_in_cnt) >= GDB_BUF_SIZE) { + /* buffer overflow tosses early char */ + read_char(info); + } + gdb_buf[gdb_buf_in_inx++] = chr; + gdb_buf_in_inx &= (GDB_BUF_SIZE - 1); + } while (inb_p(info->port + UART_IIR) & UART_IIR_RDI); + spin_unlock(&uart_interrupt_lock); + local_irq_restore(flags); + return IRQ_HANDLED; +} /* gdb_interrupt */ + +/* + * Just a NULL routine for testing. + */ +void +gdb_null(void) +{ +} /* gdb_null */ + +/* These structure are filled in with values defined in asm/kgdb_local.h + */ +static struct serial_state state = SB_STATE; +static struct async_struct local_info = SB_INFO; +static int ok_to_enable_ints = 0; +static void kgdb_enable_ints_now(void); + +extern char *kgdb_version; +/* + * Hook an IRQ for KGDB. + * + * This routine is called from tty_putDebugChar, below. + */ +static int ints_disabled = 1; +int +gdb_hook_interrupt(struct async_struct *info, int verb) +{ + struct serial_state *state = info->state; + unsigned long flags; + int port; +#ifdef TEST_EXISTANCE + int scratch, scratch2; +#endif + + /* The above fails if memory managment is not set up yet. + * Rather than fail the set up, just keep track of the fact + * and pick up the interrupt thing later. + */ + gdb_async_info = info; + port = gdb_async_info->port; + gdb_async_irq = state->irq; + if (verb) { + printk("kgdb %s : port =%x, IRQ=%d, divisor =%d\n", + kgdb_version, + port, + gdb_async_irq, gdb_async_info->state->custom_divisor); + } + local_irq_save(flags); +#ifdef TEST_EXISTANCE + /* Existance test */ + /* Should not need all this, but just in case.... */ + + scratch = inb_p(port + UART_IER); + outb_px(port + UART_IER, 0); + outb_px(0xff, 0x080); + scratch2 = inb_p(port + UART_IER); + outb_px(port + UART_IER, scratch); + if (scratch2) { + printk + ("gdb_hook_interrupt: Could not clear IER, not a UART!\n"); + local_irq_restore(flags); + return 1; /* We failed; there's nothing here */ + } + scratch2 = inb_p(port + UART_LCR); + outb_px(port + UART_LCR, 0xBF); /* set up for StarTech test */ + outb_px(port + UART_EFR, 0); /* EFR is the same as FCR */ + outb_px(port + UART_LCR, 0); + outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO); + scratch = inb_p(port + UART_IIR) >> 6; + if (scratch == 1) { + printk("gdb_hook_interrupt: Undefined UART type!" + " Not a UART! \n"); + local_irq_restore(flags); + return 1; + } else { + dbprintk(("gdb_hook_interrupt: UART type " + "is %d where 0=16450, 2=16550 3=16550A\n", scratch)); + } + scratch = inb_p(port + UART_MCR); + outb_px(port + UART_MCR, UART_MCR_LOOP | scratch); + outb_px(port + UART_MCR, UART_MCR_LOOP | 0x0A); + scratch2 = inb_p(port + UART_MSR) & 0xF0; + outb_px(port + UART_MCR, scratch); + if (scratch2 != 0x90) { + printk("gdb_hook_interrupt: " + "Loop back test failed! Not a UART!\n"); + local_irq_restore(flags); + return scratch2 + 1000; /* force 0 to fail */ + } +#endif /* test existance */ + program_uart(info); + local_irq_restore(flags); + + return (0); + +} /* gdb_hook_interrupt */ + +static void +program_uart(struct async_struct *info) +{ + int port = info->port; + + (void) inb_p(port + UART_RX); + outb_px(port + UART_IER, 0); + + (void) inb_p(port + UART_RX); /* serial driver comments say */ + (void) inb_p(port + UART_IIR); /* this clears the interrupt regs */ + (void) inb_p(port + UART_MSR); + outb_px(port + UART_LCR, UART_LCR_WLEN8 | UART_LCR_DLAB); + outb_px(port + UART_DLL, info->state->custom_divisor & 0xff); /* LS */ + outb_px(port + UART_DLM, info->state->custom_divisor >> 8); /* MS */ + outb_px(port + UART_MCR, info->MCR); + + outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1 | UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR); /* set fcr */ + outb_px(port + UART_LCR, UART_LCR_WLEN8); /* reset DLAB */ + outb_px(port + UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1); /* set fcr */ + if (!ints_disabled) { + intprintk(("KGDB: Sending %d to port %x offset %d\n", + gdb_async_info->IER, + (int) gdb_async_info->port, UART_IER)); + outb_px(gdb_async_info->port + UART_IER, gdb_async_info->IER); + } + return; +} + +/* + * tty_getDebugChar + * + * This is a GDB stub routine. It waits for a character from the + * serial interface and then returns it. If there is no serial + * interface connection then it returns a bogus value which will + * almost certainly cause the system to hang. In the + */ +int kgdb_in_isr = 0; +int kgdb_in_lsr = 0; +extern spinlock_t kgdb_spinlock; + +/* Caller takes needed protections */ + +int +tty_getDebugChar(void) +{ + volatile int chr, dum, time, end_time; + + dbprintk(("tty_getDebugChar(port %x): ", gdb_async_info->port)); + + if (gdb_async_info == NULL) { + gdb_hook_interrupt(&local_info, 0); + } + /* + * This trick says if we wait a very long time and get + * no char, return the -1 and let the upper level deal + * with it. + */ + rdtsc(dum, time); + end_time = time + 2; + while (((chr = read_char(gdb_async_info)) == -1) && + (end_time - time) > 0) { + rdtsc(dum, time); + }; + /* + * This covers our butts if some other code messes with + * our uart, hay, it happens :o) + */ + if (chr == -1) + program_uart(gdb_async_info); + + dbprintk(("%c\n", chr > ' ' && chr < 0x7F ? chr : ' ')); + return (chr); + +} /* tty_getDebugChar */ + +static int count = 3; +static spinlock_t one_at_atime = SPIN_LOCK_UNLOCKED; + +static int __init +kgdb_enable_ints(void) +{ + if (kgdb_eth != -1) { + return 0; + } + if (gdb_async_info == NULL) { + gdb_hook_interrupt(&local_info, 1); + } + ok_to_enable_ints = 1; + kgdb_enable_ints_now(); +#ifdef CONFIG_KGDB_USER_CONSOLE + kgdb_console_finit(); +#endif + return 0; +} + +#ifdef CONFIG_SERIAL_8250 +void shutdown_for_kgdb(struct async_struct *gdb_async_info); +#endif + +#ifdef CONFIG_DISCONTIGMEM +static inline int kgdb_mem_init_done(void) +{ + return highmem_start_page != NULL; +} +#else +static inline int kgdb_mem_init_done(void) +{ + return max_mapnr != 0; +} +#endif + +static void +kgdb_enable_ints_now(void) +{ + if (!spin_trylock(&one_at_atime)) + return; + if (!ints_disabled) + goto exit; + if (kgdb_mem_init_done() && + ints_disabled) { /* don't try till mem init */ +#ifdef CONFIG_SERIAL_8250 + /* + * The ifdef here allows the system to be configured + * without the serial driver. + * Don't make it a module, however, it will steal the port + */ + shutdown_for_kgdb(gdb_async_info); +#endif + ints_disabled = request_irq(gdb_async_info->state->irq, + gdb_interrupt, + IRQ_T(gdb_async_info), + "KGDB-stub", NULL); + intprintk(("KGDB: request_irq returned %d\n", ints_disabled)); + } + if (!ints_disabled) { + intprintk(("KGDB: Sending %d to port %x offset %d\n", + gdb_async_info->IER, + (int) gdb_async_info->port, UART_IER)); + outb_px(gdb_async_info->port + UART_IER, gdb_async_info->IER); + } + exit: + spin_unlock(&one_at_atime); +} + +/* + * tty_putDebugChar + * + * This is a GDB stub routine. It waits until the interface is ready + * to transmit a char and then sends it. If there is no serial + * interface connection then it simply returns to its caller, having + * pretended to send the char. Caller takes needed protections. + */ +void +tty_putDebugChar(int chr) +{ + dbprintk(("tty_putDebugChar(port %x): chr=%02x '%c', ints_on=%d\n", + gdb_async_info->port, + chr, + chr > ' ' && chr < 0x7F ? chr : ' ', ints_disabled ? 0 : 1)); + + if (gdb_async_info == NULL) { + gdb_hook_interrupt(&local_info, 0); + } + + write_char(gdb_async_info, chr); /* this routine will wait */ + count = (chr == '#') ? 0 : count + 1; + if ((count == 2)) { /* try to enable after */ + if (ints_disabled & ok_to_enable_ints) + kgdb_enable_ints_now(); /* try to enable after */ + + /* We do this a lot because, well we really want to get these + * interrupts. The serial driver will clear these bits when it + * initializes the chip. Every thing else it does is ok, + * but this. + */ + if (!ints_disabled) { + outb_px(gdb_async_info->port + UART_IER, + gdb_async_info->IER); + } + } + +} /* tty_putDebugChar */ + +/* + * This does nothing for the serial port, since it doesn't buffer. + */ + +void tty_flushDebugChar(void) +{ +} + +module_init(kgdb_enable_ints); --- diff/drivers/ieee1394/oui.c 1970-01-01 01:00:00.000000000 +0100 +++ source/drivers/ieee1394/oui.c 2003-10-29 11:26:50.000000000 +0000 @@ -0,0 +1,4943 @@ +/* Generated file for OUI database */ + +#include + +#ifdef CONFIG_IEEE1394_OUI_DB +struct oui_list_struct { + int oui; + char *name; +} oui_list[] = { + { 0x000000, "XEROX CORPORATION" }, + { 0x000001, "XEROX CORPORATION" }, + { 0x000002, "XEROX CORPORATION" }, + { 0x000003, "XEROX CORPORATION" }, + { 0x000004, "XEROX CORPORATION" }, + { 0x000005, "XEROX CORPORATION" }, + { 0x000006, "XEROX CORPORATION" }, + { 0x000007, "XEROX CORPORATION" }, + { 0x000008, "XEROX CORPORATION" }, + { 0x000009, "XEROX CORPORATION" }, + { 0x00000A, "OMRON TATEISI ELECTRONICS CO." }, + { 0x00000B, "MATRIX CORPORATION" }, + { 0x00000C, "CISCO SYSTEMS, INC." }, + { 0x00000D, "FIBRONICS LTD." }, + { 0x00000E, "FUJITSU LIMITED" }, + { 0x00000F, "NEXT, INC." }, + { 0x000010, "SYTEK INC." }, + { 0x000011, "NORMEREL SYSTEMES" }, + { 0x000012, "INFORMATION TECHNOLOGY LIMITED" }, + { 0x000013, "CAMEX" }, + { 0x000014, "NETRONIX" }, + { 0x000015, "DATAPOINT CORPORATION" }, + { 0x000016, "DU PONT PIXEL SYSTEMS ." }, + { 0x000017, "TEKELEC" }, + { 0x000018, "WEBSTER COMPUTER CORPORATION" }, + { 0x000019, "APPLIED DYNAMICS INTERNATIONAL" }, + { 0x00001A, "ADVANCED MICRO DEVICES" }, + { 0x00001B, "NOVELL INC." }, + { 0x00001C, "BELL TECHNOLOGIES" }, + { 0x00001D, "CABLETRON SYSTEMS, INC." }, + { 0x00001E, "TELSIST INDUSTRIA ELECTRONICA" }, + { 0x00001F, "Telco Systems, Inc." }, + { 0x000020, "DATAINDUSTRIER DIAB AB" }, + { 0x000021, "SUREMAN COMP. & COMMUN. CORP." }, + { 0x000022, "VISUAL TECHNOLOGY INC." }, + { 0x000023, "ABB INDUSTRIAL SYSTEMS AB" }, + { 0x000024, "CONNECT AS" }, + { 0x000025, "RAMTEK CORP." }, + { 0x000026, "SHA-KEN CO., LTD." }, + { 0x000027, "JAPAN RADIO COMPANY" }, + { 0x000028, "PRODIGY SYSTEMS CORPORATION" }, + { 0x000029, "IMC NETWORKS CORP." }, + { 0x00002A, "TRW - SEDD/INP" }, + { 0x00002B, "CRISP AUTOMATION, INC" }, + { 0x00002C, "AUTOTOTE LIMITED" }, + { 0x00002D, "CHROMATICS INC" }, + { 0x00002E, "SOCIETE EVIRA" }, + { 0x00002F, "TIMEPLEX INC." }, + { 0x000030, "VG LABORATORY SYSTEMS LTD" }, + { 0x000031, "QPSX COMMUNICATIONS PTY LTD" }, + { 0x000032, "Marconi plc" }, + { 0x000033, "EGAN MACHINERY COMPANY" }, + { 0x000034, "NETWORK RESOURCES CORPORATION" }, + { 0x000035, "SPECTRAGRAPHICS CORPORATION" }, + { 0x000036, "ATARI CORPORATION" }, + { 0x000037, "OXFORD METRICS LIMITED" }, + { 0x000038, "CSS LABS" }, + { 0x000039, "TOSHIBA CORPORATION" }, + { 0x00003A, "CHYRON CORPORATION" }, + { 0x00003B, "i Controls, Inc." }, + { 0x00003C, "AUSPEX SYSTEMS INC." }, + { 0x00003D, "UNISYS" }, + { 0x00003E, "SIMPACT" }, + { 0x00003F, "SYNTREX, INC." }, + { 0x000040, "APPLICON, INC." }, + { 0x000041, "ICE CORPORATION" }, + { 0x000042, "METIER MANAGEMENT SYSTEMS LTD." }, + { 0x000043, "MICRO TECHNOLOGY" }, + { 0x000044, "CASTELLE CORPORATION" }, + { 0x000045, "FORD AEROSPACE & COMM. CORP." }, + { 0x000046, "OLIVETTI NORTH AMERICA" }, + { 0x000047, "NICOLET INSTRUMENTS CORP." }, + { 0x000048, "SEIKO EPSON CORPORATION" }, + { 0x000049, "APRICOT COMPUTERS, LTD" }, + { 0x00004A, "ADC CODENOLL TECHNOLOGY CORP." }, + { 0x00004B, "ICL DATA OY" }, + { 0x00004C, "NEC CORPORATION" }, + { 0x00004D, "DCI CORPORATION" }, + { 0x00004E, "AMPEX CORPORATION" }, + { 0x00004F, "LOGICRAFT, INC." }, + { 0x000050, "RADISYS CORPORATION" }, + { 0x000051, "HOB ELECTRONIC GMBH & CO. KG" }, + { 0x000052, "Intrusion.com, Inc." }, + { 0x000053, "COMPUCORP" }, + { 0x000054, "MODICON, INC." }, + { 0x000055, "COMMISSARIAT A L`ENERGIE ATOM." }, + { 0x000056, "DR. B. STRUCK" }, + { 0x000057, "SCITEX CORPORATION LTD." }, + { 0x000058, "RACORE COMPUTER PRODUCTS INC." }, + { 0x000059, "HELLIGE GMBH" }, + { 0x00005A, "SysKonnect GmbH" }, + { 0x00005B, "ELTEC ELEKTRONIK AG" }, + { 0x00005C, "TELEMATICS INTERNATIONAL INC." }, + { 0x00005D, "CS TELECOM" }, + { 0x00005E, "USC INFORMATION SCIENCES INST" }, + { 0x00005F, "SUMITOMO ELECTRIC IND., LTD." }, + { 0x000060, "KONTRON ELEKTRONIK GMBH" }, + { 0x000061, "GATEWAY COMMUNICATIONS" }, + { 0x000062, "BULL HN INFORMATION SYSTEMS" }, + { 0x000063, "DR.ING.SEUFERT GMBH" }, + { 0x000064, "YOKOGAWA DIGITAL COMPUTER CORP" }, + { 0x000065, "NETWORK ASSOCIATES, INC." }, + { 0x000066, "TALARIS SYSTEMS, INC." }, + { 0x000067, "SOFT * RITE, INC." }, + { 0x000068, "ROSEMOUNT CONTROLS" }, + { 0x000069, "CONCORD COMMUNICATIONS INC" }, + { 0x00006A, "COMPUTER CONSOLES INC." }, + { 0x00006B, "SILICON GRAPHICS INC./MIPS" }, + { 0x00006D, "CRAY COMMUNICATIONS, LTD." }, + { 0x00006E, "ARTISOFT, INC." }, + { 0x00006F, "MADGE NETWORKS LTD." }, + { 0x000070, "HCL LIMITED" }, + { 0x000071, "ADRA SYSTEMS INC." }, + { 0x000072, "MINIWARE TECHNOLOGY" }, + { 0x000073, "SIECOR CORPORATION" }, + { 0x000074, "RICOH COMPANY LTD." }, + { 0x000075, "Nortel Networks" }, + { 0x000076, "ABEKAS VIDEO SYSTEM" }, + { 0x000077, "INTERPHASE CORPORATION" }, + { 0x000078, "LABTAM LIMITED" }, + { 0x000079, "NETWORTH INCORPORATED" }, + { 0x00007A, "DANA COMPUTER INC." }, + { 0x00007B, "RESEARCH MACHINES" }, + { 0x00007C, "AMPERE INCORPORATED" }, + { 0x00007D, "SUN MICROSYSTEMS, INC." }, + { 0x00007E, "CLUSTRIX CORPORATION" }, + { 0x00007F, "LINOTYPE-HELL AG" }, + { 0x000080, "CRAY COMMUNICATIONS A/S" }, + { 0x000081, "BAY NETWORKS" }, + { 0x000082, "LECTRA SYSTEMES SA" }, + { 0x000083, "TADPOLE TECHNOLOGY PLC" }, + { 0x000084, "SUPERNET" }, + { 0x000085, "CANON INC." }, + { 0x000086, "MEGAHERTZ CORPORATION" }, + { 0x000087, "HITACHI, LTD." }, + { 0x000088, "COMPUTER NETWORK TECH. CORP." }, + { 0x000089, "CAYMAN SYSTEMS INC." }, + { 0x00008A, "DATAHOUSE INFORMATION SYSTEMS" }, + { 0x00008B, "INFOTRON" }, + { 0x00008C, "ALLOY COMPUTER PRODUCTS, INC." }, + { 0x00008D, "VERDIX CORPORATION" }, + { 0x00008E, "SOLBOURNE COMPUTER, INC." }, + { 0x00008F, "RAYTHEON COMPANY" }, + { 0x000090, "MICROCOM" }, + { 0x000091, "ANRITSU CORPORATION" }, + { 0x000092, "COGENT DATA TECHNOLOGIES" }, + { 0x000093, "PROTEON INC." }, + { 0x000094, "ASANTE TECHNOLOGIES" }, + { 0x000095, "SONY TEKTRONIX CORP." }, + { 0x000096, "MARCONI ELECTRONICS LTD." }, + { 0x000097, "EPOCH SYSTEMS" }, + { 0x000098, "CROSSCOMM CORPORATION" }, + { 0x000099, "MTX, INC." }, + { 0x00009A, "RC COMPUTER A/S" }, + { 0x00009B, "INFORMATION INTERNATIONAL, INC" }, + { 0x00009C, "ROLM MIL-SPEC COMPUTERS" }, + { 0x00009D, "LOCUS COMPUTING CORPORATION" }, + { 0x00009E, "MARLI S.A." }, + { 0x00009F, "AMERISTAR TECHNOLOGIES INC." }, + { 0x0000A0, "TOKYO SANYO ELECTRIC CO. LTD." }, + { 0x0000A1, "MARQUETTE ELECTRIC CO." }, + { 0x0000A2, "BAY NETWORKS" }, + { 0x0000A3, "NETWORK APPLICATION TECHNOLOGY" }, + { 0x0000A4, "ACORN COMPUTERS LIMITED" }, + { 0x0000A5, "COMPATIBLE SYSTEMS CORP." }, + { 0x0000A6, "NETWORK GENERAL CORPORATION" }, + { 0x0000A7, "NETWORK COMPUTING DEVICES INC." }, + { 0x0000A8, "STRATUS COMPUTER INC." }, + { 0x0000A9, "NETWORK SYSTEMS CORP." }, + { 0x0000AA, "XEROX CORPORATION" }, + { 0x0000AB, "LOGIC MODELING CORPORATION" }, + { 0x0000AC, "CONWARE COMPUTER CONSULTING" }, + { 0x0000AD, "BRUKER INSTRUMENTS INC." }, + { 0x0000AE, "DASSAULT ELECTRONIQUE" }, + { 0x0000AF, "NUCLEAR DATA INSTRUMENTATION" }, + { 0x0000B0, "RND-RAD NETWORK DEVICES" }, + { 0x0000B1, "ALPHA MICROSYSTEMS INC." }, + { 0x0000B2, "TELEVIDEO SYSTEMS, INC." }, + { 0x0000B3, "CIMLINC INCORPORATED" }, + { 0x0000B4, "EDIMAX COMPUTER COMPANY" }, + { 0x0000B5, "DATABILITY SOFTWARE SYS. INC." }, + { 0x0000B6, "MICRO-MATIC RESEARCH" }, + { 0x0000B7, "DOVE COMPUTER CORPORATION" }, + { 0x0000B8, "SEIKOSHA CO., LTD." }, + { 0x0000B9, "MCDONNELL DOUGLAS COMPUTER SYS" }, + { 0x0000BA, "SIIG, INC." }, + { 0x0000BB, "TRI-DATA" }, + { 0x0000BC, "ALLEN-BRADLEY CO. INC." }, + { 0x0000BD, "MITSUBISHI CABLE COMPANY" }, + { 0x0000BE, "THE NTI GROUP" }, + { 0x0000BF, "SYMMETRIC COMPUTER SYSTEMS" }, + { 0x0000C0, "WESTERN DIGITAL CORPORATION" }, + { 0x0000C1, "Madge Networks Ltd." }, + { 0x0000C2, "INFORMATION PRESENTATION TECH." }, + { 0x0000C3, "HARRIS CORP COMPUTER SYS DIV" }, + { 0x0000C4, "WATERS DIV. OF MILLIPORE" }, + { 0x0000C5, "FARALLON COMPUTING/NETOPIA" }, + { 0x0000C6, "EON SYSTEMS" }, + { 0x0000C7, "ARIX CORPORATION" }, + { 0x0000C8, "ALTOS COMPUTER SYSTEMS" }, + { 0x0000C9, "EMULEX CORPORATION" }, + { 0x0000CA, "APPLITEK" }, + { 0x0000CB, "COMPU-SHACK ELECTRONIC GMBH" }, + { 0x0000CC, "DENSAN CO., LTD." }, + { 0x0000CD, "Centrecom Systems, Ltd." }, + { 0x0000CE, "MEGADATA CORP." }, + { 0x0000CF, "HAYES MICROCOMPUTER PRODUCTS" }, + { 0x0000D0, "DEVELCON ELECTRONICS LTD." }, + { 0x0000D1, "ADAPTEC INCORPORATED" }, + { 0x0000D2, "SBE, INC." }, + { 0x0000D3, "WANG LABORATORIES INC." }, + { 0x0000D4, "PURE DATA LTD." }, + { 0x0000D5, "MICROGNOSIS INTERNATIONAL" }, + { 0x0000D6, "PUNCH LINE HOLDING" }, + { 0x0000D7, "DARTMOUTH COLLEGE" }, + { 0x0000D8, "NOVELL, INC." }, + { 0x0000D9, "NIPPON TELEGRAPH & TELEPHONE" }, + { 0x0000DA, "ATEX" }, + { 0x0000DB, "BRITISH TELECOMMUNICATIONS PLC" }, + { 0x0000DC, "HAYES MICROCOMPUTER PRODUCTS" }, + { 0x0000DD, "TCL INCORPORATED" }, + { 0x0000DE, "CETIA" }, + { 0x0000DF, "BELL & HOWELL PUB SYS DIV" }, + { 0x0000E0, "QUADRAM CORP." }, + { 0x0000E1, "GRID SYSTEMS" }, + { 0x0000E2, "ACER TECHNOLOGIES CORP." }, + { 0x0000E3, "INTEGRATED MICRO PRODUCTS LTD" }, + { 0x0000E4, "IN2 GROUPE INTERTECHNIQUE" }, + { 0x0000E5, "SIGMEX LTD." }, + { 0x0000E6, "APTOR PRODUITS DE COMM INDUST" }, + { 0x0000E7, "STAR GATE TECHNOLOGIES" }, + { 0x0000E8, "ACCTON TECHNOLOGY CORP." }, + { 0x0000E9, "ISICAD, INC." }, + { 0x0000EA, "UPNOD AB" }, + { 0x0000EB, "MATSUSHITA COMM. IND. CO. LTD." }, + { 0x0000EC, "MICROPROCESS" }, + { 0x0000ED, "APRIL" }, + { 0x0000EE, "NETWORK DESIGNERS, LTD." }, + { 0x0000EF, "KTI" }, + { 0x0000F0, "SAMSUNG ELECTRONICS CO., LTD." }, + { 0x0000F1, "MAGNA COMPUTER CORPORATION" }, + { 0x0000F2, "SPIDER COMMUNICATIONS" }, + { 0x0000F3, "GANDALF DATA LIMITED" }, + { 0x0000F4, "ALLIED TELESYN INTERNATIONAL" }, + { 0x0000F5, "DIAMOND SALES LIMITED" }, + { 0x0000F6, "APPLIED MICROSYSTEMS CORP." }, + { 0x0000F7, "YOUTH KEEP ENTERPRISE CO LTD" }, + { 0x0000F8, "DIGITAL EQUIPMENT CORPORATION" }, + { 0x0000F9, "QUOTRON SYSTEMS INC." }, + { 0x0000FA, "MICROSAGE COMPUTER SYSTEMS INC" }, + { 0x0000FB, "RECHNER ZUR KOMMUNIKATION" }, + { 0x0000FC, "MEIKO" }, + { 0x0000FD, "HIGH LEVEL HARDWARE" }, + { 0x0000FE, "ANNAPOLIS MICRO SYSTEMS" }, + { 0x0000FF, "CAMTEC ELECTRONICS LTD." }, + { 0x000100, "EQUIP'TRANS" }, + { 0x000102, "3COM CORPORATION" }, + { 0x000103, "3COM CORPORATION" }, + { 0x000104, "DVICO Co., Ltd." }, + { 0x000105, "BECKHOFF GmbH" }, + { 0x000106, "Tews Datentechnik GmbH" }, + { 0x000107, "Leiser GmbH" }, + { 0x000108, "AVLAB Technology, Inc." }, + { 0x000109, "Nagano Japan Radio Co., Ltd." }, + { 0x00010A, "CIS TECHNOLOGY INC." }, + { 0x00010B, "Space CyberLink, Inc." }, + { 0x00010C, "System Talks Inc." }, + { 0x00010D, "CORECO, INC." }, + { 0x00010E, "Bri-Link Technologies Co., Ltd" }, + { 0x00010F, "Nishan Systems, Inc." }, + { 0x000110, "Gotham Networks" }, + { 0x000111, "iDigm Inc." }, + { 0x000112, "Shark Multimedia Inc." }, + { 0x000113, "OLYMPUS OPTICAL CO., LTD." }, + { 0x000114, "KANDA TSUSHIN KOGYO CO., LTD." }, + { 0x000115, "EXTRATECH CORPORATION" }, + { 0x000116, "Netspect Technologies, Inc." }, + { 0x000117, "CANAL +" }, + { 0x000118, "EZ Digital Co., Ltd." }, + { 0x000119, "Action Controls Pty. Ltd." }, + { 0x00011A, "EEH DataLink GmbH" }, + { 0x00011B, "Unizone Technologies, Inc." }, + { 0x00011C, "Universal Talkware Corporation" }, + { 0x00011D, "Centillium Communications" }, + { 0x00011E, "Precidia Technologies, Inc." }, + { 0x00011F, "RC Networks, Inc." }, + { 0x000120, "OSCILLOQUARTZ S.A." }, + { 0x000121, "RapidStream Inc." }, + { 0x000122, "Trend Communications, Ltd." }, + { 0x000123, "DIGITAL ELECTRONICS CORP." }, + { 0x000124, "Acer Incorporated" }, + { 0x000125, "YAESU MUSEN CO., LTD." }, + { 0x000126, "PAC Labs" }, + { 0x000127, "The OPEN Group Limited" }, + { 0x000128, "EnjoyWeb, Inc." }, + { 0x000129, "DFI Inc." }, + { 0x00012A, "Telematica Sistems Inteligente" }, + { 0x00012B, "TELENET Co., Ltd." }, + { 0x00012C, "Aravox Technologies, Inc." }, + { 0x00012D, "Komodo Technology" }, + { 0x00012E, "PC Partner Ltd." }, + { 0x00012F, "Twinhead International Corp" }, + { 0x000130, "Extreme Networks" }, + { 0x000131, "Detection Systems, Inc." }, + { 0x000132, "Dranetz - BMI" }, + { 0x000133, "KYOWA Electronic Instruments C" }, + { 0x000134, "SIG Positec Systems AG" }, + { 0x000135, "KDC Corp." }, + { 0x000136, "CyberTAN Technology, Inc." }, + { 0x000137, "IT Farm Corporation" }, + { 0x000138, "XAVi Technologies Corp." }, + { 0x000139, "Point Multimedia Systems" }, + { 0x00013A, "SHELCAD COMMUNICATIONS, LTD." }, + { 0x00013B, "BNA SYSTEMS" }, + { 0x00013C, "TIW SYSTEMS" }, + { 0x00013D, "RiscStation Ltd." }, + { 0x00013E, "Ascom Tateco AB" }, + { 0x00013F, "Neighbor World Co., Ltd." }, + { 0x000140, "Sendtek Corporation" }, + { 0x000141, "CABLE PRINT" }, + { 0x000142, "Cisco Systems, Inc." }, + { 0x000143, "Cisco Systems, Inc." }, + { 0x000144, "Cereva Networks, Inc." }, + { 0x000145, "WINSYSTEMS, INC." }, + { 0x000146, "Tesco Controls, Inc." }, + { 0x000147, "Zhone Technologies" }, + { 0x000148, "X-traWeb Inc." }, + { 0x000149, "T.D.T. Transfer Data Test GmbH" }, + { 0x00014A, "SONY COMPUTER SCIENCE LABS., I" }, + { 0x00014B, "Ennovate Networks, Inc." }, + { 0x00014C, "Berkeley Process Control" }, + { 0x00014D, "Shin Kin Enterprises Co., Ltd" }, + { 0x00014E, "WIN Enterprises, Inc." }, + { 0x00014F, "LUMINOUS Networks, Inc." }, + { 0x000150, "GILAT COMMUNICATIONS, LTD." }, + { 0x000151, "Ensemble Communications" }, + { 0x000152, "CHROMATEK INC." }, + { 0x000153, "ARCHTEK TELECOM CORPORATION" }, + { 0x000154, "G3M Corporation" }, + { 0x000155, "Promise Technology, Inc." }, + { 0x000156, "FIREWIREDIRECT.COM, INC." }, + { 0x000157, "SYSWAVE CO., LTD" }, + { 0x000158, "Electro Industries/Gauge Tech" }, + { 0x000159, "S1 Corporation" }, + { 0x00015A, "Digital Video Broadcasting" }, + { 0x00015B, "ITALTEL S.p.A/RF-UP-I" }, + { 0x00015C, "CADANT INC." }, + { 0x00015D, "Pirus Networks" }, + { 0x00015E, "BEST TECHNOLOGY CO., LTD." }, + { 0x00015F, "DIGITAL DESIGN GmbH" }, + { 0x000160, "ELMEX Co., LTD." }, + { 0x000161, "Meta Machine Technology" }, + { 0x000162, "Cygnet Technologies, Inc." }, + { 0x000163, "Cisco Systems, Inc." }, + { 0x000164, "Cisco Systems, Inc." }, + { 0x000165, "AirSwitch Corporation" }, + { 0x000166, "TC GROUP A/S" }, + { 0x000167, "HIOKI E.E. CORPORATION" }, + { 0x000168, "VITANA CORPORATION" }, + { 0x000169, "Celestix Networks Pte Ltd." }, + { 0x00016A, "ALITEC" }, + { 0x00016B, "LightChip, Inc." }, + { 0x00016C, "FOXCONN" }, + { 0x00016D, "Triton Network Systems" }, + { 0x00016E, "Conklin Corporation" }, + { 0x00016F, "HAITAI ELECTRONICS CO., LTD." }, + { 0x000170, "ESE Embedded System Engineer'g" }, + { 0x000171, "Allied Data Technologies" }, + { 0x000172, "TechnoLand Co., LTD." }, + { 0x000173, "JNI Corporation" }, + { 0x000174, "CyberOptics Corporation" }, + { 0x000175, "Radiant Communications Corp." }, + { 0x000176, "Orient Silver Enterprises" }, + { 0x000177, "EDSL" }, + { 0x000178, "MARGI Systems, Inc." }, + { 0x000179, "WIRELESS TECHNOLOGY, INC." }, + { 0x00017A, "Chengdu Maipu Electric Industrial Co., Ltd." }, + { 0x00017B, "Heidelberger Druckmaschinen AG" }, + { 0x00017C, "AG-E GmbH" }, + { 0x00017D, "ThermoQuest" }, + { 0x00017E, "ADTEK System Science Co., Ltd." }, + { 0x00017F, "Experience Music Project" }, + { 0x000180, "AOpen, Inc." }, + { 0x000181, "Nortel Networks" }, + { 0x000182, "DICA TECHNOLOGIES AG" }, + { 0x000183, "ANITE TELECOMS" }, + { 0x000184, "SIEB & MEYER AG" }, + { 0x000185, "Aloka Co., Ltd." }, + { 0x000186, "DISCH GmbH" }, + { 0x000187, "i2SE GmbH" }, + { 0x000188, "LXCO Technologies ag" }, + { 0x000189, "Refraction Technology, Inc." }, + { 0x00018A, "ROI COMPUTER AG" }, + { 0x00018B, "NetLinks Co., Ltd." }, + { 0x00018C, "Mega Vision" }, + { 0x00018D, "AudeSi Technologies" }, + { 0x00018E, "Logitec Corporation" }, + { 0x00018F, "Kenetec, Inc." }, + { 0x000190, "SMK-M" }, + { 0x000191, "SYRED Data Systems" }, + { 0x000192, "Texas Digital Systems" }, + { 0x000193, "Hanbyul Telecom Co., Ltd." }, + { 0x000194, "Capital Equipment Corporation" }, + { 0x000195, "Sena Technologies, Inc." }, + { 0x000196, "Cisco Systems, Inc." }, + { 0x000197, "Cisco Systems, Inc." }, + { 0x000198, "Darim Vision" }, + { 0x000199, "HeiSei Electronics" }, + { 0x00019A, "LEUNIG GmbH" }, + { 0x00019B, "Kyoto Microcomputer Co., Ltd." }, + { 0x00019C, "JDS Uniphase Inc." }, + { 0x00019D, "E-Control Systems, Inc." }, + { 0x00019E, "ESS Technology, Inc." }, + { 0x00019F, "Phonex Broadband" }, + { 0x0001A0, "Infinilink Corporation" }, + { 0x0001A1, "Mag-Tek, Inc." }, + { 0x0001A2, "Logical Co., Ltd." }, + { 0x0001A3, "GENESYS LOGIC, INC." }, + { 0x0001A4, "Microlink Corporation" }, + { 0x0001A5, "Nextcomm, Inc." }, + { 0x0001A6, "Scientific-Atlanta Arcodan A/S" }, + { 0x0001A7, "UNEX TECHNOLOGY CORPORATION" }, + { 0x0001A8, "Welltech Computer Co., Ltd." }, + { 0x0001A9, "BMW AG" }, + { 0x0001AA, "Airspan Communications, Ltd." }, + { 0x0001AB, "Main Street Networks" }, + { 0x0001AC, "Sitara Networks, Inc." }, + { 0x0001AD, "Coach Master International d.b.a. CMI Worldwide, Inc." }, + { 0x0001AE, "Trex Enterprises" }, + { 0x0001AF, "Motorola Computer Group" }, + { 0x0001B0, "Fulltek Technology Co., Ltd." }, + { 0x0001B1, "General Bandwidth" }, + { 0x0001B2, "Digital Processing Systems, Inc." }, + { 0x0001B3, "Precision Electronic Manufacturing" }, + { 0x0001B4, "Wayport, Inc." }, + { 0x0001B5, "Turin Networks, Inc." }, + { 0x0001B6, "SAEJIN T&M Co., Ltd." }, + { 0x0001B7, "Centos, Inc." }, + { 0x0001B8, "Netsensity, Inc." }, + { 0x0001B9, "SKF Condition Monitoring" }, + { 0x0001BA, "IC-Net, Inc." }, + { 0x0001BB, "Frequentis" }, + { 0x0001BC, "Brains Corporation" }, + { 0x0001BD, "Peterson Electro-Musical Products, Inc." }, + { 0x0001BE, "Gigalink Co., Ltd." }, + { 0x0001BF, "Teleforce Co., Ltd." }, + { 0x0001C0, "CompuLab, Ltd." }, + { 0x0001C1, "Exbit Technology" }, + { 0x0001C2, "ARK Research Corp." }, + { 0x0001C3, "Acromag, Inc." }, + { 0x0001C4, "NeoWave, Inc." }, + { 0x0001C5, "Simpler Networks" }, + { 0x0001C6, "Quarry Technologies" }, + { 0x0001C7, "Cisco Systems, Inc." }, + { 0x0001C8, "THOMAS CONRAD CORP." }, + { 0x0001C8, "CONRAD CORP." }, + { 0x0001C9, "Cisco Systems, Inc." }, + { 0x0001CA, "Geocast Network Systems, Inc." }, + { 0x0001CB, "NetGame, Ltd." }, + { 0x0001CC, "Japan Total Design Communication Co., Ltd." }, + { 0x0001CD, "ARtem" }, + { 0x0001CE, "Custom Micro Products, Ltd." }, + { 0x0001CF, "Alpha Data Parallel Systems, Ltd." }, + { 0x0001D0, "VitalPoint, Inc." }, + { 0x0001D1, "CoNet Communications, Inc." }, + { 0x0001D2, "MacPower Peripherals, Ltd." }, + { 0x0001D3, "PAXCOMM, Inc." }, + { 0x0001D4, "Leisure Time, Inc." }, + { 0x0001D5, "HAEDONG INFO & COMM CO., LTD" }, + { 0x0001D6, "MAN Roland Druckmaschinen AG" }, + { 0x0001D7, "F5 Networks, Inc." }, + { 0x0001D8, "Teltronics, Inc." }, + { 0x0001D9, "Sigma, Inc." }, + { 0x0001DA, "WINCOMM Corporation" }, + { 0x0001DB, "Freecom Technologies GmbH" }, + { 0x0001DC, "Activetelco" }, + { 0x0001DD, "Avail Networks" }, + { 0x0001DE, "Trango Systems, Inc." }, + { 0x0001DF, "ISDN Communications, Ltd." }, + { 0x0001E0, "Fast Systems, Inc." }, + { 0x0001E1, "Kinpo Electronics, Inc." }, + { 0x0001E2, "Ando Electric Corporation" }, + { 0x0001E3, "Siemens AG" }, + { 0x0001E4, "Sitera, Inc." }, + { 0x0001E5, "Supernet, Inc." }, + { 0x0001E6, "Hewlett-Packard Company" }, + { 0x0001E7, "Hewlett-Packard Company" }, + { 0x0001E8, "Force10 Networks, Inc." }, + { 0x0001E9, "Litton Marine Systems B.V." }, + { 0x0001EA, "Cirilium Corp." }, + { 0x0001EB, "C-COM Corporation" }, + { 0x0001EC, "Ericsson Group" }, + { 0x0001ED, "SETA Corp." }, + { 0x0001EE, "Comtrol Europe, Ltd." }, + { 0x0001EF, "Camtel Technology Corp." }, + { 0x0001F0, "Tridium, Inc." }, + { 0x0001F1, "Innovative Concepts, Inc." }, + { 0x0001F3, "QPS, Inc." }, + { 0x0001F4, "Enterasys Networks" }, + { 0x0001F5, "ERIM S.A." }, + { 0x0001F6, "Association of Musical Electronics Industry" }, + { 0x0001F7, "Image Display Systems, Inc." }, + { 0x0001F8, "Adherent Systems, Ltd." }, + { 0x0001F9, "TeraGlobal Communications Corp." }, + { 0x0001FA, "HOROSCAS" }, + { 0x0001FB, "DoTop Technology, Inc." }, + { 0x0001FC, "Keyence Corporation" }, + { 0x0001FD, "Digital Voice Systems, Inc." }, + { 0x0001FE, "DIGITAL EQUIPMENT CORPORATION" }, + { 0x0001FF, "Data Direct Networks, Inc." }, + { 0x000200, "Net & Sys Co., Ltd." }, + { 0x000201, "IFM Electronic gmbh" }, + { 0x000202, "Amino Communications, Ltd." }, + { 0x000203, "Woonsang Telecom, Inc." }, + { 0x000204, "Bodmann Industries Elektronik GmbH" }, + { 0x000205, "Hitachi Denshi, Ltd." }, + { 0x000206, "Telital R&D Denmark A/S" }, + { 0x000208, "Unify Networks, Inc." }, + { 0x000209, "Shenzhen SED Information Technology Co., Ltd." }, + { 0x00020A, "Gefran Spa" }, + { 0x00020B, "Native Networks, Inc." }, + { 0x00020C, "Metro-Optix" }, + { 0x00020D, "Micronpc.com" }, + { 0x00020E, "Laurel Networks, Inc." }, + { 0x00020F, "AATR" }, + { 0x000210, "Fenecom" }, + { 0x000211, "Nature Worldwide Technology Corp." }, + { 0x000212, "SierraCom" }, + { 0x000213, "S.D.E.L." }, + { 0x000214, "DTVRO" }, + { 0x000215, "Cotas Computer Technology A/B" }, + { 0x000216, "Cisco Systems, Inc." }, + { 0x000217, "Cisco Systems, Inc." }, + { 0x000218, "Advanced Scientific Corp" }, + { 0x000219, "Paralon Technologies" }, + { 0x00021A, "Zuma Networks" }, + { 0x00021B, "Kollmorgen-Servotronix" }, + { 0x00021C, "Network Elements, Inc." }, + { 0x00021D, "Data General Communication Ltd." }, + { 0x00021E, "SIMTEL S.R.L." }, + { 0x00021F, "Aculab PLC" }, + { 0x000220, "Canon Aptex, Inc." }, + { 0x000221, "DSP Application, Ltd." }, + { 0x000222, "Chromisys, Inc." }, + { 0x000223, "ClickTV" }, + { 0x000224, "Lantern Communications, Inc." }, + { 0x000225, "Certus Technology, Inc." }, + { 0x000226, "XESystems, Inc." }, + { 0x000227, "ESD GmbH" }, + { 0x000228, "Necsom, Ltd." }, + { 0x000229, "Adtec Corporation" }, + { 0x00022A, "Asound Electronic" }, + { 0x00022B, "Tamura Electric Works, Ltd." }, + { 0x00022C, "ABB Bomem, Inc." }, + { 0x00022D, "Agere Systems" }, + { 0x00022E, "TEAC Corp. R& D" }, + { 0x00022F, "P-Cube, Ltd." }, + { 0x000230, "Intersoft Electronics" }, + { 0x000231, "Ingersoll-Rand" }, + { 0x000232, "Avision, Inc." }, + { 0x000233, "Mantra Communications, Inc." }, + { 0x000234, "Imperial Technology, Inc." }, + { 0x000235, "Paragon Networks International" }, + { 0x000236, "INIT GmbH" }, + { 0x000237, "Cosmo Research Corp." }, + { 0x000238, "Serome Technology, Inc." }, + { 0x000239, "Visicom" }, + { 0x00023A, "ZSK Stickmaschinen GmbH" }, + { 0x00023B, "Redback Networks" }, + { 0x00023C, "Creative Technology, Ltd." }, + { 0x00023D, "NuSpeed, Inc." }, + { 0x00023E, "Selta Telematica S.p.a" }, + { 0x00023F, "Compal Electronics, Inc." }, + { 0x000240, "Seedek Co., Ltd." }, + { 0x000241, "Amer.com" }, + { 0x000242, "Videoframe Systems" }, + { 0x000243, "Raysis Co., Ltd." }, + { 0x000244, "SURECOM Technology Co." }, + { 0x000245, "Lampus Co, Ltd." }, + { 0x000246, "All-Win Tech Co., Ltd." }, + { 0x000247, "Great Dragon Information Technology (Group) Co., Ltd." }, + { 0x000248, "Pila GmbH & Co." }, + { 0x000249, "Aviv Infocom Co, Ltd." }, + { 0x00024A, "Cisco Systems, Inc." }, + { 0x00024B, "Cisco Systems, Inc." }, + { 0x00024C, "SiByte, Inc." }, + { 0x00024D, "Mannesman Dematic Colby Pty. Ltd." }, + { 0x00024E, "Datacard Group" }, + { 0x00024F, "IPM Datacom S.R.L." }, + { 0x000250, "Geyser Networks, Inc." }, + { 0x000251, "Soma Networks" }, + { 0x000252, "Carrier Corporation" }, + { 0x000253, "Televideo, Inc." }, + { 0x000254, "WorldGate" }, + { 0x000255, "IBM Corporation" }, + { 0x000256, "Alpha Processor, Inc." }, + { 0x000257, "Microcom Corp." }, + { 0x000258, "Flying Packets Communications" }, + { 0x000259, "Tsann Kuen China (Shanghai)Enterprise Co., Ltd. IT Group" }, + { 0x00025A, "Catena Networks" }, + { 0x00025B, "Cambridge Silicon Radio" }, + { 0x00025C, "SCI Systems (Kunshan) Co., Ltd." }, + { 0x00025E, "High Technology Ltd" }, + { 0x00025F, "Nortel Networks" }, + { 0x000260, "Accordion Networks, Inc." }, + { 0x000261, "i3 Micro Technology AB" }, + { 0x000262, "Soyo Group Soyo Com Tech Co., Ltd" }, + { 0x000263, "UPS Manufacturing SRL" }, + { 0x000264, "AudioRamp.com" }, + { 0x000265, "Virditech Co. Ltd." }, + { 0x000266, "Thermalogic Corporation" }, + { 0x000267, "NODE RUNNER, INC." }, + { 0x000268, "Harris Government Communications" }, + { 0x000269, "Nadatel Co., Ltd" }, + { 0x00026A, "Cocess Telecom Co., Ltd." }, + { 0x00026B, "BCM Computers Co., Ltd." }, + { 0x00026C, "Philips CFT" }, + { 0x00026D, "Adept Telecom" }, + { 0x00026E, "NeGeN Access, Inc." }, + { 0x00026F, "Senao International Co., Ltd." }, + { 0x000270, "Crewave Co., Ltd." }, + { 0x000271, "Vpacket Communications" }, + { 0x000272, "CC&C Technologies, Inc." }, + { 0x000273, "Coriolis Networks" }, + { 0x000274, "Tommy Technologies Corp." }, + { 0x000275, "SMART Technologies, Inc." }, + { 0x000276, "Primax Electronics Ltd." }, + { 0x000277, "Cash Systemes Industrie" }, + { 0x000278, "Samsung Electro-Mechanics Co., Ltd." }, + { 0x000279, "Control Applications, Ltd." }, + { 0x00027A, "IOI Technology Corporation" }, + { 0x00027B, "Amplify Net, Inc." }, + { 0x00027C, "Trilithic, Inc." }, + { 0x00027D, "Cisco Systems, Inc." }, + { 0x00027E, "Cisco Systems, Inc." }, + { 0x00027F, "ask-technologies.com" }, + { 0x000280, "Mu Net, Inc." }, + { 0x000281, "Red-M (Communications) Ltd." }, + { 0x000282, "ViaClix, Inc." }, + { 0x000283, "Spectrum Controls, Inc." }, + { 0x000284, "Alstom T&D P&C" }, + { 0x000285, "Riverstone Networks" }, + { 0x000286, "Occam Networks" }, + { 0x000287, "Adapcom" }, + { 0x000288, "GLOBAL VILLAGE COMMUNICATION" }, + { 0x000289, "DNE Technologies" }, + { 0x00028A, "Ambit Microsystems Corporation" }, + { 0x00028B, "VDSL Systems OY" }, + { 0x00028C, "Micrel-Synergy Semiconductor" }, + { 0x00028D, "Movita Technologies, Inc." }, + { 0x00028E, "Rapid 5 Networks, Inc." }, + { 0x00028F, "Globetek, Inc." }, + { 0x000290, "Woorigisool, Inc." }, + { 0x000291, "Open Network Co., Ltd." }, + { 0x000292, "Logic Innovations, Inc." }, + { 0x000293, "Solid Data Systems" }, + { 0x000294, "Tokyo Sokushin Co., Ltd." }, + { 0x000295, "IP.Access Limited" }, + { 0x000296, "Lectron Co,. Ltd." }, + { 0x000297, "C-COR.net" }, + { 0x000298, "Broadframe Corporation" }, + { 0x000299, "Apex, Inc." }, + { 0x00029A, "Storage Apps" }, + { 0x00029B, "Kreatel Communications AB" }, + { 0x00029D, "Merix Corp." }, + { 0x00029E, "Information Equipment Co., Ltd." }, + { 0x00029F, "L-3 Communication Aviation Recorders" }, + { 0x0002A0, "Flatstack Ltd." }, + { 0x0002A1, "World Wide Packets" }, + { 0x0002A2, "Hilscher GmbH" }, + { 0x0002A3, "ABB Power Automation" }, + { 0x0002A4, "AddPac Technology Co., Ltd." }, + { 0x0002A5, "Compaq Computer Corporation" }, + { 0x0002A6, "Effinet Systems Co., Ltd." }, + { 0x0002A7, "Vivace Networks" }, + { 0x0002A8, "Air Link Technology" }, + { 0x0002A9, "RACOM, s.r.o." }, + { 0x0002AA, "PLcom Co., Ltd." }, + { 0x0002AB, "CTC Union Technologies Co., Ltd." }, + { 0x0002AC, "3PAR data" }, + { 0x0002AD, "Asahi Optical Co., Ltd." }, + { 0x0002AE, "Scannex Electronics Ltd." }, + { 0x0002AF, "TeleCruz Technology, Inc." }, + { 0x0002B0, "Hokubu Communication & Industrial Co., Ltd." }, + { 0x0002B1, "Anritsu, Ltd." }, + { 0x0002B2, "Cablevision" }, + { 0x0002B3, "Intel Corporation" }, + { 0x0002B4, "DAPHNE" }, + { 0x0002B5, "Avnet, Inc." }, + { 0x0002B6, "Acrosser Technology Co., Ltd." }, + { 0x0002B7, "Watanabe Electric Industry Co., Ltd." }, + { 0x0002B8, "WHI KONSULT AB" }, + { 0x0002B9, "Cisco Systems, Inc." }, + { 0x0002BA, "Cisco Systems, Inc." }, + { 0x0002BB, "Continuous Computing" }, + { 0x0002BC, "LVL 7 Systems, Inc." }, + { 0x0002BD, "Bionet Co., Ltd." }, + { 0x0002BE, "Totsu Engineering, Inc." }, + { 0x0002BF, "dotRocket, Inc." }, + { 0x0002C0, "Bencent Tzeng Industry Co., Ltd." }, + { 0x0002C1, "Innovative Electronic Designs, Inc." }, + { 0x0002C2, "Net Vision Telecom" }, + { 0x0002C3, "Arelnet Ltd." }, + { 0x0002C4, "Vector International BUBA" }, + { 0x0002C5, "Evertz Microsystems Ltd." }, + { 0x0002C6, "Data Track Technology PLC" }, + { 0x0002C7, "ALPS ELECTRIC Co., Ltd." }, + { 0x0002C8, "Technocom Communications Technology (pte) Ltd" }, + { 0x0002C9, "Mellanox Technologies" }, + { 0x0002CA, "EndPoints, Inc." }, + { 0x0002CB, "TriState Ltd." }, + { 0x0002CC, "M.C.C.I" }, + { 0x0002CD, "TeleDream, Inc." }, + { 0x0002CE, "FoxJet, Inc." }, + { 0x0002CF, "ZyGate Communications, Inc." }, + { 0x0002D0, "Comdial Corporation" }, + { 0x0002D1, "Vivotek, Inc." }, + { 0x0002D2, "Workstation AG" }, + { 0x0002D3, "NetBotz, Inc." }, + { 0x0002D4, "PDA Peripherals, Inc." }, + { 0x0002D5, "ACR" }, + { 0x0002D6, "NICE Systems" }, + { 0x0002D7, "EMPEG Ltd" }, + { 0x0002D8, "BRECIS Communications Corporation" }, + { 0x0002D9, "Reliable Controls" }, + { 0x0002DA, "ExiO Communications, Inc." }, + { 0x0002DB, "NETSEC" }, + { 0x0002DC, "Fujitsu General Limited" }, + { 0x0002DD, "Bromax Communications, Ltd." }, + { 0x0002DE, "Astrodesign, Inc." }, + { 0x0002DF, "Net Com Systems, Inc." }, + { 0x0002E0, "ETAS GmbH" }, + { 0x0002E1, "Integrated Network Corporation" }, + { 0x0002E2, "NDC Infared Engineering" }, + { 0x0002E3, "LITE-ON Communications, Inc." }, + { 0x0002E4, "JC HYUN Systems, Inc." }, + { 0x0002E5, "Timeware Ltd." }, + { 0x0002E6, "Gould Instrument Systems, Inc." }, + { 0x0002E7, "CAB GmbH & Co KG" }, + { 0x0002E8, "E.D.&A." }, + { 0x0002E9, "CS Systemes De Securite - C3S" }, + { 0x0002EA, "Videonics, Inc." }, + { 0x0002EB, "Easent Communications" }, + { 0x0002EC, "Maschoff Design Engineering" }, + { 0x0002ED, "DXO Telecom Co., Ltd." }, + { 0x0002EE, "Nokia Danmark A/S" }, + { 0x0002EF, "CCC Network Systems Group Ltd." }, + { 0x0002F0, "AME Optimedia Technology Co., Ltd." }, + { 0x0002F1, "Pinetron Co., Ltd." }, + { 0x0002F2, "eDevice, Inc." }, + { 0x0002F3, "Media Serve Co., Ltd." }, + { 0x0002F4, "PCTEL, Inc." }, + { 0x0002F5, "VIVE Synergies, Inc." }, + { 0x0002F6, "Equipe Communications" }, + { 0x0002F7, "ARM" }, + { 0x0002F8, "SEAKR Engineering, Inc." }, + { 0x0002F9, "Mimos Semiconductor SDN BHD" }, + { 0x0002FA, "DX Antenna Co., Ltd." }, + { 0x0002FB, "Baumuller Aulugen-Systemtechnik GmbH" }, + { 0x0002FC, "Cisco Systems, Inc." }, + { 0x0002FD, "Cisco Systems, Inc." }, + { 0x0002FE, "Viditec, Inc." }, + { 0x0002FF, "Handan Broad InfoCom" }, + { 0x000300, "NetContinuum, Inc." }, + { 0x000301, "Avantas Networks Corporation" }, + { 0x000302, "Oasys Telecom, Inc." }, + { 0x000303, "JAMA Electronics Co., Ltd." }, + { 0x000304, "Pacific Broadband Communications" }, + { 0x000305, "Smart Network Devices GmbH" }, + { 0x000306, "Fusion In Tech Co., Ltd." }, + { 0x000307, "Secure Works, Inc." }, + { 0x000308, "AM Communications, Inc." }, + { 0x000309, "Texcel Technology PLC" }, + { 0x00030A, "Argus Technologies" }, + { 0x00030B, "Hunter Technology, Inc." }, + { 0x00030C, "Telesoft Technologies Ltd." }, + { 0x00030D, "Uniwill Computer Corp." }, + { 0x00030E, "Core Communications Co., Ltd." }, + { 0x00030F, "Legend Digital China Ltd." }, + { 0x000310, "Link Evolution Corp." }, + { 0x000311, "Micro Technology Co., Ltd." }, + { 0x000312, "TR-Systemtechnik GmbH" }, + { 0x000313, "Access Media SPA" }, + { 0x000314, "Teleware Network Systems" }, + { 0x000315, "Cidco Incorporated" }, + { 0x000316, "Nobell Communications, Inc." }, + { 0x000317, "Merlin Systems, Inc." }, + { 0x000318, "Cyras Systems, Inc." }, + { 0x000319, "Infineon AG" }, + { 0x00031A, "Beijing Broad Telecom Ltd., China" }, + { 0x00031B, "Cellvision Systems, Inc." }, + { 0x00031C, "Svenska Hardvarufabriken AB" }, + { 0x00031D, "Taiwan Commate Computer, Inc." }, + { 0x00031E, "Optranet, Inc." }, + { 0x00031F, "Condev Ltd." }, + { 0x000320, "Xpeed, Inc." }, + { 0x000321, "Reco Research Co., Ltd." }, + { 0x000322, "IDIS Co., Ltd." }, + { 0x000323, "Cornet Technology, Inc." }, + { 0x000324, "Tottori SANYO Electric Co., Ltd." }, + { 0x000325, "Arima Computer Corp." }, + { 0x000326, "Iwasaki Information Systems Co., Ltd." }, + { 0x000327, "ACT'L" }, + { 0x000328, "Mace Group, Inc." }, + { 0x000329, "F3, Inc." }, + { 0x00032A, "UniData Communication Systems, Inc." }, + { 0x00032B, "GAI Datenfunksysteme GmbH" }, + { 0x00032C, "ABB Industrie AG" }, + { 0x00032D, "IBASE Technology, Inc." }, + { 0x00032E, "Scope Information Management, Ltd." }, + { 0x00032F, "Global Sun Technology, Inc." }, + { 0x000330, "Imagenics, Co., Ltd." }, + { 0x000331, "Cisco Systems, Inc." }, + { 0x000332, "Cisco Systems, Inc." }, + { 0x000333, "Digitel Co., Ltd." }, + { 0x000334, "Newport Electronics" }, + { 0x000335, "Mirae Technology" }, + { 0x000336, "Zetes Technologies" }, + { 0x000337, "Vaone, Inc." }, + { 0x000338, "Oak Technology" }, + { 0x000339, "Eurologic Systems, Ltd." }, + { 0x00033A, "Silicon Wave, Inc." }, + { 0x00033B, "TAMI Tech Co., Ltd." }, + { 0x00033C, "Daiden Co., Ltd." }, + { 0x00033D, "ILSHin Lab" }, + { 0x00033E, "Tateyama System Laboratory Co., Ltd." }, + { 0x00033F, "BigBand Networks, Ltd." }, + { 0x000340, "Floware Wireless Systems, Ltd." }, + { 0x000341, "Axon Digital Design" }, + { 0x000342, "Nortel Networks" }, + { 0x000343, "Martin Professional A/S" }, + { 0x000344, "Tietech.Co., Ltd." }, + { 0x000345, "Routrek Networks Corporation" }, + { 0x000346, "Hitachi Kokusai Electric, Inc." }, + { 0x000347, "Intel Corporation" }, + { 0x000348, "Norscan Instruments, Ltd." }, + { 0x000349, "Vidicode Datacommunicatie B.V." }, + { 0x00034A, "RIAS Corporation" }, + { 0x00034B, "Nortel Networks" }, + { 0x00034C, "Shanghai DigiVision Technology Co., Ltd." }, + { 0x00034D, "Chiaro Networks, Ltd." }, + { 0x00034E, "Pos Data Company, Ltd." }, + { 0x00034F, "Sur-Gard Security" }, + { 0x000350, "BTICINO SPA" }, + { 0x000351, "Diebold, Inc." }, + { 0x000352, "Colubris Networks" }, + { 0x000353, "Mitac, Inc." }, + { 0x000354, "Fiber Logic Communications" }, + { 0x000355, "TeraBeam Internet Systems" }, + { 0x000356, "Wincor Nixdorf GmbH & Co KG" }, + { 0x000357, "Intervoice-Brite, Inc." }, + { 0x000358, "iCable System Co., Ltd." }, + { 0x000359, "DigitalSis" }, + { 0x00035A, "Phototron Limited" }, + { 0x00035B, "BridgeWave Communications" }, + { 0x00035C, "Saint Song Corp." }, + { 0x00035D, "Bosung Hi-Net Co., Ltd." }, + { 0x00035E, "Metropolitan Area Networks, Inc." }, + { 0x00035F, "Schuehle Mess - und. Kontrollsysteme" }, + { 0x000360, "PAC Interactive Technology, Inc." }, + { 0x000361, "Widcomm, Inc." }, + { 0x000362, "Vodtel Communications, Inc." }, + { 0x000363, "Miraesys Co., Ltd." }, + { 0x000364, "Scenix Semiconductor, Inc." }, + { 0x000365, "Kira Information & Communications, Ltd." }, + { 0x000366, "ASM Pacific Technology" }, + { 0x000367, "Jasmine Networks, Inc." }, + { 0x000368, "Embedone Co., Ltd." }, + { 0x000369, "Nippon Antenna Co., Ltd." }, + { 0x00036A, "Mainnet, Ltd." }, + { 0x00036B, "Cisco Systems, Inc." }, + { 0x00036C, "Cisco Systems, Inc." }, + { 0x00036D, "Runtop, Inc." }, + { 0x00036E, "Nicon Systems (Pty) Limited" }, + { 0x00036F, "Telsey SPA" }, + { 0x000370, "NXTV, Inc." }, + { 0x000371, "Acomz Networks Corp." }, + { 0x000372, "ULAN" }, + { 0x000373, "Aselsan A.S" }, + { 0x000374, "Hunter Watertech" }, + { 0x000375, "NetMedia, Inc." }, + { 0x000376, "Graphtec Technology, Inc." }, + { 0x000377, "Gigabit Wireless" }, + { 0x000378, "HUMAX Co., Ltd." }, + { 0x000379, "Proscend Communications, Inc." }, + { 0x00037A, "Taiyo Yuden Co., Ltd." }, + { 0x00037B, "IDEC IZUMI Corporation" }, + { 0x00037C, "Coax Media" }, + { 0x00037D, "Stellcom" }, + { 0x00037E, "PORTech Communications, Inc." }, + { 0x00037F, "Atheros Communications, Inc." }, + { 0x000381, "Ingenico International" }, + { 0x000382, "A-One Co., Ltd." }, + { 0x000383, "Metera Networks, Inc." }, + { 0x000384, "AETA" }, + { 0x000385, "Actelis Networks, Inc." }, + { 0x000386, "Ho Net, Inc." }, + { 0x000387, "Blaze Network Products" }, + { 0x000388, "Fastfame Technology Co., Ltd." }, + { 0x000389, "Plantronics" }, + { 0x00038A, "America Online, Inc." }, + { 0x00038B, "PLUS-ONE I&T, Inc." }, + { 0x00038C, "Total Impact" }, + { 0x00038D, "PCS Revenue Control Systems, Inc." }, + { 0x00038E, "Atoga Systems, Inc." }, + { 0x00038F, "Weinschel Corporation" }, + { 0x000390, "Digital Video Communications, Inc." }, + { 0x000392, "Hyundai Teletek Co., Ltd." }, + { 0x000393, "Apple Computer, Inc." }, + { 0x000394, "Connect One" }, + { 0x000395, "California Amplifier" }, + { 0x000396, "EZ Cast Co., Ltd." }, + { 0x000397, "Watchfront Electronics" }, + { 0x000398, "WISI" }, + { 0x000399, "Dongju Informations & Communications Co., Ltd." }, + { 0x00039A, "nSine, Ltd." }, + { 0x00039B, "NetChip Technology, Inc." }, + { 0x00039C, "OptiMight Communications, Inc." }, + { 0x00039D, "Acer Communications & Multimedia, Inc." }, + { 0x00039E, "Tera System Co., Ltd." }, + { 0x00039F, "Cisco Systems, Inc." }, + { 0x0003A0, "Cisco Systems, Inc." }, + { 0x0003A1, "HIPER Information & Communication, Inc." }, + { 0x0003A2, "Catapult Communications" }, + { 0x0003A3, "MAVIX, Ltd." }, + { 0x0003A4, "Data Storage and Information Management" }, + { 0x0003A5, "Medea Corporation" }, + { 0x0003A7, "Unixtar Technology, Inc." }, + { 0x0003A8, "IDOT Computers, Inc." }, + { 0x0003A9, "AXCENT Media AG" }, + { 0x0003AA, "Watlow" }, + { 0x0003AB, "Bridge Information Systems" }, + { 0x0003AC, "Fronius Schweissmaschinen" }, + { 0x0003AD, "Emerson Energy Systems AB" }, + { 0x0003AE, "Allied Advanced Manufacturing Pte, Ltd." }, + { 0x0003AF, "Paragea Communications" }, + { 0x0003B0, "Xsense Technology Corp." }, + { 0x0003B1, "Abbott Laboratories HPD" }, + { 0x0003B2, "Radware" }, + { 0x0003B3, "IA Link Systems Co., Ltd." }, + { 0x0003B4, "Macrotek International Corp." }, + { 0x0003B5, "Entra Technology Co." }, + { 0x0003B6, "QSI Corporation" }, + { 0x0003B7, "ZACCESS Systems" }, + { 0x0003B8, "NetKit Solutions, LLC" }, + { 0x0003B9, "Hualong Telecom Co., Ltd." }, + { 0x0003BA, "Sun Microsystems" }, + { 0x0003BB, "Signal Communications Limited" }, + { 0x0003BC, "COT GmbH" }, + { 0x0003BD, "OmniCluster Technologies, Inc." }, + { 0x0003BE, "Netility" }, + { 0x0003BF, "Centerpoint Broadband Technologies, Inc." }, + { 0x0003C0, "RFTNC Co., Ltd." }, + { 0x0003C1, "Packet Dynamics Ltd" }, + { 0x0003C2, "Solphone K.K." }, + { 0x0003C3, "Micronik Multimedia" }, + { 0x0003C4, "Tomra Systems ASA" }, + { 0x0003C5, "Mobotix AG" }, + { 0x0003C6, "ICUE Systems, Inc." }, + { 0x0003C7, "hopf Elektronik GmbH" }, + { 0x0003C8, "CML Emergency Services" }, + { 0x0003C9, "TECOM Co., Ltd." }, + { 0x0003CA, "MTS Systems Corp." }, + { 0x0003CB, "Nippon Systems Development Co., Ltd." }, + { 0x0003CC, "Momentum Computer, Inc." }, + { 0x0003CD, "Clovertech, Inc." }, + { 0x0003CE, "ETEN Technologies, Inc." }, + { 0x0003CF, "Muxcom, Inc." }, + { 0x0003D0, "KOANKEISO Co., Ltd." }, + { 0x0003D1, "Takaya Corporation" }, + { 0x0003D2, "Crossbeam Systems, Inc." }, + { 0x0003D3, "Internet Energy Systems, Inc." }, + { 0x0003D4, "Alloptic, Inc." }, + { 0x0003D5, "Advanced Communications Co., Ltd." }, + { 0x0003D6, "RADVision, Ltd." }, + { 0x0003D7, "NextNet Wireless, Inc." }, + { 0x0003D8, "iMPath Networks, Inc." }, + { 0x0003D9, "Secheron SA" }, + { 0x0003DA, "Takamisawa Cybernetics Co., Ltd." }, + { 0x0003DB, "Apogee Electronics Corp." }, + { 0x0003DC, "Lexar Media, Inc." }, + { 0x0003DD, "Comark Corp." }, + { 0x0003DE, "OTC Wireless" }, + { 0x0003DF, "Desana Systems" }, + { 0x0003E0, "RadioFrame Networks, Inc." }, + { 0x0003E1, "Winmate Communication, Inc." }, + { 0x0003E2, "Comspace Corporation" }, + { 0x0003E3, "Cisco Systems, Inc." }, + { 0x0003E4, "Cisco Systems, Inc." }, + { 0x0003E5, "Hermstedt SG" }, + { 0x0003E6, "Entone Technologies, Inc." }, + { 0x0003E7, "Logostek Co. Ltd." }, + { 0x0003E8, "Wavelength Digital Limited" }, + { 0x0003E9, "Akara Canada, Inc." }, + { 0x0003EA, "Mega System Technologies, Inc." }, + { 0x0003EB, "Atrica" }, + { 0x0003EC, "ICG Research, Inc." }, + { 0x0003ED, "Shinkawa Electric Co., Ltd." }, + { 0x0003EE, "MKNet Corporation" }, + { 0x0003EF, "Oneline AG" }, + { 0x0003F0, "Redfern Broadband Networks" }, + { 0x0003F1, "Cicada Semiconductor, Inc." }, + { 0x0003F2, "Seneca Networks" }, + { 0x0003F3, "Dazzle Multimedia, Inc." }, + { 0x0003F4, "NetBurner" }, + { 0x0003F5, "Chip2Chip" }, + { 0x0003F6, "Allegro Networks, Inc." }, + { 0x0003F7, "Plast-Control GmbH" }, + { 0x0003F8, "SanCastle Technologies, Inc." }, + { 0x0003F9, "Pleiades Communications, Inc." }, + { 0x0003FA, "TiMetra Networks" }, + { 0x0003FB, "Toko Seiki Company, Ltd." }, + { 0x0003FC, "Intertex Data AB" }, + { 0x0003FD, "Cisco Systems, Inc." }, + { 0x0003FE, "Cisco Systems, Inc." }, + { 0x0003FF, "Connectix" }, + { 0x000400, "LEXMARK INTERNATIONAL, INC." }, + { 0x000401, "Osaki Electric Co., Ltd." }, + { 0x000402, "Nexsan Technologies, Ltd." }, + { 0x000403, "Nexsi Corporation" }, + { 0x000404, "Makino Milling Machine Co., Ltd." }, + { 0x000405, "ACN Technologies" }, + { 0x000406, "Fa. Metabox AG" }, + { 0x000407, "Topcon Positioning Systems, Inc." }, + { 0x000408, "Sanko Electronics Co., Ltd." }, + { 0x000409, "Cratos Networks" }, + { 0x00040A, "Sage Systems" }, + { 0x00040B, "3com Europe Ltd." }, + { 0x00040C, "KANNO Work's Ltd." }, + { 0x00040D, "Avaya, Inc." }, + { 0x00040E, "AVM GmbH" }, + { 0x00040F, "Asus Network Technologies, Inc." }, + { 0x000410, "Spinnaker Networks, Inc." }, + { 0x000411, "Inkra Networks, Inc." }, + { 0x000412, "WaveSmith Networks, Inc." }, + { 0x000413, "SNOM Technology AG" }, + { 0x000414, "Umezawa Musen Denki Co., Ltd." }, + { 0x000415, "Rasteme Systems Co., Ltd." }, + { 0x000416, "Parks S/A Comunicacoes Digitais" }, + { 0x000417, "ELAU AG" }, + { 0x000418, "Teltronic S.A.U." }, + { 0x000419, "Fibercycle Networks, Inc." }, + { 0x00041A, "ines GmbH" }, + { 0x00041B, "Digital Interfaces Ltd." }, + { 0x00041C, "ipDialog, Inc." }, + { 0x00041D, "Corega of America" }, + { 0x00041E, "Shikoku Instrumentation Co., Ltd." }, + { 0x00041F, "Sony Computer Entertainment, Inc." }, + { 0x000420, "Slim Devices, Inc." }, + { 0x000421, "Ocular Networks" }, + { 0x000422, "Gordon Kapes, Inc." }, + { 0x000423, "Intel Corporation" }, + { 0x000424, "TMC s.r.l." }, + { 0x000425, "Atmel Corporation" }, + { 0x000426, "Autosys" }, + { 0x000427, "Cisco Systems, Inc." }, + { 0x000428, "Cisco Systems, Inc." }, + { 0x000429, "Pixord Corporation" }, + { 0x00042A, "Wireless Networks, Inc." }, + { 0x00042B, "IT Access Co., Ltd." }, + { 0x00042C, "Minet, Inc." }, + { 0x00042D, "Sarian Systems, Ltd." }, + { 0x00042E, "Netous Technologies, Ltd." }, + { 0x00042F, "International Communications Products, Inc." }, + { 0x000430, "Netgem" }, + { 0x000431, "Play Industries" }, + { 0x000432, "Voyetra Turtle Beach, Inc." }, + { 0x000433, "Cyberboard A/S" }, + { 0x000434, "Accelent Systems, Inc." }, + { 0x000435, "Comptek International, Inc." }, + { 0x000436, "ELANsat Technologies, Inc." }, + { 0x000437, "Powin Information Technology, Inc." }, + { 0x000438, "Nortel Networks" }, + { 0x000439, "Rosco Entertainment Technology, Inc." }, + { 0x00043A, "Intelligent Telecommunications, Inc." }, + { 0x00043B, "Lava Computer Mfg., Inc." }, + { 0x00043C, "SONOS Co., Ltd." }, + { 0x00043D, "INDEL AG" }, + { 0x00043E, "Telencomm" }, + { 0x00043F, "Electronic Systems Technology, Inc." }, + { 0x000440, "cyberPIXIE, Inc." }, + { 0x000441, "Half Dome Systems, Inc." }, + { 0x000442, "NACT" }, + { 0x000443, "Agilent Technologies, Inc." }, + { 0x000444, "Wireless Home" }, + { 0x000445, "LMS Skalar Instruments GmbH" }, + { 0x000446, "CYZENTECH Co., Ltd." }, + { 0x000447, "Acrowave Systems Co., Ltd." }, + { 0x000448, "Polaroid Professional Imaging" }, + { 0x000449, "Mapletree Networks" }, + { 0x00044A, "iPolicy Networks, Inc." }, + { 0x00044B, "NVIDIA" }, + { 0x00044C, "JENOPTIK" }, + { 0x00044D, "Cisco Systems, Inc." }, + { 0x00044E, "Cisco Systems, Inc." }, + { 0x00044F, "Leukhardt Systemelektronik GmbH" }, + { 0x000450, "DMD Computers SRL" }, + { 0x000451, "Medrad, Inc." }, + { 0x000452, "RocketLogix, Inc." }, + { 0x000453, "Yotta Yotta, Inc." }, + { 0x000454, "Quadriga UK" }, + { 0x000455, "ANTARA.net" }, + { 0x000456, "PipingHot Networks" }, + { 0x000457, "Universal Access Technology, Inc." }, + { 0x000458, "Fusion X Co., Ltd." }, + { 0x000459, "Veristar Corporation" }, + { 0x00045A, "The Linksys Group, Inc." }, + { 0x00045B, "Techsan Electronics Co., Ltd." }, + { 0x00045C, "Mobiwave Pte Ltd" }, + { 0x00045D, "BEKA Elektronik" }, + { 0x00045E, "Poly Trax Information Technology AG" }, + { 0x00045F, "Evalue Technology, Inc." }, + { 0x000460, "Knilink Technology, Inc." }, + { 0x000461, "EPOX Computer Co., Ltd." }, + { 0x000462, "DAKOS Data & Communication Co., Ltd." }, + { 0x000463, "Philips Communication Security & Imaging" }, + { 0x000464, "Fantasma Networks, Inc." }, + { 0x000465, "ist isdn support tecknik GmbH" }, + { 0x000466, "ARMITEL Co." }, + { 0x000467, "Wuhan Research Institute" }, + { 0x000468, "Vivity, Inc." }, + { 0x000469, "Innocom, Inc." }, + { 0x00046A, "Navini Networks" }, + { 0x00046B, "Palm Wireless, Inc." }, + { 0x00046C, "Cyber Technology Co., Ltd." }, + { 0x00046D, "Cisco Systems, Inc." }, + { 0x00046E, "Cisco Systems, Inc." }, + { 0x00046F, "Digitel S/A Industria Eletronica" }, + { 0x000470, "ipUnplugged AB" }, + { 0x000471, "IPrad" }, + { 0x000472, "Telelynx, Inc." }, + { 0x000473, "Photonex Corporation" }, + { 0x000474, "LEGRAND" }, + { 0x000475, "3 Com Corporation" }, + { 0x000476, "3 Com Corporation" }, + { 0x000477, "e-Appliance Corp." }, + { 0x000478, "G. Star Technology Corporation" }, + { 0x000479, "Radius Co., Ltd." }, + { 0x00047A, "AXXESSIT ASA" }, + { 0x00047B, "Schlumberger" }, + { 0x00047C, "Skidata AG" }, + { 0x00047D, "Pelco" }, + { 0x00047E, "NKF Electronics" }, + { 0x00047F, "Chr. Mayr GmbH & Co. KG" }, + { 0x000480, "Foundry Networks, Inc." }, + { 0x000481, "Econolite Control Products, Inc." }, + { 0x000482, "MediaLogic Corp." }, + { 0x000483, "Deltron Technology, Inc." }, + { 0x000484, "Amann GmbH" }, + { 0x000485, "PicoLight" }, + { 0x000486, "ITTC, University of Kansas" }, + { 0x000487, "Cogency Semiconductor, Inc." }, + { 0x000488, "Eurotherm Action Incorporated." }, + { 0x000489, "YAFO Networks, Inc." }, + { 0x00048A, "Temia Vertriebs GmbH" }, + { 0x00048B, "Poscon Corporation" }, + { 0x00048C, "Nayna Networks, Inc." }, + { 0x00048D, "Tone Commander Systems, Inc." }, + { 0x00048E, "Ohm Tech Labs, Inc." }, + { 0x00048F, "TD Systems Corp." }, + { 0x000490, "Optical Access" }, + { 0x000491, "Technovision, Inc." }, + { 0x000492, "Hive Internet, Ltd." }, + { 0x000493, "Tsinghua Unisplendour Co., Ltd." }, + { 0x000494, "Breezecom, Ltd." }, + { 0x000495, "Tejas Networks" }, + { 0x000496, "Extreme Networks" }, + { 0x000497, "MacroSystem Digital Video AG" }, + { 0x000499, "Chino Corporation" }, + { 0x00049A, "Cisco Systems, Inc." }, + { 0x00049B, "Cisco Systems, Inc." }, + { 0x00049C, "Surgient Networks, Inc." }, + { 0x00049D, "Ipanema Technologies" }, + { 0x00049E, "Wirelink Co., Ltd." }, + { 0x00049F, "Metrowerks" }, + { 0x0004A0, "Verity Instruments, Inc." }, + { 0x0004A1, "Pathway Connectivity" }, + { 0x0004A2, "L.S.I. Japan Co., Ltd." }, + { 0x0004A3, "Microchip Technology, Inc." }, + { 0x0004A4, "NetEnabled, Inc." }, + { 0x0004A5, "Barco Projection Systems NV" }, + { 0x0004A6, "SAF Tehnika Ltd." }, + { 0x0004A7, "FabiaTech Corporation" }, + { 0x0004A8, "Broadmax Technologies, Inc." }, + { 0x0004A9, "SandStream Technologies, Inc." }, + { 0x0004AA, "Jetstream Communications" }, + { 0x0004AB, "Comverse Network Systems, Inc." }, + { 0x0004AC, "IBM CORP." }, + { 0x0004AD, "Malibu Networks" }, + { 0x0004AE, "Liquid Metronics" }, + { 0x0004AF, "Digital Fountain, Inc." }, + { 0x0004B0, "ELESIGN Co., Ltd." }, + { 0x0004B1, "Signal Technology, Inc." }, + { 0x0004B2, "ESSEGI SRL" }, + { 0x0004B3, "Videotek, Inc." }, + { 0x0004B4, "CIAC" }, + { 0x0004B5, "Equitrac Corporation" }, + { 0x0004B6, "Tellumat (Pty) Ltd." }, + { 0x0004B7, "AMB i.t. Holding" }, + { 0x0004B8, "Kumahira Co., Ltd." }, + { 0x0004B9, "S.I. Soubou, Inc." }, + { 0x0004BA, "KDD Media Will Corporation" }, + { 0x0004BB, "Bardac Corporation" }, + { 0x0004BC, "Giantec, Inc." }, + { 0x0004BD, "Motorola BCS" }, + { 0x0004BE, "OptXCon, Inc." }, + { 0x0004BF, "Versa Logic Corp." }, + { 0x0004C0, "Cisco Systems, Inc." }, + { 0x0004C1, "Cisco Systems, Inc." }, + { 0x0004C2, "Magnipix, Inc." }, + { 0x0004C3, "CASTOR Informatique" }, + { 0x0004C4, "Allen & Health" }, + { 0x0004C5, "ASE Technologies, USA" }, + { 0x0004C6, "Yamaha Motor Co., Ltd." }, + { 0x0004C7, "NetMount" }, + { 0x0004C8, "LIBA Maschinefabrik GmbH" }, + { 0x0004C9, "Micro Electron Co., Ltd." }, + { 0x0004CA, "FreeMs Corp." }, + { 0x0004CB, "Tdsoft Communication, Ltd." }, + { 0x0004CC, "Peek Traffic BV." }, + { 0x0004CD, "Informedia Research Group" }, + { 0x0004CE, "Patria Ailon" }, + { 0x0004CF, "Seagate Technology" }, + { 0x0004D0, "Softlink s.r.o." }, + { 0x0004D1, "Drew Technologies, Inc." }, + { 0x0004D2, "Adcon Telemetry AG" }, + { 0x0004D3, "Toyokeiki Co., Ltd." }, + { 0x0004D4, "Proview Electronics Co., Ltd." }, + { 0x0004D5, "Hitachi Communication Systems, Inc." }, + { 0x0004D6, "Takagi Industrial Co., Ltd." }, + { 0x0004D7, "Omitec Instrumentation Ltd." }, + { 0x0004D8, "IPWireless, Inc." }, + { 0x0004D9, "Titan Electronics, Inc." }, + { 0x0004DA, "Relax Technology, Inc." }, + { 0x0004DB, "Tellus Group Corp." }, + { 0x0004DC, "Nortel Networks" }, + { 0x0004DD, "Cisco Systems, Inc." }, + { 0x0004DE, "Cisco Systems, Inc." }, + { 0x0004DF, "Teracom Telematica Ltda." }, + { 0x0004E0, "Procket Networks" }, + { 0x0004E1, "Infinior Microsystems" }, + { 0x0004E2, "SMC Networks, Inc." }, + { 0x0004E3, "Accton Technology Corp." }, + { 0x0004E4, "Daeryung Ind., Inc." }, + { 0x0004E5, "Glonet Systems, Inc." }, + { 0x0004E6, "Banyan Network Private Limited" }, + { 0x0004E7, "Lightpointe Communications, Inc" }, + { 0x0004E8, "IER, Inc." }, + { 0x0004E9, "Infiniswitch Corporation" }, + { 0x0004EA, "Hewlett-Packard Company" }, + { 0x0004EB, "Paxonet Communications, Inc." }, + { 0x0004EC, "Memobox SA" }, + { 0x0004ED, "Billion Electric Co., Ltd." }, + { 0x0004EE, "Lincoln Electric Company" }, + { 0x0004EF, "Polestar Corp." }, + { 0x0004F0, "International Computers, Ltd" }, + { 0x0004F1, "WhereNet" }, + { 0x0004F2, "Circa Communications, Ltd." }, + { 0x0004F3, "FS FORTH-SYSTEME GmbH" }, + { 0x0004F4, "Infinite Electronics Inc." }, + { 0x0004F5, "SnowShore Networks, Inc." }, + { 0x0004F6, "Amphus" }, + { 0x0004F7, "Omega Band, Inc." }, + { 0x0004F8, "QUALICABLE TV Industria E Com., Ltda" }, + { 0x0004F9, "Xtera Communications, Inc." }, + { 0x0004FA, "MIST Inc." }, + { 0x0004FB, "Commtech, Inc." }, + { 0x0004FC, "Stratus Computer (DE), Inc." }, + { 0x0004FD, "Japan Control Engineering Co., Ltd." }, + { 0x0004FE, "Pelago Networks" }, + { 0x0004FF, "Acronet Co., Ltd." }, + { 0x000500, "Cisco Systems, Inc." }, + { 0x000501, "Cisco Systems, Inc." }, + { 0x000502, "APPLE COMPUTER" }, + { 0x000503, "ICONAG" }, + { 0x000504, "Naray Information & Communication Enterprise" }, + { 0x000505, "Systems Integration Solutions, Inc." }, + { 0x000506, "Reddo Networks AB" }, + { 0x000507, "Fine Appliance Corp." }, + { 0x000508, "Inetcam, Inc." }, + { 0x000509, "AVOC Nishimura Ltd." }, + { 0x00050A, "ICS Spa" }, + { 0x00050B, "SICOM Systems, Inc." }, + { 0x00050C, "Network Photonics, Inc." }, + { 0x00050D, "Midstream Technologies, Inc." }, + { 0x00050E, "3ware, Inc." }, + { 0x00050F, "Tanaka S/S Ltd." }, + { 0x000510, "Infinite Shanghai Communication Terminals Ltd." }, + { 0x000511, "Complementaty Technologies Ltd" }, + { 0x000512, "MeshNetworks, Inc." }, + { 0x000513, "VTLinx Multimedia Systems, Inc." }, + { 0x000514, "KDT Systems Co., Ltd." }, + { 0x000515, "Nuark Co., Ltd." }, + { 0x000516, "SMART Modular Technologies" }, + { 0x000517, "Shellcomm, Inc." }, + { 0x000518, "Jupiters Technology" }, + { 0x000519, "Siemens Building Technologies AG," }, + { 0x00051A, "3Com Europe Ltd." }, + { 0x00051B, "Magic Control Technology Corporation" }, + { 0x00051C, "Xnet Technology Corp." }, + { 0x00051D, "Airocon, Inc." }, + { 0x00051E, "Rhapsody Networks" }, + { 0x00051F, "Taijin Media Co., Ltd." }, + { 0x000520, "Smartronix, Inc." }, + { 0x000521, "Control Microsystems" }, + { 0x000522, "LEA*D Corporation, Inc." }, + { 0x000523, "AVL List GmbH" }, + { 0x000524, "BTL System (HK) Limited" }, + { 0x000525, "Puretek Industrial Co., Ltd." }, + { 0x000526, "IPAS GmbH" }, + { 0x000527, "SJ Tek Co. Ltd" }, + { 0x000528, "New Focus, Inc." }, + { 0x000529, "Shanghai Broadan Communication Technology Co., Ltd" }, + { 0x00052A, "Ikegami Tsushinki Co., Ltd." }, + { 0x00052B, "HORIBA, Ltd." }, + { 0x00052C, "Supreme Magic Corporation" }, + { 0x00052D, "Zoltrix International Limited" }, + { 0x00052E, "Cinta Networks" }, + { 0x00052F, "Leviton Voice and Data" }, + { 0x000530, "Andiamo Systems, Inc." }, + { 0x000531, "Cisco Systems, Inc." }, + { 0x000532, "Cisco Systems, Inc." }, + { 0x000533, "Sanera Systems, Inc." }, + { 0x000534, "Northstar Engineering Ltd." }, + { 0x000535, "Chip PC Ltd." }, + { 0x000536, "Danam Communications, Inc." }, + { 0x000537, "Nets Technology Co., Ltd." }, + { 0x000538, "Merilus, Inc." }, + { 0x000539, "A Brand New World in Sweden AB" }, + { 0x00053A, "Willowglen Services Pte Ltd" }, + { 0x00053B, "Harbour Networks Ltd., Co. Beijing" }, + { 0x00053C, "Xircom" }, + { 0x00053D, "Agere Systems" }, + { 0x00053E, "KID Systeme GmbH" }, + { 0x00053F, "VisionTek, Inc." }, + { 0x000540, "FAST Corporation" }, + { 0x000541, "Advanced Systems Co., Ltd." }, + { 0x000542, "Otari, Inc." }, + { 0x000543, "IQ Wireless GmbH" }, + { 0x000544, "Valley Technologies, Inc." }, + { 0x000545, "Internet Photonics" }, + { 0x000546, "KDD Network Systems Co., Ltd." }, + { 0x000547, "Starent Networks" }, + { 0x000548, "Disco Corporation" }, + { 0x000549, "Salira Optical Network Systems" }, + { 0x00054A, "Ario Data Networks, Inc." }, + { 0x00054B, "Micro Innovation AG" }, + { 0x00054C, "RF Innovations Pty Ltd" }, + { 0x00054D, "Brans Technologies, Inc." }, + { 0x00054E, "Philips Components" }, + { 0x000550, "Digi-Tech Communications Limited" }, + { 0x000551, "F & S Elektronik Systeme GmbH" }, + { 0x000552, "Xycotec Computer GmbH" }, + { 0x000553, "DVC Company, Inc." }, + { 0x000554, "Rangestar Wireless" }, + { 0x000555, "Japan Cash Machine Co., Ltd." }, + { 0x000556, "360 Systems" }, + { 0x000557, "Agile TV Corporation" }, + { 0x000558, "Synchronous, Inc." }, + { 0x000559, "Intracom S.A." }, + { 0x00055A, "Power Dsine Ltd." }, + { 0x00055B, "Charles Industries, Ltd." }, + { 0x00055C, "Kowa Company, Ltd." }, + { 0x00055D, "D-Link Systems, Inc." }, + { 0x00055E, "Cisco Systems, Inc." }, + { 0x00055F, "Cisco Systems, Inc." }, + { 0x000560, "LEADER COMM.CO., LTD" }, + { 0x000561, "nac Image Technology, Inc." }, + { 0x000562, "Digital View Limited" }, + { 0x000563, "J-Works, Inc." }, + { 0x000564, "Tsinghua Bitway Co., Ltd." }, + { 0x000565, "Tailyn Communication Company Ltd." }, + { 0x000566, "Secui.com Corporation" }, + { 0x000567, "Etymonic Design, Inc." }, + { 0x000568, "Piltofish Networks AB" }, + { 0x000569, "VMWARE, Inc." }, + { 0x00056B, "C.P. Technology Co., Ltd." }, + { 0x00056C, "Hung Chang Co., Ltd." }, + { 0x00056D, "Pacific Corporation" }, + { 0x00056E, "National Enhance Technology, Inc." }, + { 0x00056F, "Innomedia Technologies Pvt. Ltd." }, + { 0x000570, "Baydel Ltd." }, + { 0x000571, "Seiwa Electronics Co." }, + { 0x000572, "Deonet Co., Ltd." }, + { 0x000573, "Cisco Systems, Inc." }, + { 0x000574, "Cisco Systems, Inc." }, + { 0x000575, "CDS-Electronics BV" }, + { 0x000576, "NSM Technology Ltd." }, + { 0x000577, "SM Information & Communication" }, + { 0x000579, "Universal Control Solution Corp." }, + { 0x00057A, "Hatteras Networks" }, + { 0x00057B, "Chung Nam Electronic Co., Ltd." }, + { 0x00057C, "RCO Security AB" }, + { 0x00057D, "Sun Communications, Inc." }, + { 0x00057E, "Eckelmann Steuerungstechnik GmbH" }, + { 0x00057F, "Acqis Technology" }, + { 0x000580, "Fibrolan Ltd." }, + { 0x000581, "Snell & Wilcox Ltd." }, + { 0x000582, "ClearCube Technology" }, + { 0x000583, "ImageCom Limited" }, + { 0x000584, "AbsoluteValue Systems, Inc." }, + { 0x000585, "Juniper Networks, Inc." }, + { 0x000586, "Lucent Technologies" }, + { 0x000587, "Locus, Incorporated" }, + { 0x000588, "Sensoria Corp." }, + { 0x000589, "National Datacomputer" }, + { 0x00058A, "Netcom Co., Ltd." }, + { 0x00058B, "IPmental, Inc." }, + { 0x00058C, "Opentech Inc." }, + { 0x00058D, "Lynx Photonic Networks, Inc." }, + { 0x00058E, "Ahead Communications System GmbH" }, + { 0x00058F, "CLCsoft co." }, + { 0x000590, "Ascom Business Systems" }, + { 0x000591, "Active Silicon Ltd." }, + { 0x000592, "Pultex Corp." }, + { 0x000593, "Grammar Engine Inc." }, + { 0x000594, "IXXAT Automation GmbH" }, + { 0x000595, "Alesis Corporation" }, + { 0x000596, "Genotech Co., Ltd." }, + { 0x000597, "Eagle Traffic Control Systems" }, + { 0x000598, "CRONOS S.r.l." }, + { 0x000599, "PEI Electronics, Inc." }, + { 0x00059A, "Cisco Systems, Inc." }, + { 0x00059B, "Cisco Systems, Inc." }, + { 0x00059C, "Kleinknecht GmbH, Ing. Buero" }, + { 0x00059D, "Daniel Computing Systems, Inc." }, + { 0x00059E, "Zinwell Corporation" }, + { 0x00059F, "Yotta Networks, Inc." }, + { 0x0005A0, "MOBILINE Kft." }, + { 0x0005A1, "Zenocom" }, + { 0x0005A2, "CELOX Networks" }, + { 0x0005A3, "QEI, Inc." }, + { 0x0005A4, "Lucid Voice Ltd." }, + { 0x0005A5, "KOTT" }, + { 0x0005A6, "Extron Electronics" }, + { 0x0005A7, "Hyperchip, Inc." }, + { 0x0005A8, "WYLE ELECTRONICS" }, + { 0x0005A9, "Princeton Networks, Inc." }, + { 0x0005AA, "Moore Industries Int." }, + { 0x0005AB, "Cyber Fone, Inc." }, + { 0x0005AC, "Northern Digital, Inc." }, + { 0x0005AD, "Topspin Communications, Inc." }, + { 0x0005AE, "Mediaport USA" }, + { 0x0005AF, "InnoScan Computing A/S" }, + { 0x0005B0, "Korea Computer Technology Co., Ltd." }, + { 0x0005B1, "ASB Technology BV" }, + { 0x0005B2, "Medison Co., Ltd." }, + { 0x0005B3, "Asahi-Engineering Co., Ltd." }, + { 0x0005B4, "Aceex Corporation" }, + { 0x0005B5, "Broadcom Technologies" }, + { 0x0005B6, "INSYS Microelectronics GmbH" }, + { 0x0005B7, "Arbor Technology Corp." }, + { 0x0005B8, "Electronic Design Associates, Inc." }, + { 0x0005B9, "Airvana, Inc." }, + { 0x0005BA, "Area Netwoeks, Inc." }, + { 0x0005BC, "Resorsys Ltd." }, + { 0x0005BD, "ROAX BV" }, + { 0x0005BE, "Kongsberg Seatex AS" }, + { 0x0005BF, "JustEzy Technology, Inc." }, + { 0x0005C0, "Digital Network Alacarte Co., Ltd." }, + { 0x0005C1, "A-Kyung Motion, Inc." }, + { 0x0005C2, "Digital Archway, Inc." }, + { 0x0005C3, "Pacific Instruments, Inc." }, + { 0x0005C4, "Telect, Inc." }, + { 0x0005C5, "Flaga HF" }, + { 0x0005C6, "Triz Communications" }, + { 0x0005C7, "I/F-COM A/S" }, + { 0x0005C8, "VERYTECH" }, + { 0x0005C9, "LG Innotek" }, + { 0x0005CA, "Hitron Technology, Inc." }, + { 0x0005CB, "ROIS Technologies, Inc." }, + { 0x0005CC, "Sumtel Communications, Inc." }, + { 0x0005CD, "Nippon Columbia" }, + { 0x0005CE, "Prolink Microsystems Corporation" }, + { 0x0005CF, "Thunder River Technologies, Inc." }, + { 0x0005D0, "Solinet Systems" }, + { 0x0005D1, "Metavector Technologies" }, + { 0x0005D2, "DAP Technologies" }, + { 0x0005D3, "CAC, Inc." }, + { 0x0005D4, "FutureSmart Networks, Inc." }, + { 0x0005D5, "Speedcom Wireless" }, + { 0x0005D6, "Titan Wireless" }, + { 0x0005D7, "Vista Imaging, Inc." }, + { 0x0005D8, "Arescom, Inc." }, + { 0x0005D9, "Techno Valley, Inc." }, + { 0x0005DA, "Apex Automationstechnik" }, + { 0x0005DB, "Nentec GmbH" }, + { 0x0005DC, "Cisco Systems, Inc." }, + { 0x0005DD, "Cisco Systems, Inc." }, + { 0x0005DE, "Gi Fone Korea, Inc." }, + { 0x0005DF, "Electronic Innovation, Inc." }, + { 0x0005E0, "Empirix Corp." }, + { 0x0005E1, "Trellis Photonics, Ltd." }, + { 0x0005E2, "Creativ Network Technologies" }, + { 0x0005E3, "LightSand Communications, Inc." }, + { 0x0005E4, "Red Lion Controls L.P." }, + { 0x0005E5, "Renishaw PLC" }, + { 0x0005E6, "Egenera, Inc." }, + { 0x0005E7, "Netrake" }, + { 0x0005E8, "TurboWave, Inc." }, + { 0x0005E9, "Unicess Networks, Inc." }, + { 0x0005EA, "Viewcast Corporation" }, + { 0x0005EB, "Blue Ridge Networks, Inc." }, + { 0x0005EC, "Mosaic Systems Inc." }, + { 0x0005ED, "Technikum Joanneaum GmbH" }, + { 0x0005EE, "BEWATOR Group" }, + { 0x0005EF, "ADOIR Digital Technology" }, + { 0x0005F0, "SATEC" }, + { 0x0005F1, "VRcom, Inc." }, + { 0x0005F2, "Power R, Inc." }, + { 0x0005F3, "Weboyn" }, + { 0x0005F4, "SystemBase Co., Ltd." }, + { 0x0005F5, "OYO Geospace Corp." }, + { 0x0005F6, "Young Chang Co. Ltd." }, + { 0x0005F7, "Analog Devices, Inc." }, + { 0x0005F8, "Real Time Access, Inc." }, + { 0x0005F9, "Diva Systems" }, + { 0x0005FA, "IPOptical, Inc." }, + { 0x0005FB, "Sharegate" }, + { 0x0005FC, "Schenck Pegasus Corp." }, + { 0x0005FD, "PacketLight Networks Ltd." }, + { 0x0005FE, "Traficon N.V." }, + { 0x0005FF, "SNS Solutions, Inc." }, + { 0x000600, "Tokyo Electronic Industry Co., Ltd." }, + { 0x000601, "Otanikeiki Co., Ltd." }, + { 0x000602, "Cirkitech Electronics Co." }, + { 0x000603, "Baker Hughes" }, + { 0x000604, "@Track Communications, Inc." }, + { 0x000605, "Inncom International, Inc." }, + { 0x000606, "RapidWan, Inc." }, + { 0x000607, "Omni-Directional Control Technology Inc." }, + { 0x000608, "At-Sky SAS" }, + { 0x000609, "Crossport Systems" }, + { 0x00060A, "Blue2space.com" }, + { 0x00060B, "Paceline Systems Corporation" }, + { 0x00060C, "Melco Industries, Inc." }, + { 0x00060D, "Wave7 Optics" }, + { 0x00060E, "IGSYS Systems, Inc." }, + { 0x00060F, "Narad Networks Inc" }, + { 0x000610, "Abeona Networks Inc" }, + { 0x000611, "Zeus Wireless, Inc." }, + { 0x000612, "Accusys, Inc." }, + { 0x000613, "Kawasaki Steel Corporation" }, + { 0x000614, "Prism Holdings" }, + { 0x000615, "Kimoto Electric Co., Ltd." }, + { 0x000616, "Tel Net Co., Ltd." }, + { 0x000617, "Redswitch Inc." }, + { 0x000618, "DigiPower Manufacturing Inc." }, + { 0x000619, "Connection Technology Systems" }, + { 0x00061A, "Zetari Inc." }, + { 0x00061B, "Portable Systems, IBM Japan Co, Ltd" }, + { 0x00061C, "Hoshino Metal Industries, Ltd." }, + { 0x00061D, "MIP Telecom, Inc." }, + { 0x00061E, "Maxan Systems" }, + { 0x00061F, "Vision Components GmbH" }, + { 0x000620, "Serial System Ltd." }, + { 0x000621, "Hinox, Co., Ltd." }, + { 0x000622, "Chung Fu Chen Yeh Enterprise Corp." }, + { 0x000623, "MGE UPS Systems France" }, + { 0x000624, "Gentner Communications" }, + { 0x000625, "The Linksys Group, Inc." }, + { 0x000626, "MWE GmbH" }, + { 0x000627, "Uniwide Technologies, Inc." }, + { 0x000628, "Cisco Systems, Inc." }, + { 0x000629, "IBM CORPORATION" }, + { 0x00062A, "Cisco Systems, Inc." }, + { 0x00062B, "INTRASERVER TECHNOLOGY" }, + { 0x00062C, "Network Robots, Inc." }, + { 0x00062D, "TouchStar Technologies, L.L.C." }, + { 0x00062E, "Aristos Logic Corp." }, + { 0x00062F, "Pivotech Systems Inc." }, + { 0x000630, "Adtranz Sweden" }, + { 0x000631, "Optical Solutions, Inc." }, + { 0x000632, "Mesco Engineering GmbH" }, + { 0x000633, "Heimann Biometric Systems GmbH" }, + { 0x000634, "GTE Airfone Inc." }, + { 0x000635, "PacketAir Networks, Inc." }, + { 0x000636, "Jedai Broadband Networks" }, + { 0x000637, "Toptrend-Meta Information (ShenZhen) Inc." }, + { 0x000638, "Sungjin C&C Co., Ltd." }, + { 0x000639, "Newtec" }, + { 0x00063A, "Dura Micro, Inc." }, + { 0x00063B, "Lineo Canada Corp." }, + { 0x00063C, "NMI Electronics Ltd" }, + { 0x00063D, "Microwave Data Systems Inc." }, + { 0x00063E, "Opthos Inc." }, + { 0x00063F, "Everex Communications Inc." }, + { 0x000640, "White Rock Networks" }, + { 0x000641, "ITCN" }, + { 0x000642, "Genetel Systems Inc." }, + { 0x000643, "SONO Computer Co., Ltd." }, + { 0x000644, "NEIX Inc." }, + { 0x000645, "Meisei Electric Co. Ltd." }, + { 0x000646, "ShenZhen XunBao Network Technology Co Ltd" }, + { 0x000647, "Etrali S.A." }, + { 0x000648, "Seedsware, Inc." }, + { 0x000649, "Quante" }, + { 0x00064A, "Honeywell Co., Ltd. (KOREA)" }, + { 0x00064B, "Alexon Co., Ltd." }, + { 0x00064C, "Invicta Networks, Inc." }, + { 0x00064D, "Sencore" }, + { 0x00064E, "Broad Net Technology Inc." }, + { 0x00064F, "PRO-NETS Technology Corporation" }, + { 0x000650, "Tiburon Networks, Inc." }, + { 0x000651, "Aspen Networks Inc." }, + { 0x000652, "Cisco Systems, Inc." }, + { 0x000653, "Cisco Systems, Inc." }, + { 0x000654, "Maxxio Technologies" }, + { 0x000655, "Yipee, Inc." }, + { 0x000656, "Tactel AB" }, + { 0x000657, "Market Central, Inc." }, + { 0x000658, "Helmut Fischer GmbH & Co. KG" }, + { 0x000659, "EAL (Apeldoorn) B.V." }, + { 0x00065A, "Strix Systems" }, + { 0x00065B, "Dell Inc." }, + { 0x00065C, "Malachite Technologies, Inc." }, + { 0x00065D, "Heidelberg Web Systems" }, + { 0x00065E, "Photuris, Inc." }, + { 0x00065F, "ECI Telecom - NGTS Ltd." }, + { 0x000660, "NADEX Co., Ltd." }, + { 0x000661, "NIA Home Technologies Corp." }, + { 0x000662, "MBM Technology Ltd." }, + { 0x000663, "Human Technology Co., Ltd." }, + { 0x000664, "Fostex Corporation" }, + { 0x000665, "Summy Gikem, Inc." }, + { 0x000666, "Roving Networks" }, + { 0x000667, "Tripp Lite" }, + { 0x000668, "Vicon Industries Inc." }, + { 0x000669, "Datasound Laboratories Ltd" }, + { 0x00066A, "InfiniCon Systems, Inc." }, + { 0x00066B, "Sysmex Corporation" }, + { 0x00066C, "Robinson Corporation" }, + { 0x00066D, "Compuprint S.P.A." }, + { 0x00066E, "Delta Electronics, Inc." }, + { 0x00066F, "Korea Data Systems" }, + { 0x000670, "Upponetti Oy" }, + { 0x000671, "Softing AG" }, + { 0x000672, "Netezza" }, + { 0x000673, "Optelecom, Inc." }, + { 0x000674, "Spectrum Control, Inc." }, + { 0x000675, "Banderacom, Inc." }, + { 0x000676, "Novra Technologies, Inc." }, + { 0x000677, "SICK AG" }, + { 0x000678, "Marantz Japan, Inc." }, + { 0x000679, "Konami Corporation" }, + { 0x00067A, "JMP Systems" }, + { 0x00067B, "Toplink C&C Corporation" }, + { 0x00067C, "CISCO SYSTEMS, INC." }, + { 0x00067D, "Takasago Ltd." }, + { 0x0006C1, "CISCO SYSTEMS, INC." }, + { 0x000701, "RACAL-DATACOM" }, + { 0x000800, "MULTITECH SYSTEMS, INC." }, + { 0x0008C7, "COMPAQ COMPUTER CORPORATION" }, + { 0x000A27, "Apple Computer, Inc." }, + { 0x001000, "CABLE TELEVISION" }, + { 0x001001, "MCK COMMUNICATIONS" }, + { 0x001002, "ACTIA" }, + { 0x001003, "IMATRON, INC." }, + { 0x001004, "THE BRANTLEY COILE COMPANY,INC" }, + { 0x001005, "UEC COMMERCIAL" }, + { 0x001006, "RACAL RECORDERS LTD." }, + { 0x001007, "CISCO SYSTEMS, INC." }, + { 0x001008, "VIENNA SYSTEMS CORPORATION" }, + { 0x001009, "HORO QUARTZ" }, + { 0x00100A, "WILLIAMS COMMUNICATIONS GROUP" }, + { 0x00100B, "CISCO SYSTEMS, INC." }, + { 0x00100C, "ITO CO., LTD." }, + { 0x00100D, "CISCO SYSTEMS, INC." }, + { 0x00100E, "MICRO LINEAR COPORATION" }, + { 0x00100F, "INDUSTRIAL CPU SYSTEMS" }, + { 0x001010, "INITIO CORPORATION" }, + { 0x001011, "CISCO SYSTEMS, INC." }, + { 0x001012, "PROCESSOR SYSTEMS (I) PVT LTD" }, + { 0x001013, "INDUSTRIAL COMPUTER SOURCE" }, + { 0x001014, "CISCO SYSTEMS, INC." }, + { 0x001015, "OOMON INC." }, + { 0x001016, "T.SQWARE" }, + { 0x001017, "MICOS GMBH" }, + { 0x001018, "BROADCOM CORPORATION" }, + { 0x001019, "SIRONA DENTAL SYSTEMS" }, + { 0x00101A, "PICTURETEL CORP." }, + { 0x00101B, "CORNET TECHNOLOGY, INC." }, + { 0x00101C, "OHM TECHNOLOGIES INTL, LLC" }, + { 0x00101D, "WINBOND ELECTRONICS CORP." }, + { 0x00101E, "MATSUSHITA ELECTRONIC" }, + { 0x00101F, "CISCO SYSTEMS, INC." }, + { 0x001020, "WELCH ALLYN, DATA COLLECTION" }, + { 0x001021, "ENCANTO NETWORKS, INC." }, + { 0x001022, "SATCOM MEDIA CORPORATION" }, + { 0x001023, "FLOWWISE NETWORKS, INC." }, + { 0x001024, "NAGOYA ELECTRIC WORKS CO., LTD" }, + { 0x001025, "GRAYHILL INC." }, + { 0x001026, "ACCELERATED NETWORKS, INC." }, + { 0x001027, "L-3 COMMUNICATIONS EAST" }, + { 0x001028, "COMPUTER TECHNICA, INC." }, + { 0x001029, "CISCO SYSTEMS, INC." }, + { 0x00102A, "ZF MICROSYSTEMS, INC." }, + { 0x00102B, "UMAX DATA SYSTEMS, INC." }, + { 0x00102C, "Lasat Networks A/S" }, + { 0x00102D, "HITACHI SOFTWARE ENGINEERING" }, + { 0x00102E, "NETWORK SYSTEMS & TECHNOLOGIES" }, + { 0x00102F, "CISCO SYSTEMS, INC." }, + { 0x001030, "WI-LAN, INC." }, + { 0x001031, "OBJECTIVE COMMUNICATIONS, INC." }, + { 0x001032, "ALTA TECHNOLOGY" }, + { 0x001033, "ACCESSLAN COMMUNICATIONS, INC." }, + { 0x001034, "GNP COMPUTERS" }, + { 0x001035, "ELITEGROUP COMPUTER" }, + { 0x001036, "INTER-TEL INTEGRATED SYSTEMS" }, + { 0x001037, "CYQ'VE TECHNOLOGY CO., LTD." }, + { 0x001038, "MICRO RESEARCH INSTITUTE, INC." }, + { 0x001039, "VECTRON SYSTEMS GMBH" }, + { 0x00103A, "DIAMOND NETWORK TECH" }, + { 0x00103B, "HIPPI NETWORKING FORUM" }, + { 0x00103C, "IC ENSEMBLE, INC." }, + { 0x00103D, "PHASECOM, LTD." }, + { 0x00103E, "NETSCHOOLS CORPORATION" }, + { 0x00103F, "TOLLGRADE COMMUNICATIONS, INC." }, + { 0x001040, "INTERMEC CORPORATION" }, + { 0x001041, "BRISTOL BABCOCK, INC." }, + { 0x001042, "ALACRITECH" }, + { 0x001043, "A2 CORPORATION" }, + { 0x001044, "INNOLABS CORPORATION" }, + { 0x001045, "Nortel Networks" }, + { 0x001046, "ALCORN MCBRIDE INC." }, + { 0x001047, "ECHO ELETRIC CO. LTD." }, + { 0x001048, "HTRC AUTOMATION, INC." }, + { 0x001049, "SHORELINE TELEWORKS, INC." }, + { 0x00104A, "THE PARVUC CORPORATION" }, + { 0x00104B, "3COM CORPORATION" }, + { 0x00104C, "COMPUTER ACCESS TECHNOLOGY" }, + { 0x00104D, "SURTEC INDUSTRIES, INC." }, + { 0x00104E, "CEOLOGIC" }, + { 0x00104F, "STORAGE TECHNOLOGY CORPORATION" }, + { 0x001050, "RION CO., LTD." }, + { 0x001051, "CMICRO CORPORATION" }, + { 0x001052, "METTLER-TOLEDO (ALBSTADT) GMBH" }, + { 0x001053, "COMPUTER TECHNOLOGY CORP." }, + { 0x001054, "CISCO SYSTEMS, INC." }, + { 0x001055, "FUJITSU MICROELECTRONICS, INC." }, + { 0x001056, "SODICK CO., LTD." }, + { 0x001057, "Rebel.com, Inc." }, + { 0x001058, "ARROWPOINT COMMUNICATIONS,INC." }, + { 0x001059, "DIABLO RESEARCH CO. LLC" }, + { 0x00105A, "3COM CORPORATION" }, + { 0x00105B, "NET INSIGHT AB" }, + { 0x00105C, "QUANTUM DESIGNS (H.K.) LTD." }, + { 0x00105D, "DRAGER, BUSINESS UNIT" }, + { 0x00105E, "HEKIMIAN LABORATORIES, INC." }, + { 0x00105F, "IN-SNEC" }, + { 0x001060, "BILLIONTON SYSTEMS, INC." }, + { 0x001061, "HOSTLINK CORP." }, + { 0x001062, "NX SERVER, ILNC." }, + { 0x001063, "STARGUIDE DIGITAL NETWORKS" }, + { 0x001064, "DIGITAL EQUIPMENT CORP." }, + { 0x001065, "RADYNE CORPORATION" }, + { 0x001066, "ADVANCED CONTROL SYSTEMS, INC." }, + { 0x001067, "REDBACK NETWORKS, INC." }, + { 0x001068, "COMOS TELECOM" }, + { 0x001069, "HELIOSS COMMUNICATIONS, INC." }, + { 0x00106A, "DIGITAL MICROWAVE CORPORATION" }, + { 0x00106B, "SONUS NETWORKS, INC." }, + { 0x00106C, "INFRATEC PLUS GMBH" }, + { 0x00106D, "INTEGRITY COMMUNICATIONS, INC." }, + { 0x00106E, "TADIRAN COM. LTD." }, + { 0x00106F, "TRENTON TECHNOLOGY INC." }, + { 0x001070, "CARADON TREND LTD." }, + { 0x001071, "ADVANET INC." }, + { 0x001072, "GVN TECHNOLOGIES, INC." }, + { 0x001073, "TECHNOBOX, INC." }, + { 0x001074, "ATEN INTERNATIONAL CO., LTD." }, + { 0x001075, "Maxtor Corporation" }, + { 0x001076, "EUREM GMBH" }, + { 0x001077, "SAF DRIVE SYSTEMS, LTD." }, + { 0x001078, "NUERA COMMUNICATIONS, INC." }, + { 0x001079, "CISCO SYSTEMS, INC." }, + { 0x00107A, "AMBICOM, INC." }, + { 0x00107B, "CISCO SYSTEMS, INC." }, + { 0x00107C, "P-COM, INC." }, + { 0x00107D, "AURORA COMMUNICATIONS, LTD." }, + { 0x00107E, "BACHMANN ELECTRONIC GMBH" }, + { 0x00107F, "CRESTRON ELECTRONICS, INC." }, + { 0x001080, "METAWAVE COMMUNICATIONS" }, + { 0x001081, "DPS, INC." }, + { 0x001082, "JNA TELECOMMUNICATIONS LIMITED" }, + { 0x001083, "HEWLETT-PACKARD COMPANY" }, + { 0x001084, "K-BOT COMMUNICATIONS" }, + { 0x001085, "POLARIS COMMUNICATIONS, INC." }, + { 0x001086, "ATTO TECHNOLOGY, INC." }, + { 0x001087, "Xstreamis PLC" }, + { 0x001088, "AMERICAN NETWORKS INC." }, + { 0x001089, "WEBSONIC" }, + { 0x00108A, "TERALOGIC, INC." }, + { 0x00108B, "LASERANIMATION SOLLINGER GMBH" }, + { 0x00108C, "FUJITSU TELECOMMUNICATIONS" }, + { 0x00108D, "JOHNSON CONTROLS, INC." }, + { 0x00108E, "HUGH SYMONS CONCEPT" }, + { 0x00108F, "RAPTOR SYSTEMS" }, + { 0x001090, "CIMETRICS, INC." }, + { 0x001091, "NO WIRES NEEDED BV" }, + { 0x001092, "NETCORE INC." }, + { 0x001093, "CMS COMPUTERS, LTD." }, + { 0x001094, "ADTECH, INC." }, + { 0x001095, "THOMSON CONSUMER ELECTRONICS" }, + { 0x001096, "TRACEWELL SYSTEMS, INC." }, + { 0x001097, "WINNET METROPOLITAN" }, + { 0x001098, "STARNET TECHNOLOGIES, INC." }, + { 0x001099, "INNOMEDIA, INC." }, + { 0x00109A, "NETLINE" }, + { 0x00109B, "VIXEL CORPORATION" }, + { 0x00109C, "M-SYSTEM CO., LTD." }, + { 0x00109D, "CLARINET SYSTEMS, INC." }, + { 0x00109E, "AWARE, INC." }, + { 0x00109F, "PAVO, INC." }, + { 0x0010A0, "INNOVEX TECHNOLOGIES, INC." }, + { 0x0010A1, "KENDIN SEMICONDUCTOR, INC." }, + { 0x0010A2, "TNS" }, + { 0x0010A3, "OMNITRONIX, INC." }, + { 0x0010A4, "XIRCOM" }, + { 0x0010A5, "OXFORD INSTRUMENTS" }, + { 0x0010A6, "CISCO SYSTEMS, INC." }, + { 0x0010A7, "UNEX TECHNOLOGY CORPORATION" }, + { 0x0010A8, "RELIANCE COMPUTER CORP." }, + { 0x0010A9, "ADHOC TECHNOLOGIES" }, + { 0x0010AA, "MEDIA4, INC." }, + { 0x0010AB, "KOITO INDUSTRIES, LTD." }, + { 0x0010AC, "IMCI TECHNOLOGIES" }, + { 0x0010AD, "SOFTRONICS USB, INC." }, + { 0x0010AE, "SHINKO ELECTRIC INDUSTRIES CO." }, + { 0x0010AF, "TAC SYSTEMS, INC." }, + { 0x0010B0, "MERIDIAN TECHNOLOGY CORP." }, + { 0x0010B1, "FOR-A CO., LTD." }, + { 0x0010B2, "COACTIVE AESTHETICS" }, + { 0x0010B3, "NOKIA MULTIMEDIA TERMINALS" }, + { 0x0010B4, "ATMOSPHERE NETWORKS" }, + { 0x0010B5, "ACCTON TECHNOLOGY CORPORATION" }, + { 0x0010B6, "ENTRATA COMMUNICATIONS CORP." }, + { 0x0010B7, "COYOTE TECHNOLOGIES, LLC" }, + { 0x0010B8, "ISHIGAKI COMPUTER SYSTEM CO." }, + { 0x0010B9, "MAXTOR CORP." }, + { 0x0010BA, "MARTINHO-DAVIS SYSTEMS, INC." }, + { 0x0010BB, "DATA & INFORMATION TECHNOLOGY" }, + { 0x0010BC, "Nortel Networks" }, + { 0x0010BD, "THE TELECOMMUNICATION" }, + { 0x0010BE, "TELEXIS CORP." }, + { 0x0010BF, "INTER AIR WIRELESS" }, + { 0x0010C0, "ARMA, INC." }, + { 0x0010C1, "OI ELECTRIC CO., LTD." }, + { 0x0010C2, "WILLNET, INC." }, + { 0x0010C3, "CSI-CONTROL SYSTEMS" }, + { 0x0010C4, "MEDIA LINKS CO., LTD." }, + { 0x0010C5, "PROTOCOL TECHNOLOGIES, INC." }, + { 0x0010C6, "USI" }, + { 0x0010C7, "DATA TRANSMISSION NETWORK" }, + { 0x0010C8, "COMMUNICATIONS ELECTRONICS" }, + { 0x0010C9, "MITSUBISHI ELECTRONICS" }, + { 0x0010CA, "INTEGRAL ACCESS" }, + { 0x0010CB, "FACIT K.K." }, + { 0x0010CC, "CLP COMPUTER LOGISTIK" }, + { 0x0010CD, "INTERFACE CONCEPT" }, + { 0x0010CE, "VOLAMP, LTD." }, + { 0x0010CF, "FIBERLANE COMMUNICATIONS" }, + { 0x0010D0, "WITCOM, LTD." }, + { 0x0010D1, "Top Layer Networks, Inc." }, + { 0x0010D2, "NITTO TSUSHINKI CO., LTD" }, + { 0x0010D3, "GRIPS ELECTRONIC GMBH" }, + { 0x0010D4, "STORAGE COMPUTER CORPORATION" }, + { 0x0010D5, "IMASDE CANARIAS, S.A." }, + { 0x0010D6, "ITT A/CD" }, + { 0x0010D7, "ARGOSY RESEARCH INC." }, + { 0x0010D8, "CALISTA" }, + { 0x0010D9, "IBM JAPAN, FUJISAWA MT+D" }, + { 0x0010DA, "MOTION ENGINEERING, INC." }, + { 0x0010DB, "NETSCREEN TECHNOLOGIES, INC." }, + { 0x0010DC, "MICRO-STAR INTERNATIONAL" }, + { 0x0010DD, "ENABLE SEMICONDUCTOR, INC." }, + { 0x0010DE, "INTERNATIONAL DATACASTING" }, + { 0x0010DF, "RISE COMPUTER INC." }, + { 0x0010E0, "COBALT MICROSERVER, INC." }, + { 0x0010E1, "S.I. TECH, INC." }, + { 0x0010E2, "ARRAYCOMM, INC." }, + { 0x0010E3, "COMPAQ COMPUTER CORPORATION" }, + { 0x0010E4, "NSI CORPORATION" }, + { 0x0010E5, "SOLECTRON TEXAS" }, + { 0x0010E6, "APPLIED INTELLIGENT" }, + { 0x0010E7, "BREEZECOM" }, + { 0x0010E8, "TELOCITY, INCORPORATED" }, + { 0x0010E9, "RAIDTEC LTD." }, + { 0x0010EA, "ADEPT TECHNOLOGY" }, + { 0x0010EB, "SELSIUS SYSTEMS, ILNC." }, + { 0x0010EC, "RPCG, LLC" }, + { 0x0010ED, "SUNDANCE TECHNOLOGY, INC." }, + { 0x0010EE, "CTI PRODUCTS, INC." }, + { 0x0010EF, "DB NETWORKS, INC." }, + { 0x0010F0, "RITTAL-WERK RUDOLF LOH" }, + { 0x0010F1, "I-O CORPORATION" }, + { 0x0010F2, "ANTEC" }, + { 0x0010F3, "NEXCOM INTERNATIONAL CO., LTD." }, + { 0x0010F4, "VERTICAL NETWORKS, INC." }, + { 0x0010F5, "AMHERST SYSTEMS, INC." }, + { 0x0010F6, "CISCO SYSTEMS, INC." }, + { 0x0010F7, "IRIICHI TECHNOLOGIES" }, + { 0x0010F8, "KENWOOD TMI CORPORATION" }, + { 0x0010F9, "UNIQUE SYSTEMS, INC." }, + { 0x0010FA, "ZAYANTE, INC." }, + { 0x0010FB, "ZIDA TECHNOLOGIES LIMITED" }, + { 0x0010FC, "BROADBAND NETWORKS, INC." }, + { 0x0010FD, "COCOM A/S" }, + { 0x0010FE, "DIGITAL EQUIPMENT CORPORATION" }, + { 0x0010FF, "CISCO SYSTEMS, INC." }, + { 0x001C7C, "PERQ SYSTEMS CORPORATION" }, + { 0x002000, "LEXMARK INTERNATIONAL, INC." }, + { 0x002001, "DSP SOLUTIONS, INC." }, + { 0x002002, "SERITECH ENTERPRISE CO., LTD." }, + { 0x002003, "PIXEL POWER LTD." }, + { 0x002004, "YAMATAKE-HONEYWELL CO., LTD." }, + { 0x002005, "SIMPLE TECHNOLOGY" }, + { 0x002006, "GARRETT COMMUNICATIONS, INC." }, + { 0x002007, "SFA, INC." }, + { 0x002008, "CABLE & COMPUTER TECHNOLOGY" }, + { 0x002009, "PACKARD BELL ELEC., INC." }, + { 0x00200A, "SOURCE-COMM CORP." }, + { 0x00200B, "OCTAGON SYSTEMS CORP." }, + { 0x00200C, "ADASTRA SYSTEMS CORP." }, + { 0x00200D, "CARL ZEISS" }, + { 0x00200E, "SATELLITE TECHNOLOGY MGMT, INC" }, + { 0x00200F, "TANBAC CO., LTD." }, + { 0x002010, "JEOL SYSTEM TECHNOLOGY CO. LTD" }, + { 0x002011, "CANOPUS CO., LTD." }, + { 0x002012, "CAMTRONICS MEDICAL SYSTEMS" }, + { 0x002013, "DIVERSIFIED TECHNOLOGY, INC." }, + { 0x002014, "GLOBAL VIEW CO., LTD." }, + { 0x002015, "ACTIS COMPUTER SA" }, + { 0x002016, "SHOWA ELECTRIC WIRE & CABLE CO" }, + { 0x002017, "ORBOTECH" }, + { 0x002018, "CIS TECHNOLOGY INC." }, + { 0x002019, "OHLER GMBH" }, + { 0x00201A, "N-BASE SWITCH COMMUNICATIONS" }, + { 0x00201B, "NORTHERN TELECOM/NETWORK" }, + { 0x00201C, "EXCEL, INC." }, + { 0x00201D, "KATANA PRODUCTS" }, + { 0x00201E, "NETQUEST CORPORATION" }, + { 0x00201F, "BEST POWER TECHNOLOGY, INC." }, + { 0x002020, "MEGATRON COMPUTER INDUSTRIES" }, + { 0x002021, "ALGORITHMS SOFTWARE PVT. LTD." }, + { 0x002022, "TEKNIQUE, INC." }, + { 0x002023, "T.C. TECHNOLOGIES PTY. LTD" }, + { 0x002024, "PACIFIC COMMUNICATION SCIENCES" }, + { 0x002025, "CONTROL TECHNOLOGY, INC." }, + { 0x002026, "AMKLY SYSTEMS, INC." }, + { 0x002027, "MING FORTUNE INDUSTRY CO., LTD" }, + { 0x002028, "WEST EGG SYSTEMS, INC." }, + { 0x002029, "TELEPROCESSING PRODUCTS, INC." }, + { 0x00202A, "N.V. DZINE" }, + { 0x00202B, "ADVANCED TELECOMMUNICATIONS" }, + { 0x00202C, "WELLTRONIX CO., LTD." }, + { 0x00202D, "TAIYO CORPORATION" }, + { 0x00202E, "DAYSTAR DIGITAL" }, + { 0x00202F, "ZETA COMMUNICATIONS, LTD." }, + { 0x002030, "ANALOG & DIGITAL SYSTEMS" }, + { 0x002031, "ERTEC GMBH" }, + { 0x002032, "ALCATEL TAISEL" }, + { 0x002033, "SYNAPSE TECHNOLOGIES, INC." }, + { 0x002034, "ROTEC INDUSTRIEAUTOMATION GMBH" }, + { 0x002035, "IBM CORPORATION" }, + { 0x002036, "BMC SOFTWARE" }, + { 0x002037, "SEAGATE TECHNOLOGY" }, + { 0x002038, "VME MICROSYSTEMS INTERNATIONAL" }, + { 0x002039, "SCINETS" }, + { 0x00203A, "DIGITAL BI0METRICS INC." }, + { 0x00203B, "WISDM LTD." }, + { 0x00203C, "EUROTIME AB" }, + { 0x00203D, "NOVAR ELECTRONICS CORPORATION" }, + { 0x00203E, "LOGICAN TECHNOLOGIES, INC." }, + { 0x00203F, "JUKI CORPORATION" }, + { 0x002040, "Motorola Broadband Communications Sector" }, + { 0x002041, "DATA NET" }, + { 0x002042, "DATAMETRICS CORP." }, + { 0x002043, "NEURON COMPANY LIMITED" }, + { 0x002044, "GENITECH PTY LTD" }, + { 0x002045, "ION Networks, Inc." }, + { 0x002046, "CIPRICO, INC." }, + { 0x002047, "STEINBRECHER CORP." }, + { 0x002048, "Marconi Communications" }, + { 0x002049, "COMTRON, INC." }, + { 0x00204A, "PRONET GMBH" }, + { 0x00204B, "AUTOCOMPUTER CO., LTD." }, + { 0x00204C, "MITRON COMPUTER PTE LTD." }, + { 0x00204D, "INOVIS GMBH" }, + { 0x00204E, "NETWORK SECURITY SYSTEMS, INC." }, + { 0x00204F, "DEUTSCHE AEROSPACE AG" }, + { 0x002050, "KOREA COMPUTER INC." }, + { 0x002051, "PHOENIX DATA COMMUNUNICATIONS" }, + { 0x002052, "RAGULA SYSTEMS" }, + { 0x002053, "HUNTSVILLE MICROSYSTEMS, INC." }, + { 0x002054, "EASTERN RESEARCH, INC." }, + { 0x002055, "ALTECH CO., LTD." }, + { 0x002056, "NEOPRODUCTS" }, + { 0x002057, "TITZE DATENTECHNIK GMBH" }, + { 0x002058, "ALLIED SIGNAL INC." }, + { 0x002059, "MIRO COMPUTER PRODUCTS AG" }, + { 0x00205A, "COMPUTER IDENTICS" }, + { 0x00205B, "SKYLINE TECHNOLOGY" }, + { 0x00205C, "INTERNET SYSTEMS/ FLORIDA INC." }, + { 0x00205D, "NANOMATIC OY" }, + { 0x00205E, "CASTLE ROCK, INC." }, + { 0x00205F, "GAMMADATA COMPUTER GMBH" }, + { 0x002060, "ALCATEL ITALIA S.P.A." }, + { 0x002061, "DYNATECH COMMUNICATIONS, INC." }, + { 0x002062, "SCORPION LOGIC, LTD." }, + { 0x002063, "WIPRO INFOTECH LTD." }, + { 0x002064, "PROTEC MICROSYSTEMS, INC." }, + { 0x002065, "SUPERNET NETWORKING INC." }, + { 0x002066, "GENERAL MAGIC, INC." }, + { 0x002068, "ISDYNE" }, + { 0x002069, "ISDN SYSTEMS CORPORATION" }, + { 0x00206A, "OSAKA COMPUTER CORP." }, + { 0x00206B, "MINOLTA CO., LTD." }, + { 0x00206C, "EVERGREEN TECHNOLOGY CORP." }, + { 0x00206D, "DATA RACE, INC." }, + { 0x00206E, "XACT, INC." }, + { 0x00206F, "FLOWPOINT CORPORATION" }, + { 0x002070, "HYNET, LTD." }, + { 0x002071, "IBR GMBH" }, + { 0x002072, "WORKLINK INNOVATIONS" }, + { 0x002073, "FUSION SYSTEMS CORPORATION" }, + { 0x002074, "SUNGWOON SYSTEMS" }, + { 0x002075, "MOTOROLA COMMUNICATION ISRAEL" }, + { 0x002076, "REUDO CORPORATION" }, + { 0x002077, "KARDIOS SYSTEMS CORP." }, + { 0x002078, "RUNTOP, INC." }, + { 0x002079, "MIKRON GMBH" }, + { 0x00207A, "WISE COMMUNICATIONS, INC." }, + { 0x00207B, "LEVEL ONE COMMUNICATIONS" }, + { 0x00207C, "AUTEC GMBH" }, + { 0x00207D, "ADVANCED COMPUTER APPLICATIONS" }, + { 0x00207E, "FINECOM CO., LTD." }, + { 0x00207F, "KYOEI SANGYO CO., LTD." }, + { 0x002080, "SYNERGY (UK) LTD." }, + { 0x002081, "TITAN ELECTRONICS" }, + { 0x002082, "ONEAC CORPORATION" }, + { 0x002083, "PRESTICOM INCORPORATED" }, + { 0x002084, "OCE PRINTING SYSTEMS, GMBH" }, + { 0x002085, "EXIDE ELECTRONICS" }, + { 0x002086, "MICROTECH ELECTRONICS LIMITED" }, + { 0x002087, "MEMOTEC COMMUNICATIONS CORP." }, + { 0x002088, "GLOBAL VILLAGE COMMUNICATION" }, + { 0x002089, "T3PLUS NETWORKING, INC." }, + { 0x00208A, "SONIX COMMUNICATIONS, LTD." }, + { 0x00208B, "LAPIS TECHNOLOGIES, INC." }, + { 0x00208C, "GALAXY NETWORKS, INC." }, + { 0x00208D, "CMD TECHNOLOGY" }, + { 0x00208E, "CHEVIN SOFTWARE ENG. LTD." }, + { 0x00208F, "ECI TELECOM LTD." }, + { 0x002090, "ADVANCED COMPRESSION" }, + { 0x002091, "J125, NATIONAL SECURITY AGENCY" }, + { 0x002092, "CHESS ENGINEERING B.V." }, + { 0x002093, "LANDINGS TECHNOLOGY CORP." }, + { 0x002094, "CUBIX CORPORATION" }, + { 0x002095, "RIVA ELECTRONICS" }, + { 0x002096, "SIEBE ENVIRONMENTAL CONTROLS" }, + { 0x002097, "APPLIED SIGNAL TECHNOLOGY" }, + { 0x002098, "HECTRONIC AB" }, + { 0x002099, "BON ELECTRIC CO., LTD." }, + { 0x00209A, "THE 3DO COMPANY" }, + { 0x00209B, "ERSAT ELECTRONIC GMBH" }, + { 0x00209C, "PRIMARY ACCESS CORP." }, + { 0x00209D, "LIPPERT AUTOMATIONSTECHNIK" }, + { 0x00209E, "BROWN'S OPERATING SYSTEM" }, + { 0x00209F, "MERCURY COMPUTER SYSTEMS, INC." }, + { 0x0020A0, "OA LABORATORY CO., LTD." }, + { 0x0020A1, "DOVATRON" }, + { 0x0020A2, "GALCOM NETWORKING LTD." }, + { 0x0020A3, "DIVICOM INC." }, + { 0x0020A4, "MULTIPOINT NETWORKS" }, + { 0x0020A5, "API ENGINEERING" }, + { 0x0020A6, "PROXIM, INC." }, + { 0x0020A7, "PAIRGAIN TECHNOLOGIES, INC." }, + { 0x0020A8, "SAST TECHNOLOGY CORP." }, + { 0x0020A9, "WHITE HORSE INDUSTRIAL" }, + { 0x0020AA, "DIGIMEDIA VISION LTD." }, + { 0x0020AB, "MICRO INDUSTRIES CORP." }, + { 0x0020AC, "INTERFLEX DATENSYSTEME GMBH" }, + { 0x0020AD, "LINQ SYSTEMS" }, + { 0x0020AE, "ORNET DATA COMMUNICATION TECH." }, + { 0x0020AF, "3COM CORPORATION" }, + { 0x0020B0, "GATEWAY DEVICES, INC." }, + { 0x0020B1, "COMTECH RESEARCH INC." }, + { 0x0020B2, "GKD GESELLSCHAFT FUR" }, + { 0x0020B3, "SCLTEC COMMUNICATIONS SYSTEMS" }, + { 0x0020B4, "TERMA ELEKTRONIK AS" }, + { 0x0020B5, "YASKAWA ELECTRIC CORPORATION" }, + { 0x0020B6, "AGILE NETWORKS, INC." }, + { 0x0020B7, "NAMAQUA COMPUTERWARE" }, + { 0x0020B8, "PRIME OPTION, INC." }, + { 0x0020B9, "METRICOM, INC." }, + { 0x0020BA, "CENTER FOR HIGH PERFORMANCE" }, + { 0x0020BB, "ZAX CORPORATION" }, + { 0x0020BC, "JTEC PTY LTD." }, + { 0x0020BD, "NIOBRARA R & D CORPORATION" }, + { 0x0020BE, "LAN ACCESS CORP." }, + { 0x0020BF, "AEHR TEST SYSTEMS" }, + { 0x0020C0, "PULSE ELECTRONICS, INC." }, + { 0x0020C1, "TAIKO ELECTRIC WORKS, LTD." }, + { 0x0020C2, "TEXAS MEMORY SYSTEMS, INC." }, + { 0x0020C3, "COUNTER SOLUTIONS LTD." }, + { 0x0020C4, "INET,INC." }, + { 0x0020C5, "EAGLE TECHNOLOGY" }, + { 0x0020C6, "NECTEC" }, + { 0x0020C7, "AKAI Professional M.I. Corp." }, + { 0x0020C8, "LARSCOM INCORPORATED" }, + { 0x0020C9, "VICTRON BV" }, + { 0x0020CA, "DIGITAL OCEAN" }, + { 0x0020CB, "PRETEC ELECTRONICS CORP." }, + { 0x0020CC, "DIGITAL SERVICES, LTD." }, + { 0x0020CD, "HYBRID NETWORKS, INC." }, + { 0x0020CE, "LOGICAL DESIGN GROUP, INC." }, + { 0x0020CF, "TEST & MEASUREMENT SYSTEMS INC" }, + { 0x0020D0, "VERSALYNX CORPORATION" }, + { 0x0020D1, "MICROCOMPUTER SYSTEMS (M) SDN." }, + { 0x0020D2, "RAD DATA COMMUNICATIONS, LTD." }, + { 0x0020D3, "OST (OUEST STANDARD TELEMATIQU" }, + { 0x0020D4, "CABLETRON - ZEITTNET INC." }, + { 0x0020D5, "VIPA GMBH" }, + { 0x0020D6, "BREEZECOM" }, + { 0x0020D7, "JAPAN MINICOMPUTER SYSTEMS CO." }, + { 0x0020D8, "NETWAVE TECHNOLOGIES, INC." }, + { 0x0020D9, "PANASONIC TECHNOLOGIES, INC./" }, + { 0x0020DA, "XYLAN CORPORATION" }, + { 0x0020DB, "XNET TECHNOLOGY, INC." }, + { 0x0020DC, "DENSITRON TAIWAN LTD." }, + { 0x0020DD, "AWA LTD." }, + { 0x0020DE, "JAPAN DIGITAL LABORAT'Y CO.LTD" }, + { 0x0020DF, "KYOSAN ELECTRIC MFG. CO., LTD." }, + { 0x0020E0, "PREMAX ELECTRONICS, INC." }, + { 0x0020E1, "ALAMAR ELECTRONICS" }, + { 0x0020E2, "INFORMATION RESOURCE" }, + { 0x0020E3, "MCD KENCOM CORPORATION" }, + { 0x0020E4, "HSING TECH ENTERPRISE CO., LTD" }, + { 0x0020E5, "APEX DATA, INC." }, + { 0x0020E6, "LIDKOPING MACHINE TOOLS AB" }, + { 0x0020E7, "B&W NUCLEAR SERVICE COMPANY" }, + { 0x0020E8, "DATATREK CORPORATION" }, + { 0x0020E9, "DANTEL" }, + { 0x0020EA, "EFFICIENT NETWORKS, INC." }, + { 0x0020EB, "CINCINNATI MICROWAVE, INC." }, + { 0x0020EC, "TECHWARE SYSTEMS CORP." }, + { 0x0020ED, "GIGA-BYTE TECHNOLOGY CO., LTD." }, + { 0x0020EE, "GTECH CORPORATION" }, + { 0x0020EF, "USC CORPORATION" }, + { 0x0020F0, "UNIVERSAL MICROELECTRONICS CO." }, + { 0x0020F1, "ALTOS INDIA LIMITED" }, + { 0x0020F2, "SUN MICROSYSTEMS, INC." }, + { 0x0020F3, "RAYNET CORPORATION" }, + { 0x0020F4, "SPECTRIX CORPORATION" }, + { 0x0020F5, "PANDATEL AG" }, + { 0x0020F6, "NET TEK AND KARLNET, INC." }, + { 0x0020F7, "CYBERDATA" }, + { 0x0020F8, "CARRERA COMPUTERS, INC." }, + { 0x0020F9, "PARALINK NETWORKS, INC." }, + { 0x0020FA, "GDE SYSTEMS, INC." }, + { 0x0020FB, "OCTEL COMMUNICATIONS CORP." }, + { 0x0020FC, "MATROX" }, + { 0x0020FD, "ITV TECHNOLOGIES, INC." }, + { 0x0020FE, "TOPWARE INC. / GRAND COMPUTER" }, + { 0x0020FF, "SYMMETRICAL TECHNOLOGIES" }, + { 0x003000, "ALLWELL TECHNOLOGY CORP." }, + { 0x003001, "SMP" }, + { 0x003002, "Expand Networks" }, + { 0x003003, "Phasys Ltd." }, + { 0x003004, "LEADTEK RESEARCH INC." }, + { 0x003005, "Fujitsu Siemens Computers" }, + { 0x003006, "SUPERPOWER COMPUTER" }, + { 0x003007, "OPTI, INC." }, + { 0x003008, "AVIO DIGITAL, INC." }, + { 0x003009, "Tachion Networks, Inc." }, + { 0x00300A, "AZTECH SYSTEMS LTD." }, + { 0x00300B, "mPHASE Technologies, Inc." }, + { 0x00300C, "CONGRUENCY, LTD." }, + { 0x00300D, "MMC Technology, Inc." }, + { 0x00300E, "Klotz Digital AG" }, + { 0x00300F, "IMT - Information Management T" }, + { 0x003010, "VISIONETICS INTERNATIONAL" }, + { 0x003011, "HMS FIELDBUS SYSTEMS AB" }, + { 0x003012, "DIGITAL ENGINEERING LTD." }, + { 0x003013, "NEC Corporation" }, + { 0x003014, "DIVIO, INC." }, + { 0x003015, "CP CLARE CORP." }, + { 0x003016, "ISHIDA CO., LTD." }, + { 0x003017, "TERASTACK LTD." }, + { 0x003018, "Jetway Information Co., Ltd." }, + { 0x003019, "CISCO SYSTEMS, INC." }, + { 0x00301A, "SMARTBRIDGES PTE. LTD." }, + { 0x00301B, "SHUTTLE, INC." }, + { 0x00301C, "ALTVATER AIRDATA SYSTEMS" }, + { 0x00301D, "SKYSTREAM, INC." }, + { 0x00301E, "3COM Europe Ltd." }, + { 0x00301F, "OPTICAL NETWORKS, INC." }, + { 0x003020, "TSI, Inc.." }, + { 0x003021, "HSING TECH. ENTERPRISE CO.,LTD" }, + { 0x003022, "Fong Kai Industrial Co., Ltd." }, + { 0x003023, "COGENT COMPUTER SYSTEMS, INC." }, + { 0x003024, "CISCO SYSTEMS, INC." }, + { 0x003025, "CHECKOUT COMPUTER SYSTEMS, LTD" }, + { 0x003026, "HEITEL" }, + { 0x003027, "KERBANGO, INC." }, + { 0x003028, "FASE Saldatura srl" }, + { 0x003029, "OPICOM" }, + { 0x00302A, "SOUTHERN INFORMATION" }, + { 0x00302B, "INALP NETWORKS, INC." }, + { 0x00302C, "SYLANTRO SYSTEMS CORPORATION" }, + { 0x00302D, "QUANTUM BRIDGE COMMUNICATIONS" }, + { 0x00302E, "Hoft & Wessel AG" }, + { 0x00302F, "Smiths Industries" }, + { 0x003030, "HARMONIX CORPORATION" }, + { 0x003031, "LIGHTWAVE COMMUNICATIONS, INC." }, + { 0x003032, "MAGICRAM, INC." }, + { 0x003033, "ORIENT TELECOM CO., LTD." }, + { 0x003036, "RMP ELEKTRONIKSYSTEME GMBH" }, + { 0x003037, "Packard Bell Nec Services" }, + { 0x003038, "XCP, INC." }, + { 0x003039, "SOFTBOOK PRESS" }, + { 0x00303A, "MAATEL" }, + { 0x00303B, "PowerCom Technology" }, + { 0x00303C, "ONNTO CORP." }, + { 0x00303D, "IVA CORPORATION" }, + { 0x00303E, "Radcom Ltd." }, + { 0x00303F, "TurboComm Tech Inc." }, + { 0x003040, "CISCO SYSTEMS, INC." }, + { 0x003041, "SAEJIN T & M CO., LTD." }, + { 0x003042, "DeTeWe-Deutsche Telephonwerke" }, + { 0x003043, "IDREAM TECHNOLOGIES, PTE. LTD." }, + { 0x003044, "Portsmith LLC" }, + { 0x003045, "Village Networks, Inc. (VNI)" }, + { 0x003046, "Controlled Electronic Manageme" }, + { 0x003047, "NISSEI ELECTRIC CO., LTD." }, + { 0x003048, "Supermicro Computer, Inc." }, + { 0x003049, "BRYANT TECHNOLOGY, LTD." }, + { 0x00304A, "FRAUNHOFER INSTITUTE IMS" }, + { 0x00304B, "ORBACOM SYSTEMS, INC." }, + { 0x00304C, "APPIAN COMMUNICATIONS, INC." }, + { 0x00304D, "ESI" }, + { 0x00304E, "BUSTEC PRODUCTION LTD." }, + { 0x00304F, "PLANET Technology Corporation" }, + { 0x003050, "Versa Technology" }, + { 0x003051, "ORBIT AVIONIC & COMMUNICATION" }, + { 0x003052, "ELASTIC NETWORKS" }, + { 0x003053, "Basler AG" }, + { 0x003054, "CASTLENET TECHNOLOGY, INC." }, + { 0x003055, "Hitachi Semiconductor America," }, + { 0x003056, "Beck IPC GmbH" }, + { 0x003057, "E-Tel Corporation" }, + { 0x003058, "API MOTION" }, + { 0x003059, "DIGITAL-LOGIC AG" }, + { 0x00305A, "TELGEN CORPORATION" }, + { 0x00305B, "MODULE DEPARTMENT" }, + { 0x00305C, "SMAR Laboratories Corp." }, + { 0x00305D, "DIGITRA SYSTEMS, INC." }, + { 0x00305E, "Abelko Innovation" }, + { 0x00305F, "IMACON APS" }, + { 0x003060, "STARMATIX, INC." }, + { 0x003061, "MobyTEL" }, + { 0x003062, "PATH 1 NETWORK TECHNOL'S INC." }, + { 0x003063, "SANTERA SYSTEMS, INC." }, + { 0x003064, "ADLINK TECHNOLOGY, INC." }, + { 0x003065, "APPLE COMPUTER, INC." }, + { 0x003066, "DIGITAL WIRELESS CORPORATION" }, + { 0x003067, "BIOSTAR MICROTECH INT'L CORP." }, + { 0x003068, "CYBERNETICS TECH. CO., LTD." }, + { 0x003069, "IMPACCT TECHNOLOGY CORP." }, + { 0x00306A, "PENTA MEDIA CO., LTD." }, + { 0x00306B, "CMOS SYSTEMS, INC." }, + { 0x00306C, "Hitex Holding GmbH" }, + { 0x00306D, "LUCENT TECHNOLOGIES" }, + { 0x00306E, "HEWLETT PACKARD" }, + { 0x00306F, "SEYEON TECH. CO., LTD." }, + { 0x003070, "1Net Corporation" }, + { 0x003071, "Cisco Systems, Inc." }, + { 0x003072, "INTELLIBYTE INC." }, + { 0x003073, "International Microsystems, In" }, + { 0x003074, "EQUIINET LTD." }, + { 0x003075, "ADTECH" }, + { 0x003076, "Akamba Corporation" }, + { 0x003077, "ONPREM NETWORKS" }, + { 0x003078, "Cisco Systems, Inc." }, + { 0x003079, "CQOS, INC." }, + { 0x00307A, "Advanced Technology & Systems" }, + { 0x00307B, "Cisco Systems, Inc." }, + { 0x00307C, "ADID SA" }, + { 0x00307D, "GRE AMERICA, INC." }, + { 0x00307E, "Redflex Communication Systems" }, + { 0x00307F, "IRLAN LTD." }, + { 0x003080, "CISCO SYSTEMS, INC." }, + { 0x003081, "ALTOS C&C" }, + { 0x003082, "TAIHAN ELECTRIC WIRE CO., LTD." }, + { 0x003083, "Ivron Systems" }, + { 0x003084, "ALLIED TELESYN INTERNAIONAL" }, + { 0x003085, "CISCO SYSTEMS, INC." }, + { 0x003086, "Transistor Devices, Inc." }, + { 0x003087, "VEGA GRIESHABER KG" }, + { 0x003088, "Siara Systems, Inc." }, + { 0x003089, "Spectrapoint Wireless, LLC" }, + { 0x00308A, "NICOTRA SISTEMI S.P.A" }, + { 0x00308B, "Brix Networks" }, + { 0x00308C, "ADVANCED DIGITAL INFORMATION" }, + { 0x00308D, "PINNACLE SYSTEMS, INC." }, + { 0x00308E, "CROSS MATCH TECHNOLOGIES, INC." }, + { 0x00308F, "MICRILOR, Inc." }, + { 0x003090, "CYRA TECHNOLOGIES, INC." }, + { 0x003091, "TAIWAN FIRST LINE ELEC. CORP." }, + { 0x003092, "ModuNORM GmbH" }, + { 0x003093, "SONNET TECHNOLOGIES, INC." }, + { 0x003094, "Cisco Systems, Inc." }, + { 0x003095, "Procomp Informatics, Ltd." }, + { 0x003096, "CISCO SYSTEMS, INC." }, + { 0x003097, "EXOMATIC AB" }, + { 0x003098, "Global Converging Technologies" }, + { 0x003099, "BOENIG UND KALLENBACH OHG" }, + { 0x00309A, "ASTRO TERRA CORP." }, + { 0x00309B, "Smartware" }, + { 0x00309C, "Timing Applications, Inc." }, + { 0x00309D, "Nimble Microsystems, Inc." }, + { 0x00309E, "WORKBIT CORPORATION." }, + { 0x00309F, "AMBER NETWORKS" }, + { 0x0030A0, "TYCO SUBMARINE SYSTEMS, LTD." }, + { 0x0030A1, "OPTI TECH CO., LTD." }, + { 0x0030A2, "Lightner Engineering" }, + { 0x0030A3, "CISCO SYSTEMS, INC." }, + { 0x0030A4, "Woodwind Communications System" }, + { 0x0030A5, "ACTIVE POWER" }, + { 0x0030A6, "VIANET TECHNOLOGIES, LTD." }, + { 0x0030A7, "SCHWEITZER ENGINEERING" }, + { 0x0030A8, "OL'E COMMUNICATIONS, INC." }, + { 0x0030A9, "Netiverse, Inc." }, + { 0x0030AA, "AXUS MICROSYSTEMS, INC." }, + { 0x0030AB, "DELTA NETWORKS, INC." }, + { 0x0030AC, "Systeme Lauer GmbH & Co., Ltd." }, + { 0x0030AD, "SHANGHAI COMMUNICATION" }, + { 0x0030AE, "Times N System, Inc." }, + { 0x0030AF, "Honeywell Reqelsysteme GmbH" }, + { 0x0030B0, "Convergenet Technologies" }, + { 0x0030B1, "GOC GESELLSCHAFT FUR OPTISCHE" }, + { 0x0030B2, "WESCAM - HEALDSBURG" }, + { 0x0030B3, "San Valley Systems, Inc." }, + { 0x0030B4, "INTERSIL CORP." }, + { 0x0030B5, "Tadiran Microwave Networks" }, + { 0x0030B6, "CISCO SYSTEMS, INC." }, + { 0x0030B7, "Teletrol Systems, Inc." }, + { 0x0030B8, "RiverDelta Networks" }, + { 0x0030B9, "ECTEL" }, + { 0x0030BA, "AC&T SYSTEM CO., LTD." }, + { 0x0030BB, "CacheFlow, Inc." }, + { 0x0030BC, "Optronic AG" }, + { 0x0030BD, "BELKIN COMPONENTS" }, + { 0x0030BE, "City-Net Technology, Inc." }, + { 0x0030BF, "MULTIDATA GMBH" }, + { 0x0030C0, "Lara Technology, Inc." }, + { 0x0030C1, "HEWLETT-PACKARD" }, + { 0x0030C2, "COMONE" }, + { 0x0030C3, "FLUECKIGER ELEKTRONIK AG" }, + { 0x0030C4, "Niigata Canotec Co., Inc." }, + { 0x0030C5, "CADENCE DESIGN SYSTEMS" }, + { 0x0030C6, "CONTROL SOLUTIONS, INC." }, + { 0x0030C7, "MACROMATE CORP." }, + { 0x0030C8, "GAD LINE, LTD." }, + { 0x0030C9, "LuxN, N" }, + { 0x0030CA, "Discovery Com" }, + { 0x0030CB, "OMNI FLOW COMPUTERS, INC." }, + { 0x0030CC, "Tenor Networks, Inc." }, + { 0x0030CD, "CONEXANT SYSTEMS, INC." }, + { 0x0030CE, "Zaffire" }, + { 0x0030CF, "TWO TECHNOLOGIES, INC." }, + { 0x0030D1, "INOVA CORPORATION" }, + { 0x0030D2, "WIN TECHNOLOGIES, CO., LTD." }, + { 0x0030D3, "Agilent Technologies" }, + { 0x0030D4, "COMTIER" }, + { 0x0030D5, "DResearch GmbH" }, + { 0x0030D6, "MSC VERTRIEBS GMBH" }, + { 0x0030D7, "Innovative Systems, L.L.C." }, + { 0x0030D8, "SITEK" }, + { 0x0030D9, "DATACORE SOFTWARE CORP." }, + { 0x0030DA, "COMTREND CO." }, + { 0x0030DB, "Mindready Solutions, Inc." }, + { 0x0030DC, "RIGHTECH CORPORATION" }, + { 0x0030DD, "INDIGITA CORPORATION" }, + { 0x0030DE, "WAGO Kontakttechnik GmbH" }, + { 0x0030DF, "KB/TEL TELECOMUNICACIONES" }, + { 0x0030E0, "OXFORD SEMICONDUCTOR LTD." }, + { 0x0030E1, "ACROTRON SYSTEMS, INC." }, + { 0x0030E2, "GARNET SYSTEMS CO., LTD." }, + { 0x0030E3, "SEDONA NETWORKS CORP." }, + { 0x0030E4, "CHIYODA SYSTEM RIKEN" }, + { 0x0030E5, "Amper Datos S.A." }, + { 0x0030E6, "SIEMENS MEDICAL SYSTEMS" }, + { 0x0030E7, "CNF MOBILE SOLUTIONS, INC." }, + { 0x0030E8, "ENSIM CORP." }, + { 0x0030E9, "GMA COMMUNICATION MANUFACT'G" }, + { 0x0030EA, "TeraForce Technology Corporation" }, + { 0x0030EB, "TURBONET COMMUNICATIONS, INC." }, + { 0x0030EC, "BORGARDT" }, + { 0x0030ED, "Expert Magnetics Corp." }, + { 0x0030EE, "DSG Technology, Inc." }, + { 0x0030EF, "NEON TECHNOLOGY, INC." }, + { 0x0030F0, "Uniform Industrial Corp." }, + { 0x0030F1, "Accton Technology Corp." }, + { 0x0030F2, "CISCO SYSTEMS, INC." }, + { 0x0030F3, "At Work Computers" }, + { 0x0030F4, "STARDOT TECHNOLOGIES" }, + { 0x0030F5, "Wild Lab. Ltd." }, + { 0x0030F6, "SECURELOGIX CORPORATION" }, + { 0x0030F7, "RAMIX INC." }, + { 0x0030F8, "Dynapro Systems, Inc." }, + { 0x0030F9, "Sollae Systems Co., Ltd." }, + { 0x0030FA, "TELICA, INC." }, + { 0x0030FB, "AZS Technology AG" }, + { 0x0030FC, "Terawave Communications, Inc." }, + { 0x0030FD, "INTEGRATED SYSTEMS DESIGN" }, + { 0x0030FE, "DSA GmbH" }, + { 0x0030FF, "DATAFAB SYSTEMS, INC." }, + { 0x004000, "PCI COMPONENTES DA AMZONIA LTD" }, + { 0x004001, "ZYXEL COMMUNICATIONS, INC." }, + { 0x004002, "PERLE SYSTEMS LIMITED" }, + { 0x004003, "WESTINGHOUSE PROCESS CONTROL" }, + { 0x004004, "ICM CO. LTD." }, + { 0x004005, "ANI COMMUNICATIONS INC." }, + { 0x004006, "SAMPO TECHNOLOGY CORPORATION" }, + { 0x004007, "TELMAT INFORMATIQUE" }, + { 0x004008, "A PLUS INFO CORPORATION" }, + { 0x004009, "TACHIBANA TECTRON CO., LTD." }, + { 0x00400A, "PIVOTAL TECHNOLOGIES, INC." }, + { 0x00400B, "CISCO SYSTEMS, INC." }, + { 0x00400C, "GENERAL MICRO SYSTEMS, INC." }, + { 0x00400D, "LANNET DATA COMMUNICATIONS,LTD" }, + { 0x00400E, "MEMOTEC COMMUNICATIONS, INC." }, + { 0x00400F, "DATACOM TECHNOLOGIES" }, + { 0x004010, "SONIC SYSTEMS, INC." }, + { 0x004011, "ANDOVER CONTROLS CORPORATION" }, + { 0x004012, "WINDATA, INC." }, + { 0x004013, "NTT DATA COMM. SYSTEMS CORP." }, + { 0x004014, "COMSOFT GMBH" }, + { 0x004015, "ASCOM INFRASYS AG" }, + { 0x004016, "HADAX ELECTRONICS, INC." }, + { 0x004017, "XCD INC." }, + { 0x004018, "ADOBE SYSTEMS, INC." }, + { 0x004019, "AEON SYSTEMS, INC." }, + { 0x00401A, "FUJI ELECTRIC CO., LTD." }, + { 0x00401B, "PRINTER SYSTEMS CORP." }, + { 0x00401C, "AST RESEARCH, INC." }, + { 0x00401D, "INVISIBLE SOFTWARE, INC." }, + { 0x00401E, "ICC" }, + { 0x00401F, "COLORGRAPH LTD" }, + { 0x004020, "PINACL COMMUNICATION" }, + { 0x004021, "RASTER GRAPHICS" }, + { 0x004022, "KLEVER COMPUTERS, INC." }, + { 0x004023, "LOGIC CORPORATION" }, + { 0x004024, "COMPAC INC." }, + { 0x004025, "MOLECULAR DYNAMICS" }, + { 0x004026, "MELCO, INC." }, + { 0x004027, "SMC MASSACHUSETTS, INC." }, + { 0x004028, "NETCOMM LIMITED" }, + { 0x004029, "COMPEX" }, + { 0x00402A, "CANOGA-PERKINS" }, + { 0x00402B, "TRIGEM COMPUTER, INC." }, + { 0x00402C, "ISIS DISTRIBUTED SYSTEMS, INC." }, + { 0x00402D, "HARRIS ADACOM CORPORATION" }, + { 0x00402E, "PRECISION SOFTWARE, INC." }, + { 0x00402F, "XLNT DESIGNS INC." }, + { 0x004030, "GK COMPUTER" }, + { 0x004031, "KOKUSAI ELECTRIC CO., LTD" }, + { 0x004032, "DIGITAL COMMUNICATIONS" }, + { 0x004033, "ADDTRON TECHNOLOGY CO., LTD." }, + { 0x004034, "BUSTEK CORPORATION" }, + { 0x004035, "OPCOM" }, + { 0x004036, "TRIBE COMPUTER WORKS, INC." }, + { 0x004037, "SEA-ILAN, INC." }, + { 0x004038, "TALENT ELECTRIC INCORPORATED" }, + { 0x004039, "OPTEC DAIICHI DENKO CO., LTD." }, + { 0x00403A, "IMPACT TECHNOLOGIES" }, + { 0x00403B, "SYNERJET INTERNATIONAL CORP." }, + { 0x00403C, "FORKS, INC." }, + { 0x00403D, "TERADATA" }, + { 0x00403E, "RASTER OPS CORPORATION" }, + { 0x00403F, "SSANGYONG COMPUTER SYSTEMS" }, + { 0x004040, "RING ACCESS, INC." }, + { 0x004041, "FUJIKURA LTD." }, + { 0x004042, "N.A.T. GMBH" }, + { 0x004043, "NOKIA TELECOMMUNICATIONS" }, + { 0x004044, "QNIX COMPUTER CO., LTD." }, + { 0x004045, "TWINHEAD CORPORATION" }, + { 0x004046, "UDC RESEARCH LIMITED" }, + { 0x004047, "WIND RIVER SYSTEMS" }, + { 0x004048, "SMD INFORMATICA S.A." }, + { 0x004049, "TEGIMENTA AG" }, + { 0x00404A, "WEST AUSTRALIAN DEPARTMENT" }, + { 0x00404B, "MAPLE COMPUTER SYSTEMS" }, + { 0x00404C, "HYPERTEC PTY LTD." }, + { 0x00404D, "TELECOMMUNICATIONS TECHNIQUES" }, + { 0x00404E, "FLUENT, INC." }, + { 0x00404F, "SPACE & NAVAL WARFARE SYSTEMS" }, + { 0x004050, "IRONICS, INCORPORATED" }, + { 0x004051, "GRACILIS, INC." }, + { 0x004052, "STAR TECHNOLOGIES, INC." }, + { 0x004053, "AMPRO COMPUTERS" }, + { 0x004054, "CONNECTION MACHINES SERVICES" }, + { 0x004055, "METRONIX GMBH" }, + { 0x004056, "MCM JAPAN LTD." }, + { 0x004057, "LOCKHEED - SANDERS" }, + { 0x004058, "KRONOS, INC." }, + { 0x004059, "YOSHIDA KOGYO K. K." }, + { 0x00405A, "GOLDSTAR INFORMATION & COMM." }, + { 0x00405B, "FUNASSET LIMITED" }, + { 0x00405C, "FUTURE SYSTEMS, INC." }, + { 0x00405D, "STAR-TEK, INC." }, + { 0x00405E, "NORTH HILLS ISRAEL" }, + { 0x00405F, "AFE COMPUTERS LTD." }, + { 0x004060, "COMENDEC LTD" }, + { 0x004061, "DATATECH ENTERPRISES CO., LTD." }, + { 0x004062, "E-SYSTEMS, INC./GARLAND DIV." }, + { 0x004063, "VIA TECHNOLOGIES, INC." }, + { 0x004064, "KLA INSTRUMENTS CORPORATION" }, + { 0x004065, "GTE SPACENET" }, + { 0x004066, "HITACHI CABLE, LTD." }, + { 0x004067, "OMNIBYTE CORPORATION" }, + { 0x004068, "EXTENDED SYSTEMS" }, + { 0x004069, "LEMCOM SYSTEMS, INC." }, + { 0x00406A, "KENTEK INFORMATION SYSTEMS,INC" }, + { 0x00406B, "SYSGEN" }, + { 0x00406C, "COPERNIQUE" }, + { 0x00406D, "LANCO, INC." }, + { 0x00406E, "COROLLARY, INC." }, + { 0x00406F, "SYNC RESEARCH INC." }, + { 0x004070, "INTERWARE CO., LTD." }, + { 0x004071, "ATM COMPUTER GMBH" }, + { 0x004072, "APPLIED INNOVATION, INC." }, + { 0x004073, "BASS ASSOCIATES" }, + { 0x004074, "CABLE AND WIRELESS" }, + { 0x004075, "M-TRADE (UK) LTD" }, + { 0x004076, "Sun Conversion Technologies" }, + { 0x004077, "MAXTON TECHNOLOGY CORPORATION" }, + { 0x004078, "WEARNES AUTOMATION PTE LTD" }, + { 0x004079, "JUKO MANUFACTURE COMPANY, LTD." }, + { 0x00407A, "SOCIETE D'EXPLOITATION DU CNIT" }, + { 0x00407B, "SCIENTIFIC ATLANTA" }, + { 0x00407C, "QUME CORPORATION" }, + { 0x00407D, "EXTENSION TECHNOLOGY CORP." }, + { 0x00407E, "EVERGREEN SYSTEMS, INC." }, + { 0x00407F, "AGEMA INFRARED SYSTEMS AB" }, + { 0x004080, "ATHENIX CORPORATION" }, + { 0x004081, "MANNESMANN SCANGRAPHIC GMBH" }, + { 0x004082, "LABORATORY EQUIPMENT CORP." }, + { 0x004083, "TDA INDUSTRIA DE PRODUTOS" }, + { 0x004084, "HONEYWELL INC." }, + { 0x004085, "SAAB INSTRUMENTS AB" }, + { 0x004086, "MICHELS & KLEBERHOFF COMPUTER" }, + { 0x004087, "UBITREX CORPORATION" }, + { 0x004088, "MOBIUS TECHNOLOGIES, INC." }, + { 0x004089, "MEIDENSHA CORPORATION" }, + { 0x00408A, "TPS TELEPROCESSING SYS. GMBH" }, + { 0x00408B, "RAYLAN CORPORATION" }, + { 0x00408C, "AXIS COMMUNICATIONS AB" }, + { 0x00408D, "THE GOODYEAR TIRE & RUBBER CO." }, + { 0x00408E, "DIGILOG, INC." }, + { 0x00408F, "WM-DATA MINFO AB" }, + { 0x004090, "ANSEL COMMUNICATIONS" }, + { 0x004091, "PROCOMP INDUSTRIA ELETRONICA" }, + { 0x004092, "ASP COMPUTER PRODUCTS, INC." }, + { 0x004093, "PAXDATA NETWORKS LTD." }, + { 0x004094, "SHOGRAPHICS, INC." }, + { 0x004095, "R.P.T. INTERGROUPS INT'L LTD." }, + { 0x004096, "Aironet Wireless Communication" }, + { 0x004097, "DATEX DIVISION OF" }, + { 0x004098, "DRESSLER GMBH & CO." }, + { 0x004099, "NEWGEN SYSTEMS CORP." }, + { 0x00409A, "NETWORK EXPRESS, INC." }, + { 0x00409B, "HAL COMPUTER SYSTEMS INC." }, + { 0x00409C, "TRANSWARE" }, + { 0x00409D, "DIGIBOARD, INC." }, + { 0x00409E, "CONCURRENT TECHNOLOGIES LTD." }, + { 0x00409F, "LANCAST/CASAT TECHNOLOGY, INC." }, + { 0x0040A0, "GOLDSTAR CO., LTD." }, + { 0x0040A1, "ERGO COMPUTING" }, + { 0x0040A2, "KINGSTAR TECHNOLOGY INC." }, + { 0x0040A3, "MICROUNITY SYSTEMS ENGINEERING" }, + { 0x0040A4, "ROSE ELECTRONICS" }, + { 0x0040A5, "CLINICOMP INTL." }, + { 0x0040A6, "Cray, Inc." }, + { 0x0040A7, "ITAUTEC PHILCO S.A." }, + { 0x0040A8, "IMF INTERNATIONAL LTD." }, + { 0x0040A9, "DATACOM INC." }, + { 0x0040AA, "VALMET AUTOMATION INC." }, + { 0x0040AB, "ROLAND DG CORPORATION" }, + { 0x0040AC, "SUPER WORKSTATION, INC." }, + { 0x0040AD, "SMA REGELSYSTEME GMBH" }, + { 0x0040AE, "DELTA CONTROLS, INC." }, + { 0x0040AF, "DIGITAL PRODUCTS, INC." }, + { 0x0040B0, "BYTEX CORPORATION, ENGINEERING" }, + { 0x0040B1, "CODONICS INC." }, + { 0x0040B2, "SYSTEMFORSCHUNG" }, + { 0x0040B3, "PAR MICROSYSTEMS CORPORATION" }, + { 0x0040B4, "NEXTCOM K.K." }, + { 0x0040B5, "VIDEO TECHNOLOGY COMPUTERS LTD" }, + { 0x0040B6, "COMPUTERM CORPORATION" }, + { 0x0040B7, "STEALTH COMPUTER SYSTEMS" }, + { 0x0040B8, "IDEA ASSOCIATES" }, + { 0x0040B9, "MACQ ELECTRONIQUE SA" }, + { 0x0040BA, "ALLIANT COMPUTER SYSTEMS CORP." }, + { 0x0040BB, "GOLDSTAR CABLE CO., LTD." }, + { 0x0040BC, "ALGORITHMICS LTD." }, + { 0x0040BD, "STARLIGHT NETWORKS, INC." }, + { 0x0040BE, "BOEING DEFENSE & SPACE" }, + { 0x0040BF, "CHANNEL SYSTEMS INTERN'L INC." }, + { 0x0040C0, "VISTA CONTROLS CORPORATION" }, + { 0x0040C1, "BIZERBA-WERKE WILHEIM KRAUT" }, + { 0x0040C2, "APPLIED COMPUTING DEVICES" }, + { 0x0040C3, "FISCHER AND PORTER CO." }, + { 0x0040C4, "KINKEI SYSTEM CORPORATION" }, + { 0x0040C5, "MICOM COMMUNICATIONS INC." }, + { 0x0040C6, "FIBERNET RESEARCH, INC." }, + { 0x0040C7, "RUBY TECH CORPORATION" }, + { 0x0040C8, "MILAN TECHNOLOGY CORPORATION" }, + { 0x0040C9, "NCUBE" }, + { 0x0040CA, "FIRST INTERNAT'L COMPUTER, INC" }, + { 0x0040CB, "LANWAN TECHNOLOGIES" }, + { 0x0040CC, "SILCOM MANUF'G TECHNOLOGY INC." }, + { 0x0040CD, "TERA MICROSYSTEMS, INC." }, + { 0x0040CE, "NET-SOURCE, INC." }, + { 0x0040CF, "STRAWBERRY TREE, INC." }, + { 0x0040D0, "MITAC INTERNATIONAL CORP." }, + { 0x0040D1, "FUKUDA DENSHI CO., LTD." }, + { 0x0040D2, "PAGINE CORPORATION" }, + { 0x0040D3, "KIMPSION INTERNATIONAL CORP." }, + { 0x0040D4, "GAGE TALKER CORP." }, + { 0x0040D5, "SARTORIUS AG" }, + { 0x0040D6, "LOCAMATION B.V." }, + { 0x0040D7, "STUDIO GEN INC." }, + { 0x0040D8, "OCEAN OFFICE AUTOMATION LTD." }, + { 0x0040D9, "AMERICAN MEGATRENDS INC." }, + { 0x0040DA, "TELSPEC LTD" }, + { 0x0040DB, "ADVANCED TECHNICAL SOLUTIONS" }, + { 0x0040DC, "TRITEC ELECTRONIC GMBH" }, + { 0x0040DD, "HONG TECHNOLOGIES" }, + { 0x0040DE, "ELETTRONICA SAN GIORGIO" }, + { 0x0040DF, "DIGALOG SYSTEMS, INC." }, + { 0x0040E0, "ATOMWIDE LTD." }, + { 0x0040E1, "MARNER INTERNATIONAL, INC." }, + { 0x0040E2, "MESA RIDGE TECHNOLOGIES, INC." }, + { 0x0040E3, "QUIN SYSTEMS LTD" }, + { 0x0040E4, "E-M TECHNOLOGY, INC." }, + { 0x0040E5, "SYBUS CORPORATION" }, + { 0x0040E6, "C.A.E.N." }, + { 0x0040E7, "ARNOS INSTRUMENTS & COMPUTER" }, + { 0x0040E8, "CHARLES RIVER DATA SYSTEMS,INC" }, + { 0x0040E9, "ACCORD SYSTEMS, INC." }, + { 0x0040EA, "PLAIN TREE SYSTEMS INC" }, + { 0x0040EB, "MARTIN MARIETTA CORPORATION" }, + { 0x0040EC, "MIKASA SYSTEM ENGINEERING" }, + { 0x0040ED, "NETWORK CONTROLS INT'NATL INC." }, + { 0x0040EE, "OPTIMEM" }, + { 0x0040EF, "HYPERCOM, INC." }, + { 0x0040F0, "MICRO SYSTEMS, INC." }, + { 0x0040F1, "CHUO ELECTRONICS CO., LTD." }, + { 0x0040F2, "JANICH & KLASS COMPUTERTECHNIK" }, + { 0x0040F3, "NETCOR" }, + { 0x0040F4, "CAMEO COMMUNICATIONS, INC." }, + { 0x0040F5, "OEM ENGINES" }, + { 0x0040F6, "KATRON COMPUTERS INC." }, + { 0x0040F7, "POLAROID MEDICAL IMAGING SYS." }, + { 0x0040F8, "SYSTEMHAUS DISCOM" }, + { 0x0040F9, "COMBINET" }, + { 0x0040FA, "MICROBOARDS, INC." }, + { 0x0040FB, "CASCADE COMMUNICATIONS CORP." }, + { 0x0040FC, "IBR COMPUTER TECHNIK GMBH" }, + { 0x0040FD, "LXE" }, + { 0x0040FE, "SYMPLEX COMMUNICATIONS" }, + { 0x0040FF, "TELEBIT CORPORATION" }, + { 0x005000, "NEXO COMMUNICATIONS, INC." }, + { 0x005001, "YAMASHITA SYSTEMS CORP." }, + { 0x005002, "OMNISEC AG" }, + { 0x005003, "GRETAG MACBETH AG" }, + { 0x005004, "3COM CORPORATION" }, + { 0x005006, "TAC AB" }, + { 0x005007, "SIEMENS TELECOMMUNICATION" }, + { 0x005008, "TIVA MICROCOMPUTER CORP. (TMC)" }, + { 0x005009, "PHILIPS BROADBAND NETWORKS" }, + { 0x00500A, "IRIS TECHNOLOGIES, INC." }, + { 0x00500B, "CISCO SYSTEMS, INC." }, + { 0x00500C, "ETEK LABS, INC." }, + { 0x00500D, "SATORI ELECTORIC CO., LTD." }, + { 0x00500E, "CHROMATIS NETWORKS,INC." }, + { 0x00500F, "CISCO SYSTEMS, INC." }, + { 0x005010, "NOVANET LEARNING, INC." }, + { 0x005012, "CBL - GMBH" }, + { 0x005013, "Chaparral Technologies, Inc." }, + { 0x005014, "CISCO SYSTEMS, INC." }, + { 0x005015, "BRIGHT STAR ENGINEERING" }, + { 0x005016, "SST/WOODHEAD INDUSTRIES" }, + { 0x005017, "RSR S.R.L." }, + { 0x005018, "ADVANCED MULTIMEDIA INTERNET" }, + { 0x005019, "SPRING TIDE NETWORKS, INC." }, + { 0x00501A, "UISIQN" }, + { 0x00501B, "ABL CANADA, INC." }, + { 0x00501C, "JATOM SYSTEMS, INC." }, + { 0x00501E, "MIRANDA TECHNOLOGIES, INC." }, + { 0x00501F, "MRG SYSTEMS, LTD." }, + { 0x005020, "MEDIASTAR CO., LTD." }, + { 0x005021, "EIS INTERNATIONAL, INC." }, + { 0x005022, "ZONET TECHNOLOGY, INC." }, + { 0x005023, "PG DESIGN ELECTRONICS, INC." }, + { 0x005024, "NAVIC SYSTEMS, INC." }, + { 0x005026, "COSYSTEMS, INC." }, + { 0x005027, "GENICOM CORPORATION" }, + { 0x005028, "AVAL COMMUNICATIONS" }, + { 0x005029, "1394 PRINTER WORKING GROUP" }, + { 0x00502A, "CISCO SYSTEMS, INC." }, + { 0x00502B, "GENRAD LTD." }, + { 0x00502C, "SOYO COMPUTER, INC." }, + { 0x00502D, "ACCEL, INC." }, + { 0x00502E, "CAMBEX CORPORATION" }, + { 0x00502F, "TOLLBRIDGE TECHNOLOGIES, INC." }, + { 0x005030, "FUTURE PLUS SYSTEMS" }, + { 0x005031, "AEROFLEX LABORATORIES, INC." }, + { 0x005032, "PICAZO COMMUNICATIONS, INC." }, + { 0x005033, "MAYAN NETWORKS" }, + { 0x005036, "NETCAM, LTD." }, + { 0x005037, "KOGA ELECTRONICS CO." }, + { 0x005038, "DAIN TELECOM CO., LTD." }, + { 0x005039, "MARINER NETWORKS" }, + { 0x00503A, "DATONG ELECTRONICS LTD." }, + { 0x00503B, "MEDIAFIRE CORPORATION" }, + { 0x00503C, "TSINGHUA NOVEL ELECTRONICS" }, + { 0x00503E, "CISCO SYSTEMS, INC." }, + { 0x00503F, "ANCHOR GAMES" }, + { 0x005040, "EMWARE, INC." }, + { 0x005041, "CTX OPTO ELECTRONIC CORP." }, + { 0x005042, "SCI MANUFACTURING" }, + { 0x005043, "MARVELL SEMICONDUCTOR, INC." }, + { 0x005044, "ASACA CORPORATION" }, + { 0x005045, "RIOWORKS SOLUTIONS, INC." }, + { 0x005046, "MENICX INTERNATIONAL CO., LTD." }, + { 0x005048, "INFOLIBRIA" }, + { 0x005049, "ELLACOYA NETWORKS, INC." }, + { 0x00504A, "ELTECO A.S." }, + { 0x00504B, "BARCONET N.V." }, + { 0x00504C, "GALIL MOTION CONTROL, INC." }, + { 0x00504D, "TOKYO ELECTRON DEVICE LTD." }, + { 0x00504E, "SIERRA MONITOR CORP." }, + { 0x00504F, "OLENCOM ELECTRONICS" }, + { 0x005050, "CISCO SYSTEMS, INC." }, + { 0x005051, "IWATSU ELECTRIC CO., LTD." }, + { 0x005052, "TIARA NETWORKS, INC." }, + { 0x005053, "CISCO SYSTEMS, INC." }, + { 0x005054, "CISCO SYSTEMS, INC." }, + { 0x005055, "DOMS A/S" }, + { 0x005056, "VMWARE, INC." }, + { 0x005057, "BROADBAND ACCESS SYSTEMS" }, + { 0x005058, "VEGASTREAM LIMITED" }, + { 0x005059, "SUITE TECHNOLOGY SYSTEMS" }, + { 0x00505A, "NETWORK ALCHEMY, INC." }, + { 0x00505B, "KAWASAKI LSI U.S.A., INC." }, + { 0x00505C, "TUNDO CORPORATION" }, + { 0x00505E, "DIGITEK MICROLOGIC S.A." }, + { 0x00505F, "BRAND INNOVATORS" }, + { 0x005060, "TANDBERG TELECOM AS" }, + { 0x005062, "KOUWELL ELECTRONICS CORP. **" }, + { 0x005063, "OY COMSEL SYSTEM AB" }, + { 0x005064, "CAE ELECTRONICS" }, + { 0x005065, "DENSEI-LAMBAD Co., Ltd." }, + { 0x005066, "ATECOM GMBH ADVANCED" }, + { 0x005067, "AEROCOMM, INC." }, + { 0x005068, "ELECTRONIC INDUSTRIES" }, + { 0x005069, "PIXSTREAM INCORPORATED" }, + { 0x00506A, "EDEVA, INC." }, + { 0x00506B, "SPX-ATEG" }, + { 0x00506C, "G & L BEIJER ELECTRONICS AB" }, + { 0x00506D, "VIDEOJET SYSTEMS" }, + { 0x00506E, "CORDER ENGINEERING CORPORATION" }, + { 0x00506F, "G-CONNECT" }, + { 0x005070, "CHAINTECH COMPUTER CO., LTD." }, + { 0x005071, "AIWA CO., LTD." }, + { 0x005072, "CORVIS CORPORATION" }, + { 0x005073, "CISCO SYSTEMS, INC." }, + { 0x005074, "ADVANCED HI-TECH CORP." }, + { 0x005075, "KESTREL SOLUTIONS" }, + { 0x005076, "IBM" }, + { 0x005077, "PROLIFIC TECHNOLOGY, INC." }, + { 0x005078, "MEGATON HOUSE, LTD." }, + { 0x00507A, "XPEED, INC." }, + { 0x00507B, "MERLOT COMMUNICATIONS" }, + { 0x00507C, "VIDEOCON AG" }, + { 0x00507D, "IFP" }, + { 0x00507E, "NEWER TECHNOLOGY" }, + { 0x00507F, "DRAYTEK CORP." }, + { 0x005080, "CISCO SYSTEMS, INC." }, + { 0x005081, "MURATA MACHINERY, LTD." }, + { 0x005082, "FORESSON CORPORATION" }, + { 0x005083, "GILBARCO, INC." }, + { 0x005084, "ATL PRODUCTS" }, + { 0x005086, "TELKOM SA, LTD." }, + { 0x005087, "TERASAKI ELECTRIC CO., LTD." }, + { 0x005088, "AMANO CORPORATION" }, + { 0x005089, "SAFETY MANAGEMENT SYSTEMS" }, + { 0x00508B, "COMPAQ COMPUTER CORPORATION" }, + { 0x00508C, "RSI SYSTEMS" }, + { 0x00508D, "ABIT COMPUTER CORPORATION" }, + { 0x00508E, "OPTIMATION, INC." }, + { 0x00508F, "ASITA TECHNOLOGIES INT'L LTD." }, + { 0x005090, "DCTRI" }, + { 0x005091, "NETACCESS, INC." }, + { 0x005092, "RIGAKU INDUSTRIAL CORPORATION" }, + { 0x005093, "BOEING" }, + { 0x005094, "PACE MICRO TECHNOLOGY PLC" }, + { 0x005095, "PERACOM NETWORKS" }, + { 0x005096, "SALIX TECHNOLOGIES, INC." }, + { 0x005097, "MMC-EMBEDDED" }, + { 0x005098, "GLOBALOOP, LTD." }, + { 0x005099, "3COM EUROPE, LTD." }, + { 0x00509A, "TAG ELECTRONIC SYSTEMS" }, + { 0x00509B, "SWITCHCORE AB" }, + { 0x00509C, "BETA RESEARCH" }, + { 0x00509D, "THE INDUSTREE B.V." }, + { 0x00509E, "LES TECHNOLOGIES" }, + { 0x00509F, "HORIZON COMPUTER" }, + { 0x0050A0, "DELTA COMPUTER SYSTEMS, INC." }, + { 0x0050A1, "CARLO GAVAZZI, INC." }, + { 0x0050A2, "CISCO SYSTEMS, INC." }, + { 0x0050A3, "TRANSMEDIA COMMUNICATIONS, INC" }, + { 0x0050A4, "IO TECH, INC." }, + { 0x0050A5, "CAPITOL BUSINESS SYSTEMS, LTD." }, + { 0x0050A6, "OPTRONICS" }, + { 0x0050A7, "CISCO SYSTEMS, INC." }, + { 0x0050A8, "OPENCON SYSTEMS, INC." }, + { 0x0050A9, "MOLDAT WIRELESS TECHNOLGIES" }, + { 0x0050AA, "KONICA CORPORATION" }, + { 0x0050AB, "NALTEC, INC." }, + { 0x0050AC, "MAPLE COMPUTER CORPORATION" }, + { 0x0050AD, "COMMUNIQUE WIRELESS CORP." }, + { 0x0050AE, "IWAKI ELECTRONICS CO., LTD." }, + { 0x0050AF, "INTERGON, INC." }, + { 0x0050B0, "TECHNOLOGY ATLANTA CORPORATION" }, + { 0x0050B1, "GIDDINGS & LEWIS" }, + { 0x0050B2, "BRODEL AUTOMATION" }, + { 0x0050B3, "VOICEBOARD CORPORATION" }, + { 0x0050B4, "SATCHWELL CONTROL SYSTEMS, LTD" }, + { 0x0050B5, "FICHET-BAUCHE" }, + { 0x0050B6, "GOOD WAY IND. CO., LTD." }, + { 0x0050B7, "BOSER TECHNOLOGY CO., LTD." }, + { 0x0050B8, "INOVA COMPUTERS GMBH & CO. KG" }, + { 0x0050B9, "XITRON TECHNOLOGIES, INC." }, + { 0x0050BA, "D-LINK" }, + { 0x0050BB, "CMS TECHNOLOGIES" }, + { 0x0050BC, "HAMMER STORAGE SOLUTIONS" }, + { 0x0050BD, "CISCO SYSTEMS, INC." }, + { 0x0050BE, "FAST MULTIMEDIA AG" }, + { 0x0050BF, "MOTOTECH INC." }, + { 0x0050C0, "GATAN, INC." }, + { 0x0050C1, "GEMFLEX NETWORKS, LTD." }, + { 0x0050C2, "IEEE REGISTRATION AUTHORITY" }, + { 0x0050C4, "IMD" }, + { 0x0050C5, "ADS TECHNOLOGIES, INC." }, + { 0x0050C6, "LOOP TELECOMMUNICATION" }, + { 0x0050C8, "ADDONICS COMMUNICATIONS, INC." }, + { 0x0050C9, "MASPRO DENKOH CORP." }, + { 0x0050CA, "NET TO NET TECHNOLOGIES" }, + { 0x0050CB, "JETTER" }, + { 0x0050CC, "XYRATEX" }, + { 0x0050CD, "DIGIANSWER A/S" }, + { 0x0050CE, "LG INTERNATIONAL CORP." }, + { 0x0050CF, "VANLINK COMMUNICATION" }, + { 0x0050D0, "MINERVA SYSTEMS" }, + { 0x0050D1, "CISCO SYSTEMS, INC." }, + { 0x0050D2, "BAE Systems Canada, Inc." }, + { 0x0050D3, "DIGITAL AUDIO" }, + { 0x0050D4, "JOOHONG INFORMATION &" }, + { 0x0050D5, "AD SYSTEMS CORP." }, + { 0x0050D6, "ATLAS COPCO TOOLS AB" }, + { 0x0050D7, "TELSTRAT" }, + { 0x0050D8, "UNICORN COMPUTER CORP." }, + { 0x0050D9, "ENGETRON-ENGENHARIA ELETRONICA" }, + { 0x0050DA, "3COM CORPORATION" }, + { 0x0050DB, "CONTEMPORARY CONTROL" }, + { 0x0050DC, "TAS TELEFONBAU A. SCHWABE" }, + { 0x0050DD, "SERRA SOLDADURA, S.A." }, + { 0x0050DE, "SIGNUM SYSTEMS CORP." }, + { 0x0050DF, "AIRFIBER, INC." }, + { 0x0050E1, "NS TECH ELECTRONICS SDN BHD" }, + { 0x0050E2, "CISCO SYSTEMS, INC." }, + { 0x0050E3, "TELEGATE" }, + { 0x0050E4, "APPLE COMPUTER, INC." }, + { 0x0050E6, "HAKUSAN CORPORATION" }, + { 0x0050E7, "PARADISE INNOVATIONS (ASIA)" }, + { 0x0050E8, "NOMADIX INC." }, + { 0x0050EA, "XEL COMMUNICTIONS, INC." }, + { 0x0050EB, "ALPHA-TOP CORPORATION" }, + { 0x0050EC, "OLICOM A/S" }, + { 0x0050ED, "ANDA NETWORKS" }, + { 0x0050EE, "TEK DIGITEL CORPORATION" }, + { 0x0050EF, "SPE SYSTEMHAUS GMBH" }, + { 0x0050F0, "CISCO SYSTEMS, INC." }, + { 0x0050F1, "LIBIT SIGNAL PROCESSING, LTD." }, + { 0x0050F2, "MICROSOFT CORP." }, + { 0x0050F3, "GLOBAL NET INFORMATION CO.,LTD" }, + { 0x0050F4, "SIGMATEK GMBH & CO. KG" }, + { 0x0050F6, "PAN-INTERNATIONAL" }, + { 0x0050F7, "VENTURE MANUFACTURING" }, + { 0x0050F8, "ENTREGA TECHNOLOGIES, INC." }, + { 0x0050FA, "OXTEL, LTD." }, + { 0x0050FB, "VSK ELECTRONICS" }, + { 0x0050FC, "EDIMAX TECHNOLOGY CO., LTD." }, + { 0x0050FD, "ISIONCOMM CO., LTD." }, + { 0x0050FE, "PCTVNET ASA" }, + { 0x0050FF, "HAKKO ELECTRONICS CO., LTD." }, + { 0x006000, "XYCOM INC." }, + { 0x006001, "INNOSYS, INC." }, + { 0x006002, "SCREEN SUBTITLING SYSTEMS, LTD" }, + { 0x006003, "TERAOKA WEIGH SYSTEM PTE, LTD." }, + { 0x006004, "COMPUTADORES MODULARES SA" }, + { 0x006005, "FEEDBACK DATA LTD." }, + { 0x006006, "SOTEC CO., LTD" }, + { 0x006007, "ACRES GAMING, INC." }, + { 0x006008, "3COM CORPORATION" }, + { 0x006009, "CISCO SYSTEMS, INC." }, + { 0x00600A, "SORD COMPUTER CORPORATION" }, + { 0x00600B, "LOGWARE GMBH" }, + { 0x00600C, "APPLIED DATA SYSTEMS, INC." }, + { 0x00600D, "MICRODESIGN GMBH" }, + { 0x00600E, "WAVENET INTERNATIONAL, INC." }, + { 0x00600F, "WESTELL, INC." }, + { 0x006010, "NETWORK MACHINES, INC." }, + { 0x006011, "CRYSTAL SEMICONDUCTOR CORP." }, + { 0x006012, "POWER COMPUTING CORPORATION" }, + { 0x006013, "NETSTAL MASCHINEN AG" }, + { 0x006014, "EDEC CO., LTD." }, + { 0x006015, "NET2NET CORPORATION" }, + { 0x006016, "CLARIION" }, + { 0x006017, "TOKIMEC INC." }, + { 0x006018, "STELLAR ONE CORPORATION" }, + { 0x006019, "BOEHRINGER MANNHEIM CORP." }, + { 0x00601A, "KEITHLEY INSTRUMENTS" }, + { 0x00601B, "MESA ELECTRONICS" }, + { 0x00601C, "TELXON CORPORATION" }, + { 0x00601D, "LUCENT TECHNOLOGIES" }, + { 0x00601E, "SOFTLAB, INC." }, + { 0x00601F, "STALLION TECHNOLOGIES" }, + { 0x006020, "PIVOTAL NETWORKING, INC." }, + { 0x006021, "DSC CORPORATION" }, + { 0x006022, "VICOM SYSTEMS, INC." }, + { 0x006023, "PERICOM SEMICONDUCTOR CORP." }, + { 0x006024, "GRADIENT TECHNOLOGIES, INC." }, + { 0x006025, "ACTIVE IMAGING PLC" }, + { 0x006026, "VIKING COMPONENTS, INC." }, + { 0x006027, "Superior Modular Products" }, + { 0x006028, "MACROVISION CORPORATION" }, + { 0x006029, "CARY PERIPHERALS INC." }, + { 0x00602A, "SYMICRON COMPUTER" }, + { 0x00602B, "PEAK AUDIO" }, + { 0x00602C, "LINX DATA TERMINALS, INC." }, + { 0x00602D, "ALERTON TECHNOLOGIES, INC." }, + { 0x00602E, "CYCLADES CORPORATION" }, + { 0x00602F, "CISCO SYSTEMS, INC." }, + { 0x006030, "VILLAGE TRONIC" }, + { 0x006031, "HRK SYSTEMS" }, + { 0x006032, "I-CUBE, INC." }, + { 0x006033, "ACUITY IMAGING, INC." }, + { 0x006034, "ROBERT BOSCH GMBH" }, + { 0x006035, "DALLAS SEMICONDUCTOR, INC." }, + { 0x006036, "AUSTRIAN RESEARCH CENTER" }, + { 0x006037, "PHILIPS SEMICONDUCTORS" }, + { 0x006038, "Nortel Networks" }, + { 0x006039, "SANCOM TECHNOLOGY, INC." }, + { 0x00603A, "QUICK CONTROLS LTD." }, + { 0x00603B, "AMTEC SPA" }, + { 0x00603C, "HAGIWARA SYS-COM CO., LTD." }, + { 0x00603D, "3CX" }, + { 0x00603E, "CISCO SYSTEMS, INC." }, + { 0x00603F, "PATAPSCO DESIGNS" }, + { 0x006040, "NETRO CORP." }, + { 0x006041, "Yokogawa Electric Corporation" }, + { 0x006042, "TKS (USA), INC." }, + { 0x006043, "COMSOFT SYSTEMS, INC." }, + { 0x006044, "LITTON/POLY-SCIENTIFIC" }, + { 0x006045, "PATHLIGHT TECHNOLOGIES" }, + { 0x006046, "VMETRO, INC." }, + { 0x006047, "CISCO SYSTEMS, INC." }, + { 0x006048, "EMC CORPORATION" }, + { 0x006049, "VINA TECHNOLOGIES" }, + { 0x00604A, "SAIC IDEAS GROUP" }, + { 0x00604B, "BIODATA GMBH" }, + { 0x00604C, "SAT" }, + { 0x00604D, "MMC NETWORKS, INC." }, + { 0x00604E, "CYCLE COMPUTER CORPORATION, INC." }, + { 0x00604F, "SUZUKI MFG. CO., LTD." }, + { 0x006050, "INTERNIX INC." }, + { 0x006051, "QUALITY SEMICONDUCTOR" }, + { 0x006052, "PERIPHERALS ENTERPRISE CO., L." }, + { 0x006053, "TOYODA MACHINE WORKS, LTD." }, + { 0x006054, "CONTROLWARE GMBH" }, + { 0x006055, "CORNELL UNIVERSITY" }, + { 0x006056, "NETWORK TOOLS, INC." }, + { 0x006057, "MURATA MANUFACTURING CO., LTD." }, + { 0x006058, "COPPER MOUNTAIN" }, + { 0x006059, "TECHNICAL COMMUNICATIONS CORP." }, + { 0x00605A, "CELCORE, INC." }, + { 0x00605B, "INTRASERVER TECHNOLOGY INC." }, + { 0x00605C, "CISCO SYSTEMS, INC." }, + { 0x00605D, "SCANIVALVE CORP." }, + { 0x00605E, "LIBERTY TECHNOLOGY NETWORKING" }, + { 0x00605F, "NIPPON UNISOFT CORPORATION" }, + { 0x006060, "DAWNING TECHNOLOGIES, INC." }, + { 0x006061, "WHISTLE COMMUNICATIONS CORP." }, + { 0x006062, "TELESYNC, INC." }, + { 0x006063, "PSION DACOM PLC." }, + { 0x006064, "NETCOMM LIMITED" }, + { 0x006065, "BERNECKER & RAINER" }, + { 0x006066, "LACROIX TECHNOLGIE" }, + { 0x006067, "ACER NETXUS INC." }, + { 0x006068, "EICON TECHNOLOGY CORPORATION" }, + { 0x006069, "BROCADE COMMUNICATIONS SYSTEMS" }, + { 0x00606A, "MITSUBISHI WIRELESS COMM. INC." }, + { 0x00606B, "AICHI ELECTRONICS CO.,LTD." }, + { 0x00606C, "ARESCOM" }, + { 0x00606D, "DIGITAL EQUIPMENT CORP." }, + { 0x00606E, "DAVICOM SEMICONDUCTOR, INC." }, + { 0x00606F, "CLARION CORPORATION OF AMERICA" }, + { 0x006070, "CISCO SYSTEMS, INC." }, + { 0x006071, "MIDAS LAB, INC." }, + { 0x006072, "VXL INSTRUMENTS, LIMITED" }, + { 0x006073, "REDCREEK COMMUNICATIONS, INC." }, + { 0x006074, "QSC AUDIO PRODUCTS" }, + { 0x006075, "PENTEK, INC." }, + { 0x006076, "SCHLUMBERGER TECHNOLOGIES" }, + { 0x006077, "PRISA NETWORKS" }, + { 0x006078, "POWER MEASUREMENT LTD." }, + { 0x006079, "WAVEPHORE NETWORKS, INC." }, + { 0x00607A, "DVS GMBH" }, + { 0x00607B, "FORE SYSTEMS, INC." }, + { 0x00607C, "WAVEACCESS, LTD." }, + { 0x00607D, "SENTIENT NETWORKS INC." }, + { 0x00607E, "GIGALABS, INC." }, + { 0x00607F, "AURORA TECHNOLOGIES, INC." }, + { 0x006080, "MICROTRONIX DATACOM LTD." }, + { 0x006081, "TV/COM INTERNATIONAL" }, + { 0x006082, "NOVALINK TECHNOLOGIES, INC." }, + { 0x006083, "CISCO SYSTEMS, INC." }, + { 0x006084, "DIGITAL VIDEO" }, + { 0x006085, "STORAGE CONCEPTS" }, + { 0x006086, "LOGIC REPLACEMENT TECH. LTD." }, + { 0x006087, "KANSAI ELECTRIC CO., LTD." }, + { 0x006088, "WHITE MOUNTAIN DSP, INC." }, + { 0x006089, "XATA" }, + { 0x00608A, "CITADEL COMPUTER" }, + { 0x00608B, "CONFERTECH INTERNATIONAL" }, + { 0x00608C, "3COM CORPORATION" }, + { 0x00608D, "UNIPULSE CORP." }, + { 0x00608E, "HE ELECTRONICS, TECHNOLOGIE &" }, + { 0x00608F, "TEKRAM TECHNOLOGY CO., LTD." }, + { 0x006090, "ABLE COMMUNICATIONS, INC." }, + { 0x006091, "FIRST PACIFIC NETWORKS, INC." }, + { 0x006092, "MICRO/SYS, INC." }, + { 0x006093, "VARIAN" }, + { 0x006094, "IBM CORP." }, + { 0x006095, "ACCU-TIME SYSTEMS, INC." }, + { 0x006096, "T.S. MICROTECH INC." }, + { 0x006097, "3COM CORPORATION" }, + { 0x006098, "HT COMMUNICATIONS" }, + { 0x006099, "LAN MEDIA CORPORATION" }, + { 0x00609A, "NJK TECHNO CO." }, + { 0x00609B, "ASTRO-MED, INC." }, + { 0x00609C, "PERKIN-ELMER CORPORATION" }, + { 0x00609D, "PMI FOOD EQUIPMENT GROUP" }, + { 0x00609E, "X3 - INFORMATION TECHNOLOGY" }, + { 0x00609F, "PHAST CORPORATION" }, + { 0x0060A0, "SWITCHED NETWORK" }, + { 0x0060A1, "VPNET" }, + { 0x0060A2, "NIHON UNISYS LIMITED CO." }, + { 0x0060A3, "CONTINUUM TECHNOLOGY CORP." }, + { 0x0060A4, "GRINAKER SYSTEM TECHNOLOGIES" }, + { 0x0060A5, "PERFORMANCE TELECOM CORP." }, + { 0x0060A6, "PARTICLE MEASURING SYSTEMS" }, + { 0x0060A7, "MICROSENS GMBH & CO. KG" }, + { 0x0060A8, "TIDOMAT AB" }, + { 0x0060A9, "GESYTEC MBH" }, + { 0x0060AA, "INTELLIGENT DEVICES INC. (IDI)" }, + { 0x0060AB, "LARSCOM INCORPORATED" }, + { 0x0060AC, "RESILIENCE CORPORATION" }, + { 0x0060AD, "MEGACHIPS CORPORATION" }, + { 0x0060AE, "TRIO INFORMATION SYSTEMS AB" }, + { 0x0060AF, "PACIFIC MICRO DATA, INC." }, + { 0x0060B0, "HEWLETT-PACKARD CO." }, + { 0x0060B1, "INPUT/OUTPUT, INC." }, + { 0x0060B2, "PROCESS CONTROL CORP." }, + { 0x0060B3, "Z-COM, INC." }, + { 0x0060B4, "GLENAYRE R&D INC." }, + { 0x0060B5, "KEBA GMBH" }, + { 0x0060B6, "LAND COMPUTER CO., LTD." }, + { 0x0060B7, "CHANNELMATIC, INC." }, + { 0x0060B8, "CORELIS INC." }, + { 0x0060B9, "NITSUKO CORPORATION" }, + { 0x0060BA, "SAHARA NETWORKS, INC." }, + { 0x0060BB, "CABLETRON - NETLINK, INC." }, + { 0x0060BC, "KEUNYOUNG ELECTRONICS &" }, + { 0x0060BD, "HUBBELL-PULSECOM" }, + { 0x0060BE, "WEBTRONICS" }, + { 0x0060BF, "MACRAIGOR SYSTEMS, INC." }, + { 0x0060C0, "NERA AS" }, + { 0x0060C1, "WAVESPAN CORPORATION" }, + { 0x0060C2, "MPL AG" }, + { 0x0060C3, "NETVISION CORPORATION" }, + { 0x0060C4, "SOLITON SYSTEMS K.K." }, + { 0x0060C5, "ANCOT CORP." }, + { 0x0060C6, "DCS AG" }, + { 0x0060C7, "AMATI COMMUNICATIONS CORP." }, + { 0x0060C8, "KUKA WELDING SYSTEMS & ROBOTS" }, + { 0x0060C9, "CONTROLNET, INC." }, + { 0x0060CA, "HARMONIC SYSTEMS INCORPORATED" }, + { 0x0060CB, "HITACHI ZOSEN CORPORATION" }, + { 0x0060CC, "EMTRAK, INCORPORATED" }, + { 0x0060CD, "VIDEOSERVER, INC." }, + { 0x0060CE, "ACCLAIM COMMUNICATIONS" }, + { 0x0060CF, "ALTEON NETWORKS, INC." }, + { 0x0060D0, "SNMP RESEARCH INCORPORATED" }, + { 0x0060D1, "CASCADE COMMUNICATIONS" }, + { 0x0060D2, "LUCENT TECHNOLOGIES TAIWAN" }, + { 0x0060D3, "AT&T" }, + { 0x0060D4, "ELDAT COMMUNICATION LTD." }, + { 0x0060D5, "MIYACHI TECHNOS CORP." }, + { 0x0060D6, "NOVATEL WIRELESS TECHNOLOGIES" }, + { 0x0060D7, "ECOLE POLYTECHNIQUE FEDERALE" }, + { 0x0060D8, "ELMIC SYSTEMS, INC." }, + { 0x0060D9, "TRANSYS NETWORKS INC." }, + { 0x0060DA, "JBM ELECTRONICS CO." }, + { 0x0060DB, "NTP ELEKTRONIK A/S" }, + { 0x0060DC, "TOYO COMMUNICATION EQUIPMENT" }, + { 0x0060DD, "MYRICOM, INC." }, + { 0x0060DE, "KAYSER-THREDE GMBH" }, + { 0x0060DF, "INRANGE TECHNOLOGIES CORP." }, + { 0x0060E0, "AXIOM TECHNOLOGY CO., LTD." }, + { 0x0060E1, "ORCKIT COMMUNICATIONS LTD." }, + { 0x0060E2, "QUEST ENGINEERING & DEV." }, + { 0x0060E3, "ARBIN INSTRUMENTS" }, + { 0x0060E4, "COMPUSERVE, INC." }, + { 0x0060E5, "FUJI AUTOMATION CO., LTD." }, + { 0x0060E6, "SHOMITI SYSTEMS INCORPORATED" }, + { 0x0060E7, "RANDATA" }, + { 0x0060E8, "HITACHI COMPUTER PRODUCTS" }, + { 0x0060E9, "ATOP TECHNOLOGIES, INC." }, + { 0x0060EA, "STREAMLOGIC" }, + { 0x0060EB, "FOURTHTRACK SYSTEMS" }, + { 0x0060EC, "HERMARY OPTO ELECTRONICS INC." }, + { 0x0060ED, "RICARDO TEST AUTOMATION LTD." }, + { 0x0060EE, "APOLLO" }, + { 0x0060EF, "FLYTECH TECHNOLOGY CO., LTD." }, + { 0x0060F0, "JOHNSON & JOHNSON MEDICAL, INC" }, + { 0x0060F1, "EXP COMPUTER, INC." }, + { 0x0060F2, "LASERGRAPHICS, INC." }, + { 0x0060F3, "NETCOM SYSTEMS, INC." }, + { 0x0060F4, "ADVANCED COMPUTER SOLUTIONS," }, + { 0x0060F5, "ICON WEST, INC." }, + { 0x0060F6, "NEXTEST COMMUNICATION" }, + { 0x0060F7, "DATAFUSION SYSTEMS" }, + { 0x0060F8, "LORAN INTERNATIONAL TECHN. INC" }, + { 0x0060F9, "DIAMOND LANE COMMUNICATIONS" }, + { 0x0060FA, "EDUCATIONAL TECHNOLOGY" }, + { 0x0060FB, "PACKETEER, INC." }, + { 0x0060FC, "CONSERVATION THROUGH" }, + { 0x0060FD, "NETICS, INC." }, + { 0x0060FE, "LYNX SYSTEM DEVELOPERS, INC." }, + { 0x0060FF, "QUVIS, INC." }, + { 0x0070B0, "M/A-COM INC. COMPANIES" }, + { 0x0070B3, "DATA RECALL LTD." }, + { 0x008000, "MULTITECH SYSTEMS, INC." }, + { 0x008001, "PERIPHONICS CORPORATION" }, + { 0x008002, "SATELCOM (UK) LTD" }, + { 0x008003, "HYTEC ELECTRONICS LTD." }, + { 0x008004, "ANTLOW COMMUNICATIONS, LTD." }, + { 0x008005, "CACTUS COMPUTER INC." }, + { 0x008006, "COMPUADD CORPORATION" }, + { 0x008007, "DLOG NC-SYSTEME" }, + { 0x008008, "DYNATECH COMPUTER SYSTEMS" }, + { 0x008009, "JUPITER SYSTEMS, INC." }, + { 0x00800A, "JAPAN COMPUTER CORP." }, + { 0x00800B, "CSK CORPORATION" }, + { 0x00800C, "VIDECOM LIMITED" }, + { 0x00800D, "VOSSWINKEL F.U." }, + { 0x00800E, "ATLANTIX CORPORATION" }, + { 0x00800F, "STANDARD MICROSYSTEMS" }, + { 0x008010, "COMMODORE INTERNATIONAL" }, + { 0x008011, "DIGITAL SYSTEMS INT'L. INC." }, + { 0x008012, "INTEGRATED MEASUREMENT SYSTEMS" }, + { 0x008013, "THOMAS-CONRAD CORPORATION" }, + { 0x008014, "ESPRIT SYSTEMS" }, + { 0x008015, "SEIKO SYSTEMS, INC." }, + { 0x008016, "WANDEL AND GOLTERMANN" }, + { 0x008017, "PFU LIMITED" }, + { 0x008018, "KOBE STEEL, LTD." }, + { 0x008019, "DAYNA COMMUNICATIONS, INC." }, + { 0x00801A, "BELL ATLANTIC" }, + { 0x00801B, "KODIAK TECHNOLOGY" }, + { 0x00801C, "NEWPORT SYSTEMS SOLUTIONS" }, + { 0x00801D, "INTEGRATED INFERENCE MACHINES" }, + { 0x00801E, "XINETRON, INC." }, + { 0x00801F, "KRUPP ATLAS ELECTRONIK GMBH" }, + { 0x008020, "NETWORK PRODUCTS" }, + { 0x008021, "NEWBRIDGE RESEARCH CORP." }, + { 0x008022, "SCAN-OPTICS" }, + { 0x008023, "INTEGRATED BUSINESS NETWORKS" }, + { 0x008024, "KALPANA, INC." }, + { 0x008025, "STOLLMANN GMBH" }, + { 0x008026, "NETWORK PRODUCTS CORPORATION" }, + { 0x008027, "ADAPTIVE SYSTEMS, INC." }, + { 0x008028, "TRADPOST (HK) LTD" }, + { 0x008029, "EAGLE TECHNOLOGY, INC." }, + { 0x00802A, "TEST SYSTEMS & SIMULATIONS INC" }, + { 0x00802B, "INTEGRATED MARKETING CO" }, + { 0x00802C, "THE SAGE GROUP PLC" }, + { 0x00802D, "XYLOGICS INC" }, + { 0x00802E, "CASTLE ROCK COMPUTING" }, + { 0x00802F, "NATIONAL INSTRUMENTS CORP." }, + { 0x008030, "NEXUS ELECTRONICS" }, + { 0x008031, "BASYS, CORP." }, + { 0x008032, "ACCESS CO., LTD." }, + { 0x008033, "FORMATION, INC." }, + { 0x008034, "SMT GOUPIL" }, + { 0x008035, "TECHNOLOGY WORKS, INC." }, + { 0x008036, "REFLEX MANUFACTURING SYSTEMS" }, + { 0x008037, "Ericsson Group" }, + { 0x008038, "DATA RESEARCH & APPLICATIONS" }, + { 0x008039, "ALCATEL STC AUSTRALIA" }, + { 0x00803A, "VARITYPER, INC." }, + { 0x00803B, "APT COMMUNICATIONS, INC." }, + { 0x00803C, "TVS ELECTRONICS LTD" }, + { 0x00803D, "SURIGIKEN CO., LTD." }, + { 0x00803E, "SYNERNETICS" }, + { 0x00803F, "TATUNG COMPANY" }, + { 0x008040, "JOHN FLUKE MANUFACTURING CO." }, + { 0x008041, "VEB KOMBINAT ROBOTRON" }, + { 0x008042, "FORCE COMPUTERS" }, + { 0x008043, "NETWORLD, INC." }, + { 0x008044, "SYSTECH COMPUTER CORP." }, + { 0x008045, "MATSUSHITA ELECTRIC IND. CO" }, + { 0x008046, "UNIVERSITY OF TORONTO" }, + { 0x008047, "IN-NET CORP." }, + { 0x008048, "COMPEX INCORPORATED" }, + { 0x008049, "NISSIN ELECTRIC CO., LTD." }, + { 0x00804A, "PRO-LOG" }, + { 0x00804B, "EAGLE TECHNOLOGIES PTY.LTD." }, + { 0x00804C, "CONTEC CO., LTD." }, + { 0x00804D, "CYCLONE MICROSYSTEMS, INC." }, + { 0x00804E, "APEX COMPUTER COMPANY" }, + { 0x00804F, "DAIKIN INDUSTRIES, LTD." }, + { 0x008050, "ZIATECH CORPORATION" }, + { 0x008051, "FIBERMUX" }, + { 0x008052, "TECHNICALLY ELITE CONCEPTS" }, + { 0x008053, "INTELLICOM, INC." }, + { 0x008054, "FRONTIER TECHNOLOGIES CORP." }, + { 0x008055, "FERMILAB" }, + { 0x008056, "SPHINX ELEKTRONIK GMBH" }, + { 0x008057, "ADSOFT, LTD." }, + { 0x008058, "PRINTER SYSTEMS CORPORATION" }, + { 0x008059, "STANLEY ELECTRIC CO., LTD" }, + { 0x00805A, "TULIP COMPUTERS INTERNAT'L B.V" }, + { 0x00805B, "CONDOR SYSTEMS, INC." }, + { 0x00805C, "AGILIS CORPORATION" }, + { 0x00805D, "CANSTAR" }, + { 0x00805E, "LSI LOGIC CORPORATION" }, + { 0x00805F, "COMPAQ COMPUTER CORPORATION" }, + { 0x008060, "NETWORK INTERFACE CORPORATION" }, + { 0x008061, "LITTON SYSTEMS, INC." }, + { 0x008062, "INTERFACE CO." }, + { 0x008063, "RICHARD HIRSCHMANN GMBH & CO." }, + { 0x008064, "WYSE TECHNOLOGY" }, + { 0x008065, "CYBERGRAPHIC SYSTEMS PTY LTD." }, + { 0x008066, "ARCOM CONTROL SYSTEMS, LTD." }, + { 0x008067, "SQUARE D COMPANY" }, + { 0x008068, "YAMATECH SCIENTIFIC LTD." }, + { 0x008069, "COMPUTONE SYSTEMS" }, + { 0x00806A, "ERI (EMPAC RESEARCH INC.)" }, + { 0x00806B, "SCHMID TELECOMMUNICATION" }, + { 0x00806C, "CEGELEC PROJECTS LTD" }, + { 0x00806D, "CENTURY SYSTEMS CORP." }, + { 0x00806E, "NIPPON STEEL CORPORATION" }, + { 0x00806F, "ONELAN LTD." }, + { 0x008070, "COMPUTADORAS MICRON" }, + { 0x008071, "SAI TECHNOLOGY" }, + { 0x008072, "MICROPLEX SYSTEMS LTD." }, + { 0x008073, "DWB ASSOCIATES" }, + { 0x008074, "FISHER CONTROLS" }, + { 0x008075, "PARSYTEC GMBH" }, + { 0x008076, "MCNC" }, + { 0x008077, "BROTHER INDUSTRIES, LTD." }, + { 0x008078, "PRACTICAL PERIPHERALS, INC." }, + { 0x008079, "MICROBUS DESIGNS LTD." }, + { 0x00807A, "AITECH SYSTEMS LTD." }, + { 0x00807B, "ARTEL COMMUNICATIONS CORP." }, + { 0x00807C, "FIBERCOM, INC." }, + { 0x00807D, "EQUINOX SYSTEMS INC." }, + { 0x00807E, "SOUTHERN PACIFIC LTD." }, + { 0x00807F, "DY-4 INCORPORATED" }, + { 0x008080, "DATAMEDIA CORPORATION" }, + { 0x008081, "KENDALL SQUARE RESEARCH CORP." }, + { 0x008082, "PEP MODULAR COMPUTERS GMBH" }, + { 0x008083, "AMDAHL" }, + { 0x008084, "THE CLOUD INC." }, + { 0x008085, "H-THREE SYSTEMS CORPORATION" }, + { 0x008086, "COMPUTER GENERATION INC." }, + { 0x008087, "OKI ELECTRIC INDUSTRY CO., LTD" }, + { 0x008088, "VICTOR COMPANY OF JAPAN, LTD." }, + { 0x008089, "TECNETICS (PTY) LTD." }, + { 0x00808A, "SUMMIT MICROSYSTEMS CORP." }, + { 0x00808B, "DACOLL LIMITED" }, + { 0x00808C, "NetScout Systems, Inc." }, + { 0x00808D, "WESTCOAST TECHNOLOGY B.V." }, + { 0x00808E, "RADSTONE TECHNOLOGY" }, + { 0x00808F, "C. ITOH ELECTRONICS, INC." }, + { 0x008090, "MICROTEK INTERNATIONAL, INC." }, + { 0x008091, "TOKYO ELECTRIC CO.,LTD" }, + { 0x008092, "JAPAN COMPUTER INDUSTRY, INC." }, + { 0x008093, "XYRON CORPORATION" }, + { 0x008094, "ALFA LAVAL AUTOMATION AB" }, + { 0x008095, "BASIC MERTON HANDELSGES.M.B.H." }, + { 0x008096, "HUMAN DESIGNED SYSTEMS, INC." }, + { 0x008097, "CENTRALP AUTOMATISMES" }, + { 0x008098, "TDK CORPORATION" }, + { 0x008099, "KLOCKNER MOELLER IPC" }, + { 0x00809A, "NOVUS NETWORKS LTD" }, + { 0x00809B, "JUSTSYSTEM CORPORATION" }, + { 0x00809C, "LUXCOM, INC." }, + { 0x00809D, "Commscraft Ltd." }, + { 0x00809E, "DATUS GMBH" }, + { 0x00809F, "ALCATEL BUSINESS SYSTEMS" }, + { 0x0080A0, "EDISA HEWLETT PACKARD S/A" }, + { 0x0080A1, "MICROTEST, INC." }, + { 0x0080A2, "CREATIVE ELECTRONIC SYSTEMS" }, + { 0x0080A3, "LANTRONIX" }, + { 0x0080A4, "LIBERTY ELECTRONICS" }, + { 0x0080A5, "SPEED INTERNATIONAL" }, + { 0x0080A6, "REPUBLIC TECHNOLOGY, INC." }, + { 0x0080A7, "MEASUREX CORP." }, + { 0x0080A8, "VITACOM CORPORATION" }, + { 0x0080A9, "CLEARPOINT RESEARCH" }, + { 0x0080AA, "MAXPEED" }, + { 0x0080AB, "DUKANE NETWORK INTEGRATION" }, + { 0x0080AC, "IMLOGIX, DIVISION OF GENESYS" }, + { 0x0080AD, "CNET TECHNOLOGY, INC." }, + { 0x0080AE, "HUGHES NETWORK SYSTEMS" }, + { 0x0080AF, "ALLUMER CO., LTD." }, + { 0x0080B0, "ADVANCED INFORMATION" }, + { 0x0080B1, "SOFTCOM A/S" }, + { 0x0080B2, "NETWORK EQUIPMENT TECHNOLOGIES" }, + { 0x0080B3, "AVAL DATA CORPORATION" }, + { 0x0080B4, "SOPHIA SYSTEMS" }, + { 0x0080B5, "UNITED NETWORKS INC." }, + { 0x0080B6, "THEMIS COMPUTER" }, + { 0x0080B7, "STELLAR COMPUTER" }, + { 0x0080B8, "BUG, INCORPORATED" }, + { 0x0080B9, "ARCHE TECHNOLIGIES INC." }, + { 0x0080BA, "SPECIALIX (ASIA) PTE, LTD" }, + { 0x0080BB, "HUGHES LAN SYSTEMS" }, + { 0x0080BC, "HITACHI ENGINEERING CO., LTD" }, + { 0x0080BD, "THE FURUKAWA ELECTRIC CO., LTD" }, + { 0x0080BE, "ARIES RESEARCH" }, + { 0x0080BF, "TAKAOKA ELECTRIC MFG. CO. LTD." }, + { 0x0080C0, "PENRIL DATACOMM" }, + { 0x0080C1, "LANEX CORPORATION" }, + { 0x0080C2, "IEEE 802 COMMITTEE" }, + { 0x0080C3, "BICC INFORMATION SYSTEMS & SVC" }, + { 0x0080C4, "DOCUMENT TECHNOLOGIES, INC." }, + { 0x0080C5, "NOVELLCO DE MEXICO" }, + { 0x0080C6, "NATIONAL DATACOMM CORPORATION" }, + { 0x0080C7, "XIRCOM" }, + { 0x0080C8, "D-LINK SYSTEMS, INC." }, + { 0x0080C9, "ALBERTA MICROELECTRONIC CENTRE" }, + { 0x0080CA, "NETCOM RESEARCH INCORPORATED" }, + { 0x0080CB, "FALCO DATA PRODUCTS" }, + { 0x0080CC, "MICROWAVE BYPASS SYSTEMS" }, + { 0x0080CD, "MICRONICS COMPUTER, INC." }, + { 0x0080CE, "BROADCAST TELEVISION SYSTEMS" }, + { 0x0080CF, "EMBEDDED PERFORMANCE INC." }, + { 0x0080D0, "COMPUTER PERIPHERALS, INC." }, + { 0x0080D1, "KIMTRON CORPORATION" }, + { 0x0080D2, "SHINNIHONDENKO CO., LTD." }, + { 0x0080D3, "SHIVA CORP." }, + { 0x0080D4, "CHASE RESEARCH LTD." }, + { 0x0080D5, "CADRE TECHNOLOGIES" }, + { 0x0080D6, "NUVOTECH, INC." }, + { 0x0080D7, "FANTUM ENGINEERING, INC." }, + { 0x0080D8, "NETWORK PERIPHERALS INC." }, + { 0x0080D9, "EMK ELEKTRONIK" }, + { 0x0080DA, "BRUEL & KJAER" }, + { 0x0080DB, "GRAPHON CORPORATION" }, + { 0x0080DC, "PICKER INTERNATIONAL" }, + { 0x0080DD, "GMX INC/GIMIX" }, + { 0x0080DE, "GIPSI S.A." }, + { 0x0080DF, "ADC CODENOLL TECHNOLOGY CORP." }, + { 0x0080E0, "XTP SYSTEMS, INC." }, + { 0x0080E1, "STMICROELECTRONICS" }, + { 0x0080E2, "T.D.I. CO., LTD." }, + { 0x0080E3, "CORAL NETWORK CORPORATION" }, + { 0x0080E4, "NORTHWEST DIGITAL SYSTEMS, INC" }, + { 0x0080E5, "MYLEX CORPORATION" }, + { 0x0080E6, "PEER NETWORKS, INC." }, + { 0x0080E7, "LYNWOOD SCIENTIFIC DEV. LTD." }, + { 0x0080E8, "CUMULUS CORPORATIION" }, + { 0x0080E9, "MADGE NETWORKS" }, + { 0x0080EA, "ADVA Optical Networking Ltd." }, + { 0x0080EB, "COMPCONTROL B.V." }, + { 0x0080EC, "SUPERCOMPUTING SOLUTIONS, INC." }, + { 0x0080ED, "IQ TECHNOLOGIES, INC." }, + { 0x0080EE, "THOMSON CSF" }, + { 0x0080EF, "RATIONAL" }, + { 0x0080F0, "KYUSHU MATSUSHITA ELECTRIC CO." }, + { 0x0080F1, "OPUS SYSTEMS" }, + { 0x0080F2, "RAYCOM SYSTEMS INC" }, + { 0x0080F3, "SUN ELECTRONICS CORP." }, + { 0x0080F4, "TELEMECANIQUE ELECTRIQUE" }, + { 0x0080F5, "QUANTEL LTD" }, + { 0x0080F6, "SYNERGY MICROSYSTEMS" }, + { 0x0080F7, "ZENITH ELECTRONICS" }, + { 0x0080F8, "MIZAR, INC." }, + { 0x0080F9, "HEURIKON CORPORATION" }, + { 0x0080FA, "RWT GMBH" }, + { 0x0080FB, "BVM LIMITED" }, + { 0x0080FC, "AVATAR CORPORATION" }, + { 0x0080FD, "EXSCEED CORPRATION" }, + { 0x0080FE, "AZURE TECHNOLOGIES, INC." }, + { 0x0080FF, "SOC. DE TELEINFORMATIQUE RTC" }, + { 0x009000, "DIAMOND MULTIMEDIA" }, + { 0x009001, "NISHIMU ELCTRONICS INDUSTRIES" }, + { 0x009002, "ALLGON AB" }, + { 0x009003, "APLIO" }, + { 0x009004, "3COM EUROPE LTD." }, + { 0x009005, "PROTECH SYSTEMS CO., LTD." }, + { 0x009006, "HAMAMATSU PHOTONICS K.K." }, + { 0x009007, "DOMEX TECHNOLOGY CORP." }, + { 0x009008, "HAN A SYSTEMS, INC." }, + { 0x009009, "i Controls, Inc." }, + { 0x00900A, "PROTON ELECTRONIC INDUSTRIAL" }, + { 0x00900B, "LANNER ELECTRONICS, INC." }, + { 0x00900C, "CISCO SYSTEMS, INC." }, + { 0x00900D, "OVERLAND DATA INC." }, + { 0x00900E, "HANDLINK TECHNOLOGIES, INC." }, + { 0x00900F, "KAWASAKI HEAVY INDUSTRIES, LTD" }, + { 0x009010, "SIMULATION LABORATORIES, INC." }, + { 0x009011, "WAVTRACE, INC." }, + { 0x009012, "GLOBESPAN SEMICONDUCTOR, INC." }, + { 0x009013, "SAMSAN CORP." }, + { 0x009014, "ROTORK INSTRUMENTS, LTD." }, + { 0x009015, "CENTIGRAM COMMUNICATIONS CORP." }, + { 0x009016, "ZAC" }, + { 0x009017, "ZYPCOM, INC." }, + { 0x009018, "ITO ELECTRIC INDUSTRY CO, LTD." }, + { 0x009019, "HERMES ELECTRONICS CO., LTD." }, + { 0x00901A, "UNISPHERE SOLUTIONS" }, + { 0x00901B, "DIGITAL CONTROLS" }, + { 0x00901C, "MPS SOFTWARE GMBH" }, + { 0x00901D, "PEC (NZ) LTD." }, + { 0x00901E, "SELESTA INGEGNE RIA S.P.A." }, + { 0x00901F, "ADTEC PRODUCTIONS, INC." }, + { 0x009020, "PHILIPS ANALYTICAL X-RAY B.V." }, + { 0x009021, "CISCO SYSTEMS, INC." }, + { 0x009022, "IVEX" }, + { 0x009023, "ZILOG INC." }, + { 0x009024, "PIPELINKS, INC." }, + { 0x009025, "VISION SYSTEMS LTD. PTY" }, + { 0x009026, "ADVANCED SWITCHING" }, + { 0x009027, "INTEL CORPORATION" }, + { 0x009028, "NIPPON SIGNAL CO., LTD." }, + { 0x009029, "CRYPTO AG" }, + { 0x00902A, "COMMUNICATION DEVICES, INC." }, + { 0x00902B, "CISCO SYSTEMS, INC." }, + { 0x00902C, "DATA & CONTROL EQUIPMENT LTD." }, + { 0x00902D, "DATA ELECTRONICS" }, + { 0x00902E, "NAMCO LIMITED" }, + { 0x00902F, "NETCORE SYSTEMS, INC." }, + { 0x009030, "HONEYWELL-DATING" }, + { 0x009031, "MYSTICOM, LTD." }, + { 0x009032, "PELCOMBE GROUP LTD." }, + { 0x009033, "INNOVAPHONE GMBH" }, + { 0x009034, "IMAGIC, INC." }, + { 0x009035, "ALPHA TELECOM, INC." }, + { 0x009036, "ENS, INC." }, + { 0x009037, "ACUCOMM, INC." }, + { 0x009038, "FOUNTAIN TECHNOLOGIES, INC." }, + { 0x009039, "SHASTA NETWORKS" }, + { 0x00903A, "NIHON MEDIA TOOL INC." }, + { 0x00903B, "TRIEMS RESEARCH LAB, INC." }, + { 0x00903C, "ATLANTIC NETWORK SYSTEMS" }, + { 0x00903D, "BIOPAC SYSTEMS, INC." }, + { 0x00903E, "N.V. PHILIPS INDUSTRIAL" }, + { 0x00903F, "AZTEC RADIOMEDIA" }, + { 0x009040, "CASTLE NETWORKS, INC." }, + { 0x009041, "APPLIED DIGITAL ACCESS" }, + { 0x009042, "ECCS" }, + { 0x009043, "NICHIBEI DENSHI CO., LTD." }, + { 0x009044, "ASSURED DIGITAL, INC." }, + { 0x009045, "MARIPOSA TECHNOLOGY" }, + { 0x009046, "DEXDYNE, LTD." }, + { 0x009047, "GIGA FAST E. LTD." }, + { 0x009048, "ZEAL CORPORATION" }, + { 0x009049, "ENTRIDIA CORPORATION" }, + { 0x00904A, "CONCUR SYSTEM TECHNOLOGIES" }, + { 0x00904B, "GEMTEK TECHNOLOGY CO., LTD." }, + { 0x00904C, "EPIGRAM, INC." }, + { 0x00904D, "SPEC S.A." }, + { 0x00904E, "DELEM BV" }, + { 0x00904F, "ABB POWER T&D COMPANY, INC." }, + { 0x009050, "TELESTE OY" }, + { 0x009051, "ULTIMATE TECHNOLOGY CORP." }, + { 0x009052, "SELCOM ELETTRONICA S.R.L." }, + { 0x009053, "DAEWOO ELECTRONICS CO., LTD." }, + { 0x009054, "INNOVATIVE SEMICONDUCTORS, INC" }, + { 0x009055, "PARKER HANNIFIN CORPORATION" }, + { 0x009056, "TELESTREAM, INC." }, + { 0x009057, "AANETCOM, INC." }, + { 0x009058, "ULTRA ELECTRONICS LTD." }, + { 0x009059, "TELECOM DEVICE K.K." }, + { 0x00905A, "DEARBORN GROUP, INC." }, + { 0x00905B, "RAYMOND AND LAE ENGINEERING" }, + { 0x00905C, "EDMI" }, + { 0x00905D, "NETCOM SICHERHEITSTECHNIK GMBH" }, + { 0x00905E, "RAULAND-BORG CORPORATION" }, + { 0x00905F, "CISCO SYSTEMS, INC." }, + { 0x009060, "SYSTEM CREATE CORP." }, + { 0x009061, "PACIFIC RESEARCH & ENGINEERING" }, + { 0x009062, "ICP VORTEX COMPUTERSYSTEME" }, + { 0x009063, "COHERENT COMMUNICATIONS" }, + { 0x009064, "THOMSON BROADCAST SYSTEMS" }, + { 0x009065, "FINISAR CORPORATION" }, + { 0x009066, "Troika Networks, Inc." }, + { 0x009067, "WALKABOUT COMPUTERS, INC." }, + { 0x009068, "DVT CORP." }, + { 0x009069, "JUNIPER NETWORKS, INC." }, + { 0x00906A, "TURNSTONE SYSTEMS, INC." }, + { 0x00906B, "APPLIED RESOURCES, INC." }, + { 0x00906C, "GWT GLOBAL WEIGHING" }, + { 0x00906D, "CISCO SYSTEMS, INC." }, + { 0x00906E, "PRAXON, INC." }, + { 0x00906F, "CISCO SYSTEMS, INC." }, + { 0x009070, "NEO NETWORKS, INC." }, + { 0x009071, "BADGER TECHNOLOGY, INC." }, + { 0x009072, "SIMRAD AS" }, + { 0x009073, "GAIO TECHNOLOGY" }, + { 0x009074, "ARGON NETWORKS, INC." }, + { 0x009075, "NEC DO BRASIL S.A." }, + { 0x009076, "FMT AIRCRAFT GATE SUPPORT" }, + { 0x009077, "ADVANCED FIBRE COMMUNICATIONS" }, + { 0x009078, "MER TELEMANAGEMENT" }, + { 0x009079, "CLEARONE INC." }, + { 0x00907A, "SPECTRALINK CORP." }, + { 0x00907B, "E-TECH, INC." }, + { 0x00907C, "DIGITALCAST, INC." }, + { 0x00907D, "HOME WIRELESS NETWORKS" }, + { 0x00907E, "VETRONIX CORP." }, + { 0x00907F, "WATCHGUARD TECHNOLOGIES, INC." }, + { 0x009080, "NOT LIMITED, INC." }, + { 0x009081, "ALOHA NETWORKS, INC." }, + { 0x009082, "FORCE INSTITUTE" }, + { 0x009083, "TURBO COMMUNICATION, INC." }, + { 0x009084, "ATECH SYSTEM" }, + { 0x009085, "GOLDEN ENTERPRISES, INC." }, + { 0x009086, "CISCO SYSTEMS, INC." }, + { 0x009087, "ITIS" }, + { 0x009088, "BAXALL SECURITY LTD." }, + { 0x009089, "SOFTCOM MICROSYSTEMS, INC." }, + { 0x00908A, "BAYLY COMMUNICATIONS, INC." }, + { 0x00908B, "CELL COMPUTING, INC." }, + { 0x00908C, "ETREND ELECTRONICS, INC." }, + { 0x00908D, "VICKERS ELECTRONICS SYSTEMS" }, + { 0x00908E, "Nortel Networks Broadband Access" }, + { 0x00908F, "AUDIOCODES LTD." }, + { 0x009090, "I-BUS" }, + { 0x009091, "DIGITALSCAPE, INC." }, + { 0x009092, "CISCO SYSTEMS, INC." }, + { 0x009093, "NANAO CORPORATION" }, + { 0x009094, "OSPREY TECHNOLOGIES, INC." }, + { 0x009095, "UNIVERSAL AVIONICS" }, + { 0x009096, "ASKEY COMPUTER CORP." }, + { 0x009097, "SYCAMORE NETWORKS" }, + { 0x009098, "SBC DESIGNS, INC." }, + { 0x009099, "ALLIED TELESIS,K.K." }, + { 0x00909A, "ONE WORLD SYSTEMS, INC." }, + { 0x00909B, "MARKPOINT AB" }, + { 0x00909C, "COMBOX, LTD." }, + { 0x00909D, "GSE SYSTEMS, INC." }, + { 0x00909E, "DELPHI ENGINEERING GROUP" }, + { 0x00909F, "DIGI-DATA CORPORATION" }, + { 0x0090A0, "8X8 INC." }, + { 0x0090A1, "FLYING PIG SYSTEMS, LTD." }, + { 0x0090A2, "CYBERTAN TECHNOLOGY, INC." }, + { 0x0090A3, "MEDIALINCS CO., LTD." }, + { 0x0090A4, "ALTIGA NETWORKS" }, + { 0x0090A5, "SPECTRA LOGIC" }, + { 0x0090A6, "CISCO SYSTEMS, INC." }, + { 0x0090A7, "CLIENTEC CORPORATION" }, + { 0x0090A8, "NINETILES NETWORKS LTD." }, + { 0x0090A9, "WESTERN DIGITAL" }, + { 0x0090AA, "INDIGO ACTIVE VISION" }, + { 0x0090AB, "CISCO SYSTEMS, INC." }, + { 0x0090AC, "OPTIVISION, INC." }, + { 0x0090AD, "ASPECT ELECTRONICS, INC." }, + { 0x0090AE, "ITALTEL SPA" }, + { 0x0090AF, "J. MORITA MFG. CORP." }, + { 0x0090B0, "VADEM" }, + { 0x0090B1, "CISCO SYSTEMS, INC." }, + { 0x0090B2, "AVICI SYSTEMS INC." }, + { 0x0090B3, "AGRANAT SYSTEMS" }, + { 0x0090B4, "WILLOWBROOK TECHNOLOGIES" }, + { 0x0090B5, "NIKON CORPORATION" }, + { 0x0090B6, "FIBEX SYSTEMS" }, + { 0x0090B7, "DIGITAL LIGHTWAVE, INC." }, + { 0x0090B8, "ROHDE & SCHWARZ GMBH & CO. KG" }, + { 0x0090B9, "BERAN INSTRUMENTS LTD." }, + { 0x0090BA, "VALID NETWORKS, INC." }, + { 0x0090BB, "TAINET COMMUNICATION SYSTEM" }, + { 0x0090BC, "TELEMANN CO., LTD." }, + { 0x0090BD, "OMNIA COMMUNICATIONS, INC." }, + { 0x0090BE, "IBC/INTEGRATED BUSINESS" }, + { 0x0090BF, "CISCO SYSTEMS, INC." }, + { 0x0090C0, "K.J. LAW ENGINEERS, INC." }, + { 0x0090C1, "EDA INDUSTRIES" }, + { 0x0090C2, "JK MICROSYSTEMS, INC." }, + { 0x0090C3, "TOPIC SEMICONDUCTOR CORP." }, + { 0x0090C4, "JAVELIN SYSTEMS, INC." }, + { 0x0090C5, "INTERNET MAGIC, INC." }, + { 0x0090C6, "OPTIM SYSTEMS, INC." }, + { 0x0090C7, "ICOM INC." }, + { 0x0090C8, "WAVERIDER COMMUNICATIONS" }, + { 0x0090C9, "PRODUCTIVITY ENHANCEMENT" }, + { 0x0090CA, "ACCORD VIDEO" }, + { 0x0090CB, "WIRELESS ONLINE, INC." }, + { 0x0090CC, "PLANEX COMMUNICATIONS, INC." }, + { 0x0090CD, "ENT-EMPRESA NACIONAL" }, + { 0x0090CE, "TETRA GMBH" }, + { 0x0090CF, "NORTEL" }, + { 0x0090D0, "ALCATEL BELL" }, + { 0x0090D1, "LEICHU ENTERPRISE CO., LTD." }, + { 0x0090D2, "ARTEL VIDEO SYSTEMS" }, + { 0x0090D3, "GIESECKE & DEVRIENT GMBH" }, + { 0x0090D4, "BINDVIEW DEVELOPMENT CORP." }, + { 0x0090D5, "EUPHONIX, INC." }, + { 0x0090D6, "CRYSTAL GROUP" }, + { 0x0090D7, "NETBOOST CORP." }, + { 0x0090D8, "WHITECROSS SYSTEMS" }, + { 0x0090D9, "CISCO SYSTEMS, INC." }, + { 0x0090DA, "DYNARC, INC." }, + { 0x0090DB, "NEXT LEVEL COMMUNICATIONS" }, + { 0x0090DC, "TECO INFORMATION SYSTEMS" }, + { 0x0090DD, "THE MIHARU COMMUNICATIONS" }, + { 0x0090DE, "CARDKEY SYSTEMS, INC." }, + { 0x0090DF, "MITSUBISHI CHEMICAL" }, + { 0x0090E0, "SYSTRAN CORP." }, + { 0x0090E1, "TELENA S.P.A." }, + { 0x0090E2, "DISTRIBUTED PROCESSING" }, + { 0x0090E3, "AVEX ELECTRONICS INC." }, + { 0x0090E4, "NEC AMERICA, INC." }, + { 0x0090E5, "TEKNEMA, INC." }, + { 0x0090E6, "ACER LABORATORIES, INC." }, + { 0x0090E7, "HORSCH ELEKTRONIK AG" }, + { 0x0090E8, "MOXA TECHNOLOGIES CORP., LTD." }, + { 0x0090E9, "JANZ COMPUTER AG" }, + { 0x0090EA, "ALPHA TECHNOLOGIES, INC." }, + { 0x0090EB, "SENTRY TELECOM SYSTEMS" }, + { 0x0090EC, "PYRESCOM" }, + { 0x0090ED, "CENTRAL SYSTEM RESEARCH" }, + { 0x0090EE, "PERSONAL COMMUNICATIONS" }, + { 0x0090EF, "INTEGRIX, INC." }, + { 0x0090F0, "HARMONIC LIGHTWAVES, LTD." }, + { 0x0090F1, "DOT HILL SYSTEMS CORPORATION" }, + { 0x0090F2, "CISCO SYSTEMS, INC." }, + { 0x0090F3, "ASPECT COMMUNICATIONS" }, + { 0x0090F4, "LIGHTNING INSTRUMENTATION" }, + { 0x0090F5, "CLEVO CO." }, + { 0x0090F6, "ESCALATE NETWORKS, INC." }, + { 0x0090F7, "NBASE COMMUNICATIONS LTD." }, + { 0x0090F8, "MEDIATRIX TELECOM" }, + { 0x0090F9, "LEITCH" }, + { 0x0090FA, "GIGANET, INC." }, + { 0x0090FB, "PORTWELL, INC." }, + { 0x0090FC, "NETWORK COMPUTING DEVICES" }, + { 0x0090FD, "COPPERCOM, INC." }, + { 0x0090FE, "ELECOM CO., LTD. (LANEED DIV." }, + { 0x0090FF, "TELLUS TECHNOLOGY INC." }, + { 0x009D8E, "CARDIAC RECORDERS, INC." }, + { 0x00A000, "CENTILLION NETWORKS, INC." }, + { 0x00A001, "WATKINS-JOHNSON COMPANY" }, + { 0x00A002, "LEEDS & NORTHRUP AUSTRALIA" }, + { 0x00A003, "STAEFA CONTROL SYSTEM" }, + { 0x00A004, "NETPOWER, INC." }, + { 0x00A005, "DANIEL INSTRUMENTS, LTD." }, + { 0x00A006, "IMAGE DATA PROCESSING" }, + { 0x00A007, "APEXX TECHNOLOGY, INC." }, + { 0x00A008, "NETCORP" }, + { 0x00A009, "WHITETREE NETWORK" }, + { 0x00A00A, "R.D.C. COMMUNICATION" }, + { 0x00A00B, "COMPUTEX CO., LTD." }, + { 0x00A00C, "KINGMAX TECHNOLOGY, INC." }, + { 0x00A00D, "THE PANDA PROJECT" }, + { 0x00A00E, "VISUAL NETWORKS, INC." }, + { 0x00A00F, "Broadband Technologies" }, + { 0x00A010, "SYSLOGIC DATENTECHNIK AG" }, + { 0x00A011, "MUTOH INDUSTRIES LTD." }, + { 0x00A012, "B.A.T.M. ADVANCED TECHNOLOGIES" }, + { 0x00A013, "TELTREND LTD." }, + { 0x00A014, "CSIR" }, + { 0x00A015, "WYLE" }, + { 0x00A016, "MICROPOLIS CORP." }, + { 0x00A017, "J B M CORPORATION" }, + { 0x00A018, "CREATIVE CONTROLLERS, INC." }, + { 0x00A019, "NEBULA CONSULTANTS, INC." }, + { 0x00A01A, "BINAR ELEKTRONIK AB" }, + { 0x00A01B, "PREMISYS COMMUNICATIONS, INC." }, + { 0x00A01C, "NASCENT NETWORKS CORPORATION" }, + { 0x00A01D, "SIXNET" }, + { 0x00A01E, "EST CORPORATION" }, + { 0x00A01F, "TRICORD SYSTEMS, INC." }, + { 0x00A020, "CITICORP/TTI" }, + { 0x00A021, "GENERAL DYNAMICS-" }, + { 0x00A022, "CENTRE FOR DEVELOPMENT OF" }, + { 0x00A023, "APPLIED CREATIVE TECHNOLOGY," }, + { 0x00A024, "3COM CORPORATION" }, + { 0x00A025, "REDCOM LABS INC." }, + { 0x00A026, "TELDAT, S.A." }, + { 0x00A027, "FIREPOWER SYSTEMS, INC." }, + { 0x00A028, "CONNER PERIPHERALS" }, + { 0x00A029, "COULTER CORPORATION" }, + { 0x00A02A, "TRANCELL SYSTEMS" }, + { 0x00A02B, "TRANSITIONS RESEARCH CORP." }, + { 0x00A02C, "INTERWAVE COMMUNICATIONS" }, + { 0x00A02D, "1394 Trade Association" }, + { 0x00A02E, "BRAND COMMUNICATIONS, LTD." }, + { 0x00A02F, "PIRELLI CAVI" }, + { 0x00A030, "CAPTOR NV/SA" }, + { 0x00A031, "HAZELTINE CORPORATION, MS 1-17" }, + { 0x00A032, "GES SINGAPORE PTE. LTD." }, + { 0x00A033, "IMC MESS-SYSTEME GMBH" }, + { 0x00A034, "AXEL" }, + { 0x00A035, "CYLINK CORPORATION" }, + { 0x00A036, "APPLIED NETWORK TECHNOLOGY" }, + { 0x00A037, "DATASCOPE CORPORATION" }, + { 0x00A038, "EMAIL ELECTRONICS" }, + { 0x00A039, "ROSS TECHNOLOGY, INC." }, + { 0x00A03A, "KUBOTEK CORPORATION" }, + { 0x00A03B, "TOSHIN ELECTRIC CO., LTD." }, + { 0x00A03C, "EG&G NUCLEAR INSTRUMENTS" }, + { 0x00A03D, "OPTO - 22" }, + { 0x00A03E, "ATM FORUM" }, + { 0x00A03F, "COMPUTER SOCIETY MICROPROCES'R" }, + { 0x00A040, "APPLE COMPUTER" }, + { 0x00A041, "LEYBOLD-INFICON" }, + { 0x00A042, "SPUR PRODUCTS CORP." }, + { 0x00A043, "AMERICAN TECHNOLOGY LABS, INC." }, + { 0x00A044, "NTT INTELLIGENT TECHNOLOGY" }, + { 0x00A045, "PHOENIX CONTACT GMBH & CO." }, + { 0x00A046, "SCITEX CORP. LTD." }, + { 0x00A047, "INTEGRATED FITNESS CORP." }, + { 0x00A048, "QUESTECH, LTD." }, + { 0x00A049, "DIGITECH INDUSTRIES, INC." }, + { 0x00A04A, "NISSHIN ELECTRIC CO., LTD." }, + { 0x00A04B, "TFL LAN INC." }, + { 0x00A04C, "INNOVATIVE SYSTEMS & TECH. INC" }, + { 0x00A04D, "EDA INSTRUMENTS, INC." }, + { 0x00A04E, "VOELKER TECHNOLOGIES, INC." }, + { 0x00A04F, "AMERITEC CORP." }, + { 0x00A050, "CYPRESS SEMICONDUCTOR" }, + { 0x00A051, "ANGIA COMMUNICATIONS. INC." }, + { 0x00A052, "STANILITE ELECTRONICS PTY. LTD" }, + { 0x00A053, "COMPACT DEVICES, INC." }, + { 0x00A055, "LINKTECH, INC." }, + { 0x00A056, "MICROPROSS" }, + { 0x00A057, "ELSA AG" }, + { 0x00A058, "GLORY, LTD." }, + { 0x00A059, "HAMILTON HALLMARK" }, + { 0x00A05A, "KOFAX IMAGE PRODUCTS" }, + { 0x00A05B, "MARQUIP, INC." }, + { 0x00A05C, "INVENTORY CONVERSION, INC./" }, + { 0x00A05D, "CS COMPUTER SYSTEME GMBH" }, + { 0x00A05E, "MYRIAD LOGIC INC." }, + { 0x00A05F, "BTG ENGINEERING BV" }, + { 0x00A060, "ACER PERIPHERALS, INC." }, + { 0x00A061, "PURITAN BENNETT" }, + { 0x00A062, "AES PRODATA" }, + { 0x00A063, "JRL SYSTEMS, INC." }, + { 0x00A064, "KVB/ANALECT" }, + { 0x00A065, "NEXLAND, INC." }, + { 0x00A066, "ISA CO., LTD." }, + { 0x00A067, "NETWORK SERVICES GROUP" }, + { 0x00A068, "BHP LIMITED" }, + { 0x00A069, "TrueTime" }, + { 0x00A06A, "VERILINK CORP." }, + { 0x00A06B, "DMS DORSCH MIKROSYSTEM GMBH" }, + { 0x00A06C, "SHINDENGEN ELECTRIC MFG." }, + { 0x00A06D, "MANNESMANN TALLY CORPORATION" }, + { 0x00A06E, "AUSTRON, INC." }, + { 0x00A06F, "THE APPCON GROUP, INC." }, + { 0x00A070, "COASTCOM" }, + { 0x00A071, "VIDEO LOTTERY TECHNOLOGIES,INC" }, + { 0x00A072, "OVATION SYSTEMS LTD." }, + { 0x00A073, "COM21, INC." }, + { 0x00A074, "PERCEPTION TECHNOLOGY" }, + { 0x00A075, "MICRON TECHNOLOGY, INC." }, + { 0x00A076, "CARDWARE LAB, INC." }, + { 0x00A077, "FUJITSU NEXION, INC." }, + { 0x00A078, "Marconi Communications" }, + { 0x00A079, "ALPS ELECTRIC (USA), INC." }, + { 0x00A07A, "ADVANCED PERIPHERALS" }, + { 0x00A07B, "DAWN COMPUTER INCORPORATION" }, + { 0x00A07C, "TONYANG NYLON CO., LTD." }, + { 0x00A07D, "SEEQ TECHNOLOGY, INC." }, + { 0x00A07E, "AVID TECHNOLOGY, INC." }, + { 0x00A07F, "GSM-SYNTEL, LTD." }, + { 0x00A080, "ANTARES MICROSYSTEMS" }, + { 0x00A081, "ALCATEL DATA NETWORKS" }, + { 0x00A082, "NKT ELEKTRONIK A/S" }, + { 0x00A083, "ASIMMPHONY TURKEY" }, + { 0x00A084, "DATAPLEX PTY. LTD." }, + { 0x00A086, "AMBER WAVE SYSTEMS, INC." }, + { 0x00A087, "MITEL SEMICONDUCTOR, LTD." }, + { 0x00A088, "ESSENTIAL COMMUNICATIONS" }, + { 0x00A089, "XPOINT TECHNOLOGIES, INC." }, + { 0x00A08A, "BROOKTROUT TECHNOLOGY, INC." }, + { 0x00A08B, "ASTON ELECTRONIC DESIGNS LTD." }, + { 0x00A08C, "MULTIMEDIA LANS, INC." }, + { 0x00A08D, "JACOMO CORPORATION" }, + { 0x00A08E, "Nokia Internet Communications" }, + { 0x00A08F, "DESKNET SYSTEMS, INC." }, + { 0x00A090, "TIMESTEP CORPORATION" }, + { 0x00A091, "APPLICOM INTERNATIONAL" }, + { 0x00A092, "H. BOLLMANN MANUFACTURERS, LTD" }, + { 0x00A093, "B/E AEROSPACE" }, + { 0x00A094, "COMSAT CORPORATION" }, + { 0x00A095, "ACACIA NETWORKS, INC." }, + { 0x00A096, "MITSUMI ELECTRIC CO., LTD." }, + { 0x00A097, "JC INFORMATION SYSTEMS" }, + { 0x00A098, "NETWORK APPLIANCE CORP." }, + { 0x00A099, "K-NET LTD." }, + { 0x00A09A, "NIHON KOHDEN AMERICA" }, + { 0x00A09B, "QPSX COMMUNICATIONS, LTD." }, + { 0x00A09C, "XYPLEX, INC." }, + { 0x00A09D, "JOHNATHON FREEMAN TECHNOLOGIES" }, + { 0x00A09E, "ICTV" }, + { 0x00A09F, "COMMVISION CORP." }, + { 0x00A0A0, "COMPACT DATA, LTD." }, + { 0x00A0A1, "EPIC DATA INC." }, + { 0x00A0A2, "DIGICOM S.P.A." }, + { 0x00A0A3, "RELIABLE POWER METERS" }, + { 0x00A0A4, "MICROS SYSTEMS, INC." }, + { 0x00A0A5, "TEKNOR MICROSYSTEME, INC." }, + { 0x00A0A6, "M.I. SYSTEMS, K.K." }, + { 0x00A0A7, "VORAX CORPORATION" }, + { 0x00A0A8, "RENEX CORPORATION" }, + { 0x00A0A9, "GN NETTEST (CANADA) INC." }, + { 0x00A0AA, "SPACELABS MEDICAL" }, + { 0x00A0AB, "NETCS INFORMATIONSTECHNIK GMBH" }, + { 0x00A0AC, "GILAT SATELLITE NETWORKS, LTD." }, + { 0x00A0AD, "MARCONI SPA" }, + { 0x00A0AE, "NUCOM SYSTEMS, INC." }, + { 0x00A0AF, "WMS INDUSTRIES" }, + { 0x00A0B0, "I-O DATA DEVICE, INC." }, + { 0x00A0B1, "FIRST VIRTUAL CORPORATION" }, + { 0x00A0B2, "SHIMA SEIKI" }, + { 0x00A0B3, "ZYKRONIX" }, + { 0x00A0B4, "TEXAS MICROSYSTEMS, INC." }, + { 0x00A0B5, "3H TECHNOLOGY" }, + { 0x00A0B6, "SANRITZ AUTOMATION CO., LTD." }, + { 0x00A0B7, "CORDANT, INC." }, + { 0x00A0B8, "SYMBIOS LOGIC INC." }, + { 0x00A0B9, "EAGLE TECHNOLOGY, INC." }, + { 0x00A0BA, "PATTON ELECTRONICS CO." }, + { 0x00A0BB, "HILAN GMBH" }, + { 0x00A0BC, "VIASAT, INCORPORATED" }, + { 0x00A0BD, "I-TECH CORP." }, + { 0x00A0BE, "INTEGRATED CIRCUIT SYSTEMS,INC" }, + { 0x00A0BF, "WIRELESS DATA GROUP MOTOROLA" }, + { 0x00A0C0, "DIGITAL LINK CORP." }, + { 0x00A0C1, "ORTIVUS MEDICAL AB" }, + { 0x00A0C2, "R.A. SYSTEMS CO., LTD." }, + { 0x00A0C3, "UNICOMPUTER GMBH" }, + { 0x00A0C4, "CRISTIE ELECTRONICS LTD." }, + { 0x00A0C5, "ZYXEL COMMUNICATION" }, + { 0x00A0C6, "QUALCOMM INCORPORATED" }, + { 0x00A0C7, "TADIRAN TELECOMMUNICATIONS" }, + { 0x00A0C8, "ADTRAN INC." }, + { 0x00A0C9, "INTEL CORPORATION - HF1-06" }, + { 0x00A0CA, "FUJITSU DENSO LTD." }, + { 0x00A0CB, "ARK TELECOMMUNICATIONS, INC." }, + { 0x00A0CC, "LITE-ON COMMUNICATIONS, INC." }, + { 0x00A0CD, "DR. JOHANNES HEIDENHAIN GMBH" }, + { 0x00A0CE, "ASTROCOM CORPORATION" }, + { 0x00A0CF, "SOTAS, INC." }, + { 0x00A0D0, "TEN X TECHNOLOGY, INC." }, + { 0x00A0D1, "INVENTEC CORPORATION" }, + { 0x00A0D2, "ALLIED TELESIS INTERNATIONAL" }, + { 0x00A0D3, "INSTEM COMPUTER SYSTEMS, LTD." }, + { 0x00A0D4, "RADIOLAN, INC." }, + { 0x00A0D5, "SIERRA WIRELESS INC." }, + { 0x00A0D6, "SBE, INC." }, + { 0x00A0D7, "KASTEN CHASE APPLIED RESEARCH" }, + { 0x00A0D8, "SPECTRA - TEK" }, + { 0x00A0D9, "CONVEX COMPUTER CORPORATION" }, + { 0x00A0DA, "INTEGRATED SYSTEMS" }, + { 0x00A0DB, "FISHER & PAYKEL PRODUCTION" }, + { 0x00A0DC, "O.N. ELECTRONIC CO., LTD." }, + { 0x00A0DD, "AZONIX CORPORATION" }, + { 0x00A0DE, "YAMAHA CORPORATION" }, + { 0x00A0DF, "STS TECHNOLOGIES, INC." }, + { 0x00A0E0, "TENNYSON TECHNOLOGIES PTY LTD" }, + { 0x00A0E1, "WESTPORT RESEARCH" }, + { 0x00A0E2, "KEISOKU GIKEN CORP." }, + { 0x00A0E3, "XKL SYSTEMS CORP." }, + { 0x00A0E4, "OPTIQUEST" }, + { 0x00A0E5, "NHC COMMUNICATIONS" }, + { 0x00A0E6, "DIALOGIC CORPORATION" }, + { 0x00A0E7, "CENTRAL DATA CORPORATION" }, + { 0x00A0E8, "REUTERS HOLDINGS PLC" }, + { 0x00A0E9, "ELECTRONIC RETAILING SYSTEMS" }, + { 0x00A0EA, "ETHERCOM CORP." }, + { 0x00A0EB, "FASTCOMM COMMUNICATIONS CORP." }, + { 0x00A0EC, "TRANSMITTON LTD." }, + { 0x00A0ED, "PRI AUTOMATION" }, + { 0x00A0EE, "NASHOBA NETWORKS" }, + { 0x00A0EF, "LUCIDATA LTD." }, + { 0x00A0F0, "TORONTO MICROELECTRONICS INC." }, + { 0x00A0F1, "MTI" }, + { 0x00A0F2, "INFOTEK COMMUNICATIONS, INC." }, + { 0x00A0F3, "STAUBLI" }, + { 0x00A0F4, "GE" }, + { 0x00A0F5, "RADGUARD LTD." }, + { 0x00A0F6, "AUTOGAS SYSTEMS, INC." }, + { 0x00A0F7, "V.I COMPUTER CORP." }, + { 0x00A0F8, "SYMBOL TECHNOLOGIES, INC." }, + { 0x00A0F9, "BINTEC COMMUNICATIONS GMBH" }, + { 0x00A0FA, "Marconi Communication GmbH" }, + { 0x00A0FB, "TORAY ENGINEERING CO., LTD." }, + { 0x00A0FC, "IMAGE SCIENCES, INC." }, + { 0x00A0FD, "SCITEX DIGITAL PRINTING, INC." }, + { 0x00A0FE, "BOSTON TECHNOLOGY, INC." }, + { 0x00A0FF, "TELLABS OPERATIONS, INC." }, + { 0x00AA00, "INTEL CORPORATION" }, + { 0x00AA01, "INTEL CORPORATION" }, + { 0x00AA02, "INTEL CORPORATION" }, + { 0x00AA3C, "OLIVETTI TELECOM SPA (OLTECO)" }, + { 0x00B009, "Grass Valley Group" }, + { 0x00B017, "InfoGear Technology Corp." }, + { 0x00B019, "Casi-Rusco" }, + { 0x00B01C, "Westport Technologies" }, + { 0x00B01E, "Rantic Labs, Inc." }, + { 0x00B02A, "ORSYS GmbH" }, + { 0x00B02D, "ViaGate Technologies, Inc." }, + { 0x00B03B, "HiQ Networks" }, + { 0x00B048, "Marconi Communications Inc." }, + { 0x00B04A, "Cisco Systems, Inc." }, + { 0x00B052, "Intellon Corporation" }, + { 0x00B064, "Cisco Systems, Inc." }, + { 0x00B069, "Honewell Oy" }, + { 0x00B06D, "Jones Futurex Inc." }, + { 0x00B080, "Mannesmann Ipulsys B.V." }, + { 0x00B086, "LocSoft Limited" }, + { 0x00B08E, "Cisco Systems, Inc." }, + { 0x00B091, "Transmeta Corp." }, + { 0x00B094, "Alaris, Inc." }, + { 0x00B09A, "Morrow Technologies Corp." }, + { 0x00B09D, "Point Grey Research Inc." }, + { 0x00B0AC, "SIAE-Microelettronica S.p.A." }, + { 0x00B0AE, "Symmetricom" }, + { 0x00B0B3, "Xstreamis PLC" }, + { 0x00B0C2, "Cisco Systems, Inc." }, + { 0x00B0C7, "Tellabs Operations, Inc." }, + { 0x00B0CE, "TECHNOLOGY RESCUE" }, + { 0x00B0D0, "Dell Inc." }, + { 0x00B0DB, "Nextcell, Inc." }, + { 0x00B0DF, "Reliable Data Technology, Inc." }, + { 0x00B0E7, "British Federal Ltd." }, + { 0x00B0EC, "EACEM" }, + { 0x00B0EE, "Ajile Systems, Inc." }, + { 0x00B0F0, "CALY NETWORKS" }, + { 0x00B0F5, "NetWorth Technologies, Inc." }, + { 0x00BB01, "OCTOTHORPE CORP." }, + { 0x00BBF0, "UNGERMANN-BASS INC." }, + { 0x00C000, "LANOPTICS, LTD." }, + { 0x00C001, "DIATEK PATIENT MANAGMENT" }, + { 0x00C002, "SERCOMM CORPORATION" }, + { 0x00C003, "GLOBALNET COMMUNICATIONS" }, + { 0x00C004, "JAPAN BUSINESS COMPUTER CO.LTD" }, + { 0x00C005, "LIVINGSTON ENTERPRISES, INC." }, + { 0x00C006, "NIPPON AVIONICS CO., LTD." }, + { 0x00C007, "PINNACLE DATA SYSTEMS, INC." }, + { 0x00C008, "SECO SRL" }, + { 0x00C009, "KT TECHNOLOGY (S) PTE LTD" }, + { 0x00C00A, "MICRO CRAFT" }, + { 0x00C00B, "NORCONTROL A.S." }, + { 0x00C00C, "RELIA TECHNOLGIES" }, + { 0x00C00D, "ADVANCED LOGIC RESEARCH, INC." }, + { 0x00C00E, "PSITECH, INC." }, + { 0x00C00F, "QUANTUM SOFTWARE SYSTEMS LTD." }, + { 0x00C010, "HIRAKAWA HEWTECH CORP." }, + { 0x00C011, "INTERACTIVE COMPUTING DEVICES" }, + { 0x00C012, "NETSPAN CORPORATION" }, + { 0x00C013, "NETRIX" }, + { 0x00C014, "TELEMATICS CALABASAS INT'L,INC" }, + { 0x00C015, "NEW MEDIA CORPORATION" }, + { 0x00C016, "ELECTRONIC THEATRE CONTROLS" }, + { 0x00C017, "FORTE NETWORKS" }, + { 0x00C018, "LANART CORPORATION" }, + { 0x00C019, "LEAP TECHNOLOGY, INC." }, + { 0x00C01A, "COROMETRICS MEDICAL SYSTEMS" }, + { 0x00C01B, "SOCKET COMMUNICATIONS, INC." }, + { 0x00C01C, "INTERLINK COMMUNICATIONS LTD." }, + { 0x00C01D, "GRAND JUNCTION NETWORKS, INC." }, + { 0x00C01E, "LA FRANCAISE DES JEUX" }, + { 0x00C01F, "S.E.R.C.E.L." }, + { 0x00C020, "ARCO ELECTRONIC, CONTROL LTD." }, + { 0x00C021, "NETEXPRESS" }, + { 0x00C022, "LASERMASTER TECHNOLOGIES, INC." }, + { 0x00C023, "TUTANKHAMON ELECTRONICS" }, + { 0x00C024, "EDEN SISTEMAS DE COMPUTACAO SA" }, + { 0x00C025, "DATAPRODUCTS CORPORATION" }, + { 0x00C026, "LANS TECHNOLOGY CO., LTD." }, + { 0x00C027, "CIPHER SYSTEMS, INC." }, + { 0x00C028, "JASCO CORPORATION" }, + { 0x00C029, "KABEL RHEYDT AG" }, + { 0x00C02A, "OHKURA ELECTRIC CO., LTD." }, + { 0x00C02B, "GERLOFF GESELLSCHAFT FUR" }, + { 0x00C02C, "CENTRUM COMMUNICATIONS, INC." }, + { 0x00C02D, "FUJI PHOTO FILM CO., LTD." }, + { 0x00C02E, "NETWIZ" }, + { 0x00C02F, "OKUMA CORPORATION" }, + { 0x00C030, "INTEGRATED ENGINEERING B. V." }, + { 0x00C031, "DESIGN RESEARCH SYSTEMS, INC." }, + { 0x00C032, "I-CUBED LIMITED" }, + { 0x00C033, "TELEBIT COMMUNICATIONS APS" }, + { 0x00C034, "TRANSACTION NETWORK" }, + { 0x00C035, "QUINTAR COMPANY" }, + { 0x00C036, "RAYTECH ELECTRONIC CORP." }, + { 0x00C037, "DYNATEM" }, + { 0x00C038, "RASTER IMAGE PROCESSING SYSTEM" }, + { 0x00C039, "TDK SEMICONDUCTOR CORPORATION" }, + { 0x00C03A, "MEN-MIKRO ELEKTRONIK GMBH" }, + { 0x00C03B, "MULTIACCESS COMPUTING CORP." }, + { 0x00C03C, "TOWER TECH S.R.L." }, + { 0x00C03D, "WIESEMANN & THEIS GMBH" }, + { 0x00C03E, "FA. GEBR. HELLER GMBH" }, + { 0x00C03F, "STORES AUTOMATED SYSTEMS, INC." }, + { 0x00C040, "ECCI" }, + { 0x00C041, "DIGITAL TRANSMISSION SYSTEMS" }, + { 0x00C042, "DATALUX CORP." }, + { 0x00C043, "STRATACOM" }, + { 0x00C044, "EMCOM CORPORATION" }, + { 0x00C045, "ISOLATION SYSTEMS, LTD." }, + { 0x00C046, "KEMITRON LTD." }, + { 0x00C047, "UNIMICRO SYSTEMS, INC." }, + { 0x00C048, "BAY TECHNICAL ASSOCIATES" }, + { 0x00C049, "U.S. ROBOTICS, INC." }, + { 0x00C04A, "GROUP 2000 AG" }, + { 0x00C04B, "CREATIVE MICROSYSTEMS" }, + { 0x00C04C, "DEPARTMENT OF FOREIGN AFFAIRS" }, + { 0x00C04D, "MITEC, INC." }, + { 0x00C04E, "COMTROL CORPORATION" }, + { 0x00C04F, "Dell Inc." }, + { 0x00C050, "TOYO DENKI SEIZO K.K." }, + { 0x00C051, "ADVANCED INTEGRATION RESEARCH" }, + { 0x00C052, "BURR-BROWN" }, + { 0x00C053, "DAVOX CORPORATION" }, + { 0x00C054, "NETWORK PERIPHERALS, LTD." }, + { 0x00C055, "MODULAR COMPUTING TECHNOLOGIES" }, + { 0x00C056, "SOMELEC" }, + { 0x00C057, "MYCO ELECTRONICS" }, + { 0x00C058, "DATAEXPERT CORP." }, + { 0x00C059, "NIPPON DENSO CO., LTD." }, + { 0x00C05A, "SEMAPHORE COMMUNICATIONS CORP." }, + { 0x00C05B, "NETWORKS NORTHWEST, INC." }, + { 0x00C05C, "ELONEX PLC" }, + { 0x00C05D, "L&N TECHNOLOGIES" }, + { 0x00C05E, "VARI-LITE, INC." }, + { 0x00C05F, "FINE-PAL COMPANY LIMITED" }, + { 0x00C060, "ID SCANDINAVIA AS" }, + { 0x00C061, "SOLECTEK CORPORATION" }, + { 0x00C062, "IMPULSE TECHNOLOGY" }, + { 0x00C063, "MORNING STAR TECHNOLOGIES, INC" }, + { 0x00C064, "GENERAL DATACOMM IND. INC." }, + { 0x00C065, "SCOPE COMMUNICATIONS, INC." }, + { 0x00C066, "DOCUPOINT, INC." }, + { 0x00C067, "UNITED BARCODE INDUSTRIES" }, + { 0x00C068, "PHILIP DRAKE ELECTRONICS LTD." }, + { 0x00C069, "ADAPTIVE BROADBAND CORPORATION" }, + { 0x00C06A, "ZAHNER-ELEKTRIK GMBH & CO. KG" }, + { 0x00C06B, "OSI PLUS CORPORATION" }, + { 0x00C06C, "SVEC COMPUTER CORP." }, + { 0x00C06D, "BOCA RESEARCH, INC." }, + { 0x00C06E, "HAFT TECHNOLOGY, INC." }, + { 0x00C06F, "KOMATSU LTD." }, + { 0x00C070, "SECTRA SECURE-TRANSMISSION AB" }, + { 0x00C071, "AREANEX COMMUNICATIONS, INC." }, + { 0x00C072, "KNX LTD." }, + { 0x00C073, "XEDIA CORPORATION" }, + { 0x00C074, "TOYODA AUTOMATIC LOOM" }, + { 0x00C075, "XANTE CORPORATION" }, + { 0x00C076, "I-DATA INTERNATIONAL A-S" }, + { 0x00C077, "DAEWOO TELECOM LTD." }, + { 0x00C078, "COMPUTER SYSTEMS ENGINEERING" }, + { 0x00C079, "FONSYS CO.,LTD." }, + { 0x00C07A, "PRIVA B.V." }, + { 0x00C07B, "ASCEND COMMUNICATIONS, INC." }, + { 0x00C07C, "HIGHTECH INFORMATION" }, + { 0x00C07D, "RISC DEVELOPMENTS LTD." }, + { 0x00C07E, "KUBOTA CORPORATION ELECTRONIC" }, + { 0x00C07F, "NUPON COMPUTING CORP." }, + { 0x00C080, "NETSTAR, INC." }, + { 0x00C081, "METRODATA LTD." }, + { 0x00C082, "MOORE PRODUCTS CO." }, + { 0x00C083, "TRACE MOUNTAIN PRODUCTS, INC." }, + { 0x00C084, "DATA LINK CORP. LTD." }, + { 0x00C085, "ELECTRONICS FOR IMAGING, INC." }, + { 0x00C086, "THE LYNK CORPORATION" }, + { 0x00C087, "UUNET TECHNOLOGIES, INC." }, + { 0x00C088, "EKF ELEKTRONIK GMBH" }, + { 0x00C089, "TELINDUS DISTRIBUTION" }, + { 0x00C08A, "LAUTERBACH DATENTECHNIK GMBH" }, + { 0x00C08B, "RISQ MODULAR SYSTEMS, INC." }, + { 0x00C08C, "PERFORMANCE TECHNOLOGIES, INC." }, + { 0x00C08D, "TRONIX PRODUCT DEVELOPMENT" }, + { 0x00C08E, "NETWORK INFORMATION TECHNOLOGY" }, + { 0x00C08F, "MATSUSHITA ELECTRIC WORKS, LTD" }, + { 0x00C090, "PRAIM S.R.L." }, + { 0x00C091, "JABIL CIRCUIT, INC." }, + { 0x00C092, "MENNEN MEDICAL INC." }, + { 0x00C093, "ALTA RESEARCH CORP." }, + { 0x00C094, "VMX INC." }, + { 0x00C095, "ZNYX" }, + { 0x00C096, "TAMURA CORPORATION" }, + { 0x00C097, "ARCHIPEL SA" }, + { 0x00C098, "CHUNTEX ELECTRONIC CO., LTD." }, + { 0x00C099, "YOSHIKI INDUSTRIAL CO.,LTD." }, + { 0x00C09A, "PHOTONICS CORPORATION" }, + { 0x00C09B, "RELIANCE COMM/TEC, R-TEC" }, + { 0x00C09C, "TOA ELECTRONIC LTD." }, + { 0x00C09D, "DISTRIBUTED SYSTEMS INT'L, INC" }, + { 0x00C09E, "CACHE COMPUTERS, INC." }, + { 0x00C09F, "QUANTA COMPUTER, INC." }, + { 0x00C0A0, "ADVANCE MICRO RESEARCH, INC." }, + { 0x00C0A1, "TOKYO DENSHI SEKEI CO." }, + { 0x00C0A2, "INTERMEDIUM A/S" }, + { 0x00C0A3, "DUAL ENTERPRISES CORPORATION" }, + { 0x00C0A4, "UNIGRAF OY" }, + { 0x00C0A5, "DICKENS DATA SYSTEMS" }, + { 0x00C0A6, "EXICOM AUSTRALIA PTY. LTD" }, + { 0x00C0A7, "SEEL LTD." }, + { 0x00C0A8, "GVC CORPORATION" }, + { 0x00C0A9, "BARRON MCCANN LTD." }, + { 0x00C0AA, "SILICON VALLEY COMPUTER" }, + { 0x00C0AB, "Telco Systems, Inc." }, + { 0x00C0AC, "GAMBIT COMPUTER COMMUNICATIONS" }, + { 0x00C0AD, "MARBEN COMMUNICATION SYSTEMS" }, + { 0x00C0AE, "TOWERCOM CO. INC. DBA PC HOUSE" }, + { 0x00C0AF, "TEKLOGIX INC." }, + { 0x00C0B0, "GCC TECHNOLOGIES,INC." }, + { 0x00C0B1, "GENIUS NET CO." }, + { 0x00C0B2, "NORAND CORPORATION" }, + { 0x00C0B3, "COMSTAT DATACOMM CORPORATION" }, + { 0x00C0B4, "MYSON TECHNOLOGY, INC." }, + { 0x00C0B5, "CORPORATE NETWORK SYSTEMS,INC." }, + { 0x00C0B6, "MERIDIAN DATA, INC." }, + { 0x00C0B7, "AMERICAN POWER CONVERSION CORP" }, + { 0x00C0B8, "FRASER'S HILL LTD." }, + { 0x00C0B9, "FUNK SOFTWARE, INC." }, + { 0x00C0BA, "NETVANTAGE" }, + { 0x00C0BB, "FORVAL CREATIVE, INC." }, + { 0x00C0BC, "TELECOM AUSTRALIA/CSSC" }, + { 0x00C0BD, "INEX TECHNOLOGIES, INC." }, + { 0x00C0BE, "ALCATEL - SEL" }, + { 0x00C0BF, "TECHNOLOGY CONCEPTS, LTD." }, + { 0x00C0C0, "SHORE MICROSYSTEMS, INC." }, + { 0x00C0C1, "QUAD/GRAPHICS, INC." }, + { 0x00C0C2, "INFINITE NETWORKS LTD." }, + { 0x00C0C3, "ACUSON COMPUTED SONOGRAPHY" }, + { 0x00C0C4, "COMPUTER OPERATIONAL" }, + { 0x00C0C5, "SID INFORMATICA" }, + { 0x00C0C6, "PERSONAL MEDIA CORP." }, + { 0x00C0C7, "SPARKTRUM MICROSYSTEMS, INC." }, + { 0x00C0C8, "MICRO BYTE PTY. LTD." }, + { 0x00C0C9, "ELSAG BAILEY PROCESS" }, + { 0x00C0CA, "ALFA, INC." }, + { 0x00C0CB, "CONTROL TECHNOLOGY CORPORATION" }, + { 0x00C0CC, "TELESCIENCES CO SYSTEMS, INC." }, + { 0x00C0CD, "COMELTA, S.A." }, + { 0x00C0CE, "CEI SYSTEMS & ENGINEERING PTE" }, + { 0x00C0CF, "IMATRAN VOIMA OY" }, + { 0x00C0D0, "RATOC SYSTEM INC." }, + { 0x00C0D1, "COMTREE TECHNOLOGY CORPORATION" }, + { 0x00C0D2, "SYNTELLECT, INC." }, + { 0x00C0D3, "OLYMPUS IMAGE SYSTEMS, INC." }, + { 0x00C0D4, "AXON NETWORKS, INC." }, + { 0x00C0D5, "QUANCOM ELECTRONIC GMBH" }, + { 0x00C0D6, "J1 SYSTEMS, INC." }, + { 0x00C0D7, "TAIWAN TRADING CENTER DBA" }, + { 0x00C0D8, "UNIVERSAL DATA SYSTEMS" }, + { 0x00C0D9, "QUINTE NETWORK CONFIDENTIALITY" }, + { 0x00C0DA, "NICE SYSTEMS LTD." }, + { 0x00C0DB, "IPC CORPORATION (PTE) LTD." }, + { 0x00C0DC, "EOS TECHNOLOGIES, INC." }, + { 0x00C0DD, "QLogic Corporation" }, + { 0x00C0DE, "ZCOMM, INC." }, + { 0x00C0DF, "KYE SYSTEMS CORP." }, + { 0x00C0E0, "DSC COMMUNICATION CORP." }, + { 0x00C0E1, "SONIC SOLUTIONS" }, + { 0x00C0E2, "CALCOMP, INC." }, + { 0x00C0E3, "OSITECH COMMUNICATIONS, INC." }, + { 0x00C0E4, "SIEMENS BUILDING" }, + { 0x00C0E5, "GESPAC, S.A." }, + { 0x00C0E6, "Verilink Corporation" }, + { 0x00C0E7, "FIBERDATA AB" }, + { 0x00C0E8, "PLEXCOM, INC." }, + { 0x00C0E9, "OAK SOLUTIONS, LTD." }, + { 0x00C0EA, "ARRAY TECHNOLOGY LTD." }, + { 0x00C0EB, "SEH COMPUTERTECHNIK GMBH" }, + { 0x00C0EC, "DAUPHIN TECHNOLOGY" }, + { 0x00C0ED, "US ARMY ELECTRONIC" }, + { 0x00C0EE, "KYOCERA CORPORATION" }, + { 0x00C0EF, "ABIT CORPORATION" }, + { 0x00C0F0, "KINGSTON TECHNOLOGY CORP." }, + { 0x00C0F1, "SHINKO ELECTRIC CO., LTD." }, + { 0x00C0F2, "TRANSITION NETWORKS" }, + { 0x00C0F3, "NETWORK COMMUNICATIONS CORP." }, + { 0x00C0F4, "INTERLINK SYSTEM CO., LTD." }, + { 0x00C0F5, "METACOMP, INC." }, + { 0x00C0F6, "CELAN TECHNOLOGY INC." }, + { 0x00C0F7, "ENGAGE COMMUNICATION, INC." }, + { 0x00C0F8, "ABOUT COMPUTING INC." }, + { 0x00C0F9, "HARRIS AND JEFFRIES, INC." }, + { 0x00C0FA, "CANARY COMMUNICATIONS, INC." }, + { 0x00C0FB, "ADVANCED TECHNOLOGY LABS" }, + { 0x00C0FC, "ELASTIC REALITY, INC." }, + { 0x00C0FD, "PROSUM" }, + { 0x00C0FE, "APTEC COMPUTER SYSTEMS, INC." }, + { 0x00C0FF, "DOT HILL SYSTEMS CORPORATION" }, + { 0x00CBBD, "Cambridge Broadband Ltd." }, + { 0x00CF1C, "COMMUNICATION MACHINERY CORP." }, + { 0x00D000, "FERRAN SCIENTIFIC, INC." }, + { 0x00D001, "VST TECHNOLOGIES, INC." }, + { 0x00D002, "DITECH CORPORATION" }, + { 0x00D003, "COMDA ENTERPRISES CORP." }, + { 0x00D004, "PENTACOM LTD." }, + { 0x00D005, "ZHS ZEITMANAGEMENTSYSTEME" }, + { 0x00D006, "CISCO SYSTEMS, INC." }, + { 0x00D007, "MIC ASSOCIATES, INC." }, + { 0x00D008, "MACTELL CORPORATION" }, + { 0x00D009, "HSING TECH. ENTERPRISE CO. LTD" }, + { 0x00D00A, "LANACCESS TELECOM S.A." }, + { 0x00D00B, "RHK TECHNOLOGY, INC." }, + { 0x00D00C, "SNIJDER MICRO SYSTEMS" }, + { 0x00D00D, "MICROMERITICS INSTRUMENT" }, + { 0x00D00E, "PLURIS, INC." }, + { 0x00D00F, "SPEECH DESIGN GMBH" }, + { 0x00D010, "CONVERGENT NETWORKS, INC." }, + { 0x00D011, "PRISM VIDEO, INC." }, + { 0x00D012, "GATEWORKS CORP." }, + { 0x00D013, "PRIMEX AEROSPACE COMPANY" }, + { 0x00D014, "ROOT, INC." }, + { 0x00D015, "UNIVEX MICROTECHNOLOGY CORP." }, + { 0x00D016, "SCM MICROSYSTEMS, INC." }, + { 0x00D017, "SYNTECH INFORMATION CO., LTD." }, + { 0x00D018, "QWES. COM, INC." }, + { 0x00D019, "DAINIPPON SCREEN CORPORATE" }, + { 0x00D01A, "URMET SUD S.P.A." }, + { 0x00D01B, "MIMAKI ENGINEERING CO., LTD." }, + { 0x00D01C, "SBS TECHNOLOGIES," }, + { 0x00D01D, "FURUNO ELECTRIC CO., LTD." }, + { 0x00D01E, "PINGTEL CORP." }, + { 0x00D01F, "CTAM PTY. LTD." }, + { 0x00D020, "AIM SYSTEM, INC." }, + { 0x00D021, "REGENT ELECTRONICS CORP." }, + { 0x00D022, "INCREDIBLE TECHNOLOGIES, INC." }, + { 0x00D023, "INFORTREND TECHNOLOGY, INC." }, + { 0x00D024, "Cognex Corporation" }, + { 0x00D025, "XROSSTECH, INC." }, + { 0x00D026, "HIRSCHMANN AUSTRIA GMBH" }, + { 0x00D027, "APPLIED AUTOMATION, INC." }, + { 0x00D028, "OMNEON VIDEO NETWORKS" }, + { 0x00D029, "WAKEFERN FOOD CORPORATION" }, + { 0x00D02A, "FLEXION SYSTEMS" }, + { 0x00D02B, "JETCELL, INC." }, + { 0x00D02C, "CAMPBELL SCIENTIFIC, INC." }, + { 0x00D02D, "ADEMCO" }, + { 0x00D02E, "COMMUNICATION AUTOMATION CORP." }, + { 0x00D02F, "VLSI TECHNOLOGY INC." }, + { 0x00D030, "SAFETRAN SYSTEMS CORP." }, + { 0x00D031, "INDUSTRIAL LOGIC CORPORATION" }, + { 0x00D032, "YANO ELECTRIC CO., LTD." }, + { 0x00D033, "DALIAN DAXIAN NETWORK" }, + { 0x00D034, "ORMEC SYSTEMS CORP." }, + { 0x00D035, "BEHAVIOR TECH. COMPUTER CORP." }, + { 0x00D036, "TECHNOLOGY ATLANTA CORP." }, + { 0x00D037, "PHILIPS-DVS-LO BDR" }, + { 0x00D038, "FIVEMERE, LTD." }, + { 0x00D039, "UTILICOM, INC." }, + { 0x00D03A, "ZONEWORX, INC." }, + { 0x00D03B, "VISION PRODUCTS PTY. LTD." }, + { 0x00D03C, "Vieo, Inc." }, + { 0x00D03E, "ROCKETCHIPS, INC." }, + { 0x00D03F, "AMERICAN COMMUNICATION" }, + { 0x00D040, "SYSMATE CO., LTD." }, + { 0x00D041, "AMIGO TECHNOLOGY CO., LTD." }, + { 0x00D042, "MAHLO GMBH & CO. UG" }, + { 0x00D043, "ZONAL RETAIL DATA SYSTEMS" }, + { 0x00D044, "ALIDIAN NETWORKS, INC." }, + { 0x00D045, "KVASER AB" }, + { 0x00D046, "DOLBY LABORATORIES, INC." }, + { 0x00D047, "XN TECHNOLOGIES" }, + { 0x00D048, "ECTON, INC." }, + { 0x00D049, "IMPRESSTEK CO., LTD." }, + { 0x00D04A, "PRESENCE TECHNOLOGY GMBH" }, + { 0x00D04B, "LA CIE GROUP S.A." }, + { 0x00D04C, "EUROTEL TELECOM LTD." }, + { 0x00D04D, "DIV OF RESEARCH & STATISTICS" }, + { 0x00D04E, "LOGIBAG" }, + { 0x00D04F, "BITRONICS, INC." }, + { 0x00D050, "ISKRATEL" }, + { 0x00D051, "O2 MICRO, INC." }, + { 0x00D052, "ASCEND COMMUNICATIONS, INC." }, + { 0x00D053, "CONNECTED SYSTEMS" }, + { 0x00D054, "SAS INSTITUTE INC." }, + { 0x00D055, "KATHREIN-WERKE KG" }, + { 0x00D056, "SOMAT CORPORATION" }, + { 0x00D057, "ULTRAK, INC." }, + { 0x00D058, "CISCO SYSTEMS, INC." }, + { 0x00D059, "AMBIT MICROSYSTEMS CORP." }, + { 0x00D05A, "SYMBIONICS, LTD." }, + { 0x00D05B, "ACROLOOP MOTION CONTROL" }, + { 0x00D05C, "TECHNOTREND SYSTEMTECHNIK GMBH" }, + { 0x00D05D, "INTELLIWORXX, INC." }, + { 0x00D05E, "STRATABEAM TECHNOLOGY, INC." }, + { 0x00D05F, "VALCOM, INC." }, + { 0x00D060, "PANASONIC EUROPEAN" }, + { 0x00D061, "TREMON ENTERPRISES CO., LTD." }, + { 0x00D062, "DIGIGRAM" }, + { 0x00D063, "CISCO SYSTEMS, INC." }, + { 0x00D064, "MULTITEL" }, + { 0x00D065, "TOKO ELECTRIC" }, + { 0x00D066, "WINTRISS ENGINEERING CORP." }, + { 0x00D067, "CAMPIO COMMUNICATIONS" }, + { 0x00D068, "IWILL CORPORATION" }, + { 0x00D069, "TECHNOLOGIC SYSTEMS" }, + { 0x00D06A, "LINKUP SYSTEMS CORPORATION" }, + { 0x00D06B, "SR TELECOM INC." }, + { 0x00D06C, "SHAREWAVE, INC." }, + { 0x00D06D, "ACRISON, INC." }, + { 0x00D06E, "TRENDVIEW RECORDERS LTD." }, + { 0x00D06F, "KMC CONTROLS" }, + { 0x00D070, "LONG WELL ELECTRONICS CORP." }, + { 0x00D071, "ECHELON CORP." }, + { 0x00D072, "BROADLOGIC" }, + { 0x00D073, "ACN ADVANCED COMMUNICATIONS" }, + { 0x00D074, "TAQUA SYSTEMS, INC." }, + { 0x00D075, "ALARIS MEDICAL SYSTEMS, INC." }, + { 0x00D076, "MERRILL LYNCH & CO., INC." }, + { 0x00D077, "LUCENT TECHNOLOGIES" }, + { 0x00D078, "ELTEX OF SWEDEN AB" }, + { 0x00D079, "CISCO SYSTEMS, INC." }, + { 0x00D07A, "AMAQUEST COMPUTER CORP." }, + { 0x00D07B, "COMCAM INTERNATIONAL LTD." }, + { 0x00D07C, "KOYO ELECTRONICS INC. CO.,LTD." }, + { 0x00D07D, "COSINE COMMUNICATIONS" }, + { 0x00D07E, "KEYCORP LTD." }, + { 0x00D07F, "STRATEGY & TECHNOLOGY, LIMITED" }, + { 0x00D080, "EXABYTE CORPORATION" }, + { 0x00D081, "REAL TIME DEVICES USA, INC." }, + { 0x00D082, "IOWAVE INC." }, + { 0x00D083, "INVERTEX, INC." }, + { 0x00D084, "NEXCOMM SYSTEMS, INC." }, + { 0x00D085, "OTIS ELEVATOR COMPANY" }, + { 0x00D086, "FOVEON, INC." }, + { 0x00D087, "MICROFIRST INC." }, + { 0x00D088, "MAINSAIL NETWORKS, INC." }, + { 0x00D089, "DYNACOLOR, INC." }, + { 0x00D08A, "PHOTRON USA" }, + { 0x00D08B, "ADVA Limited" }, + { 0x00D08C, "GENOA TECHNOLOGY, INC." }, + { 0x00D08D, "PHOENIX GROUP, INC." }, + { 0x00D08E, "NVISION INC." }, + { 0x00D08F, "ARDENT TECHNOLOGIES, INC." }, + { 0x00D090, "CISCO SYSTEMS, INC." }, + { 0x00D091, "SMARTSAN SYSTEMS, INC." }, + { 0x00D092, "GLENAYRE WESTERN MULTIPLEX" }, + { 0x00D093, "TQ - COMPONENTS GMBH" }, + { 0x00D094, "TIMELINE VISTA, INC." }, + { 0x00D095, "XYLAN CORPORATION" }, + { 0x00D096, "3COM EUROPE LTD." }, + { 0x00D097, "CISCO SYSTEMS, INC." }, + { 0x00D098, "IPS AUTOMATION" }, + { 0x00D099, "ELCARD OY" }, + { 0x00D09A, "FILANET CORPORATION" }, + { 0x00D09B, "SPECTEL LTD." }, + { 0x00D09C, "KAPADIA COMMUNICATIONS" }, + { 0x00D09D, "VERIS INDUSTRIES" }, + { 0x00D09E, "2WIRE, INC." }, + { 0x00D09F, "NOVTEK TEST SYSTEMS" }, + { 0x00D0A0, "MIPS DENMARK" }, + { 0x00D0A1, "OSKAR VIERLING GMBH + CO. KG" }, + { 0x00D0A2, "INTEGRATED DEVICE" }, + { 0x00D0A3, "VOCAL DATA, INC." }, + { 0x00D0A4, "ALANTRO COMMUNICATIONS" }, + { 0x00D0A5, "AMERICAN ARIUM" }, + { 0x00D0A6, "LANBIRD TECHNOLOGY CO., LTD." }, + { 0x00D0A7, "TOKYO SOKKI KENKYUJO CO., LTD." }, + { 0x00D0A8, "NETWORK ENGINES, INC." }, + { 0x00D0A9, "SHINANO KENSHI CO., LTD." }, + { 0x00D0AA, "CHASE COMMUNICATIONS" }, + { 0x00D0AB, "DELTAKABEL TELECOM CV" }, + { 0x00D0AC, "GRAYSON WIRELESS" }, + { 0x00D0AD, "TL INDUSTRIES" }, + { 0x00D0AE, "ORESIS COMMUNICATIONS, INC." }, + { 0x00D0AF, "CUTLER-HAMMER, INC." }, + { 0x00D0B0, "BITSWITCH LTD." }, + { 0x00D0B1, "OMEGA ELECTRONICS SA" }, + { 0x00D0B2, "XIOTECH CORPORATION" }, + { 0x00D0B3, "DRS FLIGHT SAFETY AND" }, + { 0x00D0B4, "KATSUJIMA CO., LTD." }, + { 0x00D0B5, "DOTCOM" }, + { 0x00D0B6, "CRESCENT NETWORKS, INC." }, + { 0x00D0B7, "INTEL CORPOTATION" }, + { 0x00D0B8, "IOMEGA CORP." }, + { 0x00D0B9, "MICROTEK INTERNATIONAL, INC." }, + { 0x00D0BA, "CISCO SYSTEMS, INC." }, + { 0x00D0BB, "CISCO SYSTEMS, INC." }, + { 0x00D0BC, "CISCO SYSTEMS, INC." }, + { 0x00D0BD, "SICAN GMBH" }, + { 0x00D0BE, "EMUTEC INC." }, + { 0x00D0BF, "PIVOTAL TECHNOLOGIES" }, + { 0x00D0C0, "CISCO SYSTEMS, INC." }, + { 0x00D0C1, "HARMONIC DATA SYSTEMS, LTD." }, + { 0x00D0C2, "BALTHAZAR TECHNOLOGY AB" }, + { 0x00D0C3, "VIVID TECHNOLOGY PTE, LTD." }, + { 0x00D0C4, "TERATECH CORPORATION" }, + { 0x00D0C5, "COMPUTATIONAL SYSTEMS, INC." }, + { 0x00D0C6, "THOMAS & BETTS CORP." }, + { 0x00D0C7, "PATHWAY, INC." }, + { 0x00D0C8, "I/O CONSULTING A/S" }, + { 0x00D0C9, "ADVANTECH CO., LTD." }, + { 0x00D0CA, "INTRINSYC SOFTWARE INC." }, + { 0x00D0CB, "DASAN CO., LTD." }, + { 0x00D0CC, "TECHNOLOGIES LYRE INC." }, + { 0x00D0CD, "ATAN TECHNOLOGY INC." }, + { 0x00D0CE, "ASYST ELECTRONIC" }, + { 0x00D0CF, "MORETON BAY" }, + { 0x00D0D0, "ZHONGXING TELECOM LTD." }, + { 0x00D0D1, "SIROCCO SYSTEMS, INC." }, + { 0x00D0D2, "EPILOG CORPORATION" }, + { 0x00D0D3, "CISCO SYSTEMS, INC." }, + { 0x00D0D4, "V-BITS, INC." }, + { 0x00D0D5, "GRUNDIG AG" }, + { 0x00D0D6, "AETHRA TELECOMUNICAZIONI" }, + { 0x00D0D7, "B2C2, INC." }, + { 0x00D0D8, "3Com Corporation" }, + { 0x00D0D9, "DEDICATED MICROCOMPUTERS" }, + { 0x00D0DA, "TAICOM DATA SYSTEMS CO., LTD." }, + { 0x00D0DB, "MCQUAY INTERNATIONAL" }, + { 0x00D0DC, "MODULAR MINING SYSTEMS, INC." }, + { 0x00D0DD, "SUNRISE TELECOM, INC." }, + { 0x00D0DE, "PHILIPS MULTIMEDIA NETWORK" }, + { 0x00D0DF, "KUZUMI ELECTRONICS, INC." }, + { 0x00D0E0, "DOOIN ELECTRONICS CO." }, + { 0x00D0E1, "AVIONITEK ISRAEL INC." }, + { 0x00D0E2, "MRT MICRO, INC." }, + { 0x00D0E3, "ELE-CHEM ENGINEERING CO., LTD." }, + { 0x00D0E4, "CISCO SYSTEMS, INC." }, + { 0x00D0E5, "SOLIDUM SYSTEMS CORP." }, + { 0x00D0E6, "IBOND INC." }, + { 0x00D0E7, "VCON TELECOMMUNICATION LTD." }, + { 0x00D0E8, "MAC SYSTEM CO., LTD." }, + { 0x00D0E9, "ADVANTAGE CENTURY" }, + { 0x00D0EA, "NEXTONE COMMUNICATIONS, INC." }, + { 0x00D0EB, "LIGHTERA NETWORKS, INC." }, + { 0x00D0EC, "NAKAYO TELECOMMUNICATIONS, INC" }, + { 0x00D0ED, "XIOX" }, + { 0x00D0EE, "DICTAPHONE CORPORATION" }, + { 0x00D0EF, "IGT" }, + { 0x00D0F0, "CONVISION TECHNOLOGY GMBH" }, + { 0x00D0F1, "SEGA ENTERPRISES, LTD." }, + { 0x00D0F2, "MONTEREY NETWORKS" }, + { 0x00D0F3, "SOLARI DI UDINE SPA" }, + { 0x00D0F4, "CARINTHIAN TECH INSTITUTE" }, + { 0x00D0F5, "ORANGE MICRO, INC." }, + { 0x00D0F6, "NORTHCHURCH COMMUNICATIONS INC" }, + { 0x00D0F7, "NEXT NETS CORPORATION" }, + { 0x00D0F8, "FUJIAN STAR TERMINAL" }, + { 0x00D0F9, "ACUTE COMMUNICATIONS CORP." }, + { 0x00D0FA, "RACAL GUARDATA" }, + { 0x00D0FB, "TEK MICROSYSTEMS, INCORPORATED" }, + { 0x00D0FC, "GRANITE MICROSYSTEMS" }, + { 0x00D0FD, "OPTIMA TELE.COM, INC." }, + { 0x00D0FE, "ASTRAL POINT" }, + { 0x00D0FF, "CISCO SYSTEMS, INC." }, + { 0x00DD00, "UNGERMANN-BASS INC." }, + { 0x00DD01, "UNGERMANN-BASS INC." }, + { 0x00DD02, "UNGERMANN-BASS INC." }, + { 0x00DD03, "UNGERMANN-BASS INC." }, + { 0x00DD04, "UNGERMANN-BASS INC." }, + { 0x00DD05, "UNGERMANN-BASS INC." }, + { 0x00DD06, "UNGERMANN-BASS INC." }, + { 0x00DD07, "UNGERMANN-BASS INC." }, + { 0x00DD08, "UNGERMANN-BASS INC." }, + { 0x00DD09, "UNGERMANN-BASS INC." }, + { 0x00DD0A, "UNGERMANN-BASS INC." }, + { 0x00DD0B, "UNGERMANN-BASS INC." }, + { 0x00DD0C, "UNGERMANN-BASS INC." }, + { 0x00DD0D, "UNGERMANN-BASS INC." }, + { 0x00DD0E, "UNGERMANN-BASS INC." }, + { 0x00DD0F, "UNGERMANN-BASS INC." }, + { 0x00E000, "FUJITSU, LTD" }, + { 0x00E001, "STRAND LIGHTING LIMITED" }, + { 0x00E002, "CROSSROADS SYSTEMS, INC." }, + { 0x00E003, "NOKIA WIRELESS BUSINESS COMMUN" }, + { 0x00E004, "PMC-SIERRA, INC." }, + { 0x00E005, "TECHNICAL CORP." }, + { 0x00E006, "SILICON INTEGRATED SYS. CORP." }, + { 0x00E007, "NETWORK ALCHEMY LTD." }, + { 0x00E008, "AMAZING CONTROLS! INC." }, + { 0x00E009, "MARATHON TECHNOLOGIES CORP." }, + { 0x00E00A, "DIBA, INC." }, + { 0x00E00B, "ROOFTOP COMMUNICATIONS CORP." }, + { 0x00E00C, "MOTOROLA" }, + { 0x00E00D, "RADIANT SYSTEMS" }, + { 0x00E00E, "AVALON IMAGING SYSTEMS, INC." }, + { 0x00E00F, "SHANGHAI BAUD DATA" }, + { 0x00E010, "HESS SB-AUTOMATENBAU GMBH" }, + { 0x00E011, "UNIDEN SAN DIEGO" }, + { 0x00E012, "PLUTO TECHNOLOGIES" }, + { 0x00E013, "EASTERN ELECTRONIC CO., LTD." }, + { 0x00E014, "CISCO SYSTEMS, INC." }, + { 0x00E015, "HEIWA CORPORATION" }, + { 0x00E016, "RAPID CITY COMMUNICATIONS" }, + { 0x00E017, "EXXACT GMBH" }, + { 0x00E018, "ASUSTEK COMPUTER INC." }, + { 0x00E019, "ING. GIORDANO ELETTRONICA" }, + { 0x00E01A, "COMTEC SYSTEMS. CO., LTD." }, + { 0x00E01B, "SPHERE COMMUNICATIONS, INC." }, + { 0x00E01C, "MOBILITY ELECTRONICSY" }, + { 0x00E01D, "WEBTV NETWORKS, INC." }, + { 0x00E01E, "CISCO SYSTEMS, INC." }, + { 0x00E01F, "AVIDIA SYSTEMS, INC." }, + { 0x00E020, "TECNOMEN OY" }, + { 0x00E021, "FREEGATE CORP." }, + { 0x00E022, "MEDIALIGHT INC." }, + { 0x00E023, "TELRAD" }, + { 0x00E024, "GADZOOX NETWORKS" }, + { 0x00E025, "DIT CO., LTD." }, + { 0x00E026, "EASTMAN KODAK CO." }, + { 0x00E027, "DUX, INC." }, + { 0x00E028, "APTIX CORPORATION" }, + { 0x00E029, "STANDARD MICROSYSTEMS CORP." }, + { 0x00E02A, "TANDBERG TELEVISION AS" }, + { 0x00E02B, "EXTREME NETWORKS" }, + { 0x00E02C, "AST COMPUTER" }, + { 0x00E02D, "INNOMEDIALOGIC, INC." }, + { 0x00E02E, "SPC ELECTRONICS CORPORATION" }, + { 0x00E02F, "MCNS HOLDINGS, L.P." }, + { 0x00E030, "MELITA INTERNATIONAL CORP." }, + { 0x00E031, "HAGIWARA ELECTRIC CO., LTD." }, + { 0x00E032, "MISYS FINANCIAL SYSTEMS, LTD." }, + { 0x00E033, "E.E.P.D. GMBH" }, + { 0x00E034, "CISCO SYSTEMS, INC." }, + { 0x00E035, "LOUGHBOROUGH SOUND IMAGES, PLC" }, + { 0x00E036, "PIONEER CORPORATION" }, + { 0x00E037, "CENTURY CORPORATION" }, + { 0x00E038, "PROXIMA CORPORATION" }, + { 0x00E039, "PARADYNE CORP." }, + { 0x00E03A, "CABLETRON SYSTEMS, INC." }, + { 0x00E03B, "PROMINET CORPORATION" }, + { 0x00E03C, "ADVANSYS" }, + { 0x00E03D, "FOCON ELECTRONIC SYSTEMS A/S" }, + { 0x00E03E, "ALFATECH, INC." }, + { 0x00E03F, "JATON CORPORATION" }, + { 0x00E040, "DESKSTATION TECHNOLOGY, INC." }, + { 0x00E041, "CSPI" }, + { 0x00E042, "PACOM DATA LTD." }, + { 0x00E043, "VITALCOM" }, + { 0x00E044, "LSICS CORPORATION" }, + { 0x00E045, "TOUCHWAVE, INC." }, + { 0x00E046, "BENTLY NEVADA CORP." }, + { 0x00E047, "INFOCUS SYSTEMS" }, + { 0x00E048, "SDL COMMUNICATIONS, INC." }, + { 0x00E049, "MICROWI ELECTRONIC GMBH" }, + { 0x00E04A, "ENHANCED MESSAGING SYSTEMS,INC" }, + { 0x00E04B, "JUMP INDUSTRIELLE" }, + { 0x00E04C, "REALTEK SEMICONDUCTOR CORP." }, + { 0x00E04D, "INTERNET INITIATIVE JAPAN, INC" }, + { 0x00E04E, "SANYO DENKI CO., LTD." }, + { 0x00E04F, "CISCO SYSTEMS, INC." }, + { 0x00E050, "EXECUTONE INFORMATION" }, + { 0x00E051, "TALX CORPORATION" }, + { 0x00E052, "FOUNDRY NETWORKS, INC." }, + { 0x00E053, "CELLPORT LABS, INC." }, + { 0x00E054, "KODAI HITEC CO., LTD." }, + { 0x00E055, "INGENIERIA ELECTRONICA" }, + { 0x00E056, "HOLONTECH CORPORATION" }, + { 0x00E057, "HAN MICROTELECOM. CO., LTD." }, + { 0x00E058, "PHASE ONE DENMARK A/S" }, + { 0x00E059, "CONTROLLED ENVIRONMENTS, LTD." }, + { 0x00E05A, "GALEA NETWORK SECURITY" }, + { 0x00E05B, "WEST END SYSTEMS CORP." }, + { 0x00E05C, "MATSUSHITA KOTOBUKI" }, + { 0x00E05D, "UNITEC CO., LTD." }, + { 0x00E05E, "JAPAN AVIATION ELECTRONICS" }, + { 0x00E05F, "E-NET, INC." }, + { 0x00E060, "SHERWOOD" }, + { 0x00E061, "EDGEPOINT NETWORKS, INC." }, + { 0x00E062, "HOST ENGINEERING" }, + { 0x00E063, "CABLETRON - YAGO SYSTEMS, INC." }, + { 0x00E064, "SAMSUNG ELECTRONICS" }, + { 0x00E065, "OPTICAL ACCESS INTERNATIONAL" }, + { 0x00E066, "PROMAX SYSTEMS, INC." }, + { 0x00E067, "EAC AUTOMATION-CONSULTING GMBH" }, + { 0x00E068, "MERRIMAC SYSTEMS INC." }, + { 0x00E069, "JAYCOR NETWORKS, INC." }, + { 0x00E06A, "KAPSCH AG" }, + { 0x00E06B, "W&G SPECIAL PRODUCTS" }, + { 0x00E06C, "BALTIMORE TECHNOLOGIES, LTD." }, + { 0x00E06D, "COMPUWARE CORPORATION" }, + { 0x00E06E, "FAR SYSTEMS SPA" }, + { 0x00E06F, "TERAYON CORP." }, + { 0x00E070, "DH TECHNOLOGY" }, + { 0x00E071, "EPIS MICROCOMPUTER" }, + { 0x00E072, "LYNK" }, + { 0x00E073, "NATIONAL AMUSEMENT" }, + { 0x00E074, "TIERNAN COMMUNICATIONS, INC." }, + { 0x00E075, "ATLAS COMPUTER EQUIPMENT, INC." }, + { 0x00E076, "DEVELOPMENT CONCEPTS, INC." }, + { 0x00E077, "WEBGEAR, INC." }, + { 0x00E078, "BERKELEY NETWORKS" }, + { 0x00E079, "A.T.N.R." }, + { 0x00E07A, "MIKRODIDAKT AB" }, + { 0x00E07B, "BAY NETWORKS" }, + { 0x00E07C, "METTLER-TOLEDO, INC." }, + { 0x00E07D, "NETRONIX, INC." }, + { 0x00E07E, "WALT DISNEY IMAGINEERING" }, + { 0x00E07F, "LOGISTISTEM SRL" }, + { 0x00E080, "CONTROL RESOURCES CORPORATION" }, + { 0x00E081, "TYAN COMPUTER CORP." }, + { 0x00E082, "ANERMA" }, + { 0x00E083, "JATO TECHNOLOGIES, INC." }, + { 0x00E084, "COMPULITE R&D" }, + { 0x00E085, "GLOBAL MAINTECH, INC." }, + { 0x00E086, "CYBEX COMPUTER PRODUCTS" }, + { 0x00E087, "LECROY" }, + { 0x00E088, "LTX CORPORATION" }, + { 0x00E089, "ION Networks, Inc." }, + { 0x00E08A, "GEC AVERY, LTD." }, + { 0x00E08B, "QLOGIC CORP." }, + { 0x00E08C, "NEOPARADIGM LABS, INC." }, + { 0x00E08D, "PRESSURE SYSTEMS, INC." }, + { 0x00E08E, "UTSTARCOM" }, + { 0x00E08F, "CISCO SYSTEMS, INC." }, + { 0x00E090, "BECKMAN LAB. AUTOMATION DIV." }, + { 0x00E091, "LG ELECTRONICS, INC." }, + { 0x00E092, "ADMTEK INCORPORATED" }, + { 0x00E093, "ACKFIN NETWORKS" }, + { 0x00E094, "OSAI SRL" }, + { 0x00E095, "ADVANCED-VISION TECHNOLGIES" }, + { 0x00E096, "SHIMADZU CORPORATION" }, + { 0x00E097, "CARRIER ACCESS CORPORATION" }, + { 0x00E098, "ABOCOM SYSTEMS, INC." }, + { 0x00E099, "SAMSON AG" }, + { 0x00E09A, "POSITRON INDUSTRIES, INC." }, + { 0x00E09B, "ENGAGE NETWORKS, INC." }, + { 0x00E09C, "MII" }, + { 0x00E09D, "SARNOFF CORPORATION" }, + { 0x00E09E, "QUANTUM CORPORATION" }, + { 0x00E09F, "PIXEL VISION" }, + { 0x00E0A0, "WILTRON CO." }, + { 0x00E0A1, "HIMA PAUL HILDEBRANDT" }, + { 0x00E0A2, "MICROSLATE INC." }, + { 0x00E0A3, "CISCO SYSTEMS, INC." }, + { 0x00E0A4, "ESAOTE S.P.A." }, + { 0x00E0A5, "COMCORE SEMICONDUCTOR, INC." }, + { 0x00E0A6, "TELOGY NETWORKS, INC." }, + { 0x00E0A7, "IPC INFORMATION SYSTEMS, INC." }, + { 0x00E0A8, "SAT GMBH&CO" }, + { 0x00E0A9, "FUNAI ELECTRIC CO., LTD." }, + { 0x00E0AA, "ELECTROSONIC LTD." }, + { 0x00E0AB, "DIMAT S.A." }, + { 0x00E0AC, "MIDSCO, INC." }, + { 0x00E0AD, "EES TECHNOLOGY, LTD." }, + { 0x00E0AE, "XAQTI CORPORATION" }, + { 0x00E0AF, "GENERAL DYNAMICS INFORMATION" }, + { 0x00E0B0, "CISCO SYSTEMS, INC." }, + { 0x00E0B1, "PACKET ENGINES, INC." }, + { 0x00E0B2, "TELMAX COMMUNICATIONS CORP." }, + { 0x00E0B3, "ETHERWAN SYSTEMS, INC." }, + { 0x00E0B4, "TECHNO SCOPE CO., LTD." }, + { 0x00E0B5, "ARDENT COMMUNICATIONS CORP." }, + { 0x00E0B6, "Entrada Networks" }, + { 0x00E0B7, "PI GROUP, LTD." }, + { 0x00E0B8, "GATEWAY 2000" }, + { 0x00E0B9, "BYAS SYSTEMS" }, + { 0x00E0BA, "BERGHOF AUTOMATIONSTECHNIK" }, + { 0x00E0BB, "NBX CORPORATION" }, + { 0x00E0BC, "SYMON COMMUNICATIONS, INC." }, + { 0x00E0BD, "INTERFACE SYSTEMS, INC." }, + { 0x00E0BE, "GENROCO INTERNATIONAL, INC." }, + { 0x00E0BF, "TORRENT NETWORKING" }, + { 0x00E0C0, "SEIWA ERECTRIC MFG. CO., LTD." }, + { 0x00E0C1, "MEMOREX TELEX JAPAN, LTD." }, + { 0x00E0C2, "NECSY SPA" }, + { 0x00E0C3, "SAKAI SYSTEM DEVELOPMENT CORP." }, + { 0x00E0C4, "HORNER ELECTRIC, INC." }, + { 0x00E0C5, "BCOM ELECTRONICS INC." }, + { 0x00E0C6, "LINK2IT, L.L.C." }, + { 0x00E0C7, "EUROTECH SRL" }, + { 0x00E0C8, "VIRTUAL ACCESS, LTD." }, + { 0x00E0C9, "AUTOMATEDLOGIC CORPORATION" }, + { 0x00E0CA, "BEST DATA PRODUCTS" }, + { 0x00E0CB, "RESON, INC." }, + { 0x00E0CC, "HERO SYSTEMS, LTD." }, + { 0x00E0CD, "SENSIS CORPORATION" }, + { 0x00E0CE, "ARN" }, + { 0x00E0CF, "INTEGRATED DEVICE" }, + { 0x00E0D0, "NETSPEED, INC." }, + { 0x00E0D1, "TELSIS LIMITED" }, + { 0x00E0D2, "VERSANET COMMUNICATIONS, INC." }, + { 0x00E0D3, "DATENTECHNIK GMBH" }, + { 0x00E0D4, "EXCELLENT COMPUTER" }, + { 0x00E0D5, "ARCXEL TECHNOLOGIES, INC." }, + { 0x00E0D6, "COMPUTER & COMMUNICATION" }, + { 0x00E0D7, "SUNSHINE ELECTRONICS, INC." }, + { 0x00E0D8, "LANBIT COMPUTER, INC." }, + { 0x00E0D9, "TAZMO CO., LTD." }, + { 0x00E0DA, "ASSURED ACCESS" }, + { 0x00E0DB, "VIAVIDEO COMMUNICATIONS" }, + { 0x00E0DC, "NEXWARE CORP." }, + { 0x00E0DD, "ZENITH ELECTRONICS CORPORATION" }, + { 0x00E0DE, "DATAX NV" }, + { 0x00E0DF, "KE KOMMUNIKATIONS-ELECTRONIK" }, + { 0x00E0E0, "SI ELECTRONICS, LTD." }, + { 0x00E0E1, "G2 NETWORKS, ILNC." }, + { 0x00E0E2, "INNOVA CORP." }, + { 0x00E0E3, "SK-ELEKTRONIK GMBH" }, + { 0x00E0E4, "FANUC ROBOTICS NORTH AMERICA," }, + { 0x00E0E5, "CINCO NETWORKS, INC." }, + { 0x00E0E6, "INCAA DATACOM B.V." }, + { 0x00E0E7, "RAYTHEON E-SYSTEMS, INC." }, + { 0x00E0E8, "GRETACODER DATA SYSTEMS AG" }, + { 0x00E0E9, "DATA LABS, INC." }, + { 0x00E0EA, "INNOVAT COMMUNICATIONS, INC." }, + { 0x00E0EB, "DIGICOM SYSTEMS, INCORPORATED" }, + { 0x00E0EC, "CELESTICA INC." }, + { 0x00E0ED, "SILICOM, LTD." }, + { 0x00E0EE, "MAREL HF" }, + { 0x00E0EF, "DIONEX" }, + { 0x00E0F0, "ABLER TECHNOLOGY, INC." }, + { 0x00E0F1, "THAT CORPORATION" }, + { 0x00E0F2, "ARLOTTO COMNET, INC." }, + { 0x00E0F3, "WEBSPRINT COMMUNICATIONS, INC." }, + { 0x00E0F4, "INSIDE TECHNOLOGY A/S" }, + { 0x00E0F5, "TELES AG" }, + { 0x00E0F6, "DECISION EUROPE" }, + { 0x00E0F7, "CISCO SYSTEMS, INC." }, + { 0x00E0F8, "DIANA CONTROL AB" }, + { 0x00E0F9, "CISCO SYSTEMS, INC." }, + { 0x00E0FA, "TRL TECHNOLOGY, LTD." }, + { 0x00E0FB, "LEIGHTRONIX, INC." }, + { 0x00E0FC, "HUAWEI TECHNOLOGIES CO., LTD." }, + { 0x00E0FD, "A-TREND TECHNOLOGY CO., LTD." }, + { 0x00E0FE, "CISCO SYSTEMS, INC." }, + { 0x00E0FF, "SECURITY DYNAMICS TECHNOLOGIES" }, + { 0x00E6D3, "NIXDORF COMPUTER CORP." }, + { 0x020701, "RACAL-DATACOM" }, + { 0x021C7C, "PERQ SYSTEMS CORPORATION" }, + { 0x026086, "LOGIC REPLACEMENT TECH. LTD." }, + { 0x02608C, "3COM CORPORATION" }, + { 0x027001, "RACAL-DATACOM" }, + { 0x0270B0, "M/A-COM INC. COMPANIES" }, + { 0x0270B3, "DATA RECALL LTD" }, + { 0x029D8E, "CARDIAC RECORDERS INC." }, + { 0x02AA3C, "OLIVETTI TELECOMM SPA (OLTECO)" }, + { 0x02BB01, "OCTOTHORPE CORP." }, + { 0x02C08C, "3COM CORPORATION" }, + { 0x02CF1C, "COMMUNICATION MACHINERY CORP." }, + { 0x02E6D3, "NIXDORF COMPUTER CORPORATION" }, + { 0x040AE0, "XMIT AG COMPUTER NETWORKS" }, + { 0x04E0C4, "TRIUMPH-ADLER AG" }, + { 0x080001, "COMPUTERVISION CORPORATION" }, + { 0x080002, "BRIDGE COMMUNICATIONS INC." }, + { 0x080003, "ADVANCED COMPUTER COMM." }, + { 0x080004, "CROMEMCO INCORPORATED" }, + { 0x080005, "SYMBOLICS INC." }, + { 0x080006, "SIEMENS AG" }, + { 0x080007, "APPLE COMPUTER INC." }, + { 0x080008, "BOLT BERANEK AND NEWMAN INC." }, + { 0x080009, "HEWLETT PACKARD" }, + { 0x08000A, "NESTAR SYSTEMS INCORPORATED" }, + { 0x08000B, "UNISYS CORPORATION" }, + { 0x08000C, "MIKLYN DEVELOPMENT CO." }, + { 0x08000D, "INTERNATIONAL COMPUTERS LTD." }, + { 0x08000E, "NCR CORPORATION" }, + { 0x08000F, "MITEL CORPORATION" }, + { 0x080011, "TEKTRONIX INC." }, + { 0x080012, "BELL ATLANTIC INTEGRATED SYST." }, + { 0x080013, "EXXON" }, + { 0x080014, "EXCELAN" }, + { 0x080015, "STC BUSINESS SYSTEMS" }, + { 0x080016, "BARRISTER INFO SYS CORP" }, + { 0x080017, "NATIONAL SEMICONDUCTOR" }, + { 0x080018, "PIRELLI FOCOM NETWORKS" }, + { 0x080019, "GENERAL ELECTRIC CORPORATION" }, + { 0x08001A, "TIARA/ 10NET" }, + { 0x08001B, "DATA GENERAL" }, + { 0x08001C, "KDD-KOKUSAI DEBNSIN DENWA CO." }, + { 0x08001D, "ABLE COMMUNICATIONS INC." }, + { 0x08001E, "APOLLO COMPUTER INC." }, + { 0x08001F, "SHARP CORPORATION" }, + { 0x080020, "SUN MICROSYSTEMS INC." }, + { 0x080021, "3M COMPANY" }, + { 0x080022, "NBI INC." }, + { 0x080023, "MATSUHITA GRAPHIC COMM SYS INC" }, + { 0x080024, "10NET COMMUNICATIONS/DCA" }, + { 0x080025, "CONTROL DATA" }, + { 0x080026, "NORSK DATA A.S." }, + { 0x080027, "CADMUS COMPUTER SYSTEMS" }, + { 0x080028, "TEXAS INSTRUMENTS" }, + { 0x080029, "MEGATEK CORPORATION" }, + { 0x08002A, "MOSAIC TECHNOLOGIES INC." }, + { 0x08002B, "DIGITAL EQUIPMENT CORPORATION" }, + { 0x08002C, "BRITTON LEE INC." }, + { 0x08002D, "LAN-TEC INC." }, + { 0x08002E, "METAPHOR COMPUTER SYSTEMS" }, + { 0x08002F, "PRIME COMPUTER INC." }, + { 0x080030, "NETWORK RESEARCH CORPORATION" }, + { 0x080030, "CERN" }, + { 0x080030, "ROYAL MELBOURNE INST OF TECH" }, + { 0x080031, "LITTLE MACHINES INC." }, + { 0x080032, "TIGAN INCORPORATED" }, + { 0x080033, "BAUSCH & LOMB" }, + { 0x080034, "FILENET CORPORATION" }, + { 0x080035, "MICROFIVE CORPORATION" }, + { 0x080036, "INTERGRAPH CORPORATION" }, + { 0x080037, "FUJI-XEROX CO. LTD." }, + { 0x080038, "CII HONEYWELL BULL" }, + { 0x080039, "SPIDER SYSTEMS LIMITED" }, + { 0x08003A, "ORCATECH INC." }, + { 0x08003B, "TORUS SYSTEMS LIMITED" }, + { 0x08003C, "SCHLUMBERGER WELL SERVICES" }, + { 0x08003D, "CADNETIX CORPORATIONS" }, + { 0x08003E, "CODEX CORPORATION" }, + { 0x08003F, "FRED KOSCHARA ENTERPRISES" }, + { 0x080040, "FERRANTI COMPUTER SYS. LIMITED" }, + { 0x080041, "RACAL-MILGO INFORMATION SYS.." }, + { 0x080042, "JAPAN MACNICS CORP." }, + { 0x080043, "PIXEL COMPUTER INC." }, + { 0x080044, "DAVID SYSTEMS INC." }, + { 0x080045, "CONCURRENT COMPUTER CORP." }, + { 0x080046, "SONY CORPORATION LTD." }, + { 0x080047, "SEQUENT COMPUTER SYSTEMS INC." }, + { 0x080048, "EUROTHERM GAUGING SYSTEMS" }, + { 0x080049, "UNIVATION" }, + { 0x08004A, "BANYAN SYSTEMS INC." }, + { 0x08004B, "PLANNING RESEARCH CORP." }, + { 0x08004C, "HYDRA COMPUTER SYSTEMS INC." }, + { 0x08004D, "CORVUS SYSTEMS INC." }, + { 0x08004E, "3COM EUROPE LTD." }, + { 0x08004F, "CYGNET SYSTEMS" }, + { 0x080050, "DAISY SYSTEMS CORP." }, + { 0x080051, "EXPERDATA" }, + { 0x080052, "INSYSTEC" }, + { 0x080053, "MIDDLE EAST TECH. UNIVERSITY" }, + { 0x080055, "STANFORD TELECOMM. INC." }, + { 0x080056, "STANFORD LINEAR ACCEL. CENTER" }, + { 0x080057, "EVANS & SUTHERLAND" }, + { 0x080058, "SYSTEMS CONCEPTS" }, + { 0x080059, "A/S MYCRON" }, + { 0x08005A, "IBM CORPORATION" }, + { 0x08005B, "VTA TECHNOLOGIES INC." }, + { 0x08005C, "FOUR PHASE SYSTEMS" }, + { 0x08005D, "GOULD INC." }, + { 0x08005E, "COUNTERPOINT COMPUTER INC." }, + { 0x08005F, "SABER TECHNOLOGY CORP." }, + { 0x080060, "INDUSTRIAL NETWORKING INC." }, + { 0x080061, "JAROGATE LTD." }, + { 0x080062, "GENERAL DYNAMICS" }, + { 0x080063, "PLESSEY" }, + { 0x080064, "AUTOPHON AG" }, + { 0x080065, "GENRAD INC." }, + { 0x080066, "AGFA CORPORATION" }, + { 0x080067, "COMDESIGN" }, + { 0x080068, "RIDGE COMPUTERS" }, + { 0x080069, "SILICON GRAPHICS INC." }, + { 0x08006A, "ATT BELL LABORATORIES" }, + { 0x08006B, "ACCEL TECHNOLOGIES INC." }, + { 0x08006C, "SUNTEK TECHNOLOGY INT'L" }, + { 0x08006D, "WHITECHAPEL COMPUTER WORKS" }, + { 0x08006E, "MASSCOMP" }, + { 0x08006F, "PHILIPS APELDOORN B.V." }, + { 0x080070, "MITSUBISHI ELECTRIC CORP." }, + { 0x080071, "MATRA (DSIE)" }, + { 0x080072, "XEROX CORP UNIV GRANT PROGRAM" }, + { 0x080073, "TECMAR INC." }, + { 0x080074, "CASIO COMPUTER CO. LTD." }, + { 0x080075, "DANSK DATA ELECTRONIK" }, + { 0x080076, "PC LAN TECHNOLOGIES" }, + { 0x080077, "TSL COMMUNICATIONS LTD." }, + { 0x080078, "ACCELL CORPORATION" }, + { 0x080079, "THE DROID WORKS" }, + { 0x08007A, "INDATA" }, + { 0x08007B, "SANYO ELECTRIC CO. LTD." }, + { 0x08007C, "VITALINK COMMUNICATIONS CORP." }, + { 0x08007E, "AMALGAMATED WIRELESS(AUS) LTD" }, + { 0x08007F, "CARNEGIE-MELLON UNIVERSITY" }, + { 0x080080, "AES DATA INC." }, + { 0x080081, ",ASTECH INC." }, + { 0x080082, "VERITAS SOFTWARE" }, + { 0x080083, "SEIKO INSTRUM. AND ELECTRONICS" }, + { 0x080084, "TOMEN ELECTRONICS CORP." }, + { 0x080085, "ELXSI" }, + { 0x080086, "IMAGEN CORPORATION" }, + { 0x080087, "XYPLEX" }, + { 0x080088, "MCDATA CORPORATION" }, + { 0x080089, "KINETICS" }, + { 0x08008A, "PERFORMANCE TECHNOLOGY" }, + { 0x08008B, "PYRAMID TECHNOLOGY CORP." }, + { 0x08008C, "NETWORK RESEARCH CORPORATION" }, + { 0x08008D, "XYVISION INC." }, + { 0x08008E, "TANDEM COMPUTERS" }, + { 0x08008F, "CHIPCOM CORPORATION" }, + { 0x080090, "SONOMA SYSTEMS" }, + { 0x08BBCC, "AK-NORD EDV VERTRIEBSGES. MBH" }, + { 0x10005A, "IBM CORPORATION" }, + { 0x1000E8, "NATIONAL SEMICONDUCTOR" }, + { 0x800010, "ATT BELL LABORATORIES" }, + { 0xA06A00, "Verilink Corporation" }, + { 0xAA0000, "DIGITAL EQUIPMENT CORPORATION" }, + { 0xAA0001, "DIGITAL EQUIPMENT CORPORATION" }, + { 0xAA0002, "DIGITAL EQUIPMENT CORPORATION" }, + { 0xAA0003, "DIGITAL EQUIPMENT CORPORATION" }, + { 0xAA0004, "DIGITAL EQUIPMENT CORPORATION" }, +}; + +#endif /* CONFIG_IEEE1394_OUI_DB */ --- diff/drivers/net/kgdb_eth.c 1970-01-01 01:00:00.000000000 +0100 +++ source/drivers/net/kgdb_eth.c 2003-10-29 11:19:23.000000000 +0000 @@ -0,0 +1,517 @@ +/* + * Network interface GDB stub + * + * Written by San Mehat (nettwerk@biodome.org) + * Based upon 'gdbserial' by David Grothe (dave@gcom.com) + * and Scott Foehner (sfoehner@engr.sgi.com) + * + * Twiddled for 2.6 by Robert Walsh + * and wangdi . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#define GDB_BUF_SIZE 512 /* power of 2, please */ + +static char kgdb_buf[GDB_BUF_SIZE] ; +static int kgdb_buf_in_inx ; +static atomic_t kgdb_buf_in_cnt ; +static int kgdb_buf_out_inx ; + +extern void set_debug_traps(void) ; /* GDB routine */ +extern void breakpoint(void); + +unsigned int kgdb_remoteip = 0; +unsigned short kgdb_listenport = 6443; +unsigned short kgdb_sendport= 6442; +int kgdb_eth = -1; /* Default tty mode */ +unsigned char kgdb_remotemac[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; +unsigned char kgdb_localmac[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; +volatile int kgdb_eth_is_initializing = 0; +int kgdb_eth_need_breakpoint[NR_CPUS]; + +struct net_device *kgdb_netdevice = NULL; + +/* + * Get a char if available, return -1 if nothing available. + * Empty the receive buffer first, then look at the interface hardware. + */ +static int +read_char(void) +{ + /* intr routine has queued chars */ + if (atomic_read(&kgdb_buf_in_cnt) != 0) + { + int chr; + + chr = kgdb_buf[kgdb_buf_out_inx++] ; + kgdb_buf_out_inx &= (GDB_BUF_SIZE - 1) ; + atomic_dec(&kgdb_buf_in_cnt) ; + return chr; + } + + return -1; /* no data */ +} + +/* + * Wait until the interface can accept a char, then write it. + */ +static void +write_buffer(char *buf, int len) +{ + int total_len, eth_len, ip_len, udp_len; + struct in_device *in_dev; + struct sk_buff *skb; + struct udphdr *udph; + struct iphdr *iph; + struct ethhdr *eth; + + if (!(in_dev = (struct in_device *) kgdb_netdevice->ip_ptr)) { + panic("No in_device available for interface!\n"); + } + + if (!(in_dev->ifa_list)) { + panic("No interface address set for interface!\n"); + } + + udp_len = len + sizeof(struct udphdr); + ip_len = eth_len = udp_len + sizeof(struct iphdr); + total_len = eth_len + ETH_HLEN; + + if (!(skb = alloc_skb(total_len, GFP_ATOMIC))) { + return; + } + + atomic_set(&skb->users, 1); + skb_reserve(skb, total_len - len); + + memcpy(skb->data, (unsigned char *) buf, len); + skb->len += len; + + udph = (struct udphdr *) skb_push(skb, sizeof(*udph)); + udph->source = htons(kgdb_listenport); + udph->dest = htons(kgdb_sendport); + udph->len = htons(udp_len); + udph->check = 0; + + iph = (struct iphdr *)skb_push(skb, sizeof(*iph)); + iph->version = 4; + iph->ihl = 5; + iph->tos = 0; + iph->tot_len = htons(ip_len); + iph->id = 0; + iph->frag_off = 0; + iph->ttl = 64; + iph->protocol = IPPROTO_UDP; + iph->check = 0; + iph->saddr = in_dev->ifa_list->ifa_address; + iph->daddr = kgdb_remoteip; + iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl); + + eth = (struct ethhdr *) skb_push(skb, ETH_HLEN); + eth->h_proto = htons(ETH_P_IP); + memcpy(eth->h_source, kgdb_localmac, kgdb_netdevice->addr_len); + memcpy(eth->h_dest, kgdb_remotemac, kgdb_netdevice->addr_len); + +repeat: + spin_lock(&kgdb_netdevice->xmit_lock); + kgdb_netdevice->xmit_lock_owner = smp_processor_id(); + + if (netif_queue_stopped(kgdb_netdevice)) { + kgdb_netdevice->xmit_lock_owner = -1; + spin_unlock(&kgdb_netdevice->xmit_lock); + + kgdb_netdevice->poll_controller(kgdb_netdevice); + goto repeat; + } + + kgdb_netdevice->hard_start_xmit(skb, kgdb_netdevice); + kgdb_netdevice->xmit_lock_owner = -1; + spin_unlock(&kgdb_netdevice->xmit_lock); +} + +/* + * In the interrupt state the target machine will not respond to any + * arp requests, so handle them here. + */ + +static struct sk_buff *send_skb = NULL; + +void +kgdb_eth_reply_arp(void) +{ + if (send_skb) { + spin_lock(&kgdb_netdevice->xmit_lock); + kgdb_netdevice->xmit_lock_owner = smp_processor_id(); + kgdb_netdevice->hard_start_xmit(send_skb, kgdb_netdevice); + kgdb_netdevice->xmit_lock_owner = -1; + spin_unlock(&kgdb_netdevice->xmit_lock); + send_skb = NULL; + } +} + +static int +make_arp_request(struct sk_buff *skb) +{ + struct arphdr *arp; + unsigned char *arp_ptr; + int type = ARPOP_REPLY; + int ptype = ETH_P_ARP; + u32 sip, tip; + unsigned char *sha, *tha; + struct in_device *in_dev = (struct in_device *) kgdb_netdevice->ip_ptr; + + /* No arp on this interface */ + + if (kgdb_netdevice->flags & IFF_NOARP) { + return 0; + } + + if (!pskb_may_pull(skb, (sizeof(struct arphdr) + + (2 * kgdb_netdevice->addr_len) + + (2 * sizeof(u32))))) { + return 0; + } + + skb->h.raw = skb->nh.raw = skb->data; + arp = skb->nh.arph; + + if ((arp->ar_hrd != htons(ARPHRD_ETHER) && + arp->ar_hrd != htons(ARPHRD_IEEE802)) || + arp->ar_pro != htons(ETH_P_IP)) { + return 0; + } + + /* Understand only these message types */ + + if (arp->ar_op != htons(ARPOP_REQUEST)) { + return 0; + } + + /* Extract fields */ + + arp_ptr= (unsigned char *)(arp+1); + sha = arp_ptr; + arp_ptr += kgdb_netdevice->addr_len; + memcpy(&sip, arp_ptr, 4); + arp_ptr += 4; + tha = arp_ptr; + arp_ptr += kgdb_netdevice->addr_len; + memcpy(&tip, arp_ptr, 4); + + if (tip != in_dev->ifa_list->ifa_address) { + return 0; + } + + if (kgdb_remoteip != sip) { + return 0; + } + + /* + * Check for bad requests for 127.x.x.x and requests for multicast + * addresses. If this is one such, delete it. + */ + + if (LOOPBACK(tip) || MULTICAST(tip)) { + return 0; + } + + /* reply to the ARP request */ + + send_skb = alloc_skb(sizeof(struct arphdr) + 2 * (kgdb_netdevice->addr_len + 4) + LL_RESERVED_SPACE(kgdb_netdevice), GFP_ATOMIC); + + if (send_skb == NULL) { + return 0; + } + + skb_reserve(send_skb, LL_RESERVED_SPACE(kgdb_netdevice)); + send_skb->nh.raw = send_skb->data; + arp = (struct arphdr *) skb_put(send_skb, sizeof(struct arphdr) + 2 * (kgdb_netdevice->addr_len + 4)); + send_skb->dev = kgdb_netdevice; + send_skb->protocol = htons(ETH_P_ARP); + + /* Fill the device header for the ARP frame */ + + if (kgdb_netdevice->hard_header && + kgdb_netdevice->hard_header(send_skb, kgdb_netdevice, ptype, + kgdb_remotemac, kgdb_localmac, + send_skb->len) < 0) { + kfree_skb(send_skb); + return 0; + } + + /* + * Fill out the arp protocol part. + * + * we only support ethernet device type, + * which (according to RFC 1390) should always equal 1 (Ethernet). + */ + + arp->ar_hrd = htons(kgdb_netdevice->type); + arp->ar_pro = htons(ETH_P_IP); + + arp->ar_hln = kgdb_netdevice->addr_len; + arp->ar_pln = 4; + arp->ar_op = htons(type); + + arp_ptr=(unsigned char *)(arp + 1); + + memcpy(arp_ptr, kgdb_netdevice->dev_addr, kgdb_netdevice->addr_len); + arp_ptr += kgdb_netdevice->addr_len; + memcpy(arp_ptr, &tip, 4); + arp_ptr += 4; + memcpy(arp_ptr, kgdb_localmac, kgdb_netdevice->addr_len); + arp_ptr += kgdb_netdevice->addr_len; + memcpy(arp_ptr, &sip, 4); + return 0; +} + + +/* + * Accept an skbuff from net_device layer and add the payload onto + * kgdb buffer + * + * When the kgdb stub routine getDebugChar() is called it draws characters + * out of the buffer until it is empty and then reads directly from the + * serial port. + * + * We do not attempt to write chars from the interrupt routine since + * the stubs do all of that via putDebugChar() which writes one byte + * after waiting for the interface to become ready. + * + * The debug stubs like to run with interrupts disabled since, after all, + * they run as a consequence of a breakpoint in the kernel. + * + * NOTE: Return value of 1 means it was for us and is an indication to + * the calling driver to destroy the sk_buff and not send it up the stack. + */ +int +kgdb_net_interrupt(struct sk_buff *skb) +{ + unsigned char chr; + struct iphdr *iph = (struct iphdr*)skb->data; + struct udphdr *udph= (struct udphdr*)(skb->data+(iph->ihl<<2)); + unsigned char *data = (unsigned char *) udph + sizeof(struct udphdr); + int len; + int i; + + if ((kgdb_eth != -1) && (!kgdb_netdevice) && + (iph->protocol == IPPROTO_UDP) && + (be16_to_cpu(udph->dest) == kgdb_listenport)) { + kgdb_sendport = be16_to_cpu(udph->source); + + while (kgdb_eth_is_initializing) + ; + if (!kgdb_netdevice) + kgdb_eth_hook(); + if (!kgdb_netdevice) { + /* Lets not even try again. */ + kgdb_eth = -1; + return 0; + } + } + if (!kgdb_netdevice) { + return 0; + } + if (skb->protocol == __constant_htons(ETH_P_ARP) && !send_skb) { + make_arp_request(skb); + return 0; + } + if (iph->protocol != IPPROTO_UDP) { + return 0; + } + + if (be16_to_cpu(udph->dest) != kgdb_listenport) { + return 0; + } + + len = (be16_to_cpu(iph->tot_len) - + (sizeof(struct udphdr) + sizeof(struct iphdr))); + + for (i = 0; i < len; i++) { + chr = data[i]; + if (chr == 3) { + kgdb_eth_need_breakpoint[smp_processor_id()] = 1; + continue; + } + if (atomic_read(&kgdb_buf_in_cnt) >= GDB_BUF_SIZE) { + /* buffer overflow, clear it */ + kgdb_buf_in_inx = 0; + atomic_set(&kgdb_buf_in_cnt, 0); + kgdb_buf_out_inx = 0; + break; + } + kgdb_buf[kgdb_buf_in_inx++] = chr; + kgdb_buf_in_inx &= (GDB_BUF_SIZE - 1); + atomic_inc(&kgdb_buf_in_cnt); + } + + if (!kgdb_netdevice->kgdb_is_trapped) { + /* + * If a new gdb instance is trying to attach, we need to + * break here. + */ + if (!strncmp(data, "$Hc-1#09", 8)) + kgdb_eth_need_breakpoint[smp_processor_id()] = 1; + } + return 1; +} +EXPORT_SYMBOL(kgdb_net_interrupt); + +int +kgdb_eth_hook(void) +{ + char kgdb_netdev[16]; + extern void kgdb_respond_ok(void); + + if (kgdb_remotemac[0] == 0xff) { + panic("ERROR! 'gdbeth_remotemac' option not set!\n"); + } + if (kgdb_localmac[0] == 0xff) { + panic("ERROR! 'gdbeth_localmac' option not set!\n"); + } + if (kgdb_remoteip == 0) { + panic("ERROR! 'gdbeth_remoteip' option not set!\n"); + } + + sprintf(kgdb_netdev,"eth%d",kgdb_eth); + +#ifdef CONFIG_SMP + if (num_online_cpus() > CONFIG_NO_KGDB_CPUS) { + printk("kgdb: too manu cpus. Cannot enable debugger with more than %d cpus\n", CONFIG_NO_KGDB_CPUS); + return -1; + } +#endif + for (kgdb_netdevice = dev_base; + kgdb_netdevice != NULL; + kgdb_netdevice = kgdb_netdevice->next) { + if (strncmp(kgdb_netdevice->name, kgdb_netdev, IFNAMSIZ) == 0) { + break; + } + } + if (!kgdb_netdevice) { + printk("KGDB NET : Unable to find interface %s\n",kgdb_netdev); + return -ENODEV; + } + + /* + * Call GDB routine to setup the exception vectors for the debugger + */ + set_debug_traps(); + + /* + * Call the breakpoint() routine in GDB to start the debugging + * session. + */ + kgdb_eth_is_initializing = 1; + kgdb_eth_need_breakpoint[smp_processor_id()] = 1; + return 0; +} + +/* + * getDebugChar + * + * This is a GDB stub routine. It waits for a character from the + * serial interface and then returns it. If there is no serial + * interface connection then it returns a bogus value which will + * almost certainly cause the system to hang. + */ +int +eth_getDebugChar(void) +{ + volatile int chr; + + while ((chr = read_char()) < 0) { + if (send_skb) { + kgdb_eth_reply_arp(); + } + if (kgdb_netdevice->poll_controller) { + kgdb_netdevice->poll_controller(kgdb_netdevice); + } else { + printk("KGDB NET: Error - Device %s is not supported!\n", kgdb_netdevice->name); + panic("Please add support for kgdb net to this driver"); + } + } + return chr; +} + +#define ETH_QUEUE_SIZE 256 +static char eth_queue[ETH_QUEUE_SIZE]; +static int outgoing_queue; + +void +eth_flushDebugChar(void) +{ + if(outgoing_queue) { + write_buffer(eth_queue, outgoing_queue); + + outgoing_queue = 0; + } +} + +static void +put_char_on_queue(int chr) +{ + eth_queue[outgoing_queue++] = chr; + if(outgoing_queue == ETH_QUEUE_SIZE) + { + eth_flushDebugChar(); + } +} + +/* + * eth_putDebugChar + * + * This is a GDB stub routine. It waits until the interface is ready + * to transmit a char and then sends it. + */ +void +eth_putDebugChar(int chr) +{ + put_char_on_queue(chr); /* this routine will wait */ +} + +void +kgdb_eth_set_trapmode(int mode) +{ + if (!kgdb_netdevice) { + return; + } + kgdb_netdevice->kgdb_is_trapped = mode; +} + +int +kgdb_eth_is_trapped() +{ + if (!kgdb_netdevice) { + return 0; + } + return kgdb_netdevice->kgdb_is_trapped; +} +EXPORT_SYMBOL(kgdb_eth_is_trapped); --- diff/include/asm-i386/kgdb.h 1970-01-01 01:00:00.000000000 +0100 +++ source/include/asm-i386/kgdb.h 2003-10-29 11:19:23.000000000 +0000 @@ -0,0 +1,76 @@ +#ifndef __KGDB +#define __KGDB + +/* + * This file should not include ANY others. This makes it usable + * most anywhere without the fear of include order or inclusion. + * Make it so! + * + * This file may be included all the time. It is only active if + * CONFIG_KGDB is defined, otherwise it stubs out all the macros + * and entry points. + */ +#if defined(CONFIG_KGDB) && !defined(__ASSEMBLY__) + +extern void breakpoint(void); +#define INIT_KGDB_INTS kgdb_enable_ints() + +#ifndef BREAKPOINT +#define BREAKPOINT asm(" int $3") +#endif + +struct sk_buff; + +extern int kgdb_eth; +extern unsigned kgdb_remoteip; +extern unsigned short kgdb_listenport; +extern unsigned short kgdb_sendport; +extern unsigned char kgdb_remotemac[6]; +extern unsigned char kgdb_localmac[6]; +extern int kgdb_eth_need_breakpoint[]; + +extern int kgdb_tty_hook(void); +extern int kgdb_eth_hook(void); +extern int gdb_net_interrupt(struct sk_buff *skb); + +/* + * GDB debug stub (or any debug stub) can point the 'linux_debug_hook' + * pointer to its routine and it will be entered as the first thing + * when a trap occurs. + * + * Return values are, at present, undefined. + * + * The debug hook routine does not necessarily return to its caller. + * It has the register image and thus may choose to resume execution + * anywhere it pleases. + */ +struct pt_regs; +struct sk_buff; + +extern int kgdb_handle_exception(int trapno, + int signo, int err_code, struct pt_regs *regs); +extern int in_kgdb(struct pt_regs *regs); +extern int kgdb_net_interrupt(struct sk_buff *skb); + +#ifdef CONFIG_KGDB_TS +void kgdb_tstamp(int line, char *source, int data0, int data1); +/* + * This is the time stamp function. The macro adds the source info and + * does a cast on the data to allow most any 32-bit value. + */ + +#define kgdb_ts(data0,data1) kgdb_tstamp(__LINE__,__FILE__,(int)data0,(int)data1) +#else +#define kgdb_ts(data0,data1) +#endif +#else /* CONFIG_KGDB && ! __ASSEMBLY__ ,stubs follow... */ +#ifndef BREAKPOINT +#define BREAKPOINT +#endif +#define kgdb_ts(data0,data1) +#define in_kgdb +#define kgdb_handle_exception +#define breakpoint +#define INIT_KGDB_INTS +#endif +#endif /* __KGDB */ --- diff/include/asm-i386/kgdb_local.h 1970-01-01 01:00:00.000000000 +0100 +++ source/include/asm-i386/kgdb_local.h 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,102 @@ +#ifndef __KGDB_LOCAL +#define ___KGDB_LOCAL +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT 0x3f8 +#ifdef CONFIG_KGDB_PORT +#undef PORT +#define PORT CONFIG_KGDB_PORT +#endif +#define IRQ 4 +#ifdef CONFIG_KGDB_IRQ +#undef IRQ +#define IRQ CONFIG_KGDB_IRQ +#endif +#define SB_CLOCK 1843200 +#define SB_BASE (SB_CLOCK/16) +#define SB_BAUD9600 SB_BASE/9600 +#define SB_BAUD192 SB_BASE/19200 +#define SB_BAUD384 SB_BASE/38400 +#define SB_BAUD576 SB_BASE/57600 +#define SB_BAUD1152 SB_BASE/115200 +#ifdef CONFIG_KGDB_9600BAUD +#define SB_BAUD SB_BAUD9600 +#endif +#ifdef CONFIG_KGDB_19200BAUD +#define SB_BAUD SB_BAUD192 +#endif +#ifdef CONFIG_KGDB_38400BAUD +#define SB_BAUD SB_BAUD384 +#endif +#ifdef CONFIG_KGDB_57600BAUD +#define SB_BAUD SB_BAUD576 +#endif +#ifdef CONFIG_KGDB_115200BAUD +#define SB_BAUD SB_BAUD1152 +#endif +#ifndef SB_BAUD +#define SB_BAUD SB_BAUD1152 /* Start with this if not given */ +#endif + +#ifndef CONFIG_X86_TSC +#undef rdtsc +#define rdtsc(a,b) if (a++ > 10000){a = 0; b++;} +#undef rdtscll +#define rdtscll(s) s++ +#endif + +#ifdef _raw_read_unlock /* must use a name that is "define"ed, not an inline */ +#undef spin_lock +#undef spin_trylock +#undef spin_unlock +#define spin_lock _raw_spin_lock +#define spin_trylock _raw_spin_trylock +#define spin_unlock _raw_spin_unlock +#else +#endif +#undef spin_unlock_wait +#define spin_unlock_wait(x) do { cpu_relax(); barrier();} \ + while(spin_is_locked(x)) + +#define SB_IER 1 +#define SB_MCR UART_MCR_OUT2 | UART_MCR_DTR | UART_MCR_RTS + +#define FLAGS 0 +#define SB_STATE { \ + magic: SSTATE_MAGIC, \ + baud_base: SB_BASE, \ + port: PORT, \ + irq: IRQ, \ + flags: FLAGS, \ + custom_divisor:SB_BAUD} +#define SB_INFO { \ + magic: SERIAL_MAGIC, \ + port: PORT,0,FLAGS, \ + state: &state, \ + tty: (struct tty_struct *)&state, \ + IER: SB_IER, \ + MCR: SB_MCR} +extern void putDebugChar(int); +/* RTAI support needs us to really stop/start interrupts */ + +#define kgdb_sti() __asm__ __volatile__("sti": : :"memory") +#define kgdb_cli() __asm__ __volatile__("cli": : :"memory") +#define kgdb_local_save_flags(x) __asm__ __volatile__(\ + "pushfl ; popl %0":"=g" (x): /* no input */) +#define kgdb_local_irq_restore(x) __asm__ __volatile__(\ + "pushl %0 ; popfl": \ + /* no output */ :"g" (x):"memory", "cc") +#define kgdb_local_irq_save(x) kgdb_local_save_flags(x); kgdb_cli() + +#ifdef CONFIG_SERIAL +extern void shutdown_for_kgdb(struct async_struct *info); +#endif +#define INIT_KDEBUG putDebugChar("+"); +#endif /* __KGDB_LOCAL */ --- diff/include/linux/dwarf2-lang.h 1970-01-01 01:00:00.000000000 +0100 +++ source/include/linux/dwarf2-lang.h 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,132 @@ +#ifndef DWARF2_LANG +#define DWARF2_LANG +#include + +/* + * This 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, or (at your option) any later + * version. + */ +/* + * This file defines macros that allow generation of DWARF debug records + * for asm files. This file is platform independent. Register numbers + * (which are about the only thing that is platform dependent) are to be + * supplied by a platform defined file. + */ +#define DWARF_preamble() .section .debug_frame,"",@progbits +/* + * This macro starts a debug frame section. The debug_frame describes + * where to find the registers that the enclosing function saved on + * entry. + * + * ORD is use by the label generator and should be the same as what is + * passed to CFI_postamble. + * + * pc, pc register gdb ordinal. + * + * code_align this is the factor used to define locations or regions + * where the given definitions apply. If you use labels to define these + * this should be 1. + * + * data_align this is the factor used to define register offsets. If + * you use struct offset, this should be the size of the register in + * bytes or the negative of that. This is how it is used: you will + * define a register as the reference register, say the stack pointer, + * then you will say where a register is located relative to this + * reference registers value, say 40 for register 3 (the gdb register + * number). The <40> will be multiplied by to define the + * byte offset of the given register (3, in this example). So if your + * <40> is the byte offset and the reference register points at the + * begining, you would want 1 for the data_offset. If <40> was the 40th + * 4-byte element in that structure you would want 4. And if your + * reference register points at the end of the structure you would want + * a negative data_align value(and you would have to do other math as + * well). + */ + +#define CFI_preamble(ORD, pc, code_align, data_align) \ +.section .debug_frame,"",@progbits ; \ +frame/**/_/**/ORD: \ + .long end/**/_/**/ORD-start/**/_/**/ORD; \ +start/**/_/**/ORD: \ + .long DW_CIE_ID; \ + .byte DW_CIE_VERSION; \ + .byte 0 ; \ + .uleb128 code_align; \ + .sleb128 data_align; \ + .byte pc; + +/* + * After the above macro and prior to the CFI_postamble, you need to + * define the initial state. This starts with defining the reference + * register and, usually the pc. Here are some helper macros: + */ + +#define CFA_define_reference(reg, offset) \ + .byte DW_CFA_def_cfa; \ + .uleb128 reg; \ + .uleb128 (offset); + +#define CFA_define_offset(reg, offset) \ + .byte (DW_CFA_offset + reg); \ + .uleb128 (offset); + +#define CFI_postamble(ORD) \ + .align 4; \ +end/**/_/**/ORD: +/* + * So now your code pushs stuff on the stack, you need a new location + * and the rules for what to do. This starts a running description of + * the call frame. You need to describe what changes with respect to + * the call registers as the location of the pc moves through the code. + * The following builds an FDE (fram descriptor entry?). Like the + * above, it has a preamble and a postamble. It also is tied to the CFI + * above. + * The first entry after the preamble must be the location in the code + * that the call frame is being described for. + */ +#define FDE_preamble(ORD, fde_no, initial_address, length) \ + .long FDE_end/**/_/**/fde_no-FDE_start/**/_/**/fde_no; \ +FDE_start/**/_/**/fde_no: \ + .long frame/**/_/**/ORD; \ + .long initial_address; \ + .long length; + +#define FDE_postamble(fde_no) \ + .align 4; \ +FDE_end/**/_/**/fde_no: +/* + * That done, you can now add registers, subtract registers, move the + * reference and even change the reference. You can also define a new + * area of code the info applies to. For discontinuous bits you should + * start a new FDE. You may have as many as you like. + */ + +/* + * To advance the address by + */ + +#define FDE_advance(bytes) \ + .byte DW_CFA_advance_loc4 \ + .long bytes + + + +/* + * With the above you can define all the register locations. But + * suppose the reference register moves... Takes the new offset NOT an + * increment. This is how esp is tracked if it is not saved. + */ + +#define CFA_define_cfa_offset(offset) \ + .byte $DW_CFA_def_cfa_offset; \ + .uleb128 (offset); +/* + * Or suppose you want to use a different reference register... + */ +#define CFA_define_cfa_register(reg) \ + .byte DW_CFA_def_cfa_register; \ + .uleb128 reg; + +#endif --- diff/include/linux/dwarf2.h 1970-01-01 01:00:00.000000000 +0100 +++ source/include/linux/dwarf2.h 2003-10-29 11:19:22.000000000 +0000 @@ -0,0 +1,738 @@ +/* Declarations and definitions of codes relating to the DWARF2 symbolic + debugging information format. + Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002 + Free Software Foundation, Inc. + + Written by Gary Funck (gary@intrepid.com) The Ada Joint Program + Office (AJPO), Florida State Unviversity and Silicon Graphics Inc. + provided support for this effort -- June 21, 1995. + + Derived from the DWARF 1 implementation written by Ron Guilmette + (rfg@netcom.com), November 1990. + + This file is part of GCC. + + GCC 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, or (at your option) any later + version. + + GCC 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 GCC; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +/* This file is derived from the DWARF specification (a public document) + Revision 2.0.0 (July 27, 1993) developed by the UNIX International + Programming Languages Special Interest Group (UI/PLSIG) and distributed + by UNIX International. Copies of this specification are available from + UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. + + This file also now contains definitions from the DWARF 3 specification. */ + +/* This file is shared between GCC and GDB, and should not contain + prototypes. */ + +#ifndef _ELF_DWARF2_H +#define _ELF_DWARF2_H + +/* Structure found in the .debug_line section. */ +#ifndef __ASSEMBLY__ +typedef struct +{ + unsigned char li_length [4]; + unsigned char li_version [2]; + unsigned char li_prologue_length [4]; + unsigned char li_min_insn_length [1]; + unsigned char li_default_is_stmt [1]; + unsigned char li_line_base [1]; + unsigned char li_line_range [1]; + unsigned char li_opcode_base [1]; +} +DWARF2_External_LineInfo; + +typedef struct +{ + unsigned long li_length; + unsigned short li_version; + unsigned int li_prologue_length; + unsigned char li_min_insn_length; + unsigned char li_default_is_stmt; + int li_line_base; + unsigned char li_line_range; + unsigned char li_opcode_base; +} +DWARF2_Internal_LineInfo; + +/* Structure found in .debug_pubnames section. */ +typedef struct +{ + unsigned char pn_length [4]; + unsigned char pn_version [2]; + unsigned char pn_offset [4]; + unsigned char pn_size [4]; +} +DWARF2_External_PubNames; + +typedef struct +{ + unsigned long pn_length; + unsigned short pn_version; + unsigned long pn_offset; + unsigned long pn_size; +} +DWARF2_Internal_PubNames; + +/* Structure found in .debug_info section. */ +typedef struct +{ + unsigned char cu_length [4]; + unsigned char cu_version [2]; + unsigned char cu_abbrev_offset [4]; + unsigned char cu_pointer_size [1]; +} +DWARF2_External_CompUnit; + +typedef struct +{ + unsigned long cu_length; + unsigned short cu_version; + unsigned long cu_abbrev_offset; + unsigned char cu_pointer_size; +} +DWARF2_Internal_CompUnit; + +typedef struct +{ + unsigned char ar_length [4]; + unsigned char ar_version [2]; + unsigned char ar_info_offset [4]; + unsigned char ar_pointer_size [1]; + unsigned char ar_segment_size [1]; +} +DWARF2_External_ARange; + +typedef struct +{ + unsigned long ar_length; + unsigned short ar_version; + unsigned long ar_info_offset; + unsigned char ar_pointer_size; + unsigned char ar_segment_size; +} +DWARF2_Internal_ARange; + +#define ENUM(name) enum name { +#define IF_NOT_ASM(a) a +#define COMMA , +#else +#define ENUM(name) +#define IF_NOT_ASM(a) +#define COMMA + +#endif + +/* Tag names and codes. */ +ENUM(dwarf_tag) + + DW_TAG_padding = 0x00 COMMA + DW_TAG_array_type = 0x01 COMMA + DW_TAG_class_type = 0x02 COMMA + DW_TAG_entry_point = 0x03 COMMA + DW_TAG_enumeration_type = 0x04 COMMA + DW_TAG_formal_parameter = 0x05 COMMA + DW_TAG_imported_declaration = 0x08 COMMA + DW_TAG_label = 0x0a COMMA + DW_TAG_lexical_block = 0x0b COMMA + DW_TAG_member = 0x0d COMMA + DW_TAG_pointer_type = 0x0f COMMA + DW_TAG_reference_type = 0x10 COMMA + DW_TAG_compile_unit = 0x11 COMMA + DW_TAG_string_type = 0x12 COMMA + DW_TAG_structure_type = 0x13 COMMA + DW_TAG_subroutine_type = 0x15 COMMA + DW_TAG_typedef = 0x16 COMMA + DW_TAG_union_type = 0x17 COMMA + DW_TAG_unspecified_parameters = 0x18 COMMA + DW_TAG_variant = 0x19 COMMA + DW_TAG_common_block = 0x1a COMMA + DW_TAG_common_inclusion = 0x1b COMMA + DW_TAG_inheritance = 0x1c COMMA + DW_TAG_inlined_subroutine = 0x1d COMMA + DW_TAG_module = 0x1e COMMA + DW_TAG_ptr_to_member_type = 0x1f COMMA + DW_TAG_set_type = 0x20 COMMA + DW_TAG_subrange_type = 0x21 COMMA + DW_TAG_with_stmt = 0x22 COMMA + DW_TAG_access_declaration = 0x23 COMMA + DW_TAG_base_type = 0x24 COMMA + DW_TAG_catch_block = 0x25 COMMA + DW_TAG_const_type = 0x26 COMMA + DW_TAG_constant = 0x27 COMMA + DW_TAG_enumerator = 0x28 COMMA + DW_TAG_file_type = 0x29 COMMA + DW_TAG_friend = 0x2a COMMA + DW_TAG_namelist = 0x2b COMMA + DW_TAG_namelist_item = 0x2c COMMA + DW_TAG_packed_type = 0x2d COMMA + DW_TAG_subprogram = 0x2e COMMA + DW_TAG_template_type_param = 0x2f COMMA + DW_TAG_template_value_param = 0x30 COMMA + DW_TAG_thrown_type = 0x31 COMMA + DW_TAG_try_block = 0x32 COMMA + DW_TAG_variant_part = 0x33 COMMA + DW_TAG_variable = 0x34 COMMA + DW_TAG_volatile_type = 0x35 COMMA + /* DWARF 3. */ + DW_TAG_dwarf_procedure = 0x36 COMMA + DW_TAG_restrict_type = 0x37 COMMA + DW_TAG_interface_type = 0x38 COMMA + DW_TAG_namespace = 0x39 COMMA + DW_TAG_imported_module = 0x3a COMMA + DW_TAG_unspecified_type = 0x3b COMMA + DW_TAG_partial_unit = 0x3c COMMA + DW_TAG_imported_unit = 0x3d COMMA + /* SGI/MIPS Extensions. */ + DW_TAG_MIPS_loop = 0x4081 COMMA + /* GNU extensions. */ + DW_TAG_format_label = 0x4101 COMMA /* For FORTRAN 77 and Fortran 90. */ + DW_TAG_function_template = 0x4102 COMMA /* For C++. */ + DW_TAG_class_template = 0x4103 COMMA /* For C++. */ + DW_TAG_GNU_BINCL = 0x4104 COMMA + DW_TAG_GNU_EINCL = 0x4105 COMMA + /* Extensions for UPC. See: http://upc.gwu.edu/~upc. */ + DW_TAG_upc_shared_type = 0x8765 COMMA + DW_TAG_upc_strict_type = 0x8766 COMMA + DW_TAG_upc_relaxed_type = 0x8767 +IF_NOT_ASM(};) + +#define DW_TAG_lo_user 0x4080 +#define DW_TAG_hi_user 0xffff + +/* Flag that tells whether entry has a child or not. */ +#define DW_children_no 0 +#define DW_children_yes 1 + +/* Form names and codes. */ +ENUM(dwarf_form) + + DW_FORM_addr = 0x01 COMMA + DW_FORM_block2 = 0x03 COMMA + DW_FORM_block4 = 0x04 COMMA + DW_FORM_data2 = 0x05 COMMA + DW_FORM_data4 = 0x06 COMMA + DW_FORM_data8 = 0x07 COMMA + DW_FORM_string = 0x08 COMMA + DW_FORM_block = 0x09 COMMA + DW_FORM_block1 = 0x0a COMMA + DW_FORM_data1 = 0x0b COMMA + DW_FORM_flag = 0x0c COMMA + DW_FORM_sdata = 0x0d COMMA + DW_FORM_strp = 0x0e COMMA + DW_FORM_udata = 0x0f COMMA + DW_FORM_ref_addr = 0x10 COMMA + DW_FORM_ref1 = 0x11 COMMA + DW_FORM_ref2 = 0x12 COMMA + DW_FORM_ref4 = 0x13 COMMA + DW_FORM_ref8 = 0x14 COMMA + DW_FORM_ref_udata = 0x15 COMMA + DW_FORM_indirect = 0x16 +IF_NOT_ASM(};) + +/* Attribute names and codes. */ + +ENUM(dwarf_attribute) + + DW_AT_sibling = 0x01 COMMA + DW_AT_location = 0x02 COMMA + DW_AT_name = 0x03 COMMA + DW_AT_ordering = 0x09 COMMA + DW_AT_subscr_data = 0x0a COMMA + DW_AT_byte_size = 0x0b COMMA + DW_AT_bit_offset = 0x0c COMMA + DW_AT_bit_size = 0x0d COMMA + DW_AT_element_list = 0x0f COMMA + DW_AT_stmt_list = 0x10 COMMA + DW_AT_low_pc = 0x11 COMMA + DW_AT_high_pc = 0x12 COMMA + DW_AT_language = 0x13 COMMA + DW_AT_member = 0x14 COMMA + DW_AT_discr = 0x15 COMMA + DW_AT_discr_value = 0x16 COMMA + DW_AT_visibility = 0x17 COMMA + DW_AT_import = 0x18 COMMA + DW_AT_string_length = 0x19 COMMA + DW_AT_common_reference = 0x1a COMMA + DW_AT_comp_dir = 0x1b COMMA + DW_AT_const_value = 0x1c COMMA + DW_AT_containing_type = 0x1d COMMA + DW_AT_default_value = 0x1e COMMA + DW_AT_inline = 0x20 COMMA + DW_AT_is_optional = 0x21 COMMA + DW_AT_lower_bound = 0x22 COMMA + DW_AT_producer = 0x25 COMMA + DW_AT_prototyped = 0x27 COMMA + DW_AT_return_addr = 0x2a COMMA + DW_AT_start_scope = 0x2c COMMA + DW_AT_stride_size = 0x2e COMMA + DW_AT_upper_bound = 0x2f COMMA + DW_AT_abstract_origin = 0x31 COMMA + DW_AT_accessibility = 0x32 COMMA + DW_AT_address_class = 0x33 COMMA + DW_AT_artificial = 0x34 COMMA + DW_AT_base_types = 0x35 COMMA + DW_AT_calling_convention = 0x36 COMMA + DW_AT_count = 0x37 COMMA + DW_AT_data_member_location = 0x38 COMMA + DW_AT_decl_column = 0x39 COMMA + DW_AT_decl_file = 0x3a COMMA + DW_AT_decl_line = 0x3b COMMA + DW_AT_declaration = 0x3c COMMA + DW_AT_discr_list = 0x3d COMMA + DW_AT_encoding = 0x3e COMMA + DW_AT_external = 0x3f COMMA + DW_AT_frame_base = 0x40 COMMA + DW_AT_friend = 0x41 COMMA + DW_AT_identifier_case = 0x42 COMMA + DW_AT_macro_info = 0x43 COMMA + DW_AT_namelist_items = 0x44 COMMA + DW_AT_priority = 0x45 COMMA + DW_AT_segment = 0x46 COMMA + DW_AT_specification = 0x47 COMMA + DW_AT_static_link = 0x48 COMMA + DW_AT_type = 0x49 COMMA + DW_AT_use_location = 0x4a COMMA + DW_AT_variable_parameter = 0x4b COMMA + DW_AT_virtuality = 0x4c COMMA + DW_AT_vtable_elem_location = 0x4d COMMA + /* DWARF 3 values. */ + DW_AT_allocated = 0x4e COMMA + DW_AT_associated = 0x4f COMMA + DW_AT_data_location = 0x50 COMMA + DW_AT_stride = 0x51 COMMA + DW_AT_entry_pc = 0x52 COMMA + DW_AT_use_UTF8 = 0x53 COMMA + DW_AT_extension = 0x54 COMMA + DW_AT_ranges = 0x55 COMMA + DW_AT_trampoline = 0x56 COMMA + DW_AT_call_column = 0x57 COMMA + DW_AT_call_file = 0x58 COMMA + DW_AT_call_line = 0x59 COMMA + /* SGI/MIPS extensions. */ + DW_AT_MIPS_fde = 0x2001 COMMA + DW_AT_MIPS_loop_begin = 0x2002 COMMA + DW_AT_MIPS_tail_loop_begin = 0x2003 COMMA + DW_AT_MIPS_epilog_begin = 0x2004 COMMA + DW_AT_MIPS_loop_unroll_factor = 0x2005 COMMA + DW_AT_MIPS_software_pipeline_depth = 0x2006 COMMA + DW_AT_MIPS_linkage_name = 0x2007 COMMA + DW_AT_MIPS_stride = 0x2008 COMMA + DW_AT_MIPS_abstract_name = 0x2009 COMMA + DW_AT_MIPS_clone_origin = 0x200a COMMA + DW_AT_MIPS_has_inlines = 0x200b COMMA + /* GNU extensions. */ + DW_AT_sf_names = 0x2101 COMMA + DW_AT_src_info = 0x2102 COMMA + DW_AT_mac_info = 0x2103 COMMA + DW_AT_src_coords = 0x2104 COMMA + DW_AT_body_begin = 0x2105 COMMA + DW_AT_body_end = 0x2106 COMMA + DW_AT_GNU_vector = 0x2107 COMMA + /* VMS extensions. */ + DW_AT_VMS_rtnbeg_pd_address = 0x2201 COMMA + /* UPC extension. */ + DW_AT_upc_threads_scaled = 0x3210 +IF_NOT_ASM(};) + +#define DW_AT_lo_user 0x2000 /* Implementation-defined range start. */ +#define DW_AT_hi_user 0x3ff0 /* Implementation-defined range end. */ + +/* Location atom names and codes. */ +ENUM(dwarf_location_atom) + + DW_OP_addr = 0x03 COMMA + DW_OP_deref = 0x06 COMMA + DW_OP_const1u = 0x08 COMMA + DW_OP_const1s = 0x09 COMMA + DW_OP_const2u = 0x0a COMMA + DW_OP_const2s = 0x0b COMMA + DW_OP_const4u = 0x0c COMMA + DW_OP_const4s = 0x0d COMMA + DW_OP_const8u = 0x0e COMMA + DW_OP_const8s = 0x0f COMMA + DW_OP_constu = 0x10 COMMA + DW_OP_consts = 0x11 COMMA + DW_OP_dup = 0x12 COMMA + DW_OP_drop = 0x13 COMMA + DW_OP_over = 0x14 COMMA + DW_OP_pick = 0x15 COMMA + DW_OP_swap = 0x16 COMMA + DW_OP_rot = 0x17 COMMA + DW_OP_xderef = 0x18 COMMA + DW_OP_abs = 0x19 COMMA + DW_OP_and = 0x1a COMMA + DW_OP_div = 0x1b COMMA + DW_OP_minus = 0x1c COMMA + DW_OP_mod = 0x1d COMMA + DW_OP_mul = 0x1e COMMA + DW_OP_neg = 0x1f COMMA + DW_OP_not = 0x20 COMMA + DW_OP_or = 0x21 COMMA + DW_OP_plus = 0x22 COMMA + DW_OP_plus_uconst = 0x23 COMMA + DW_OP_shl = 0x24 COMMA + DW_OP_shr = 0x25 COMMA + DW_OP_shra = 0x26 COMMA + DW_OP_xor = 0x27 COMMA + DW_OP_bra = 0x28 COMMA + DW_OP_eq = 0x29 COMMA + DW_OP_ge = 0x2a COMMA + DW_OP_gt = 0x2b COMMA + DW_OP_le = 0x2c COMMA + DW_OP_lt = 0x2d COMMA + DW_OP_ne = 0x2e COMMA + DW_OP_skip = 0x2f COMMA + DW_OP_lit0 = 0x30 COMMA + DW_OP_lit1 = 0x31 COMMA + DW_OP_lit2 = 0x32 COMMA + DW_OP_lit3 = 0x33 COMMA + DW_OP_lit4 = 0x34 COMMA + DW_OP_lit5 = 0x35 COMMA + DW_OP_lit6 = 0x36 COMMA + DW_OP_lit7 = 0x37 COMMA + DW_OP_lit8 = 0x38 COMMA + DW_OP_lit9 = 0x39 COMMA + DW_OP_lit10 = 0x3a COMMA + DW_OP_lit11 = 0x3b COMMA + DW_OP_lit12 = 0x3c COMMA + DW_OP_lit13 = 0x3d COMMA + DW_OP_lit14 = 0x3e COMMA + DW_OP_lit15 = 0x3f COMMA + DW_OP_lit16 = 0x40 COMMA + DW_OP_lit17 = 0x41 COMMA + DW_OP_lit18 = 0x42 COMMA + DW_OP_lit19 = 0x43 COMMA + DW_OP_lit20 = 0x44 COMMA + DW_OP_lit21 = 0x45 COMMA + DW_OP_lit22 = 0x46 COMMA + DW_OP_lit23 = 0x47 COMMA + DW_OP_lit24 = 0x48 COMMA + DW_OP_lit25 = 0x49 COMMA + DW_OP_lit26 = 0x4a COMMA + DW_OP_lit27 = 0x4b COMMA + DW_OP_lit28 = 0x4c COMMA + DW_OP_lit29 = 0x4d COMMA + DW_OP_lit30 = 0x4e COMMA + DW_OP_lit31 = 0x4f COMMA + DW_OP_reg0 = 0x50 COMMA + DW_OP_reg1 = 0x51 COMMA + DW_OP_reg2 = 0x52 COMMA + DW_OP_reg3 = 0x53 COMMA + DW_OP_reg4 = 0x54 COMMA + DW_OP_reg5 = 0x55 COMMA + DW_OP_reg6 = 0x56 COMMA + DW_OP_reg7 = 0x57 COMMA + DW_OP_reg8 = 0x58 COMMA + DW_OP_reg9 = 0x59 COMMA + DW_OP_reg10 = 0x5a COMMA + DW_OP_reg11 = 0x5b COMMA + DW_OP_reg12 = 0x5c COMMA + DW_OP_reg13 = 0x5d COMMA + DW_OP_reg14 = 0x5e COMMA + DW_OP_reg15 = 0x5f COMMA + DW_OP_reg16 = 0x60 COMMA + DW_OP_reg17 = 0x61 COMMA + DW_OP_reg18 = 0x62 COMMA + DW_OP_reg19 = 0x63 COMMA + DW_OP_reg20 = 0x64 COMMA + DW_OP_reg21 = 0x65 COMMA + DW_OP_reg22 = 0x66 COMMA + DW_OP_reg23 = 0x67 COMMA + DW_OP_reg24 = 0x68 COMMA + DW_OP_reg25 = 0x69 COMMA + DW_OP_reg26 = 0x6a COMMA + DW_OP_reg27 = 0x6b COMMA + DW_OP_reg28 = 0x6c COMMA + DW_OP_reg29 = 0x6d COMMA + DW_OP_reg30 = 0x6e COMMA + DW_OP_reg31 = 0x6f COMMA + DW_OP_breg0 = 0x70 COMMA + DW_OP_breg1 = 0x71 COMMA + DW_OP_breg2 = 0x72 COMMA + DW_OP_breg3 = 0x73 COMMA + DW_OP_breg4 = 0x74 COMMA + DW_OP_breg5 = 0x75 COMMA + DW_OP_breg6 = 0x76 COMMA + DW_OP_breg7 = 0x77 COMMA + DW_OP_breg8 = 0x78 COMMA + DW_OP_breg9 = 0x79 COMMA + DW_OP_breg10 = 0x7a COMMA + DW_OP_breg11 = 0x7b COMMA + DW_OP_breg12 = 0x7c COMMA + DW_OP_breg13 = 0x7d COMMA + DW_OP_breg14 = 0x7e COMMA + DW_OP_breg15 = 0x7f COMMA + DW_OP_breg16 = 0x80 COMMA + DW_OP_breg17 = 0x81 COMMA + DW_OP_breg18 = 0x82 COMMA + DW_OP_breg19 = 0x83 COMMA + DW_OP_breg20 = 0x84 COMMA + DW_OP_breg21 = 0x85 COMMA + DW_OP_breg22 = 0x86 COMMA + DW_OP_breg23 = 0x87 COMMA + DW_OP_breg24 = 0x88 COMMA + DW_OP_breg25 = 0x89 COMMA + DW_OP_breg26 = 0x8a COMMA + DW_OP_breg27 = 0x8b COMMA + DW_OP_breg28 = 0x8c COMMA + DW_OP_breg29 = 0x8d COMMA + DW_OP_breg30 = 0x8e COMMA + DW_OP_breg31 = 0x8f COMMA + DW_OP_regx = 0x90 COMMA + DW_OP_fbreg = 0x91 COMMA + DW_OP_bregx = 0x92 COMMA + DW_OP_piece = 0x93 COMMA + DW_OP_deref_size = 0x94 COMMA + DW_OP_xderef_size = 0x95 COMMA + DW_OP_nop = 0x96 COMMA + /* DWARF 3 extensions. */ + DW_OP_push_object_address = 0x97 COMMA + DW_OP_call2 = 0x98 COMMA + DW_OP_call4 = 0x99 COMMA + DW_OP_call_ref = 0x9a COMMA + /* GNU extensions. */ + DW_OP_GNU_push_tls_address = 0xe0 +IF_NOT_ASM(};) + +#define DW_OP_lo_user 0xe0 /* Implementation-defined range start. */ +#define DW_OP_hi_user 0xff /* Implementation-defined range end. */ + +/* Type encodings. */ +ENUM(dwarf_type) + + DW_ATE_void = 0x0 COMMA + DW_ATE_address = 0x1 COMMA + DW_ATE_boolean = 0x2 COMMA + DW_ATE_complex_float = 0x3 COMMA + DW_ATE_float = 0x4 COMMA + DW_ATE_signed = 0x5 COMMA + DW_ATE_signed_char = 0x6 COMMA + DW_ATE_unsigned = 0x7 COMMA + DW_ATE_unsigned_char = 0x8 COMMA + /* DWARF 3. */ + DW_ATE_imaginary_float = 0x9 +IF_NOT_ASM(};) + +#define DW_ATE_lo_user 0x80 +#define DW_ATE_hi_user 0xff + +/* Array ordering names and codes. */ +ENUM(dwarf_array_dim_ordering) + + DW_ORD_row_major = 0 COMMA + DW_ORD_col_major = 1 +IF_NOT_ASM(};) + +/* Access attribute. */ +ENUM(dwarf_access_attribute) + + DW_ACCESS_public = 1 COMMA + DW_ACCESS_protected = 2 COMMA + DW_ACCESS_private = 3 +IF_NOT_ASM(};) + +/* Visibility. */ +ENUM(dwarf_visibility_attribute) + + DW_VIS_local = 1 COMMA + DW_VIS_exported = 2 COMMA + DW_VIS_qualified = 3 +IF_NOT_ASM(};) + +/* Virtuality. */ +ENUM(dwarf_virtuality_attribute) + + DW_VIRTUALITY_none = 0 COMMA + DW_VIRTUALITY_virtual = 1 COMMA + DW_VIRTUALITY_pure_virtual = 2 +IF_NOT_ASM(};) + +/* Case sensitivity. */ +ENUM(dwarf_id_case) + + DW_ID_case_sensitive = 0 COMMA + DW_ID_up_case = 1 COMMA + DW_ID_down_case = 2 COMMA + DW_ID_case_insensitive = 3 +IF_NOT_ASM(};) + +/* Calling convention. */ +ENUM(dwarf_calling_convention) + + DW_CC_normal = 0x1 COMMA + DW_CC_program = 0x2 COMMA + DW_CC_nocall = 0x3 +IF_NOT_ASM(};) + +#define DW_CC_lo_user 0x40 +#define DW_CC_hi_user 0xff + +/* Inline attribute. */ +ENUM(dwarf_inline_attribute) + + DW_INL_not_inlined = 0 COMMA + DW_INL_inlined = 1 COMMA + DW_INL_declared_not_inlined = 2 COMMA + DW_INL_declared_inlined = 3 +IF_NOT_ASM(};) + +/* Discriminant lists. */ +ENUM(dwarf_discrim_list) + + DW_DSC_label = 0 COMMA + DW_DSC_range = 1 +IF_NOT_ASM(};) + +/* Line number opcodes. */ +ENUM(dwarf_line_number_ops) + + DW_LNS_extended_op = 0 COMMA + DW_LNS_copy = 1 COMMA + DW_LNS_advance_pc = 2 COMMA + DW_LNS_advance_line = 3 COMMA + DW_LNS_set_file = 4 COMMA + DW_LNS_set_column = 5 COMMA + DW_LNS_negate_stmt = 6 COMMA + DW_LNS_set_basic_block = 7 COMMA + DW_LNS_const_add_pc = 8 COMMA + DW_LNS_fixed_advance_pc = 9 COMMA + /* DWARF 3. */ + DW_LNS_set_prologue_end = 10 COMMA + DW_LNS_set_epilogue_begin = 11 COMMA + DW_LNS_set_isa = 12 +IF_NOT_ASM(};) + +/* Line number extended opcodes. */ +ENUM(dwarf_line_number_x_ops) + + DW_LNE_end_sequence = 1 COMMA + DW_LNE_set_address = 2 COMMA + DW_LNE_define_file = 3 +IF_NOT_ASM(};) + +/* Call frame information. */ +ENUM(dwarf_call_frame_info) + + DW_CFA_advance_loc = 0x40 COMMA + DW_CFA_offset = 0x80 COMMA + DW_CFA_restore = 0xc0 COMMA + DW_CFA_nop = 0x00 COMMA + DW_CFA_set_loc = 0x01 COMMA + DW_CFA_advance_loc1 = 0x02 COMMA + DW_CFA_advance_loc2 = 0x03 COMMA + DW_CFA_advance_loc4 = 0x04 COMMA + DW_CFA_offset_extended = 0x05 COMMA + DW_CFA_restore_extended = 0x06 COMMA + DW_CFA_undefined = 0x07 COMMA + DW_CFA_same_value = 0x08 COMMA + DW_CFA_register = 0x09 COMMA + DW_CFA_remember_state = 0x0a COMMA + DW_CFA_restore_state = 0x0b COMMA + DW_CFA_def_cfa = 0x0c COMMA + DW_CFA_def_cfa_register = 0x0d COMMA + DW_CFA_def_cfa_offset = 0x0e COMMA + + /* DWARF 3. */ + DW_CFA_def_cfa_expression = 0x0f COMMA + DW_CFA_expression = 0x10 COMMA + DW_CFA_offset_extended_sf = 0x11 COMMA + DW_CFA_def_cfa_sf = 0x12 COMMA + DW_CFA_def_cfa_offset_sf = 0x13 COMMA + + /* SGI/MIPS specific. */ + DW_CFA_MIPS_advance_loc8 = 0x1d COMMA + + /* GNU extensions. */ + DW_CFA_GNU_window_save = 0x2d COMMA + DW_CFA_GNU_args_size = 0x2e COMMA + DW_CFA_GNU_negative_offset_extended = 0x2f +IF_NOT_ASM(};) + +#define DW_CIE_ID 0xffffffff +#define DW_CIE_VERSION 1 + +#define DW_CFA_extended 0 +#define DW_CFA_lo_user 0x1c +#define DW_CFA_hi_user 0x3f + +#define DW_CHILDREN_no 0x00 +#define DW_CHILDREN_yes 0x01 + +#define DW_ADDR_none 0 + +/* Source language names and codes. */ +ENUM(dwarf_source_language) + + DW_LANG_C89 = 0x0001 COMMA + DW_LANG_C = 0x0002 COMMA + DW_LANG_Ada83 = 0x0003 COMMA + DW_LANG_C_plus_plus = 0x0004 COMMA + DW_LANG_Cobol74 = 0x0005 COMMA + DW_LANG_Cobol85 = 0x0006 COMMA + DW_LANG_Fortran77 = 0x0007 COMMA + DW_LANG_Fortran90 = 0x0008 COMMA + DW_LANG_Pascal83 = 0x0009 COMMA + DW_LANG_Modula2 = 0x000a COMMA + DW_LANG_Java = 0x000b COMMA + /* DWARF 3. */ + DW_LANG_C99 = 0x000c COMMA + DW_LANG_Ada95 = 0x000d COMMA + DW_LANG_Fortran95 = 0x000e COMMA + /* MIPS. */ + DW_LANG_Mips_Assembler = 0x8001 COMMA + /* UPC. */ + DW_LANG_Upc = 0x8765 +IF_NOT_ASM(};) + +#define DW_LANG_lo_user 0x8000 /* Implementation-defined range start. */ +#define DW_LANG_hi_user 0xffff /* Implementation-defined range start. */ + +/* Names and codes for macro information. */ +ENUM(dwarf_macinfo_record_type) + + DW_MACINFO_define = 1 COMMA + DW_MACINFO_undef = 2 COMMA + DW_MACINFO_start_file = 3 COMMA + DW_MACINFO_end_file = 4 COMMA + DW_MACINFO_vendor_ext = 255 +IF_NOT_ASM(};) + +/* @@@ For use with GNU frame unwind information. */ + +#define DW_EH_PE_absptr 0x00 +#define DW_EH_PE_omit 0xff + +#define DW_EH_PE_uleb128 0x01 +#define DW_EH_PE_udata2 0x02 +#define DW_EH_PE_udata4 0x03 +#define DW_EH_PE_udata8 0x04 +#define DW_EH_PE_sleb128 0x09 +#define DW_EH_PE_sdata2 0x0A +#define DW_EH_PE_sdata4 0x0B +#define DW_EH_PE_sdata8 0x0C +#define DW_EH_PE_signed 0x08 + +#define DW_EH_PE_pcrel 0x10 +#define DW_EH_PE_textrel 0x20 +#define DW_EH_PE_datarel 0x30 +#define DW_EH_PE_funcrel 0x40 +#define DW_EH_PE_aligned 0x50 + +#define DW_EH_PE_indirect 0x80 + +#endif /* _ELF_DWARF2_H */