; $URL: http://subversion:8080/svn/gsc/trunk/drivers/LINUX/16SDI/16SDI_Linux_4.x.x.x_GSC_DN/doc/release.txt $
; $Rev: 55650 $
; $Date: 2024-10-21 13:44:35 -0500 (Mon, 21 Oct 2024) $

16SDI: Linux Driver Release Notes

Revision History
================

--------------------------------------------------------------------------------

Version 5.7.111.50.0, Released 10/21/2024

driver: Updated to support the 6.x series kernel.
driver: Updated for Fedora 38.
driver: All Auto_Calibrate and related content has been renamed to Autocal.
driver: All Auto_Cal_Status and related content has been renamed to Autocal_Status.
driver: Updated the Initialize and Autocal IOCTL services for consistency.
driver: Corrected error message text.
driver: Updated the Rx Debug support.
driver: Remove Red Hat 8 compiler warning (2.4 kernel).
driver: Corrected log message when excusive open request fails.
driver: White space cleanup.
driver: Fixed an issue where the register id is zero (for testing purposes).
driver: Updated and expanded error reporting.
driver: Added RX DEBUG capabilities.
driver: Updated comments for consistency.
driver: Corrected a comment.
driver: LINTed the sources for the 2.4 kernel builds.
driver: LINTed sources.
driver: Updated to address Fedora 38 complaints.
driver: Added global driver unloading flag.
driver: Added "unloading" message when unload service is called.
driver: Updated for changes after the 5.17.15 kernel.
driver: Updated to support the 6.x kernel.

--------------------------------------------------------------------------------

Version 5.6.101.44.0, Released 10/25/2022

driver: Standardized various IOCTL system log messages.
driver: Standardized processing of the initialization IOCTL service.
driver: Standardized processing of the autocalibration IOCTL service.
driver: Reorganization of ioctl.c.
driver: Updated ioctl.c prototypes for consistency.
driver: Removed unused macros.
driver: Updated comments for consistency.
driver: Made changes per file reorganization.
driver: Made DMA portability changes.
driver: Removed unintended debug output statements.
driver: Renamed gsc_irq_reset_pci to gsc_irq_cpi_reset for consistency.
driver: Segregated additional PLX specific code.
driver: Updated system message to begin with the driver module name.
driver: Began implementation for MSI support.
driver: Segregated all PLX specific code to accommodate alternate device implementations.
driver: Updated debugging display output.
driver: Updated some comments for consistency.
driver: White space cleanup.
driver: Updated for changes to Red Hat Enterprise Linux 8.6.
driver: Added the os_irq_t.created field.
driver: Updated os_irq_create, destroy, open and close services.
driver: Removed unused debugging messages.
driver: Began implementing MSI support.
driver: Added macro DEV_IRQ_SHOW to report assigned IRQ assigned to device.
driver: Updated for the 5.14 kernel.

--------------------------------------------------------------------------------

Version 5.5.96.38.0, Released 2/16/2022

driver: Removed compiler warnings for Fedora 31.
driver: Updated for porting to Windows.
driver: Standardized various IOCTL system log messages.
driver: Standardized processing of the initialization IOCTL service.
driver: Standardized processing of the autocalibration IOCTL service.
driver: LINTed sources.
driver: Added temporary experimental write code in gsc_write.c for performance testing.
driver: The code is partially retained but is not included for compilation.
driver: Fixed a DMA bug relating to the use of a timeout setting of zero.
driver: Corrected endian error message.
driver: Fixed a timeout bug in gsc_write_pio_work_32_bit().
driver: Updated IRQ code for improved clarity and modularity.
driver: Updated DMA code to support multiple DMA implementations.
driver: Removed I/O debug code.
driver: Removed compiler warnings under Windows.
driver: Fixed a IOCTL bug in which alt->sem wasn't being unlocked.
driver: Increased modularization for porting effort to another OS.
driver: Made DMA code more modular.
driver: Made spelling corrections in version notes.
driver: Changed all printk instances to printf to support porting activities.
driver: Expanded files removed for a clean operation.
driver: Updated to support the 5.9 kernel.
driver: Modified os_common.h so application code compiles under Cygwin.
driver: Reduced the minimum tick sleep from 1 to 0 ticks.
driver: Modified debug specific register access code to enhance usage.
driver: Improved Red Hat Enterprise Linux 8.x detection logic.
driver: Added support under the 4.x kernel for Red Hat Enterprise Linux 8.x.
driver: Added validation checking of the interrupt number in os_irq_open().
driver: Updated the /proc/ code for changes in the 5.6.6 kernel.
driver: Updated memory code for improved clarity and modularity.
driver: Code cleanup in open service.
driver: Fixed open bug applicable to multi-board devices.
driver: Made mods to accommodate porting to another OS.

--------------------------------------------------------------------------------

Version 5.4.87.28.0, Released 9/11/2019

driver: Added support for the 5.x kernel series.
driver: Increased I/O transfer buffer size.
driver: Fixed 9060 Endian support bug.
driver: Added support for Big Endian hosts.
driver: Updated per OS specific DMA memory allocation interface.
driver: Fixed bug in gsc_dma_perform(): timeouts were being ignored.
driver: Fixed bug in gsc_dma_perform(): the timeout detection logic was incorrect.
driver: Improved register validation.
driver: Subsystem Vendor ID and Subsystem ID can each be ignored if -1 in device table.
driver: #define for GSC_REG_ENCODE_MASK is moved here from gsc_reg.c.
driver: Enhanced error reporting for the process of validating register definitions.
driver: Added DMA support for an IOMMU.
driver: Added error reporting when DMA memory cound not be allocated.
driver: Reduced code included when read and writ are both unsupported.
driver: Added error reporting when IRQ cound not be acquired during open requests.
driver: Some minor code reorganization.
driver: Updated BAR creation logic.

--------------------------------------------------------------------------------

Version 5.3.82.26.0, Released 3/1/2019

driver: Modified code so open succeeds even if initialization fails.
driver: Updated per changes to common code.
driver: Fixed bug in DMA completion code.
driver: Updated initialization for the write service.
driver: Updated muti-channel ISR code for new I/O streams structure.
driver: DEV_WAIT_IO_ALL is now required if WAIT is supported along with READ or WRITE
driver: I/O WAIT macros are now defined by the device API and are passed to GSC code in dev_io_t.
driver: Updated Block Mode DMA macro name (_DMA to _BMDMA).
driver: Added I/O, DMA and register access debug code.
driver: Added stream selection field in the "size" argument for the read and writecalls.
driver: Added OS IRQ calls: os_irq_create() and os_irq_destroy()
driver: Renamed field in gsc_irq_t for clarity.
driver: Fixed a bug in which wait list node removal didn't always have the list locked.
driver: Added support for some DMA metrics.
driver: Improved IOCTL argument validation.
driver: Moved a typedef to device specific code.
driver: Udated some utility services: applying a setting, end by reading it back
driver: Updated for support of some drivers under older kernels.
driver: Implemented support for a stream selection field in the I/O bytes argument.
driver: Implemented register access debug code.
driver: Implemented calls: os_irq_create() and os_irq_destroy()
driver: Field in gsc_irq_t renamed for clarity.
driver: Changed macro name for clarity.
driver: Updated to accomodate Fedora 27.

--------------------------------------------------------------------------------

Version 5.2.73.20.0, Released 1/23/2018

driver: Bug fix: was ignoring BAR setup return value.
driver: Updated per changes to the low level register interface.
driver: Updated per changes to the OS specific PCI services.
driver: Updated to use the newer common driver sources.
driver: Made updates for DEV_SUPPORTS_XXX macro changes.
driver: Updated #include file for consistancy.
driver: Fixed a DMA timeout calculation bug.
driver: Updated to accommodate porting to Windows KMDF.
driver: Updated the driver initialization logic.
driver: Updated IOCTL init and reset code.
driver: Added support to exclude the WAIT feature.
driver: Updated macros to include/exclude IRQ support.
driver: Fixed bug in init code where last PCI device is one of ours.
driver: Fixed register definitions for the PEX8111 and PEX8112.
driver: Updated the low level register interface.
driver: Added special case handling for reads of register id value 0.
driver: Added support for reporting metrics information during driver installation.
driver: Improved response to being signalled (i.e. being told to abort).

--------------------------------------------------------------------------------

Version 5.1.68.18.0, Released 12/1/2016

driver: Made PCI registers accessible from inside an ISR.
driver: The BAR code has been updated to include the data under a single structure.
driver: The register definitions have been updated.
driver: I/O services now pass around an os_mem_t structure instead of a buffer pointer.
driver: White space cleanup.
driver: Changed the arbitrary wait event callback argument to a void* type.
driver: Modified to allow multiple apps to simultaneously access a single device.
driver: Correct access to BAR0 and BAR1 (is RO, was RW).
driver: Added an infinite I/O timeout option.
driver: Corrected the IOCTL code for the register write and mod services.
driver: Improved support for being signaled (i.e. being told to quit).
driver: Added special case for register I/O where register id value is 0.
driver: An event wait timeout value of zero now means do not timeout.
driver: Fixed an I/O bug.
driver: Updated the version number macros.
driver: Updated the format and encoding of register macros.
driver: Fixed DMA bug.
driver: Moved some BAR functionality to the OS specific code.
driver: I/O now passes around an os_mem_t structure instead of a buffer pointer.
driver: Copying to and from user space is now done with more use specific routines.
driver: Made more ISR functionality subject to the GSC_IRQ_ISR_FLAG_DETECT_ONLY flag.
driver: Dropped I/O register access services.
driver: Performed some LINTing.
driver: Simplified error messages.
driver: Fixed ul2hex().
driver: The macro S32_MAX is defined only if not already done so.
driver: Added the utility service ul2hex().
driver: Changed register offsets to u16 from unsigned long.
driver: Changed printk's to printf's.
driver: Made ISR access more OS agnostic.
driver: Added special case handling for reads of register id value 0.
driver: Removed use of function check_mem_region() in 4.x kernels.
driver: Implemented support for the 4.x kernels.
driver: Added checks on some pointers before using them.
driver: Added safety check in EVENT_RESUME_IRQ().
driver: Removed unused macro (OS_CAST_VOIDP_TO_U32).
driver: Moved some BAR functionality here from more common code.
driver: Renamed os_event_cleanup() to os_event_destroy().
driver: Simplified use of os_mem_t structures and content.
driver: Removed the use of __DATE__ and __TIME__.

--------------------------------------------------------------------------------

Version 5.0.60.8.0, Released 9/15/2015

driver: Updated to use the newer common driver sources.
driver: Removed GNU notice from non-Linux specific files.
driver: Removed Linux specific content from non-Linux specific source files.
driver: Now using a spinlock rather than enabling and disabling interrupts.
driver: Updated gsc_irq_open() and gsc_irq_close().
driver: Updated gsc_dma_open() and gsc_dma_close().
driver: Added three new IOCTL services.
docsrc: Updated per changes to the device node name, which is now /dev/<device>.X.
2bsync: Removed dead code (i.e. excluded by #if 0).
rxrate: Renamed one or more variables.
rxrate: Added command line arguments for the I/O mode.
LINTed various sources.
White space cleanup.

--------------------------------------------------------------------------------

Version 4.5.52.0, Released 2/28/2014

Driver: Reduced #include list in driver interface header.
Additional LINTing.
White space cleanup.

--------------------------------------------------------------------------------

Version 4.4.51.0, Released 1/9/2014

Driver: Modified the conditional definition of flags used by kmalloc().
Driver: Updated /proc file support for the 3.10 kernel changes.
Driver: Additional porting for the 2.2 kernel.

--------------------------------------------------------------------------------

Version 4.4.50.0, Released 11/14/2013

Driver: Added support for Abort Interrupt processing on 9080 based boards.
Driver: Enhanced DMA error handling for Abort Interrupts.
Driver: The IOCTL command code is now treated as an integer.
Driver: Numerous minor changes for LINTing of the code.
Driver: Numerous updates for Concurrent and for PEX8311 issues.
fsamp: Corrected a command line parsing bug.
test: Removed from the release.

--------------------------------------------------------------------------------

Version 4.4.45.0, Released 7/16/2013

Driver: Freeing the board interrupt is now conditioned upon it being acquired.
Driver: Corrected definition of register GSC_PLX_9056_PABTADR.
Driver: Added support for the Bus Abort interrupt.
Driver: Updated DMA reads to improve performance.
Driver: Changed how I/O buffers are allocated.
Driver: Changed how s8 ... u32 are included.
Driver: Enhanced the IOCTL service code to accommodate unsupported services.
Driver: Updated the BAR mapping failure messages.
Driver: Added s8 ... u32 definitions for application use.
Driver: Updated gsc_dma_destroy() - now zero fills memory when done.
Driver: Updated gsc_irq_destroy() - does cleanup when done.

--------------------------------------------------------------------------------

Version 4.4.39.0, Released 7/19/2012

Driver: Updated for the 3.x kernel.
Driver: Corrected a jiffies roll over bug in ioctl.c.
Driver: Added support for boards that need additional setup after a DMA channel has been selected.
Driver: Made the IOCTL buffer larger - 512 bytes.
Driver: Removed compile warnings from the copy_from_user_ret macro.
Updated the makefile for consistency.
Updated the parameter list to gsc_id_driver().

--------------------------------------------------------------------------------

Version 4.3.34.0, Released 12/20/2011

Driver: BAR0 and BAR2 are now the only BAR regions used.
Driver: Include all common source, though not all are used
Split the utility code into two libraries: common and device specific.

--------------------------------------------------------------------------------

Version 4.2.32.0, Released 11/2/2011

Driver: Modified driver start script to correct messages under Ubuntu.
Driver: Numerous updates per changes to the common code base. See main.h.
Driver: Updated the set of IOCTL services.
Driver: Implemented support for the common PIO I/O routines.
Driver: Overhauled IOCTL based local interrupt implementation.
Driver: Updated per changes to the common source code.
Driver: Implemented IOCTL based I/O Abort support.
Driver: Implemented IOCTL based event/interrupt wait support.
Driver: Updated to use the common gsc_open() and gsc_close() services.
Driver: Implemented explicit local interrupt support.
Driver: Implemented support for the common PIO I/O routines.
Driver: Changed use of DEV_SUPPORTS_READ macro.
Driver: Changed use of DEV_SUPPORTS_WRITE macro.
Driver: Corrected the computed number of channels for the HS boards.
Driver: Removed compile errors under Fedora 7.
Driver: Eliminated the global dev_check_id() routine.
Driver: Fixed a bug in the GSC_INTCSR_MAILBOX_INT_ACTIVE macro.
Driver: Removed a compiler warning under Fedora 15.
Driver: Added #defines for D0 through D31.
Driver: Modified gsc_sem_t to prevent hanging on an uninitialized structure.
Driver: Moved dev_check_id() functionality to dev_device_create().
Driver: Added support for deprication of file_ops.ioctl.
Driver: Started PLX EEPROM access support.
Driver: Modified so BAR2 can now be memory or I/O mapped.
Driver: Corrected the _1M macro.
Driver: Removed compiler warning in Fedora 12: reduced module_init stack usage.
Driver: Removed remove_proc_entry() call from proc_start - fix for Fedora 14.
Driver: Fixed a bug in gsc_ioctl_init().
Driver: Added common PIO read and write routines.
Driver: Changed use of DEV_SUPPORTS_PROC_ID_STR macro.
Driver: Changed use of DEV_SUPPORTS_READ macro.
Driver: Changed use of DEV_SUPPORTS_WRITE macro.
Driver: Added initial support for Vital Product Data.
Driver: Corrected a bug: wait timeouts in jiffy units are negative.
Driver: Added support for aborting active I/O operations.
Driver: Added support for Auto-Start operations.
Driver: Added wait options for I/O cancellations.
Driver: Fixed bugs in the DMA code evaluating lock return status.
Driver: Added /proc board identifier string support.
Driver: Added gsc_irq_local_disable and gsc_irq_local_enable;
Driver: Added failure message when driver doesn't load.
Driver: Improved timeout handling.
Driver: Added gsc_time.c.
Driver: Added wait event, wait cancel and wait status services.
Driver: Updated the information that distinguishes PCI-16HSDI from PCI-16SDI-HS.
Driver: Added quiry option for the form factor.
Driver: Added quiry option for supported IRQ options.
clock: Corrected output spelling.
fsamp: Fixed a bug in the range display output.
id: Added.
sbtest: Updated test code per changes in the set of IOCTL services.
sbtest: Modified for changes to the .../utils/ code.
sbtest: Removed compile warnings for Fedora 15.
sbtest: Updated text output for unimplemented Wait Event tests.
sbtest: Updated teh SW SYNC and SW SYNC MODE tests.
sw_sync: Corrected output spelling.
Updated numerous sources per changes in the set of supported IOCTL services.
Updated various Autocalibration related strings and macros for consistency.
Modified makefiles to correct messages under Ubuntu.

--------------------------------------------------------------------------------

Version 4.1.13.0, Released 12/28/2009

Driver: Modified read services to use common argument data types.
Driver: Updated to use current GSC common sources.
test: Fixed a bug in read_data_test()'s output reporting.

--------------------------------------------------------------------------------

Version 4.0.5.0, Released 4/17/2009

Added support for some new board types (gsc_main.h).
Fixed a DMA bug: the first DMA returned incorrect data
Modified some PLX register names for consistency.
Updated the makefile's "clean" code.
Added code to expand access rights to makefile.dep.

--------------------------------------------------------------------------------

Version 4.0.0.0, Released 11/11/2008

This was a major overhaul of the driver and the driver interface.
Several sample applications were added.

--------------------------------------------------------------------------------

Version 3.2, Released 10/19/2007

Updated for the 2.6.21 kernel (Red Hat Fedora Core 7).

--------------------------------------------------------------------------------

Version 3.1.4, Released 04/18/2007

Updated for the 2.6.20 kernel.

--------------------------------------------------------------------------------

Version 3.1.3, Released 10/21/2005

Changed the order of interrupt enabling for autocal.
Fixed problem with filling large buffers.

--------------------------------------------------------------------------------

Version 3.1.2, Released 10/18/2005

Added a new header file with board-specific constants.
Updated the test application to use the new header file.

--------------------------------------------------------------------------------

Version 3.1.1, Released 10/14/2005

Added explicit return from ISR handler after DMA.

--------------------------------------------------------------------------------

Version 3.1, Released 10/12/2005

Fixed a bug where DMA was staying enabled after the ISR was completed.
Updated the manual for the IOCTL_SDI_FILL_BUFFER ioctl.
Cleaned up and added comments to the test application.

--------------------------------------------------------------------------------

Version 3.0, Released 10/5/2005

Changed read handling to only wait for buffer threshold if the "fill buffer"
	IOCTL has been set to TRUE or the buffer is empty.  Otherwise the driver
	will the data present in the buffer.

--------------------------------------------------------------------------------

Version 2.9, Released 8/24/2005

Updated interrupt handling for 2.6.12 kernels.
Fixed a bug where DMA would stop working with a module reload.
Changed interrupt handling so that handler chaining would not cause the driver
	to think an interrupt was unhandled.

--------------------------------------------------------------------------------

Version 2.8, Released 5/4/2005

Updated interrupt routing to conform to the requirements of the 2.6.10 kernel.
Added code to properly abort a failed DMA transfer.
Rearranged the order of interrupt enables to limit the chance of a race
	condition.

--------------------------------------------------------------------------------

Version 2.7, Released 9/20/2004

Fully ported to kernel version 2.6.
Cleanup of test application.

--------------------------------------------------------------------------------

Version 2.6, Released 8/23/2004

Corrected a bug in the Makefile for the 2.4 kernel version.

--------------------------------------------------------------------------------

Version 2.5

Updated IOCTL data checking to differentiate between the value limits of the
	different versions of the hardware.
Fixed bug where IOCTL_SDI_ASSIGN_GEN_TO_GROUP only allowed one generator to be
	assigned.
General cleanup and reformatting.
Added "IOCTL_GSC_FILL_BUFFER"

--------------------------------------------------------------------------------

Version 2.4

Fixed problem where DMA would return correct data once after power up and never
	again and other DMA bugs.

--------------------------------------------------------------------------------

Version 2.3

Corrected the internal name of the driver to be the same as the executable
	image.
Fixed an incorrect (too short) value for read timeout.
Added support for local registers residing either in memory space or I/O space.

--------------------------------------------------------------------------------

Version 2.2

Added support for PMC-6SDI and PCI-16SDI-HS.

--------------------------------------------------------------------------------

Version 2.1

Cleaned up some debugging code.
Changed flags to "volatile" to avoid deadlock.
Added timeout timers for interrupt-wait situations.
Cleand up more race conditions at initialization.
Turned interrupts on and off properly.

--------------------------------------------------------------------------------

Version 2.0

Support for multiple board in the same machine.
Support for multiple board types (16DSI and 16SDI-HS).
Support for newer Linux kernels (2.4.x).
Support for an application to determine which board is which type at runtime.
Cleaned up logic to avoid race conditions.
Simplified driver installation.
Improved error handling.
Fixed several potential lockup conditions.

--------------------------------------------------------------------------------

Version 1.0

Initial release

--------------------------------------------------------------------------------
