Store the length of the main register region in new member `mainsize` of
`struct dio200_board` and initialize it in each element of
`dio200_boards[]`. For all currently supported boards this is
initialized to `DIO200_IO_SIZE` (0x20), but will be different for newer
boards to be supported in the future.
For ISA boards, this is the actual region length requested, but for PCI
boards it's the minimum expected region length. Verify that the PCI BAR
region length is sufficient in `dio200_attach_pci()`.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Add `mainbar` member to `struct dio200_board` to hold the PCI BAR number
for the main registers. This is `2` for the PCI boards currently
supported (PCI215 and PCI272) but will be different for some new boards
to be supported later.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The boards currently supported by this module all use port I/O. Support
memory-mapped I/O as well for future PCI/PCIe cards.
Define `struct dio200_region` to hold the type of register access and
either the port I/O base address or an ioremapped MMIO address. Add a
member `io` to the comedi device private data (`struct dio200_private`)
to hold this. Use this instead of `dev->iobase`. Memory-mapped
registers are mapped in `dio200_pci_attach()` and unmapped in
`dio200_detach()`.
`dio200_detach()` now uses the private data pointer `devpriv` set to
`dev->private` but can return early if it is `NULL` because no clean-up
needs to be done in that case.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Don't pass the I/O base address to `dio200_common_attach()`. The only
thing it does with it is set `dev->iobase` to the passed in value. Do
that before calling `dio200_common_attach()` in order to simplify
upcoming support for different register access methods.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Add custom functions to access hardware registers and call them instead
of calling `inb()` and `outb()` directly. When additional cards are
supported by this driver requiring different register access methods,
the new functions will localize the register access differences to just
these functions.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The "amplc_dio200" module no longer depends on the "8255" module, so the
'COMEDI_AMPLC_DIO200' Kconfig setting no longer needs to select
'COMEDI_8255'.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Implement the '8255' DIO subdevice internally to this module instead of
using the external "8255" module. I plan to add support for additional
cards to this driver that would require the I/O callback functionality
of the 8255 module, but the existing callback functions do not have much
context to handle this elegantly. The additional cards also have extra
DIO features which cannot be handled by the existing "8255" module and
that I'd like to support some time in the future.
The bottom line is I _could_ continue using the "8255" module for a
while with a callback function, but it would turn out to be a very ugly
callback function and I'd have to ditch the use of the "8255" module as
soon as I added an extra feature to the DIO subdevice.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Add our own functions to manipulate the '8254' counter chip instead of
the inline ones from "8253.h". This will make the code less messy when
we add code to support new boards later.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Replace the absolute, modified I/O base addresses in the private data
structures for the '8254' counter and 'intr' DIO subdevices with offsets
from the main I/O base address. `dio200_subdev_intr_init()` now needs
the offset instead of the absolute address. `dio200_subdev_8254_init()`
now only needs the offset instead of both the absolute address and the
offset. The '8255' DIO subdevices are unaffected as they are handled by
the external "8255" module.
This change is not useful by itself but is an intermediate step for
later changes.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The `has_clk_gat_sce` member of `struct dio200_subdev_8254` indicates
whether the board has clock and gate source selection registers. The
same information can be obtained from read-only board layout data so
doesn't need to be set per '8254' counter subdevice. Eliminate the
member and use the read-only data instead. The last parameter of
`dio200_subdev_8254_init()` is used to initialize this member, so remove
that parameter as well.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Add inline helper function `dio200_board_layout(board)` to get a pointer
to the board layout data for a board. Add inline helper function
`dio200_dev_layout(dev)` to get a pointer to the board layout data for a
comedi device (this function is currently unused but will be used by a
later change).
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Now that the tag name `dio200_layout` is available, rename `struct
dio200_layout_struct` to `struct dio200_layout` as the `_struct` suffix
is a bit redundant and I plan to use this type in other places in the
module.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Rename `enum dio200_layout` to `enum dio200_layout_idx`. It's only used
once and frees up the `dio200_layout` tag for something else later.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Rename the clock and gate configuration functions for the '8254' counter
subdevices and pass in the pointers to the comedi device and comedi
subdevice. This is just preparing the way for later changes.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Absorb `dio200_pci_common_attach()` into `dio200_attach_pci()` since
that's the only place it is called from.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The call to `comedi_set_hw_dev()` from `dio200_pci_common_attach()` is
now unnecessary since `dio200_pci_common_attach()` is now only called
from this driver's `attach_pci` hook `dio200_attach_pci()` and the
comedi core now calls `comedi_set_hw_dev()` before calling that. Remove
the unnecessary call.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Now that this driver no longer supports "manual" attachment of PCI
devices in its `attach` hook (`dio200_attach()`), it no longer has code
that searches for a suitable PCI device and increments its reference
count. Since the driver no longer has any reason for incrementing and
decrementing the PCI device's reference count, the calls to
`pci_dev_get()` and `pci_dev_put()` can be removed.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Remove the code that allows PCI boards to be manually attached by the
`COMEDI_DEVCONFIG` ioctl (or the "comedi_config" application).
Supported PCI boards will be attached automatically at probe time via
`comedi_pci_auto_config()` and the `attach_pci` hook in the `struct
comedi_driver`.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reformat the driver description comment to use the preferred block
comment style so that future changes are acceptable to the checkpatch.pl
script.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
remove some of the function prototypes , they dont have a definition
of the function
Signed-off-by: Devendra Naga <devendra.aaru@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
CsrThreadHandle is typedef of struct CsrThread.
Some functions in csr_framework_ext.h use it as parameter.
But, nobody call them.
Signed-off-by: SeongJae Park <sj38.park@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
gcc/sparse complain about the following:
drivers/staging/ced1401/ced_ioc.c:931:1: warning: the frame size of 4144 bytes is larger than 2048 bytes [-Wframe-larger-than=]
Fix it by dynamically allocating it.
Signed-off-by: Devendra Naga <devendra.aaru@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This function handles all the insn_config instructions for the
digital i/o subdevice. These functions are supposed to return
the number of instruction parameters used (insn->n) or an -errno.
Fix the switch() so that the correct result is returned for all
INSN_CONFIG_* cases.
To clarify the code, add a local variable for the 'bit' used with
the instructions used to configure and query the input/output setting
of a channel.
For aesthetic reasons, add a whitespace between each case to improve
readability.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This BUG_ON can never happen. The 'chan' value comes from the comedi
core in the insn->chanspec and will always be in range for the subdevice
number of channels (s->n_chan = NUM_PFI_CHANNELS).
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This function is used to get the dev->board_ptr from the
comedi_device. Remove the function and use a local variable
to hold the pointer where used. Use the comedi_board() helper
to get the pointer.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
The comedi core now sets the 'hw_dev' pointer in the function
comedi_auto_config_helper() before calling the auto attach
function in the driver.
Remove the now unnecessary call to comedi_set_hw_dev() in the
drivers that use the auto-config attach mechanism.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This inline function has a very generic name and it's only a
wrapper around a simple kzalloc(). Since the inline function
does not save any lines-of-code, instead of renaming it just
remove it and do the kzalloc() directly.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This config item has not carried much meaning for a while now and is
almost always enabled by default. As agreed during the Linux kernel
summit, remove it.
CC: Henk de Groot <pe1dnn@amsat.org>
CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This fixes the following checkpatch issues:
WARNING: line over 80 characters
+INT InterfaceIdleModeRespond(struct bcm_mini_adapter *Adapter, unsigned int *puiBuffer);
ERROR: "foo * bar" should be "foo *bar"
+INT InterfaceWakeUp(struct bcm_mini_adapter * Adapter);
Signed-off-by: Ceri James <jamesceri@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This fixes the following checkpatch issues:
WARNING: line over 80 characters
+ BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "=====>\n");
ERROR: space required after that ',' (ctx:VxV)
+ BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "=====>\n");
^
WARNING: line over 80 characters
+ BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "Adapter found NULL!\n");
ERROR: space required after that ',' (ctx:VxV)
+ BCM_DEBUG_PRINT(Adapter,DBG_TYPE_TX, TOKEN_COUNTS, DBG_LVL_ALL, "Adapter found NULL!\n");
^
Signed-off-by: Ceri James <jamesceri@googlemail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
dma_addr_t can be of size 64 or 32bits, depending on the architecture.
This fixes these build warnings for ARCH=i386, and also tested on x86_64:
drivers/staging/et131x/et131x.c: In function ‘et131x_rx_dma_memory_alloc’:
drivers/staging/et131x/et131x.c:2356:11: warning: passing argument 2 of ‘et131x_align_allocated_memory’ from incompatible pointer type [enabled by default]
drivers/staging/et131x/et131x.c:2260:13: note: expected ‘u64 *’ but argument is of type ‘dma_addr_t *’
drivers/staging/et131x/et131x.c:2378:11: warning: passing argument 2 of ‘et131x_align_allocated_memory’ from incompatible pointer type [enabled by default]
drivers/staging/et131x/et131x.c:2260:13: note: expected ‘u64 *’ but argument is of type ‘dma_addr_t *’
drivers/staging/et131x/et131x.c: In function ‘free_send_packet’:
drivers/staging/et131x/et131x.c:3540:5: warning: left shift count >= width of type [enabled by default]
Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Mark Einon <mark.einon@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
USE_FBR0 has always been defined, even in the original driver code.
Remove the define and #ifdef code to leave the code in the same state.
Signed-off-by: Mark Einon <mark.einon@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
'>> 32 of a 32bit value is undefined in C. The compiler is free
to do what it likes with this...'
Change all uses of '>> 32' to use upper_32_bits() and use
the corresponding lower_32_bits() to match.
Also remove an incorrect comment about dma alloc always returning 32bit
addresses.
Signed-off-by: Mark Einon <mark.einon@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fbr_lookup.real_physaddr is only being used as a pseudonym for
fbr_lookup.ring_physaddr, so remove it and rename all instances to
ring_physaddr.
Signed-off-by: Mark Einon <mark.einon@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>