Annotation of cf/ChangeLog, revision 1.1.1.4

1.1       root        1: /*
                      2:  * Cisco 7200 (Predator) simulation platform.
                      3:  */
                      4: 
                      5: 15-Aug-2005, the project is starting.
                      6:        
                      7: 18-Aug-2005
                      8: -----------
                      9:   - Added support for: sll, addu/subu.
                     10:   - Fixed bugs with b... branch instructions (bad computation of new pc).
                     11:   - Added patch recording for blocks.
                     12:   - A sequence of MIPS instructions (without memory access instructions)
                     13:     from IOS was successfully run ! (need to check correctness).
                     14: 
                     15: 22-Aug-2005
                     16: -----------
                     17:   - Implemented a basic memory subsystem with an mmaped file.
                     18:   - Added memory access instructions (lb,lbu,lh,lhu,lw,lwu,ld,sb,sh,sw,sd).
                     19:   - Added a cross-compiled test program.
                     20:        
                     21: 23-Aug-2005
                     22: -----------
                     23:   - Fixed slti, sltiu, slt instructions.
                     24:   - Fixed memory endianness.
                     25:   - Fixed host memory addressing (bad haddr computation).
                     26: 
                     27: 24-Aug-2005
                     28: -----------
                     29:   - Added a generic memory address lookup function.
                     30:   - Added a minimal ELF loader.
                     31: 
                     32: 28-Aug-2005
                     33: -----------
                     34:   - ELF loader now loads files page per page.
                     35:   - Added device support (with RAM support).
                     36:   - Added MTS32 support for mapping of 4 Kb pages.
                     37:   - Added MTS32 support for device mapping in kernel mode and generic
                     38:     virtual to physical mapping (preparation for TLB).
                     39:   - Added a dummy console driver.
                     40:   - Added mult,multu,div,divu instructions.
                     41:        
                     42: 29-Aug-2005
                     43: -----------
                     44:   - Added a Red-Black trees module.
                     45:   - Block locator uses RB tree module.
                     46:   - It is now possible to run a program with multiple functions!
                     47:   - ELF loader now support multiple program headers and entry point is
                     48:     now used.
                     49:   - Fixed x86 buffer adjustment.
                     50:   - Modified console to be at the same address than c7200 DUART (to test
                     51:     microcode).
                     52:   - Memory access functions now update PC.
                     53:   - Added sra, srl, sllv, srlv, srav instructions.
                     54: 
                     55: 30-Aug-2005
                     56: -----------
                     57:   - Added dsrl32, dsll32, dsra, dsrav, dsra32 instructions.
                     58:   - Added bgtz, blez, bgez instructions.
                     59:   - Fixed sltu instruction.
                     60:   - ELF Entry point is now sign-extended.
                     61:   - Added blezl, bgtzl instructions.
                     62:   - Fixed the MIPS scanner to use unsigned 64-bits integers for addresses.
                     63:   - Added unknown opcode management (basic, it just print the unhandled
                     64:     opcode value and continues).
                     65:   - Added cache instruction.
                     66:   - Added bltzal, bltzall, bgezal, bgezall instructions.
                     67: 
                     68: 31-Aug-2005
                     69: -----------
                     70:   - Added System coprocessor (CP0) definitions.
                     71:   - Added tlbr instruction.
                     72:   - Added basic tlbwi instruction (doesn't change the MTS mappings now).
                     73:   - Added dmfc0, dmtc0, mfc0, mtc0 instructions.
                     74:   - Added TLB dump functions.
                     75:   - Added dummy pref/prefi instructions.       
                     76:   - Added basic exception trigger.
                     77:   - Added syscall, break instructions.
                     78:        
                     79: 01-Sep-2005
                     80: -----------
                     81:   - Fixed exception trigger.
                     82:   - Added dmfc1, dmtc1, mfc1, mtc1, sdc1 instructions.
                     83:   - Fixed the break instruction.
                     84:   - Modified the memory handling to be more friendly with instructions
                     85:     like sdc1 and for more safety in case of badly written device drivers.
                     86:   - Added ldc1 instruction.
                     87: 
                     88: 02-Sep-2005
                     89: -----------
                     90:   - Fixed sltiu/sltu instructions that were doing signed comparisons
                     91:     instead of unsigned comparisons (mis-use of jit).
                     92:   - Added lwr/lwl, swr/swl, ldl/ldr, sdr/sdl, ll/sc instructions 
                     93:     (not tested).      
                     94:   - Added PCI bus management.
                     95:   - Added GT64010 (PCI controller) device.
                     96:   - Added DEC 21050 (PCI bridge) device.
                     97:   - Added NVRAM.
                     98: 
                     99: 03-Sep-2005
                    100: -----------
                    101:   - Beginning of work on IRQs.
                    102: 
                    103: 04-Sep-2005
                    104: -----------
                    105:   - Timer IRQ should be OK.
                    106:   - Added C7200 bay management and Midplane FPGA.
                    107:   - Fixed the JR instruction which was broken in a case like that:
                    108:        lwu k1,0(k1)
                    109:        jr k1
                    110:        move k1,zero
                    111: 
                    112: 05-Sep-2005
                    113: -----------
                    114:   - Fixed jalr (as jr) instruction.
                    115:   - Added RAM "aliasing".
                    116:   - Added SRAM management.
                    117:   - Fixed NVRAM size.
                    118:   - Fixed ldr, swl/swr instructions.
                    119:   - Added c7200 IOcard.
                    120:   - Count register is now properly handled.
                    121:   - Added basic functions to set/clear interrupts.
                    122:   - Modified the console driver to trigger DUART interrupt.
                    123:   - IOS now starts!
                    124:        
                    125: 06-Sep-2005
                    126: -----------
                    127:   - Added "move" virtual instruction. It correspond to "addu" with rt=0.
                    128:     Here it avoids an useless add.
                    129:   - Added b/bal virtual instructions.
                    130:   - Packed NVRAM.
                    131: 
                    132: 08-Sep-2005
                    133: -----------
                    134:   - Added Dallas DS1620 temperature sensors.
                    135:   - Added voltage sensors.
                    136:   - Power supplies are now faked.
                    137:   - IOS Environmental Monitor doesn't try to shutdown the router anymore!
                    138:   - Device list is now displayed at startup.
                    139:        
                    140: 18-Sep-2005
                    141: -----------
                    142:   - Added Address Error Load/Save, TLB Load/Save exceptions.
                    143:     TODO: Branch Delay Slot management.
                    144:   - Modified the default value in config register in CP0 to set appropriate
                    145:     cache sizes. Now it is possible to boot compressed images directly!
                    146:   - Added the teq/teqi instructions.
                    147:   - Hmm, seen some IOS images (k9?) that seem to use the FPU (CP1). This
                    148:     does not prevent the image to boot, but some features will probably
                    149:     be not functional.
                    150:        
                    151: 19-Sep-2005
                    152: -----------
                    153:   - Tweaked the console driver to generate a dummy interrupt. It avoids
                    154:     the console problems.
                    155:   - Fixed the serial driver mueslix PCI vendor/device code.
                    156:   - The midplane FPGA now returns voltages based on virtual PA EEPROM
                    157:     presence. Up to 6 PA-8T were successfully emulated!
                    158: 
                    159: 20-Sep-2005
                    160: -----------
                    161:   - Included amd64-codegen.h with a (near empty) translator.
                    162:   - Some code factorization.
                    163:        
                    164: 21-Sep-2005
                    165: -----------
                    166:   - Added CPU state save/restore on disk.
                    167:   - Sending SIGQUIT to the process dumps the MIPS64 VM state on disk.
                    168:     (only CPU state is saved for now).
                    169:     Device state is not saved, so this does not work with booted IOS images
                    170:     for now (it works for an IOS image being self-decompressing, though).
                    171:   - Some code cleanups.
                    172: 
                    173: 23-Sep-2005
                    174: -----------
                    175:   - Fixed "Dirty" bit in TLB entries.
                    176:   - Extended the number of TLB entries from 48 to 64.
                    177:   - Added tlbp instruction.
                    178:   - Modified the nmc93c46 eeprom driver to allow more than 32 bytes reading.
                    179: 
                    180: 24-Sep-2005
                    181: -----------
                    182:   - Added a symbol table loader.
                    183: 
                    184: 26-Sep-2005
                    185: -----------
                    186:   - Added support for writing in PCI registers
                    187:   - Added a RAW file loader.
                    188:   - Added "add" instruction (without exception support).
                    189: 
                    190: 07-Oct-2005
                    191: -----------
                    192:   - Continued work on SMP support.
                    193:        
                    194: 08-Oct-2005
                    195: -----------
                    196:   - Replaced memory operations with fastcalls instead of asmlinkage functions.
                    197:   - Continued work on SMP support. Now it should be complete, except for
                    198:     LL/SC instructions.
                    199: 
                    200: 10-Oct-2005
                    201: -----------
                    202:   - A lot of work on amd64 jit compiler.
                    203:   - The memory management should be 64-bit compliant now.
                    204:        
                    205: 17-Oct-2005
                    206: -----------
1.1.1.4 ! root      207:   - Fixed a bug in SRA instruction in amd64 jit code. Dynamips is now working
1.1       root      208:     on amd64!
                    209: 
                    210: 26-Oct-2005
                    211: -----------
                    212:   - Created a virtual device giving the VM parameters.
                    213:   - Added command line parsing (patch from Nicolas Szalay).
                    214:   - Fixed ERET instruction (LLbit clearing was lacking).
                    215:   - Fixed BREAK instruction (x86/amd64).
                    216:   - Fixed 2 GB limit for log file.
                    217:   - Fixed clobbered registers in x86 translation.
                    218:         
                    219: 28-Oct-2005
                    220: -----------
                    221:   - Added a non-JIT mode (not completely working now)
                    222:   - Added "-j" flag on the command line to disable JIT.
                    223:   - Fixed some stupid bugs in shift operations.
                    224: 
                    225: 31-Oct-2005
                    226: -----------
                    227:   - Thanks to the great help of mtve, we have a working DEC21140 Ethernet
                    228:     driver and now the virtual C7200 can see the real world!!!
                    229: 
                    230: 01-Nov-2005
                    231: -----------
                    232:   - Beginning of a NETIO module to handle network I/O with external world.
                    233:   - Studied (a bit) the PA-8T controller on a real router.
                    234:   - It is now possible to set the base MAC address of the router
                    235:     using the "-m" flag.
                    236:   - Improved logging
                    237:   - The dec21140 code is generalized and it is now possible to have a 
                    238:     PA-FE-TX in any slot.
                    239:        
                    240: 02-Nov-2005
                    241: -----------
                    242:   - Fixed some problems with the NVRAM when it is empty ;
                    243:   - Added a "net_io.c" module that is an abstraction layer
                    244:     for network communications (TAP, Unix sockets...)
                    245:   - Added the "virtual" MIPS "li" instruction which
                    246:     is in fact "addiu reg,zero,value". This permits to have
                    247:     a more optimized JIT code.
                    248:   - Code factorization in the DEC21140 module.
                    249:   - mtve (aka "Mtv Europe") sent a patch for much better console handling,
                    250:     merge is planned on 03-Nov.
                    251:   - Added a "PA driver" framework.
                    252: 
                    253: 03-Nov-2005
                    254: -----------
                    255:   - The console is better handled: special keys are working, and there
                    256:     is a FIFO buffer to avoid character loss (added a "dev_vtty.c" module).
                    257:   - Merging with Mtve patch, that cleans NETIO module and adds features
                    258:     to the console.
                    259:   - Added a clock divisor hack, but it is not completely working.
                    260:     todo: implement a command line option for this.    
                    261: 
                    262: 08-Nov-2005
                    263: -----------
                    264:   - Mtve added tcp client/server NETIO.
                    265:   - The clock divisor is now working! It is set by the "-k" command line
                    266:     option.
                    267:   - Fixed the csr5 register handling in DEC21140 driver code.
                    268: 
                    269: 13-Nov-2005
                    270: -----------
                    271:   - A lot of cosmetic changes from Mtve.
                    272:   - Modified the infrastructure to allow the use of CPU groups
                    273:     that share a certain number of devices (per-CPU device array).
                    274:     All device drivers have been modified to handle this.
                    275:   - Took a look at LSI ATMizer II+, which is the circuit used on
                    276:     PA-A3-OC3 boards. The ATMizer is based on a MIPS CPU, so it should
                    277:     be possible to emulate it.
                    278:   - Added a per-CPU dedicated thread.
                    279:        
                    280: 23-Nov-2005
                    281: -----------
                    282:   - The PA-A1 ATM stuff is working!!!
                    283: 
                    284: 24-Nov-2005
                    285: -----------
                    286:   - Fixed a bug in the PA-A1 driver in TX buffer chaining.
                    287: 
                    288: 25-Nov-2005
                    289: -----------
                    290:   - Address bus masking, which clears bits 32 and 33 of physical addresses.
                    291:     It avoids the use of device aliasing.
                    292:   - Fixed the DEC21140 TX part which was incomplete.
                    293: 
                    294: 29-Nov-2005
                    295: -----------
                    296:   - There are still bugs in big packet forwarding. This is probably the ATM
                    297:     driver (added more debugging info).
                    298:   - Fabien Devaux wrote a README explaining the command line options.
                    299:        
                    300: 30-Nov-2005
                    301: -----------
                    302:   - Code cleanup in the net_io module.
                    303:   - Added the "ptask" (periodic tasks) module, this is mainly for TX ring
                    304:     scanning of network devices.
                    305: 
                    306: 01-Dec-2005
                    307: -----------
                    308:   - Added a memory logger (FIFO of 10 accesses), this was useful to debug the
                    309:     PA-A1 RX problem.
                    310:   - Fixed a RX buffer chaining problem in PA-A1.
                    311: 
                    312: 02-Dec-2005
                    313: -----------
                    314:   - Added support for PA-A1 reset ("clear int", "shut/no shut").
                    315:   - Optimized the IRQ handling (irq_pending flag in CPU structure
                    316:     is used as a "cache").
                    317: 
                    318: 05-Dec-2005
                    319: -----------
                    320:   - Optimized the cp0 count/compare process for the x86_64 platform
                    321:     (unfortunately, this doesn't work for the x86 platform).
                    322: 
                    323: 06-Dec-2005
                    324: -----------
                    325:   - Modified the NVRAM handling to allow calendar emulation ("sh calendar" is
                    326:     now working).
                    327: 
                    328: 12-Dec-2005
                    329: -----------
                    330:   - Added support for the NPE-400.
                    331:   - Playing with the PA-POS-2OC3 (called "Charlotte" by Cisco).
                    332: 
                    333: 15-Dec-2005
                    334: -----------
                    335:   - Added teq/teqi instructions to the x86_64 jit.
                    336: 
                    337: 20-Dec-2005
                    338: -----------
                    339:   - Added a Virtual ATM switch fabric to emulate an ATM backbone.
                    340: 
                    341: 22-Dec-2005
                    342: -----------
                    343:   - Final release for 0.2.2 train (0.2.2i).
                    344:        
                    345: 23-Dec-2005
                    346: -----------
                    347:   - Starting 0.2.3 train (0.2.3a)
                    348:   - Added proper NPE-150 support.
                    349:   - Added bit-bucket support (zeroed memory zone).
                    350:   - Added NPE type selection.
                    351: 
                    352: 24-Dec-2005
                    353: -----------
                    354:   - Added beginning of support for NPE-300 (endianness problems with PCI
                    355:     controllers ?)
                    356: 
                    357: 28-Dec-2005
                    358: -----------
                    359:   - Fixed the endianness problem with the NPE-300.
                    360:   - Added NPE300-IO-FE.
                    361: 
                    362: 31-Dec-2005
                    363: -----------
                    364:   - Added CLI option to load a symbol file.
                    365:   - Moved JIT code from dynamips.c to mips64_jit.c
                    366:   - Added support for NPE-100.
                    367:   - Updated the README file for NPE type selection.
                    368:   - Suppressed the annoying message "%%Error: Unrecognized I/O card in bay 0"
                    369: 
                    370: 03-Jan-2006
                    371: -----------
                    372:   - The bit clearing in physical addresses was done stupidly.
                    373:     Only the bit 33 is used to bypass L2 caching. 
                    374:     Re-introduced SRAM aliasing.
                    375:     PHY address 0x100000000 is in fact for PCI I/O space.
                    376:   - Began to play with the Cirrus Logic PD6729.
                    377:   - Added Bootflash based on Intel 28F008SA chips (1 Mb)
                    378:   - Fixed the alignment error occuring with "show version".
                    379: 
                    380: 04-Jan-2006
                    381: -----------
                    382:   - Better understanding of Flash SIMM register with bank number and bank
                    383:     size: modified the Flash SIMM code to handle a 8 Mb flash in 1 bank
                    384:     (emulation of Intel 28F016SA chip) which should be sufficient to store 
                    385:     crashinfo files or misc files like configs,...
                    386:   - Added ROM remote logging capabilities (with remote emulator control).
                    387: 
                    388: 05-Jan-2006
                    389: -----------
                    390:   - Integrated HEC and AAL5 field computation functions found at:
                    391:     http://cell-relay.indiana.edu/cell-relay/publications/software/CRC/
                    392:     (Author is Charles Michael Heard).
                    393:   - Added HEC field management to the virtual ATM switch fabric.
                    394:   - Added HEC and AAL5 CRC fields to the TX part of the TNETA1570 driver.
                    395: 
                    396: 06-Jan-2006
                    397: -----------
1.1.1.4 ! root      398:   - Added block timestamping, to evaluate use of JIT blocks and eventually
1.1       root      399:     enhance algorithm of block classifying.
                    400:   - Added a flag to the virtual devices to prevent use of MMAPed zones
                    401:     by MTS (used by NVRAM driver).
                    402:   - Added functions to extract IOS configuration from NVRAM.
                    403:     Pressing "Ctrl-] + c" nows write configuration to disk at any time.
                    404:        
                    405: 08-Jan-2006
                    406: -----------
1.1.1.4 ! root      407:   - Added support for PEM (NPE-B) EEPROM. It will probably allow support
1.1       root      408:     of NPE-175/NPE-225.
                    409: 
                    410: 09-Jan-2006
                    411: -----------
                    412:   - Added support for NPE-175/NPE-225 and added NPEB-IO-FE.
                    413: 
                    414: 10-Jan-2006
                    415: -----------
                    416:   - Enhancements to the remote console over TCP port.
                    417:   - Port to the Cygwin environment, allowing the emulator to run on Windows
                    418:     machines!
                    419: 
                    420: 11-Jan-2006
                    421: -----------
                    422:   - Added a feature to push an IOS configuration into NVRAM ("-C" command line
                    423:     option). 
                    424:   - Added enhanced checks to the NVRAM config export.
                    425:   - Added a variant of udp_connect() function for systems that do not support
                    426:     RFC 2553.
                    427:   - Added support for AUX port (TCP port).
                    428: 
                    429: 12-Jan-2006
                    430: -----------
                    431:   - Better memory logger.
                    432:   - Added breakpoint capabilities.
                    433:   - Fixed a segfault occuring on some IOS images with x86_64 JIT.
                    434:     (modified the minimum remaining size in JIT buffer adjustment).
                    435: 
                    436: 13-Jan-2006
                    437: -----------
                    438:   - The ROM is now embedded in the source code (added an utility to convert
                    439:     ELF file to C code). It is possible to use an alternate ROM using the
                    440:     "-R" option.
                    441:   - Enhanced the MTS lookups to allow use of embedded ROM for code execution.
                    442: 
                    443: 15-Jan-2006
                    444: -----------
                    445:   - Added PCI I/O space management.
                    446:   - Added a fake Cirrus Logic PD6729 PCI-to-PCMCIA host adapter.
                    447:   - Cleanups in NPE initialization code.
                    448:   - Fixed some bridge problems with the NPE-300.
                    449:   - Code factorization in the C7200 initialization module.
                    450:   - Generalization of C7200-IO-FE driver for all NPE types.
                    451:   - Added Fault History support.
                    452:   - Added chassis selection (standard or VXR)
                    453:   - Finally found the bug in the non-jit emulation code! It was a cast problem
                    454:     in mult/multu instructions.
                    455: 
                    456: 16-Jan-2006
                    457: -----------
                    458:   - Added generic hash tables.
                    459:   - Added "instruction lookup tables" (ILT), which greatly improve performance
                    460:     of non-JIT mode.
                    461:   - Added instruction statistics for the non-JIT mode ("Ctrl-] + j")
                    462: 
                    463: 17-Jan-2006
                    464: -----------
                    465:   - Added a port for non-x86 hosts. The emulator ran successfully on a
                    466:     Tru64 Unix box (Alpha CPU)! It should also be able to compile and run
                    467:     on MacOS X (PowerPC).
                    468: 
                    469: 24-Jan-2006
                    470: -----------
                    471:   - Added support for DMA channels on Galileo GT64k controllers since it seems
1.1.1.4 ! root      472:     that they may be used by IOS (NPE-400 for sure, other NPE?).
1.1       root      473:        
                    474: 25-Jan-2006
                    475: -----------
                    476:   - Added Linux Raw Ethernet driver to the NetIO infrastructure.
                    477:   - Hmm, I'm probably missing something in the DMA/SRAM interaction and
                    478:     endianness... 
                    479: 
                    480: 26-Jan-2006
                    481: -----------
                    482:   - The DMA problem is finally fixed, in fact the SRAM can be accessed with
                    483:     byte-swapping.
                    484:   - Added an unicast limiter to the DEC21140, to receive only trafic directed
                    485:     to the virtual machine (+ multicast/broadcast). This is done by analyzing
                    486:     the setup frames (MAC address filter).
                    487: 
                    488: 27-Jan-2006
                    489: -----------
                    490:   - The Linux Raw Ethernet driver needs promiscuous mode to be enabled to 
                    491:     receive appropriate packets, added the required code.
                    492:   - Added endianness definitions, and replaced hton[sl]/ntoh[sl] by the new
                    493:     definitions (for exchanges between VM and host).
                    494: 
                    495: 28-Jan-2006
                    496: -----------
                    497:   - Added parser infrastructure.
                    498: 
                    499: 29-Jan-2006
                    500: -----------
                    501:   - Added a virtual bridge system.
                    502:   - Release 0.2.3b
                    503: 
1.1.1.2   root      504: 31-Jan-2006
                    505: -----------
                    506:   - Fixed a stupid bug in DMA handling, which in certain conditions can
                    507:     cause an infinite loop.
                    508: 
                    509: 01-Feb-2006
                    510: -----------
                    511:   - Added an "instruction block hash" which avoids lookups in the instruction
                    512:     red-black tree. The IBH table takes only 16 Kb of memory.
                    513:   - Added CRC-12 and CRC-16 functions for future use.
                    514:   - Added a "gen_eth" NetIO driver, which allow to access ethernet interfaces
                    515:     in a portable way (tested on Linux and Cygwin).
                    516:   - Fixes to the PowerPC build on Darwin thanks to Olivier Cahagne.
                    517:   - Minor cosmetic changes to display supported/unsupported PA and NPE.
                    518:   - Release 0.2.3c
1.1.1.3   root      519: 
                    520: 06-Feb-2006
                    521: -----------
                    522:   - Added working Serial interfaces (PA-4T+) !
                    523:   - Bug: CDP not working with serial interfaces ("debug cdp events" reports
                    524:     a checksum problem).
                    525: 
                    526: 07-Feb-2006
                    527: -----------
                    528:   - Started the 0.2.4 release.
                    529:   - Modified the command line parser to allow many NIO per PA (for example
                    530:     for serials).
                    531:   - A lot of code cleanups in the C7200 initialization.
                    532:   - Added PA-8T support.
                    533:   - To fix: CDP with Serial interfaces: using cp_len (instead of cp_len+4)
                    534:     in packet rx fixes the problem but breaks IP. Probably something related
                    535:     to padding, see how a CDP packet is sent (special flag in tx ring ?)
                    536:   - Added virtual "beqz" instruction.
                    537:   - Added the "-X" option, allowing to use host memory directly instead of
                    538:     mapping a file to simulate RAM (faster).
                    539:   - Beginning of code reorganization to allow multiple instance contexts.
                    540: 
                    541: 08-Feb-2006
                    542: -----------
                    543:   - Added a basic virtual Frame-Relay switch. Unfortunately, LMI must be
                    544:     implemented to maintain links up.
                    545:   - Finally found the problem related to CDP! It was simply a padding problem.
                    546: 
                    547: 09-Feb-2006
                    548: -----------
                    549:   - Add support of promiscuous mode for the DEC21140 "unicast limiter":
                    550:     promiscuous mode is used in bridging configurations.
                    551:   - Fixed another bug with the serial interfaces: it seems that there is
                    552:     a "length substractor" for the txring.
                    553: 
                    554: 10-Feb-2006
                    555: -----------
                    556:   - Played a little with the PA-POS-OC3, without success.
                    557:        
                    558: 14-Feb-2006
                    559: -----------
                    560:   - Finally implemented the basic LMI stuff (only ANSI Annex D). Fortunately,
                    561:     IOS rocks and uses auto-detection, so no extra configuration is needed.
                    562:   - Integrated a Makefile patch from Max Khon for FreeBSD.
                    563:   - Updated documentation.
                    564:   - Release 0.2.4.
1.1.1.4 ! root      565: 
        !           566: 15-Feb-2006
        !           567: -----------
        !           568:   - Fixed a cosmetic bug when displaying MAC address at startup.
        !           569:   - Fixed a stupid bug in "srav" instruction in x86_64 JIT code. The
        !           570:     arithmetic shift operation was done on a 64-bit basic instead of 32-bit,
        !           571:     causing bad propagation of the sign-bit.
        !           572:   - Added support for multiple instances (no CLI present yet).
        !           573: 
        !           574: 17-Feb-2006
        !           575: -----------
        !           576:   - Fixed 2 bugs in Frame-Relay switch: a crash occured when receiving
        !           577:     a packet gave an error, and if many DLCI with the same ID on different
        !           578:     interfaces were used, only one was announced on one interface.
        !           579: 
        !           580: 18-Feb-2006
        !           581: -----------
        !           582:   - Began work on advanced configuration parsing (instances).
        !           583: 
        !           584: 19-Feb-2006
        !           585: -----------
        !           586:   - Is the count/compare mechanism pertinent ?
        !           587: 
        !           588: 23-Feb-2006
        !           589: -----------
        !           590:   - Continued work on advanced config parsing (instances,NIO).
        !           591:   - Added registry infrastructure.
        !           592:   - Fixed some mistakes in documentation.
        !           593: 
        !           594: 28-Feb-2006
        !           595: -----------
        !           596:   - Continued work on advanced config parsing (NIO).
        !           597:   - Added an IRQ counter.
        !           598:   - Continued debugging on recurrent crashes problem.
        !           599:   - Added proper checks to mts32_raw_lookup (at least it avoids the
        !           600:     coredump...)
        !           601:   - Added display of all CP0 registers (except TLB).
        !           602: 
        !           603: 02-Mar-2006
        !           604: -----------
        !           605:   - Hardened a little the IRQ subsystem, but this doesn't fix the problem.
        !           606:   - Added a debugging mode to track jumps to address 0 (x86_64 only!).
        !           607:   - Fixed the teq/teqi instructions in amd64/x86 modes that were buggy.
        !           608: 
        !           609: 04-Mar-2006
        !           610: -----------
        !           611:   - Added some assembly optimized routines for x86 hosts.
        !           612:   - Fixed a stupid bug in mts32_raw_lookup (op_size and op_type were
        !           613:     swapped).
        !           614:        
        !           615: 06-Mar-2006
        !           616: -----------
        !           617:   - Added Unix and Null NETIO types for config files.
        !           618:   - Fixes for incorrect behavior in virtual memory access routines, in
        !           619:     case of exception.
        !           620: 
        !           621: 08-Mar-2006
        !           622: -----------
        !           623:   - Removed the configuration file parsing, in favor of a remote control
        !           624:     system for use with the dynagen project.
        !           625:        
        !           626: 09-Mar-2006
        !           627: -----------
        !           628:   - Added basic hypervisor infrastructure.
        !           629:   - Added basic NIO code to the hypervisor commands.
        !           630:        
        !           631: 10-Mar-2006
        !           632: -----------
        !           633:   - Added the hypervisor NIO code.
        !           634:   - Added Frame-Relay and ATM switches to the hypervisor commands.
        !           635:        
        !           636: 11-Mar-2006
        !           637: -----------
        !           638:   - Played (successfully) with OIR (Online Insertion and Removal). OIR
        !           639:     will require device deletion...
        !           640: 
        !           641: 12-Mar-2006
        !           642: -----------
        !           643:   - Fixed EEPROM code which used global variables.
        !           644:   - Added the necessary code for basic OIR.
        !           645:   - Added PCI device removal.
        !           646: 
        !           647: 15-Mar-2006
        !           648: -----------
        !           649:   - A lot of work on C3600 integration (although it is not functional).
        !           650:   - Added a basic ns16552 driver.
        !           651: 
        !           652: 17-Mar-2006
        !           653: -----------
        !           654:   - Added some hypervisor commands for PA setup and OIR.
        !           655:        
        !           656: 20-Mar-2006
        !           657: -----------
        !           658:   - Hardened the Mueslix driver: after OIR, a "no shut" on a new interface
        !           659:     crashed the virtual router. Now, IRQ status is managed appropriately.
        !           660: 
        !           661: 24-Mar-2006
        !           662: -----------
        !           663:   - Added ptask (periodic task) removal.
        !           664:   - Added a basic (nearly empty) C3600 IO FPGA chip.
        !           665: 
        !           666: 25-Mar-2006
        !           667: -----------
        !           668:   - Added a NIO RX multiplexer.
        !           669:   - Added NIO unset operation for PA.
        !           670: 
        !           671: 26-Mar-2006
        !           672: -----------
        !           673:   - Modified the virtual ATM/Frame-Relay switches and NIO bridge to use
        !           674:     the new NIO RX multiplexer.
        !           675:   - Added the NIO bridges to the hypervisor commands.
        !           676:   - Fixed a stupid bug in hypervisor ATM/FR switch command, the VC were
        !           677:     badly parsed.
        !           678:   - Fixed a memory leak in the hypervisor module (tokens not freed).
        !           679: 
        !           680: 27-Mar-2006
        !           681: -----------
        !           682:   - Added appropriate locks to the ATM and Frame-Relay switches.
        !           683:   - Added VC removal for ATM and Frame-Relay switches.
        !           684: 
        !           685: 28-Mar-2006
        !           686: -----------
        !           687:   - Added registry management to the ATM/FR switches and NIO bridge.
        !           688: 
        !           689: 30-Mar-2006
        !           690: -----------
        !           691:   - Added a refcount system to the NIO RX multiplexer.
        !           692: 
        !           693: 31-Mar-2006
        !           694: -----------
        !           695:   - Added NIO removal for NIO bridges.
        !           696:   - Added NIO bridge removal.
        !           697:   - Modified the NIO bridge code to use the registry infrastructure.
        !           698:   - Same as above, for ATM and Frame-Relay switches.
        !           699: 
        !           700: 03-Apr-2006
        !           701: -----------
        !           702:   - Added the required infrastructure for online removal.
        !           703:   - Added hypervisor commands for PA removal and to display C7200 hardware.
        !           704:   - Fixed a bug in PCI device removal.
        !           705:   - It's now possible to change cards on the fly!
        !           706:   - The Mueslix driver was incorrectly modified: the TX ring scanner must
        !           707:     run even if the NIO is not defined.
        !           708:   - Modified the DEC21140 driver to report a Link Down when the NIO is not
        !           709:     defined.
        !           710: 
        !           711: 04-Apr-2006
        !           712: -----------
        !           713:   - Added packet dump (for debugging) to NetIO receive/send operations.
        !           714: 
        !           715: 08-Apr-2006
        !           716: -----------
        !           717:   - The SMP bug seems to be fixed! The irq_cause field is now manipulated
        !           718:     atomically (inline asm for x86 and x86_64, pthread mutex on other 
        !           719:     machines).
        !           720: 
        !           721: 12-Apr-2006
        !           722: -----------
        !           723:   - Added a VM abstraction layer (for different platforms).
        !           724:   - Fix of X86 assembly file for Cygwin.
        !           725:   - The IOS config file is now saved with a specific filename from the
        !           726:     VM instance.
        !           727: 
        !           728: 13-Apr-2006
        !           729: -----------
        !           730:   - Added per-instance logfile.
        !           731: 
        !           732: 14-Apr-2006
        !           733: -----------
        !           734:   - Fixed a stupid bug in non-JIT mode with IRQs.
        !           735: 
        !           736: 17-Apr-2006
        !           737: -----------
        !           738:   - bugfix: "null" NIO creation didn't record the NIO in registry.     
        !           739:   - bugfix: mueslix logging.
        !           740:   - bugfix: adding an NIO to the RX listener list (bad double linked-list)
        !           741:   - bugfix: bad fgets() use in NIO bridge and ATM/FR switches.
        !           742: 
        !           743: 18-Apr-2006
        !           744: -----------
        !           745:   - bugfix: the same NIO could be recorded many times in the NIO RX
        !           746:     multiplexer due to bad design in NIO adding.
        !           747: 
        !           748: 19-Apr-2006
        !           749: -----------
        !           750:   - Beginning of work on AMD Am79c971 ethernet controller (used by PA-4E
        !           751:     and PA-8E).
        !           752: 
        !           753: 20-Apr-2006
        !           754: -----------
        !           755:   - The emulation of AMD Am79c971 seems to be working very well.
        !           756:   - Modified the physical memory dump function to use the VM log file.
        !           757: 
        !           758: 21-Apr-2006
        !           759: -----------
        !           760:   - Modified the PA-4E/PA-8E EEPROM definitions to work with VXR midplanes.
        !           761:   - PA-4E is now usable.
        !           762: 
        !           763: 23-Apr-2006
        !           764: -----------
        !           765:   - Added "shutdown" operation for PA-4E/PA-8E drivers.
        !           766: 
        !           767: 24-Apr-2006
        !           768: -----------
        !           769:   - Enhanced lock file management (with POSIX locks).
        !           770:   - The devices are now dependent from VMs instead of being dependent
        !           771:     of CPU groups. This makes a lot of things cleaner.
        !           772: 
        !           773: 27-Apr-2006
        !           774: -----------
        !           775:   - Added IRQ clearing with GT64K (DMA transfers).
        !           776:   - Study of GT64120 controller to understand address decoding process.
        !           777:        
        !           778: 28-Apr-2006
        !           779: -----------
        !           780:   - Fixed a bug with NPE-175/NPE-225 PEM EEPROM selection.
        !           781:   - The NPE-400 is now able to support 512 Mb of DRAM! (the supplemental
        !           782:     memory is in fact considered as IO memory)
        !           783:   - Added a safety check with RAM size.
        !           784:   - The CPU identifier (PRID register) is now fixed depending on the NPE
        !           785:     board.
        !           786: 
        !           787: 01-May-2006
        !           788: -----------
        !           789:   - Modified device subsystem to order devices by physical addresses,
        !           790:     optimized dev_lookup/dev_lookup_next.
        !           791:   - Added infrastructure for various object cleanup.
        !           792:   - Added "shutdown" code for SRAM, NVRAM, Bootflash, Zero, remote control
        !           793:     devices.
        !           794:   - Added CPU deletion support (incomplete).
        !           795: 
        !           796: 02-May-2006
        !           797: -----------
        !           798:   - Added PCI bus removal.
        !           799:   - Added "shutdown" code for GT64010 and GT64120.
        !           800:   - Added CFC0/CTC0 instructions (R7000) and handling for associated 
        !           801:     registers. TODO: customized vector spacing.
        !           802: 
        !           803: 04-May-2006
        !           804: -----------
        !           805:   - Introduction of the new MTS64 subsystem!
        !           806:   - Note: incorrect uses of assert(), especially in insn_lookup.c module.
        !           807: 
        !           808: 05-May-2006
        !           809: -----------
        !           810:   - Added a free list of chunks for MTS64 + some basic optimizations.
        !           811:   - Added basic PCI/HT stuff for SB-1 processor (dev_sb1_pci.c module).
        !           812:   - Added AP1011 (Sturgeon HyperTransport-PCI Bridge) device.
        !           813:   - Fixed masks for MFC0/MTC0 instructions, and added new definition for MFC0
        !           814:     to access set 1.
        !           815:   - Fixed incorrect uses of assert().
        !           816: 
        !           817: 07-May-2006
        !           818: -----------
        !           819:   - Modified the console handling to be more efficient. 
        !           820:   - Added global invalidation of the MTS64 cache.
        !           821:        
        !           822: 08-May-2006
        !           823: -----------
        !           824:   - Added selective invalidation of the MTS64 cache (for TLB management).
        !           825:   - Added MTS64 statistics.
        !           826:   - Modified the MTS64 hash settings. Origin: shift: 12, hash_bits: 16.
        !           827:     Replaced by shift: 16, hash_bits: 12 -> more efficient and consumes
        !           828:     less memory! (logical since IOS uses large TLB entries).
        !           829:   - Modified cp0 module to use an abstraction layer for MTS access, allowing
        !           830:     32 or 64 bit modes.
        !           831: 
        !           832: 09-May-2006
        !           833: -----------
        !           834:   - Fixed MTS64 on x86_64 machines.
        !           835:   - The clock divisor can now be set per VM and with an hypervisor command.
        !           836: 
        !           837: 10-May-2006
        !           838: -----------
        !           839:   - Added "shutdown" code for RAM and ROM devices.
        !           840:   - Added VM object dump ("Ctrl-] + o")
        !           841: 
        !           842: 11-May-2006
        !           843: -----------
        !           844:   - Bugfix: missing initialization of the address length parameter of accept()
        !           845:     in the main hypervisor module.
        !           846:   - Bugfix: missing initialization of registry memory pool (noticed with
        !           847:     Valgrind).
        !           848:   - Added NPE and midplane selections to the hypervisor.
        !           849: 
        !           850: 12-May-2006
        !           851: -----------
        !           852:   - Added NIO deletion to the hypervisor.
        !           853:   - Fixed status message in hypervisor for object deletion.
        !           854:   - Added "sub" instruction (without exception support).
        !           855: 
        !           856: 14-May-2006
        !           857: -----------
        !           858:   - Fixed CPU state change. It is now possible to reboot at any time using
        !           859:     "Ctrl-] + k".
        !           860:   - Added VTTY deletion.
        !           861:   - Added "c7200 stop" command to the hypervisor (not finished).
        !           862:   - The memory-mapped devices of port adapters are now enabled dynamically,
        !           863:     depending on the PCI BAR (Base Address Registers) settings. This avoids
        !           864:     use of hardcoded values.
        !           865:   - Integrated a patch from Philipp Brenner, which fixes ELF loading problem
        !           866:     on Cygwin when default text file type is set to DOS. Many thanks to him.
        !           867:     (symptom was: "load_elf_image: elf_begin: I/O error: raw read")
        !           868: 
        !           869: 15-May-2006
        !           870: -----------
        !           871:   - Added "c7200 set_config" and "c7200 set_mac_addr" hypervisor commands.
        !           872:   - Fixed a stupid bug in PCI bus removal.
        !           873:   - Added more complete shutdown code.
        !           874: 
        !           875: 16-May-2006
        !           876: -----------
        !           877:   - Fixed uninitialized MTS64 allocated entries (seen with Valgrind).
        !           878:   - Added missing unmapping of memory-mapped files (reported by Greg).
        !           879:   - The VTTY shutdown doesn't close stdin anymore (causing terminal
        !           880:     problems at exit).  
        !           881:   - Fixed the shutdown procedure, added VM_STATUS_SHUTDOWN as status
        !           882:     for a VM. Adapted the virtual CPU synchronization.
        !           883: 
        !           884: 17-May-2006
        !           885: -----------
        !           886:   - Some basic work on the hypervisor main modules (cleanup).
        !           887:        
        !           888: 19-May-2006
        !           889: -----------
        !           890:   - bugfix: base MAC address setup broken (reported by Greg).
        !           891:   - Added global deletion of: ATM/FR switches, NetIO bridges, NetIO
        !           892:     descriptors, C7200 instances ...
        !           893:   - Added "hypervisor reset" command to go back to a clean state.
        !           894: 
        !           895: 20-May-2006
        !           896: -----------
        !           897:   - Modified the CPU synchronization system which was not working correctly.
        !           898: 
        !           899: 21-May-2006
        !           900: -----------
        !           901:   - bugfix: NIO unset in PA-4T+/PA-8T driver.
        !           902:   - Added C7200 PA cleanup code.
        !           903: 
        !           904: 22-May-2006
        !           905: -----------
        !           906:   - Better handling of PA/NIO removal.
        !           907:   - Base MAC addresses are now generated automatically if not specified.
        !           908:     ("cafe.<instance_id>.0000")
        !           909: 
        !           910: 23-May-2006
        !           911: -----------
        !           912:   - Added "VDE" NetIO type to connect to UML switches / Virtual Distributed
        !           913:     Ethernet switches.
        !           914:   - Some cleanups in NetIO code.
        !           915:   - Added shutdown code for MTS32/MTS64 (not used yet).
        !           916: 
        !           917: 24-May-2006
        !           918: -----------
        !           919:   - Minor optimizations for non-JIT mode.
        !           920:   - bugfix: crash when dumping instruction block tree (JIT).
        !           921:   - Some memory leak fixes (again with Valgrind, definitely this tool rocks).
        !           922:     TOFIX: * clpd6729 + PCI I/O space (to check carefully).
        !           923:            * IO/supplemental memory created with dev_create_ram().
        !           924:   - Use of MTS shutdown code.
        !           925: 
        !           926: 25-May-2006
        !           927: -----------
        !           928:   - The compressed IOS images were not booting anymore: fixed the MIPS config
        !           929:     register at startup (reported by Davide Brini).
        !           930:   - Minor code cleanup for MIPS CPU reset.
        !           931:   - I/O and supplemental memory are now created with dev_ram_init().
        !           932:   - bugfix: in PA shutdown code, the driver shutdown operation was called
        !           933:     even if the driver was not initialized.
        !           934:   - bugfix: order of memory freeing in c7200_free_instance() wasn't good,
        !           935:     producing a segfault (seen on windows machines).
        !           936: 
        !           937: 26-May-2006
        !           938: -----------
        !           939:   - Played with the PA-POS-OC3 driver, it seems that it is working. Need
        !           940:     to check if the TX ring guess is correct (ie, with "routing" conditions).
        !           941: 
        !           942: 27-May-2006
        !           943: -----------
        !           944:   - PA-POS-OC3: Fixed the TX ring part to work with multiple buffers. There 
        !           945:     is still a problem with buffer addresses (doesn't work with platforms 
        !           946:     using SRAM).
        !           947: 
        !           948: 29-May-2006
        !           949: -----------
        !           950:   - Playing with ISDN emulation (PA-4B), and Munich32 chip. Interfaces
        !           951:     are only visible for now.
        !           952: 
        !           953: 30-May-2006
        !           954: -----------
        !           955:   - Moved VM lockfile deletion to VM instance freeing function.
        !           956:   - Ugly hack to allow the POS driver to work with SRAM-based platforms.
        !           957:   - Added support for "VDE" NIO in hypervisor.
        !           958:   - Beginning of hypervisor documentation (README.hypervisor).
        !           959: 
        !           960: 31-May-2006
        !           961: -----------
        !           962:   - Removed "c7200 trigger_oir" hypervisor command which was redundant.
        !           963: 
        !           964: 01-Jun-2006
        !           965: -----------
        !           966:   - bugfix: fixed some reference counting leaks with default ATM and 
        !           967:     Frame-Relay switches and NIO bridge.
        !           968:   - bugfix: DLCI were not announced in ascending order in LMI packets.
        !           969:   - studied a bit how to use larger bootflash sizes.
        !           970: 
        !           971: 02-Jun-2006
        !           972: -----------
        !           973:   - DEC21140: Added multicast flag management for received frames.
        !           974:   - Debugging of ISL problem reported by Valentin.
        !           975:   - Added CRC-32 functions to the appropriate module.
        !           976:        
        !           977: 03-Jun-2006
        !           978: -----------
        !           979:   - ISL is now working with DEC21140. It seems that to handle ISL, another
        !           980:     chip (FPGA ?) is present on PA-FE-TX and C7200-IO-FE to add the second
        !           981:     FCS field. 
        !           982:   - Added basic disassembly code (need to do something more generic).
        !           983: 
        !           984: 04-Jun-2006
        !           985: -----------
        !           986:   - Added virtual instruction "bnez" (basic optimization).
        !           987:   - Added RM7000 "mul" instruction (not tested).
        !           988:   - Added teq/teqi instructions to non-JIT mode.
        !           989: 
        !           990: 05-Jun-2006
        !           991: -----------
        !           992:   - Added output packet exclusion to PCAP module (not possible with WinPCAP
        !           993:     though).
        !           994:   - Enhanced packet filtering in dec21140 emulation (for Windows users).
        !           995:   - bugfix: stupid cast problem in bootflash code preventing proper unmapping.
        !           996:     (seen with /proc/<pid>/maps on Linux).
        !           997:   - Added debugging message for device removal.
        !           998:   - bugfix: memory not freed / file not closed with ELF loader.
        !           999:   - bugfix: config register keeping the "ignore config" flag between instance
        !          1000:     reloads.
        !          1001:   - Added "c7200 set_conf_reg" hypervisor command.
        !          1002:   - ==> pre19
        !          1003:   - Experiment: Pending IRQ are now checked only at jump instructions.
        !          1004: 
        !          1005: 06-Jun-2006
        !          1006: -----------
        !          1007:   - bugfix: bootflash not working anymore with previous bugfix. 
        !          1008:   - Some optimizations for Program Counter (PC) handling in JIT mode.
        !          1009:   - Some optimizations for non-JIT mode (use of fastcalls).
        !          1010:   - Added a performance counter.
        !          1011: 
        !          1012: 07-Jun-2006
        !          1013: -----------
        !          1014:   - Added configuration saving command for hypervisor
        !          1015:     ("hypervisor save_config <file>")
        !          1016:   - The SB-1 DUART is working, allowing NPE-G1 console to work :)
        !          1017:   - Environmental monitor working with NPE-G1.
        !          1018:   - NPE-G1 next priorities: Ethernet (because it delays boot) and NVRAM
        !          1019:     (seems to be at a different address?)
        !          1020: 
        !          1021: 08-Jun-2006
        !          1022: -----------
        !          1023:   - NVRAM is now ok on NPE-G1 (it is at a different physical address).
        !          1024: 
        !          1025: 13-Jun-2006
        !          1026: -----------
        !          1027:   - Optimizations on fast lw/sw operations (x86 only for now).
        !          1028:   - Changed offset size for branches (x86_jump32 instead of x86_jump8).
        !          1029: 
        !          1030: 14-Jun-2006
        !          1031: -----------
        !          1032:   - Base MAC address now generated from PID and instance ID.
        !          1033: 
        !          1034: 15-Jun-2006
        !          1035: -----------
        !          1036:   - Optimizations on fast lw/sw operations (x86_64).
        !          1037:   - bugfix: fixed console problems when using TCP mode on Windows platforms 
        !          1038:     (Telnet, Putty). It just requires to ignore LF (Line Feed) character 
        !          1039:     (BTS entry #4)
        !          1040: 
        !          1041: 16-Jun-2006
        !          1042: -----------
        !          1043:   - bugfix: importing config to NVRAM was broken (device lookup was done on
        !          1044:     "cacheable" devices only in physmem* functions) (BTS entry #5)
        !          1045: 
        !          1046: 17-Jun-2006
        !          1047: -----------
        !          1048:   - bugfix: memory not freed when using host memory to emulate virtual RAM.
        !          1049:     (BTS entry #8).
        !          1050:   - Minor enhancements to clpd6729 driver.
        !          1051: 
        !          1052: 19-Jun-2006
        !          1053: -----------
        !          1054:   - Included a patch from Peter Ross ([email protected]) which allows
        !          1055:     to bind console and AUX ports to real serial ports. Many thanks to him.
        !          1056: 
        !          1057: 20-Jun-2006
        !          1058: -----------
        !          1059:   - Playing with the PCMCIA stuff (especially CIS)
        !          1060: 
        !          1061: 21-Jun-2006
        !          1062: -----------
        !          1063:   - Continuing on PCMCIA.
        !          1064: 
        !          1065: 22-Jun-2006
        !          1066: -----------
        !          1067:   - The PCMCIA ATA disk is working, although the ATA command set is not
        !          1068:     completely implemented. 
        !          1069: 
        !          1070: 23-Jun-2006
        !          1071: -----------
        !          1072:   - Added virtual ethernet switch module.
        !          1073:   - bugfix: linux_eth file descriptor was not used correctly with NIO RXL.
        !          1074:   - Modified the ELF loader to use all sections.
        !          1075: 
        !          1076: 26-Jun-2006
        !          1077: -----------
        !          1078:   - Modified the NIO RX handling (packet receiving is done in NIO module).
        !          1079: 
        !          1080: 27-Jun-2006
        !          1081: -----------
        !          1082:   - bugfix: PA-4E/PA-8E not working with IOS 12.0T (incorrect device length).
        !          1083:     (BTS entry #17).
        !          1084:   - Some cleanups (untested though) in ATM and Frame-Relay switch modules
        !          1085:     (locking).
        !          1086: 
        !          1087: 29-Jun-2006
        !          1088: -----------
        !          1089:   - Added support for 2nd ATA disk.
        !          1090:   - Added command line options for disk0: and disk1: ATA devices.
        !          1091:     By default, disk0: has a capacity of 64 Mb, disk1: is not defined.
        !          1092:   - Added hypervisor commands "c7200 set_disk0" and "c7200 set_disk1".
        !          1093:   - Fixed some mistakes and typos in documentation. 
        !          1094: 
        !          1095: 30-Jun-2006
        !          1096: -----------
        !          1097:   - Factorized code of fast memory operations to have something cleaner.
        !          1098: 
        !          1099: 02-Jul-2006
        !          1100: -----------
        !          1101:   - Modified the JIT compiler to translate pages instead of "blocks"
        !          1102:     (improves performance).
        !          1103: 
        !          1104: 03-Jul-2006
        !          1105: -----------
        !          1106:   - Some code cleanup for the new JIT compiler.
        !          1107:   - bugfix: PA-4T+/PA-8T not working with IOS 12.0T (incorrect device length).
        !          1108:     (BTS entry #23).
        !          1109:   - Added JIT flush to limit the memory used for translation. At this time,
        !          1110:     this is basic, we count the number of translated pages and we flush when
        !          1111:     this number reaches a threshold (512 pages seems to be a good value).
        !          1112:   - Integrated a patch from Philipp Brenner (BTS entry #21)
        !          1113:     Description: "In standard mode it intercepts SIGINT and sends a CTRL+C 
        !          1114:     (0x03) to the target's vtty_con buffer, while in hypervisor mode it 
        !          1115:     gracefully shuts down the hypervisor which causes the application to 
        !          1116:     quit."
        !          1117: 
        !          1118: 04-Jul-2006
        !          1119: -----------
        !          1120:   - Fixed a stupid bug in mts_cache (phys_page boundary not checked).
        !          1121:   - Optimized JIT flushing and insn block allocation.
        !          1122:   - Changed the maximum number of translated pages to 2048, which seems to 
        !          1123:     be a more adequate value.
        !          1124: 
        !          1125: 05-Jul-2006
        !          1126: -----------
        !          1127:   - Added an "exec zone" which is a pool of host executable pages. This
        !          1128:     zone is limited by default to 64 Mb for Linux/Unix and 16 Mb for Cygwin. 
        !          1129:     When the zone is fully used, the JIT structures are flushed (removed the 
        !          1130:     maximum number of translated pages).
        !          1131:     Now, there is no need to disable ExecShield or similar systems.
        !          1132:   - Added explicit error message when failing to open an ELF file.
        !          1133:   - Fixed getopt_long() usage.
        !          1134:   - Added CLI option "--exec-area <size>" to define exec zone size for the 
        !          1135:     default VM.
        !          1136: 
        !          1137: 06-Jul-2006
        !          1138: -----------
        !          1139:   - Added "tlbwr" (TLB Write Random) instruction and coprocessor 0 random 
        !          1140:     register management.
        !          1141:   - Added "c7200 set_exec_area" hypervisor command.
        !          1142:   - Allowed the hypervisor to run on Windows 2000 machines (ip_listen()
        !          1143:     version is now ok for non-rfc2553 systems).
        !          1144: 
        !          1145: 07-Jul-2006
        !          1146: -----------
        !          1147:   - Added command line help for "--exec-area" option.
        !          1148:   - Updated documentation.
        !          1149: 
        !          1150: 11-Jul-2006
        !          1151: -----------
        !          1152:   - bugfix: missing pointer cleanup in c7200_pa_shutdown() (BTS entry #30)
        !          1153:   - bugfix: incomplete shutdown code for NIO (little memory leak + no
        !          1154:     freeing code for NIO with null type).
        !          1155:   - bugfix: memory leak in udp_connect() + incorrect error checking.
        !          1156:   - Added cleanup code for general log file.
        !          1157:   - bugfix: memory leak in hypervisor command execution.
        !          1158:   - Added logging for hypervisor commands.
        !          1159:   - Invalid instructions in delay slots are now properly handled by the JIT
        !          1160:     compiler (error message + CPU stop).
        !          1161: 
        !          1162: 13-Jul-2006
        !          1163: -----------
        !          1164:   - Added an idle loop detector (--idle-pc CLI option + "Ctrl-] + i" key)
        !          1165:   - Added "c7200 set_idle_pc" hypervisor command.
        !          1166: 
        !          1167: 14-Jul-2006
        !          1168: -----------
        !          1169:   - Updated documentation.
        !          1170:   - Checked the idle loop system on Windows and Linux x86_64, seems to be
        !          1171:     working correctly.
        !          1172:   - Added idle loop system to non-JIT mode.
        !          1173:   - Fixed a bug in "cache" instruction when used in non-JIT mode.
        !          1174: 
        !          1175: 16-Jul-2006
        !          1176: -----------
        !          1177:   - Integrated a patch from Peter Ross ([email protected]) for the 
        !          1178:     Makefile.
        !          1179: 
        !          1180: 17-Jul-2006
        !          1181: -----------
        !          1182:   - bugfix: no empty mips64_emit_invalid_delay_slot() function for non-JIT
        !          1183:     build.
        !          1184:   - Added definition for mmap() MAP_ANONYMOUS flag for systems where only
        !          1185:     MAP_ANON is defined.
        !          1186:   - Accurate Timer IRQ (added --timer-itv parameter for tuning).
        !          1187: 
        !          1188: 18-Jul-2006
        !          1189: -----------
        !          1190:   - Fixed inter-pages jumps in delay slots (reported by nula)
        !          1191:   - Added a check preventing to run the idle-pc feature when an idle-pc value
        !          1192:     is already defined (since it would give biased results).
        !          1193:   - bugfix: VTTY list not locked in vtty_create()
        !          1194:   - bugfix: ensure the CPU is running before incrementing pending timer IRQs.
        !          1195:   - Added a checklist for minimal C7200 hardware components. It checks good
        !          1196:     init of ram, rom, nvram and zero devices.
        !          1197: 
        !          1198: 19-Jul-2006
        !          1199: -----------
        !          1200:   - Some work on JIT tuning (flush).
        !          1201: 
        !          1202: 20-Jul-2006
        !          1203: -----------
        !          1204:   - Better info logging for VTTY and C7200 modules.
        !          1205:   - Added a debug level for VMs.
        !          1206:        
        !          1207: 21-Jul-2006
        !          1208: -----------
        !          1209:   - Various code cleanups.
        !          1210:   - Added "c7200 set_debug_level" hypervisor command and "--vm-debug" command
        !          1211:     line option. Now, by default, less details are printed.
        !          1212:   - Fixed a bug with select() on Cygwin platform: before, only 64 FDs 
        !          1213:     could be used.
        !          1214: 
        !          1215: 24-Jul-2006
        !          1216: -----------
        !          1217:   - bugfix: accept_fd was not closed in VTTY module (BTS entry #42)
        !          1218:   - bugfix: properly handle CR/LF in configuration files (FR, ATM, ...)
        !          1219:     (BTS entry #36)
        !          1220:   - bugfix: accept fd not correctly printed in log file.
        !          1221:   - Added a mini-parser for hypervisor: allows directory with blanks, ...
        !          1222:   - bugfix: bad use of setsockopt() in the hypervisor.
        !          1223: 
        !          1224: 25-Jul-2006
        !          1225: -----------
        !          1226:   - Added the capability to use Null NetIO with the hypervisor 
        !          1227:     ("nio create_null" command).
        !          1228:   - Added a FIFO NetIO for intra-hypervisor communications.
        !          1229:   - Merged a patch from Peter Ross for incorrect idle-pc parsing with 64-bit
        !          1230:     values.
        !          1231:   - Non-JIT mode optimization for instruction fetch (although it could be
        !          1232:     enhanced again).
        !          1233:   - Various code cleanups.
        !          1234: 
        !          1235: 26-Jul-2006
        !          1236: -----------
        !          1237:   - Added "ethsw clear_mac_addr_table" to clear MAC address table of a
        !          1238:     virtual ethernet switch.
        !          1239:   - Added "ethsw show_mac_addr_table" to show all MAC addresses learnt by
        !          1240:     a virtual ethernet switch.
        !          1241:   - Fixed a potential bug with jalr/jr instructions, where the stack is used
        !          1242:     to save the return PC. If the instruction in the delay slot returned
        !          1243:     directly to the jit main loop (exception,...), the stack would be in
        !          1244:     an inconsistent state. This fix is also required for Darwin/x86.
        !          1245:   
        !          1246: 27-Jul-2006
        !          1247: -----------
        !          1248:   - Stack alignment for Darwin/x86 in memop functions and unknown opcode
        !          1249:     handling.
        !          1250:   - The Darwin/x86 build requires -mdynamic-no-pic as compilation option.
        !          1251:   - Fixed some inline assembly mistakes with "lock" prefix.
        !          1252:   - The Darwin/x86 port seems to be working correctly.
        !          1253:   - Fixed the amd64 version of "jr" instruction similarly to the x86 version
        !          1254:     (no problem with "jalr" in this case).
        !          1255: 
        !          1256: 29-Jul-2006
        !          1257: -----------
        !          1258:   - Merged a patch from Peter Ross ([email protected]):
        !          1259:        * disable dynamips escape commands for serial
        !          1260:         * support receipt of char 0x00
        !          1261:         * force the device to into raw mode (cfmakeraw)
        !          1262:         * include additional uart register addresses in c7200 iofpga switch.
        !          1263:     The README is also updated.
        !          1264:   - Fixed some sign problems in VTTY module.
        !          1265: 
        !          1266: 31-Jul-2006
        !          1267: -----------
        !          1268:   - Merged a parch from Peter Ross for correct handling of Ctrl-C when
        !          1269:     a TCP console is used.
        !          1270:   - Code cleanup (JIT usage flag per VM, ...)
        !          1271:   - C3600: implemented a working ns16552 console driver.
        !          1272:   - C3600: fixed clpd6719 driver.
        !          1273:   - C3600: working environmental monitor.
        !          1274:   - C3600: changed default RAM to 128 Mb.
        !          1275:   - Fixed clobbered registers on AMD64 platform ("r14" was missing).
        !          1276: 
        !          1277: 01-Aug-2006
        !          1278: -----------
        !          1279:   - Added command line support for C3600 instances.
        !          1280:   - C3600: added appropriate deletion code.
        !          1281:   - C3600: added mainboard EEPROM support.
        !          1282:   - C3600: added bootflash of 8 Mb.
        !          1283:   - C3600: analyzed triggering of various IRQs.
        !          1284: 
        !          1285: 03-Aug-2006
        !          1286: -----------
        !          1287:   - C3600: added NM EEPROM support, slot activation now depends on the NM
        !          1288:     state.
        !          1289:   - Fixed nmc93c46 EEPROM code to set the data out bit to a high value when
        !          1290:     not reading data (was required for C3600 NM EEPROM) + various bug-fixes
        !          1291:     and cleanups.
        !          1292: 
        !          1293: 04-Aug-2006
        !          1294: -----------
        !          1295:   - C7200: some cleanups in PA function naming.
        !          1296:   - C7200: code refactoring for PA drivers.
        !          1297:   - C7200: ethernet stuff is now independent of dec21140 and am79c971 code.
        !          1298:   - C3600: added NM management stuff.
        !          1299:   - Mueslix serial stuff is now independent for C3600 and C7200.
        !          1300:   - C3600: added NM-1E, NM-1FE and NM-4T network modules.
        !          1301:     => problems: * no keepalive required for NM-1E/NM-1FE (media status ?)
        !          1302:                 * NM-4T packet delivery failure when end of RX ring is hit.
        !          1303: 
        !          1304: 06-Aug-2006
        !          1305: -----------
        !          1306:   - Modified Am79c971 MII registers to keep the link up in FastEthernet mode.
        !          1307:   - Merged a patch from Peter Ross for Console and AUX ports optimizations
        !          1308:     (especially with TCP mode)
        !          1309:        * console and aux FILE streams
        !          1310:         * reimplement vtty_read_and_store() as state machine:
        !          1311:           - parse telnet escape codes, instead of forwarding them to router.
        !          1312:           - display instance and router name in xterm/vt title bar.
        !          1313:   - Modified the Mueslix driver to have something working for both C3600 and
        !          1314:     C7200 models. Added some debugging info.
        !          1315:   - C3600: better ethernet NM code.
        !          1316:   - C3600: Added NM-4E (4 ethernet ports) network module.
        !          1317: 
        !          1318: 07-Aug-2006
        !          1319: -----------
        !          1320:   - Fixed the remote control driver which incorrectly used static variables.
        !          1321:   - NVRAM address can now be known with the remote control driver.
        !          1322:   - Command line usage is now correctly displayed depending on the selected
        !          1323:     platform.
        !          1324: 
        !          1325: 08-Aug-2006
        !          1326: -----------
        !          1327:   - Some work on PA-4B (Munich32 chip).
        !          1328: 
        !          1329: 09-Aug-2006
        !          1330: -----------
        !          1331:   - Continuing on PA-4B (trying to understand TP3420).
        !          1332: 
        !          1333: 10-Aug-2006
        !          1334: -----------
        !          1335:   - C7200: Added PA Mgmt IRQ support (required for PA-4B, seen on a real
        !          1336:     c7200 with PA-4B offered by Vernon Missouri).
        !          1337:   - Added TP3420 definitions.
        !          1338: 
        !          1339: 15-Aug-2006
        !          1340: -----------
        !          1341:   - Continuing on PA-4B. Better understanding of the TX ring. 
        !          1342:     Fixed interrupt queue management.
        !          1343:        
        !          1344: 19-Aug-2006
        !          1345: -----------
        !          1346:   - Added hv_vm.c module to handle generic VM operations.
        !          1347:   - Added hv_c3600.c module for the Cisco 3600 platform.
        !          1348:   - Fixed a bug in VTTY flushing.
        !          1349: 
        !          1350: 20-Aug-2006
        !          1351: -----------
        !          1352:   - Added code to gen_eth module for Cygwin to prevent WinPCAP from giving
        !          1353:     back transmitted packets. It requires WinPCAP 0.4-alpha1 or better.
        !          1354:     TODO: need to be tested!
        !          1355:        
        !          1356: 21-Aug-2006
        !          1357: -----------
        !          1358:   - Fixed C3660 boot. Trying to understand/discover the hardware.
        !          1359:     Environmental monitor should be ok.
        !          1360: 
        !          1361: 24-Aug-2006
        !          1362: -----------
        !          1363:   - Added NS16552 flush optimization (Peter Ross).
        !          1364:   - Fixed missing periodic task removal in NS16552.
        !          1365: 
        !          1366: 26-Aug-2006
        !          1367: -----------
        !          1368:   - C3660: * Better understanding of NM presence / EEPROM registers.
        !          1369:            * Analyzed registers used when a Net IRQ is triggered.
        !          1370: 
        !          1371: 28-Aug-2006
        !          1372: -----------
        !          1373:   - C3660: Network Modules are now working! Remaining stuff: OIR.
        !          1374: 
        !          1375: 29-Aug-2006
        !          1376: -----------
        !          1377:   - Added more generic code to handle Cisco EEPROM to change easily
        !          1378:     chassis MAC addresses.
        !          1379:   - Updated README with C3600 information.
        !          1380:   - Updated hypervisor documentation (README.hypervisor).
        !          1381:   - Added dated package build to the Makefile (make packdev)
        !          1382:   - Checked WinPCAP fix of 20-Aug-2006: working.
        !          1383:   - Added the capability for high priority IRQ (like NetIO IRQ) to break
        !          1384:     the idle loop. Great latency improvement with NetIO IRQ.
        !          1385:   - C3600: the DUART irq is now higly prioritized. It gives better console
        !          1386:     reactivity. 
        !          1387: 
        !          1388: 30-Aug-2006
        !          1389: -----------
        !          1390:   - Huge performance improvement on dec21140 and am79c971 drivers, by
        !          1391:     transmitting up to 16 packets in one TX ring scan pass.
        !          1392:   - Added the same to Serial driver (untested).
        !          1393:   - Added "unicast limiter" feature to the am79c971 driver, similarly to the
        !          1394:     dec21140 driver. Not having this caused the virtual instances to see
        !          1395:     unrelated host traffic when using linux_eth/gen_eth NIO and consequently
        !          1396:     a bad performance was obtained. Thanks to Greg for noticing that.
        !          1397:   - Beginning of rework of PCI subsystem for PCI bridge support.
        !          1398:     (Greg noticed that with 12.2T releases, the PCI bus numbering is
        !          1399:     different for the C3660).
        !          1400:        
        !          1401: 31-Aug-2006
        !          1402: -----------
        !          1403:   - Finished the PCI subsystem rework.
        !          1404:   - C7200: Fixed PCI bridge use for midplanes (std: dec21050, vxr: dec21150).
        !          1405: 
        !          1406: 01-Sep-2006
        !          1407: -----------
        !          1408:   - Finally fixed the Serial problem on C3620 platform (hack in the driver
        !          1409:     to trigger interrupts differently).
        !          1410:   - Cleanup for VM PCI bus pool and C7200 "hidden" I/O bridge was missing.
        !          1411: 
        !          1412: 03-Sep-2006
        !          1413: -----------
        !          1414:   - Added safety checks to the PCI bus management.
        !          1415:   - Added a PLX9060 device (very basic for now).
        !          1416:   - Rewritten the PA-POS-OC3 driver to use the new PLX9060 driver.
        !          1417:   - Cleanup: removed use of c7200 bay info in drivers (everything uses
        !          1418:     PCI for configuration).
        !          1419:   - C7200: removed the bay module which contained static definitions of
        !          1420:     PCI bus, physical addresses for PA, ... Now everything is handled
        !          1421:     dynamically by the PCI subsystem and the remaining drivers (PA-4B,
        !          1422:     PA-POS-OC3) have been fixed.
        !          1423:   - C3600: removed PCI bus info from the bay module (due to PCI bridge new
        !          1424:     code).
        !          1425: 
        !          1426: 04-Sep-2006
        !          1427: -----------
        !          1428:   - Fixed some typos in comments.
        !          1429:   - Added a standalone utility to extract IOS configuration from an 
        !          1430:     NVRAM file.
        !          1431:   - Removed pcireg.h (from NetBSD) which was just used for one definition.
        !          1432:   - Added a "COPYING" file for the GPLv2 licence.
        !          1433: 
        !          1434: 05-Sep-2006
        !          1435: -----------
        !          1436:   - Added basic packet filtering framework, to simulate packet loss or
        !          1437:     alteration.
        !          1438:   - Hypervisor commands now supports a variable number of parameters.
        !          1439:   - bugfix: doing a "sh run" and then pressing "Escape" was causing trouble
        !          1440:     to the VTTY (the state machine was in an incorrect state).
        !          1441:   
        !          1442: 06-Sep-2006
        !          1443: -----------
        !          1444:   - Removed erroneous special handling of intra-page jumps in delay slots.
        !          1445:     (problem with c3640 12.0(7)T IP+ image).
        !          1446: 
        !          1447: 07-Sep-2006
        !          1448: -----------
        !          1449:   - C3600: processors ID are now correct.
        !          1450:   - Avoid removing the JIT block of the caller with the "cache" instruction.
        !          1451:   - Added "hypervisor version" to allow clients (Dynagen) to know the current
        !          1452:     version.
        !          1453:   - Added missing explanation for "-P <platform>" command line parameter.
        !          1454:   - C7200: Fixed incorrect cleanup of IO PCI bridge.
        !          1455: 
        !          1456: 08-Sep-2006
        !          1457: -----------
        !          1458:   - Better code for VM error messages.
        !          1459:   - Fixed the write attempts to ROM at startup.
        !          1460: 
        !          1461: 09-Sep-2006
        !          1462: -----------
        !          1463:   - C3600: added support for io memory size, which prevents Smart Init
        !          1464:     from running (hypervisor command: c3600 set_iomem <router> <val>).
        !          1465:   - C3600: fixed incorrect handling of commands for this platform, which
        !          1466:     caused port 0 to be disabled when manipulating other ports.
        !          1467: 
        !          1468: 11-Sep-2006
        !          1469: -----------
        !          1470:   - Fixed loop overflow in idle pc computation.
        !          1471:   - Added base64 encoding/decoding module from Yannick Le Teigner.
        !          1472:   - Added hypervisor commands "vm push_config" and "vm extract_config"
        !          1473:     to manage IOS configurations. Extracting to base64 is ok (verified with
        !          1474:     a third party decoder:
        !          1475:     http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/Default.aspx )
        !          1476:   - C3600: NVRAM checksum is now correctly computed.
        !          1477: 
        !          1478: 12-Sep-2006
        !          1479: -----------
        !          1480:   - Following a suggestion of Yannick Le Teigner, applied the optimization
        !          1481:     principle to PA-A1 card already used in dec21140, ... Latency is clearly 
        !          1482:     better (on my system, this dropped from about 150ms to 50 ms).
        !          1483: 
        !          1484: 14-Sep-2006
        !          1485: -----------
        !          1486:   - Incorrect display of device name in PLX9060 driver.
        !          1487:   - Added manpages provided by Erik Wenzel ([email protected]). Many thanks
        !          1488:     to him for this and for his work on packaging for Debian.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.