Personal home page for:
Patrick Mackinlay
Home | Contact | Secure |
Linux installation help for PCI ADSL modems based on the conexant chipset

Source code history

Conexant PCI ADSL linux drivers (2.6.x)

Release 6.1.2.007-PIM-2.6-1.9 incremental patch
23122008
Another patch from Vincent Zweije that fixes issues with the diagnostic output
Release 6.1.2.007-PIM-2.6-1.8 incremental patch
17082008
Patches to get the driver to work in 2.6.26
 (thanks again to Vincent Zweije for all this work!)

  * Fix overflow check when incrementing counter (reprise)

    Newer gcc looks through the earlier (shallow) fix for the overflow
    problem. The new fix should really work (famous last words).

  * Prevent compiler warning for uninitialized variable

    Cosmetic. With all the inlining, gcc is getting too clever...

  * Fix initialization of cnxtty_driver structure changed in linux-2.6.26

    Tty operation function pointers were factored into a separate struct
    tty_operations. Reflected the factorization in cnxtty_driver.

  * Fix initialization of CnxAdslDebugQuery /proc entry

    A field was removed from struct proc_dir_entry. Modified
    initialization of CnxAdslProcEntry to be less sensitive to fields
    changing.

11012008
Many patches to bring the driver up to date, it should now also work on SMP systems
 (thanks again to Vincent Zweije for all this work!)
        
        Use interrupt-safe spin locking:
        Whoops! Must use irqsave/irqrestore when compiling for SMP, even when
        actually running on UP. I had a nice spinlock bug inside an interrupt
        routine because of this.

        Reflect move from SA_SHIRQ to IRQF_SHARED in linux-2.6.18:
        Reflect rename of IRQ flag. Saves a lot of warnings and is better
        future proof.

        Update to reflect linux-2.6.20 termios->ktermios change:
        At some places in the linux kernel, usage of struct termios was changed
        to the similar struct ktermios. I don't think the change has any effect
        on the cnxadsl module, but the compiler gives type errors, so I changed
        the struct name where appropriate.

        Check return status of pci_enable_device:
        The return status of pci_enable_device should be checked. Doing so is
        easy, so I implemented it.

        Fix overflow check when incrementing counter:
        Apparently, integer overflow in C is undefined, and gcc now optimises
        x+y
Release 6.1.2.007-PIM-2.6-1.6 incremental patch
09042007
Thanks to Vincent Zweije the driver has been updated to work with linux kernel 2.6.20:
  * In 2.6.18, the default calling sequence was changed to pass up to
    three function parameters in registers.
    
    This is a problem because:
      - calls into dpcontroller.o now use the new calling sequence,
        whereas dpcontroller.o expects the old, and
      - calls out of dpcontroller.o still use the old calling sequence,
        whereas the called functions expect the new.

    I have fixed these by:
      - setting explicit calling conventions on functions called from
        dpcontroller.o,
      - setting explicit calling conventions on functions exported by
        dpcontroller.o,
      - wrapping calls from dpcontroller.o to the kernel-provided
        vsprintf with an auxiliary vsprintf_dpc, and
      - making the memcpy inside dpcontroller.o a local symbol so
        calls to memcpy from outside dpcontroller.o will link to the
        kernel-provided memcpy.

  * In 2.6.19, the deprecated linux/config.h was removed.

    It was included in several places.

    I have fixed this by including KernelModule/Version.h instead, and
    in that file including either linux/version.h or linux/config.h,
    depending on the kernel version.

  * In 2.6.19, interrupt handlers lost their 3rd argument which
    contained register contents.

    I removed the argument from ChipALIsrHandler. It wasn't used anyway.

  * In 2.6.20, INIT_WORK lost its third argument, which was a
    context pointer to the thread to launch.

    The thread to launch is now determined with some pointer arithmetic.
    (The work structure is a member of the thread structure.)  It appears
    to be done that way in the kernel as well.
Release 6.1.2.007-PIM-2.6-1.5 incremental patch
13052006
Updated the driver so that it works with kernel 2.6.16+,
some changes were made to the kernel API (thanks to Vincent Zweije).
Release 6.1.2.007-PIM-2.6-1.4 incremental patch
14072005
Some trivial fixes (thanks to Armijn Hemel for noticing a spelling mistake in an error assertion).
Fixed a memory allocation problem which would almost certainly have caused some instability
 (many thanks to Vincent Zweije for looking into and fixing this problem)
Release 6.1.2.007-PIM-2.6-1.3 incremental patch
11062005
Merged some fixes sent in by Andrew de Quincey (Thanks!):
 Fix pci device enabling/disabling (15032005 patch only partially fixed the problem)
 Remove some dead code
 Fix kernel threads so that they daemonize correctly and hence do not stay in a Zombie state forever
Added code to trap kernel thread names that are too long
 (someone reported they were too long but this does not appear to be the case!)
Release 6.1.2.007-PIM-2.6-1.2 incremental patch
15032005
Minor changes adding debug code and fixing a few bugs (tested on 2.6.11.3)
Updated the PCI device API to use pci_get_device instead of pci_find_device
Release 6.1.2.007-PIM-2.6-1.1 incremental patch
11062004
Applied a cleanup patch to remove all the compile time warnings
 Thanks to Andrew Walrond for sending this to me
Release 6.1.2.007-PIM-2.6-1
05062004
Upgraded to 2.6.x version, this will no longer work with older versions of the linux kernel.
Forked from release 6.1.2.007-PIM-2
Very many changes including:
Converted CDSL_ADAPTER_T (CardMgmt.h) structure variables that used the task queue to:
 DSLInterruptQueStr to a tasklet
 ARMInterruptQueStr to a tasklet
 PGBkgndQueStr to a work queue
 SITaskQueStr to a work queue
Converted kthread_t (KThread.h) structure variables that used the task queue to:
 tq to a work queue
Upgraded the module build process (Makefile)
Upgarded the module init, exit and params (CardMgmt.c)
Upgraded the ISR (ChipALIsrHandler ChipALCdsl.c)
Changed a lot of the locking to remove globally disabling interrupts which is no longer possible

Code to be considered alpha, it works but problems include:
 - Kernel threads stay in zombie state when module is unloaded, but who cares because of the next problem
 - When a ppp session is started the module will no longer unload, even if we kill the ppp session. Some
   ressource is not freed correctly
 - I doubt this will work reliably on an SMP system
 - I doubt this will work at all with two cards installed

Conexant PCI ADSL linux drivers (2.4.x and 2.2.x)

Release 6.1.2.007-PIM-5 incremental patch
14072005
Fixed a memory allocation problem which would almost certainly have caused some instability
 (many thanks to Vincent Zweije for looking into and fixing this problem)
Release 6.1.2.007-PIM-4 incremental patch
11062005
Added code to trap kernel thread names that are too long
 (someone reported they were too long but this does not appear to be the case!)
+other minor fixes
Release 6.1.2.007-PIM-3 incremental patch
15032005
Minor changes adding debug code and fixing a few bugs (tested on 2.4.29)
Release 6.1.2.007-PIM-2 incremental patch
31052004
Fixed incompatibilites with gcc 3.3.3:
 cnxadslconfig.c had improperly terminated quoted strings
Release 6.1.2.007-PIM-1 incremental patch
30122003
Added compatibility with linux kernel 2.4.22:
 atmdev_op structure has free_rx_skb removed
Added compatibility with linux kernel 2.4.23:
 VCC table moved to sock linked list (vcc_sklist)
Original code revision 6.1.2.007 (09102001) source: Data Technics
Contact MeDesigned for w3c compliance (XHTML and CSS).Jun 6 2023