The board name for "comedi_bond" is constructed from a space-separated
list of items of the form "minor:subdevice" where "minor" is a minor
device number and "subdevice" is a subdevice number. Currently, all the
"minor" device numbers are for the "comedi_bond" device itself and the
"subdevice" numbers are for the bonded devices. It makes makes more
sense for the "minor" device numbers to come from the bonded devices as
well so that the string is a list of bonded "minor:subdevice" pairs.
Fix it.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
`do_dev_config()` is called from the comedi 'attach' handler,
`bonding_attach()`. The device private data structure contains a
dynamically allocated array of pointers to "bonded" device structures
which grows during the `do_dev_config()` call. The length of this array
is in `devpriv->ndevs`. It currently uses a local function `realloc()`
to allocate a new array, copy the old contents over and free the old
array. It should be more efficient to use `krealloc()` as it may be
able to use slack space at the end of the previous array and avoid a
copy.
The old `realloc()` function always freed the old buffer which meant
that if it failed to allocate the new buffer it would lose the contents
of the old buffer. Unfortunately, that contained pointers to more
dynamically allocated memory, leading to a memory leak. If `krealloc()`
fails, keep the old buffer and avoid the memory leak. The
aforementioned pointers to more dynamically allocated memory will be
cleaned up by the 'detach' handler, `bonding_detach()` which will be
called by the comedi core as a consequence of `krealloc()` failing in
`do_dev_config()`.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
If a DIO subdevice has more than 32 channels, its 'insn_bits' handler is
supposed to take account of the base channel from
`CR_CHAN(insn->chanspec)`. (The comedi core will adjust the base
channel to 0 and shift the mask and data to compensate if the subdevice
has less than or equal to 32 channels.) The "comedi_bond" driver
currently ignores the base channel and assumes it is 0.
Replace `comedi_dio_bitfield()` in the "kcomedilib" module with
`comedi_dio_bitfield2()` that takes account of the base channel, and
rewrite the "comedi_bond" driver's 'insn_bits' handler
(`bonding_dio_insn_bits()`) to take account of the base channel and use
the new function.
No other modules use `comedi_dio_bitfield()` so it is safe to replace it
with `comedi_dio_bitfield2()`. The name follows that of the equivalent
function in the user-space comedilib. If the base channel is non-zero
and the subdevice has less than or equal to 32 channels it needs to
adjust things in the same way as the comedi core (same as `parse_insn()`
in "comedi_fops.c") due to most drivers ignoring the base channel.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The DIO subdevice of the "comedi_bond" device attempts to remember the
directions of DIO channels itself in the `io_bits` member of the
subdevice, but that is only large enough for the first 32 channels and
it might not be accurate anyway as changing the direction of one channel
may have affected a whole group of channels and we have no idea of the
initial directions before the "bonded" device was linked to the the
"comedi_bond" device. It would be better to ask the bonded device for
this information when handling a `INSN_CONFIG_DIO_QUERY` configuration
instruction. Add new function `comedi_dio_get_config()` to the
"kcomedilib" module to allow us to get the DIO direction of a channel
and use it.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The `while` loop in `bonding_detach()` doesn't need to check
`devpriv->devs` each time round the loop. Move the test outside the
loop. The enclosing `if (devpriv)` can be changed to `if (devpriv &&
devpriv->devs)` as everything in this `if` statement is associated with
`devpriv->devs` anyway.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The comedi core will free `dev->private` if it is non-NULL after calling
the "detach" handler (`bonding_detach()`), so don't bother freeing it in
`bonding_detach()`.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The `subdev_type` member of `struct bonded_device` is set but not used.
Remove it.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The private data structure (`struct comedi_bond_private`) for the
overall "comedi_bond" device maps each channel individually to a pointer
to the `struct bonded_device` it belongs to via array member
`chan_id_dev_map[MAX_CHANS]`. This speeds up look-ups from channel
number to bonded device a bit, but the length of the array used to look
this up is currently fixed at `MAX_CHANS` (256) and there are no
overflow checks when filling the array.
In practice, there will only be a few bonded devices (actually bonded
subdevices) and it is practical to just skip through the list until we
reach the one containing the desired channel.
The only place where the bonded device is looked up from the channel
number is in `bonding_dio_insn_config()`. Change it to do the look-up
by skipping through the list of bonded devices and remove the
`chan_id_dev_map[]` member. The `chanid_offset` member of `struct
bonded_device` is also no longer needed as the value can be derived
while skipping through the list of bonded devices, so remove that member
as well.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
`do_dev_config()` currently records the comedi minor devices it has
opened by setting `devs_opened[minor]` to the pointer returned by
`comedi_open()`. This is checked to avoid opening the same minor device
twice. The pointer values in `devs_opened[]` aren't needed; we only
need to record which minor device numbers are being used. Change
`devs_opened` to a bitmap (declared with `DECLARE_BITMAP()`) of length
`COMEDI_NUM_BOARD_MINORS` as the minor device numbers are range-checked
to fit in a bitmap of this length. Use `test_and_set_bit()` to record
the minor device numbers we attempt to open with `comedi_open()`.
`bonding_detach()` calls `comedi_close()` to close the comedi minor
devices. Since the minor device numbers may be repeated in its list of
bonded subdevices, it currently uses a simple `unsigned long
devs_closed` variable as a bitmap to keep track of which minor device
numbers it has already closed to avoid closing them twice. As a single
`unsigned long` consists of less than `COMEDI_NUM_BOARD_MINORS` bits on
a 32-bit machine, change `devs_closed to a bitmap of this length using
`DECLARE_BITMAP()` and use `test_and_set_bit()` to avoid calling
`comedi_close()` more than once for each minor device number in use.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
`bonding_attach()` is the comedi "attach" handler for the driver. Any
non-negative return value is treated as successful, but 0 is the
preferred return value on success.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Change `do_dev_config()` to return an error code on failure and 0 on
success, instead of 0 on failure and 1 on success.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The `char file[]` variable in `do_dev_config()` doesn't need to be
initialized as it gets overwritten with a `snprintf()`. It just needs
to be long enough.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Omit the fanciful prose from the MODULE_DESCRIPTION() line and combine
concantenated string literals.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reformat some comments according to CodingStyle and remove some comments
inherited from the comedi 'skel' example driver.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
DGNC is based on PCI, so need add related dependency, or when compiled
with PCI disabled, it will be fail.
The related error (randconfig for PCI disabled under s390):
drivers/staging/dgnc/dgnc_cls.c:1394:2: error: implicit declaration of function ‘ioremap’ [-Werror=implicit-function-declaration]
drivers/staging/dgnc/dgnc_cls.c:1407:3: error: implicit declaration of function ‘iounmap’ [-Werror=implicit-function-declaration]
Cc: Lidza Louina <lidza.louina@gmail.com>
Signed-off-by: Chen Gang <gang.chen@asianux.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
struct pt_regs pointer is no longer passed as a irq handler
argument. and also remove unnecessary macros.
Signed-off-by: navin patidar <navinp@cdac.in>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Make sure that we return negative value if oz_build_frame()
returns NULL.
Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
We have icreased interrupt end point buffer size to 512 bytes,
Change variable data type to accomodate it.
Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Increase interrupt end point buffer size & convert hard coded
value to macro for better readability.
Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Use macro instead of hard coded value for readability.
Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Check for valid config number before completing set interface.
Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Only one of vnt_rts*/vnt_cts* structures are accessed at any one time.
Join these structures in to a single union.
These will eventually form the tail structure of vnt_tx_buffer and
include structures vnt_tx_datahead*
Structures in s_vFillCTSHead will join in next patch series.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Parse out vnt_rts_a_fb code to new function vnt_rxtx_rts_a_fb_head.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Parse out vnt_rts_ab code to new function vnt_rxtx_rts_ab_head.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Parse out vnt_rts_g_fb code to new function vnt_rxtx_rts_g_fb_head.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Parse out vnt_rts_g code to new function vnt_rxtx_rts_g_head.
Also create a new common calling function vnt_fill_ieee80211_rts
to fill the ieee80211_rts structure.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
If pvRrvTime is NULL the whole structure is NULL, so
remove if statements and consolidate to single return.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
As result of patch
vt6656: rxtx.c s_vFillCTSHead remove dead code bDisCRC
bDisCRC is unused.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
As result of patch
vt6656: device.h Remove dead code bSoftwareGenCrcErr.
dDiscCRC is unused.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
As result of patch
vt6656: device.h Remove dead code bSoftwareGenCrcErr.
dDiscCRC is unused.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Probably an error in earlier firmware is never enabled so remove.
bPacketToWirelessUsb remove dead if/else and variables.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This driver has some global names that are the same as found in
driver r8712. Fix the allyesconfig build errors by changing the
names of those routines.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Kernel code need not test for KERNELVERSION. Besides being unnecessary
for an in-kernel driver, these lines will cause a build failure for any
source tree with a stale include/linux/version.h.
This patch is only compile tested.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Move to use the DEVICE_ATTR_RW/RO macros, making it easier to audit the
sysfs file permissions, and get rid of the "empty" callback for
read-only files, saving lines of code.
Cc: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Laurent Navet <laurent.navet@gmail.com>
Cc: Johannes Thumshirn <morbidrsa@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Use the default DEVICE_ATTR_RO/RW macros to specify the file permissions
better, and make them easier to audit.
And did we really want any user to be able to write to this file, I kind
of doubt it...
Cc: Jiang Liu <jiang.liu@huawei.com>
Cc: Toshi Kani <toshi.kani@hp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Use the DEVICE_ATTR_RW() macro to be clearer as to the permissions for
the sysfs file, making it easier to audit the code.
Cc: Al Cho <acho@novell.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Use the DEVICE_ATTR_RO/RW macros to better describe the permissions on
the file, and make them easier to audit.
Cc: David Täht <d@teklibre.com>
Cc: Sara Bird <sara.bird.iar@gmail.com>
Cc: Masanari Iida <standby24x7@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The sysfs file for the driver was being created _after_ the device was
announced to userspace, causing a race with any tools looking for sysfs
files.
Fix the race by using the default attribute group for the class.
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The sysfs file in this driver is showing a raft of debugging values,
none of which belong in sysfs, let alone in a single sysfs file. If
these really need to be described somewhere, they should go into
debugfs.
For now, just delete the sysfs file, which removes a bunch of files from
the tree.
Cc: Henk de Groot <pe1dnn@amsat.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
On 32-bit m68k, I get lots of warnings like:
warning: integer constant is too large for ‘long’ type
Switch the L*_POISON definitions from too-large constants and casts
to the proper constant types to fix this.
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
As we are initialising structure, we do not require
memset().
Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Replace the pointer offsets with structure of mic_hdr with
endian conversion where needed.
Replace vFillTxKey argument u8 *pMICHDR with struct vnt_mic_hdr *mic_hdr
and fix type of calling functions.
An extra check that mic_hdr is not NULL
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
wTimeStampOff needs to be endian corrected
Create new function vnt_time_stamp_off to return little endian u16 value.
Private variable byPreambleType is common to all calling functions is included.
variable rate to set the desired rate.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>