Linux Driver 8.6.0 released
2018-07-24 • New Version of the PCAN-Linux Driver available
PCAN-Linux Driver Download Version 8.6.0
(2018-07-24)
Updates:
- driver: removed trailing \0 in characters strings adapter_name and adapter_version sysfs nodes
- pci/pcifd: redesign MSI management (useless msi_step removed)
- PCAN-PCI Express FD: defined new parameters fdirqtl and fdirqcl that allow to set different values than the default IRQ Time and Count Limit
- PCAN-PCI Express FD: MSI: used pci_irq_vector() for Kernels 4.8+ except if MSI sharing is set
- pcan-settings: fixd -d option value as LONG instead of INT
- PCAN-PCIe *: renamed PCAN_PCIE_OEM (FD) to PCAN_Chip_PCIe (FD)
- PCAN-USB-*: restored lost parent (real) device symlink in sysfs
- pcanfdtst.c: fixed warnings from RTAI compilation
- driver rt: fixed compilation issues
- driver/Makefile: do test include/can/dev.h content only when Kernel is lower than 4.8
- driver: added missing rx and tx error counters to BUS_LOAD periodic notification
- driver: added some #ifdef NETDEV_SUPPORT around useless code and data when it is built in netdev mode to save memory
- PCAN-USB FD*: enforced error processing when sending chained cmds: no need to continue sending cmds if one has failed
- PCAN-USB FD*: fixed potential NULL pointer access in UCAN_USB_MSG_CALIBRATION handler
- driver/API: added PCANFD_FEATURE_ECHO and PCANFD_MSG_ECHO new msg bit to explicitly request echo of the tx frame
- pcanfdtst: added "—echo". New option to send CAN frames with local echo:
$ pcanfdtst tx -b 500k --echo -i 0x001 -n 100 -I 4 /dev/pcanpcifd6
...
1529485528~681375 /dev/pcanpcifd6 < 001 ..h.. 4 - 5e 00 00 00
1529485528.680472 /dev/pcanpcifd6 > 001 ..h.. 4 - 5d 00 00 00
1529485528~682451 /dev/pcanpcifd6 < 001 ..h.. 4 - 5f 00 00 00
1529485528.681548 /dev/pcanpcifd6 > 001 ..h.. 4 - 5e 00 00 00
1529485528~683528 /dev/pcanpcifd6 < 001 ..h.. 4 - 60 00 00 00
1529485528.682628 /dev/pcanpcifd6 > 001 ..h.. 4 - 5f 00 00 00
1529485528~684606 /dev/pcanpcifd6 < 001 ..h.. 4 - 61 00 00 00
1529485528.683706 /dev/pcanpcifd6 > 001 ..h.. 4 - 60 00 00 00
1529485528~685684 /dev/pcanpcifd6 < 001 ..h.. 4 - 62 00 00 00
1529485528.684784 /dev/pcanpcifd6 > 001 ..h.. 4 - 61 00 00 00
1529485528~686760 /dev/pcanpcifd6 < 001 ..h.. 4 - 63 00 00 00
/dev/pcanpcifd6 < [packets=100 calls=100 bytes=400 eagain=0]
sent frames: 100
- PCAN-PCIe FD: added FW version checking for DMA issue handling:
Driver checks against FW < 3.3.0 to detect whether the DMA logic includes issue with the mix of 32-bit and 64-bit logical addresses
- PCAN-PCIe FD: wait of end of PCIe transaction when resources are being cleared in the board, before releasing their corresponding part in the host
- netdev: fixed memory leak and free of wMsgs and rMsgs msgs queues in case of alloc failure
- driver: used device_destroy() instead of device_del() (see: source/drivers/base/core.c: "device_destroy - removes a device that was created with device_create()")
- sysfs: fixed usage of dev->adapter when removing sysfs nodes: dev->adapter might be released before deleting the sysfs adapter related nodes
- driver: added debug as a new target in Makefile and fix netdev build
- PCAN-USB *: fixed plugging/unplugging of USB adapters while there is CAN traffic
- PCAN-PCI/PCIe: introduced devs list in pcan_pci.c to correctly free resources in case of errors in _probe() function
- driver: removed old and useless #idef/#endif: consider as if:
- PCAN_USES_OLD_TX_ENGINE_STATE won't never be defined anymore
- PCAN_USB_PCAN_SYSFS is always defined
- driver: fixed delta_us computing in pcan_sync_timestamp() to prevent from event timestamp older than sync timestamps
- driver: fixed timeval_add_us() to correctly handle the negative values of µs to add
- driver: timestamp cooking is now done in user context rather than in interrupt context to save CPU time
- PCAN-USB: fixed regression issue with PCAN-USB at 1Mbps, as well as timestamp 8-bit wrapping issue and improve rx management
- driver CONFIG_COMPAT mode: fixed copy_to_msg32()
- driver/API: added support for SET and GET_OPTION in CONFIG_COMPAT mode
- driver: added SPDX identifiers to headers and C files
- driver: Included last linux-can header files rather (very) old ones. This also enables to include last GLPv2 license
- PCAN-PCIe *: included MSI workaround around can0 IRQ: now can0 IRQ is always the last IRQ freed:
- If PCAN_PCI_MSI_WORKAROUND is not defined, then IRQ are requested (resp. freed) at _open() (resp. _close()) time, as before.
- If PCAN_PCI_MSI_WORKAROUND is defined, then:
- . if usemsi (fdusemsi) equals 0, then IRQ are requested (resp. freed) at _open() (resp. _close()) time.
- . otherwise, IRQ are requested (resp. freed) at _probe() (resp. _exit()) time.
Since this issue has been seen on x86, then PCAN_PCI_MSI_WORKAROUND is defined ONLY when CONFIG_X86 is defined
- driver: included support of new Timer API since Kernel 4.15 (Ubuntu 18.04 LTS)
- driver/API: changed the way STATUS[PCANFD_BUS_LOAD] is notified:
Now the driver setup its own timer to push the STATUS[PCANFD_BUS_LOAD] msg by itself. This msg is no more pushed by the device ISR
This enables to limit Rx queue flooding and ensure that the msg will always be pushed. The timer is stopped when the device is closed
The timer is setup and started if flag PCAN_DEV_BUSLOAD_RDY is set only
- driver: fixed bus_load: value should be 100x greater
- PCAN-USB *: force GFP_DMA bit for URB data buffer allocation
- PCAN-USB: reworked completely timestamps handling to handle clocks drift through the driver global timestamp system
- PCAN-* FD: fixed 32-bit aligned parsing of incoming uCAN buffers
- driver/API: initialize with default settings when no bitrate nor brp is given by user
- PCAN-USB *: fixed usage of read_buffer_len in rx USB buffer (some buffers could not been read entirely)
- driver: useed power of 2 value for clock_drift scale to save CPU time in timestamp management during ISR
- driver/Makefile: used "modprobe", "udevadm" and "depmod" instead of the absolute path of the executable files
- pcanfdtst: dsample_pt default value forced to sample_pt if dsample_pt was not given on cmd line
- driver: improved the way init settings are checked and handled before opening a channel: now, any wrong value generates -EINVAL
- lib/pcanfd_open(): process SAMPLEPT flags only when BITRATE values are given (processing any user sample point makes no sense when using BRP,TSEGx and SJW arguments)
- driver: restore default settings on last close instead of keeping current ones
- driver/API: fixed potential bug: user sample_point MUST not be greater than PCAN_SAMPT_SCALE
- driver: fixed some DEBUG string format in 32-bit compilation
- PCAN-USB *: improved the way timestamps are handled to be VM compatible
- PCAN-USB *: request calibration msgs at _init() rather than at _open() time so that clocks are stabilized an clocks drifts are fixed when the channel is open
- PCAN-USB *: fixed potential Kernel Oops in pcan_poll when application uses select() and USB device is unplugged
- driver: changed mdelay() into msleep_interruptible() to save CPU time while in non-interrupt contexts
- PCAN-USB *: fixed URB buffer address by using the heap instead of the stack
- PCAN-USB *: added up to 2 retries when writing an URB, in case of time out. This fix should be enough for PCAN-USB Pro to run in VM
- driver/API: fixed a bug that could lead to send a CAN FD msg with data_len > 8 and/or BRS while the channel was not opened in CAN FD mode
- pcanfdtst.c: Added --play-forever option: while --play reads once a file and stops at the end of it, --play-forever loops reading it from the beginning
- SJA1000 *: fixed potential bug for all internal SJA1000 based devices: no other choices than "software" timestamps for these devices
- pcanfdtst.c: added a way to ctrl output line format (see % date --help)
- pcanfdtst.c: added --filler option and "rec" mode to define the way DATA are filled and to record data into a file that could be played next
- pcanfdtsts.c: now frames can be sent AND checked with incremented CAN ID and DLC
- driver/API: removed useless PCANFD_TX_OVERFLOW notification when in blocking mode
- pcandfdtst.c: added "getopt" and "setopt" new modes to get/set OPTIONS value from the driver
Usage is:
$ pcanfdtst getopt --opt-name x /dev/pcan
$ pcanfdtst setopt --opt-name x --opt-value yyyy /dev/pcan
- PCAN-Chip USB: Fixed PCAN-Chip name
- PCAN-Chip FW 3.3.0: included digital/analog I/O full management
(see also PCANFD_IO_xxx options in pcanfd.h)
- driver: changed the way ENOSPC is handled in options processing: when user provides a too small buffer, -ENOSPC is returned and the "size" field of the opt pointer is updated with the needed value. Libpcanfd has been changed too. Now, user application knows what size should be allocated
- driver/API: added 2 options to read FW and DRV versions
- driver: fixed sjw usage in SJA1000 bittiming conversions
- driver: fixed sample_point conversion between pcan and linux-can: pcan sample-point uses 3 decimals while linux-can uses 2
- driver: fixed bitrate conversion issue: added sjw as a parameter to convert some BTR0BTR1 specs. Previous releases were considering a default sjw (=1) for the display
- pcanfdtst.c: added -E --esi option to set ESI bit in tx frames
- netdev: use jiffies only for Kernel > 4.7 (remove support of old kernels, for something that is not used anywhere else...)
- driver/Makefile: removed the leading comment in var setting that could lead to compilation error
- PCAN-USB *: fixed usb device ID reading and setting by looping on sending the request in case of ETIMEDOUT
- PCAN-USB *: useed more modern way to dialog with USB devices by the mean of usb_bulk_msg()
- pcan-settings: didn't return "errno" anymore but 0
- pcanfdtst.c: don't fail in case of timeout if not waiting for a given number of frames (that is, when -n is not used on cmd line)
- PCAN-USB X6: fixed comment for in its corresponding Udev rule
- sysfs: "devid" entry only exists if devid makes sense for the device
- pcanfdtst.c: useed alarm() and signal(SIGALRM) to setup a maximum time of running
- pcanfdtst.c: changed the meaning of the "- n xxx" option: now this defines the count of CAN frames instead of the count of loops
- driver: changed the good old enum scheme. Now devices ranges are:
0 31 PCI/PCIe
32 63 USB
64 71 PC-CARD
72 79 ISA/PC104
80 87 DNG SP
88 95 DNG EPP
To restore the old one, build pcan with:
$ make NEW_DEVNUM_SCHEME=NO
0 7 PCI/PCIe
8 15 ISA/PC104
16 23 DNG SP
24 31 DNG EPP
32 39 USB
40 47 PC-CARD
- driver/API: addd PCANFD_FEATURE_SELFRECEIVE bit that says that the device is capable of self-sending CAN frames
- driver/API: renamed HW_PCI_FD into HW_PCIE_FD which is closer to reality (pcan.h always defines HW_PCI_FD as HW_PCIE_FD, for compatibility reasons)
- pcanfdtst.c: added -M | --max-duration option that enables user to set the maximum count of s. the application should run.
If this duration is reached before the end of the test, the application returns 1
- lib: fixed pcanfd_open() now unconditionally calls ioctl(SET_INIT) next to open() system call
- netdev: fixed usage of CTRLMODE_LISTEN_ONLY and _FD_NON_ISO socket-CAN flags
Download - PCAN-Linux Driver
PEAK-System Linux Website - More Information