#define PAGE_INT_ID 3
typedef int (*comedi_insn_fn_t) (struct comedi_device *, struct comedi_subdevice *,
- comedi_insn *, unsigned int *);
+ struct comedi_insn *, unsigned int *);
-static int ai_rinsn(struct comedi_device *, struct comedi_subdevice *, comedi_insn *,
+static int ai_rinsn(struct comedi_device *, struct comedi_subdevice *, struct comedi_insn *,
unsigned int *);
-static int ao_rinsn(struct comedi_device *, struct comedi_subdevice *, comedi_insn *,
+static int ao_rinsn(struct comedi_device *, struct comedi_subdevice *, struct comedi_insn *,
unsigned int *);
-static int ao_winsn(struct comedi_device *, struct comedi_subdevice *, comedi_insn *,
+static int ao_winsn(struct comedi_device *, struct comedi_subdevice *, struct comedi_insn *,
unsigned int *);
/*
* boards in this way is optional, and completely driver-dependent.
* Some drivers use arrays such as this, other do not.
*/
-typedef struct pcmmio_board_struct {
+struct pcmmio_board {
const char *name;
const int dio_num_asics;
const int dio_num_ports;
const int ao_bits;
const int n_ai_chans;
const int n_ao_chans;
- const comedi_lrange *ai_range_table, *ao_range_table;
+ const struct comedi_lrange *ai_range_table, *ao_range_table;
comedi_insn_fn_t ai_rinsn, ao_rinsn, ao_winsn;
-} pcmmio_board;
+};
-static const comedi_lrange ranges_ai =
+static const struct comedi_lrange ranges_ai =
{ 4, {RANGE(-5., 5.), RANGE(-10., 10.), RANGE(0., 5.), RANGE(0.,
10.)}
};
-static const comedi_lrange ranges_ao =
+static const struct comedi_lrange ranges_ao =
{ 6, {RANGE(0., 5.), RANGE(0., 10.), RANGE(-5., 5.), RANGE(-10., 10.),
RANGE(-2.5, 2.5), RANGE(-2.5, 7.5)}
};
-static const pcmmio_board pcmmio_boards[] = {
+static const struct pcmmio_board pcmmio_boards[] = {
{
name: "pcmmio",
dio_num_asics:1,
/*
* Useful for shorthand access to the particular board structure
*/
-#define thisboard ((const pcmmio_board *)dev->board_ptr)
+#define thisboard ((const struct pcmmio_board *)dev->board_ptr)
/* this structure is for data unique to this subdevice. */
-typedef struct {
+struct pcmmio_subdev_private {
union {
/* for DIO: mapping of halfwords (bytes) in port/chanarray to iobase */
unsigned int shadow_samples[8]; /* the last unsigned int data written */
} ao;
};
-} pcmmio_subdev_private;
+};
/* this structure is for data unique to this hardware driver. If
several hardware drivers keep similar information in this structure,
feel free to suggest moving the variable to the struct comedi_device struct. */
-typedef struct {
+struct pcmmio_private {
/* stuff for DIO */
struct {
unsigned char pagelock; /* current page and lock */
unsigned int irq;
spinlock_t spinlock;
} asics[MAX_ASICS];
- pcmmio_subdev_private *sprivs;
-} pcmmio_private;
+ struct pcmmio_subdev_private *sprivs;
+};
/*
* most drivers define the following macro to make it easy to
* access the private structure.
*/
-#define devpriv ((pcmmio_private *)dev->private)
-#define subpriv ((pcmmio_subdev_private *)s->private)
+#define devpriv ((struct pcmmio_private *)dev->private)
+#define subpriv ((struct pcmmio_subdev_private *)s->private)
/*
* The struct comedi_driver structure tells the Comedi core module
* which functions to call to configure/deconfigure (attach/detach)
* the board, and also about the kernel module that contains
* the device code.
*/
-static int pcmmio_attach(struct comedi_device * dev, comedi_devconfig * it);
+static int pcmmio_attach(struct comedi_device * dev, struct comedi_devconfig * it);
static int pcmmio_detach(struct comedi_device * dev);
static struct comedi_driver driver = {
* devices are such boards.
*/
board_name:&pcmmio_boards[0].name,
- offset:sizeof(pcmmio_board),
- num_names:sizeof(pcmmio_boards) / sizeof(pcmmio_board),
+ offset:sizeof(struct pcmmio_board),
+ num_names:sizeof(pcmmio_boards) / sizeof(struct pcmmio_board),
};
static int pcmmio_dio_insn_bits(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data);
+ struct comedi_insn * insn, unsigned int * data);
static int pcmmio_dio_insn_config(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data);
+ struct comedi_insn * insn, unsigned int * data);
-static irqreturn_t interrupt_pcmmio(int irq, void *d PT_REGS_ARG);
+static irqreturn_t interrupt_pcmmio(int irq, void *d);
static void pcmmio_stop_intr(struct comedi_device *, struct comedi_subdevice *);
static int pcmmio_cancel(struct comedi_device * dev, struct comedi_subdevice * s);
static int pcmmio_cmd(struct comedi_device * dev, struct comedi_subdevice * s);
static int pcmmio_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_cmd * cmd);
+ struct comedi_cmd * cmd);
/* some helper functions to deal with specifics of this device's registers */
static void init_asics(struct comedi_device * dev); /* sets up/clears ASIC chips to defaults */
* in the driver structure, dev->board_ptr contains that
* address.
*/
-static int pcmmio_attach(struct comedi_device * dev, comedi_devconfig * it)
+static int pcmmio_attach(struct comedi_device * dev, struct comedi_devconfig * it)
{
struct comedi_subdevice *s;
int sdev_no, chans_left, n_dio_subdevs, n_subdevs, port, asic,
* Allocate the private structure area. alloc_private() is a
* convenient macro defined in comedidev.h.
*/
- if (alloc_private(dev, sizeof(pcmmio_private)) < 0) {
+ if (alloc_private(dev, sizeof(struct pcmmio_private)) < 0) {
printk("cannot allocate private data structure\n");
return -ENOMEM;
}
n_dio_subdevs = CALC_N_DIO_SUBDEVS(chans_left);
n_subdevs = n_dio_subdevs + 2;
devpriv->sprivs =
- kcalloc(n_subdevs, sizeof(pcmmio_subdev_private), GFP_KERNEL);
+ kcalloc(n_subdevs, sizeof(struct pcmmio_subdev_private), GFP_KERNEL);
if (!devpriv->sprivs) {
printk("cannot allocate subdevice private data structures\n");
return -ENOMEM;
* This allows packed reading/writing of the DIO channels. The
* comedi core can convert between insn_bits and insn_read/write */
static int pcmmio_dio_insn_bits(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data)
+ struct comedi_insn * insn, unsigned int * data)
{
int byte_no;
if (insn->n != 2)
* contains the channel to be changed, and data[0] contains the
* value COMEDI_INPUT or COMEDI_OUTPUT. */
static int pcmmio_dio_insn_config(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data)
+ struct comedi_insn * insn, unsigned int * data)
{
int chan = CR_CHAN(insn->chanspec), byte_no = chan / 8, bit_no =
chan % 8;
}
#endif /* notused */
-static irqreturn_t interrupt_pcmmio(int irq, void *d PT_REGS_ARG)
+static irqreturn_t interrupt_pcmmio(int irq, void *d)
{
int asic, got1 = 0;
struct comedi_device *dev = (struct comedi_device *) d;
} else {
unsigned bits = 0, pol_bits = 0, n;
int nports, firstport, asic, port;
- comedi_cmd *cmd = &s->async->cmd;
+ struct comedi_cmd *cmd = &s->async->cmd;
if ((asic = subpriv->dio.intr.asic) < 0)
return 1; /* not an interrupt
*/
static int pcmmio_cmd(struct comedi_device * dev, struct comedi_subdevice * s)
{
- comedi_cmd *cmd = &s->async->cmd;
+ struct comedi_cmd *cmd = &s->async->cmd;
unsigned long flags;
int event = 0;
* 'do_cmdtest' function for an 'INTERRUPT' subdevice.
*/
static int
-pcmmio_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s, comedi_cmd * cmd)
+pcmmio_cmdtest(struct comedi_device * dev, struct comedi_subdevice * s, struct comedi_cmd * cmd)
{
int err = 0;
unsigned int tmp;
/* All this is for AI and AO */
static int ai_rinsn(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data)
+ struct comedi_insn * insn, unsigned int * data)
{
int n;
unsigned long iobase = subpriv->iobase;
}
static int ao_rinsn(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data)
+ struct comedi_insn * insn, unsigned int * data)
{
int n;
for (n = 0; n < insn->n; n++) {
}
static int ao_winsn(struct comedi_device * dev, struct comedi_subdevice * s,
- comedi_insn * insn, unsigned int * data)
+ struct comedi_insn * insn, unsigned int * data)
{
int n;
unsigned iobase = subpriv->iobase, iooffset = 0;