diff options
Diffstat (limited to 'drivers')
39 files changed, 1249 insertions, 1938 deletions
diff --git a/drivers/iio/adc/max1363.c b/drivers/iio/adc/max1363.c index ef868c9c17be..08e4feb4f6ee 100644 --- a/drivers/iio/adc/max1363.c +++ b/drivers/iio/adc/max1363.c @@ -1484,48 +1484,6 @@ static const struct iio_buffer_setup_ops max1363_buffered_setup_ops = { .predisable = &iio_triggered_buffer_predisable, }; -static int max1363_register_buffered_funcs_and_init(struct iio_dev *indio_dev) -{ - struct max1363_state *st = iio_priv(indio_dev); - int ret = 0; - - indio_dev->buffer = iio_kfifo_allocate(indio_dev); - if (!indio_dev->buffer) { - ret = -ENOMEM; - goto error_ret; - } - indio_dev->pollfunc = iio_alloc_pollfunc(NULL, - &max1363_trigger_handler, - IRQF_ONESHOT, - indio_dev, - "%s_consumer%d", - st->client->name, - indio_dev->id); - if (indio_dev->pollfunc == NULL) { - ret = -ENOMEM; - goto error_deallocate_sw_rb; - } - /* Buffer functions - here trigger setup related */ - indio_dev->setup_ops = &max1363_buffered_setup_ops; - - /* Flag that polled buffering is possible */ - indio_dev->modes |= INDIO_BUFFER_TRIGGERED; - - return 0; - -error_deallocate_sw_rb: - iio_kfifo_free(indio_dev->buffer); -error_ret: - return ret; -} - -static void max1363_buffer_cleanup(struct iio_dev *indio_dev) -{ - /* ensure that the trigger has been detached */ - iio_dealloc_pollfunc(indio_dev->pollfunc); - iio_kfifo_free(indio_dev->buffer); -} - static int max1363_probe(struct i2c_client *client, const struct i2c_device_id *id) { diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 2da9290e3b7f..1967852eeb17 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -274,7 +274,7 @@ config COMEDI_DAS08_ISA DAS08/JR-16-AO, PC104-DAS08, DAS08/JR/16. To compile this driver as a module, choose M here: the module will be - called das08. + called das08_isa. config COMEDI_DAS16 tristate "DAS-16 compatible ISA and PC/104 card support" @@ -802,7 +802,7 @@ config COMEDI_DAS08_PCI Enable support for PCI DAS-08 cards. To compile this driver as a module, choose M here: the module will be - called das08. + called das08_pci. config COMEDI_DT3000 tristate "Data Translation DT3000 series support" diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index c7377d012a6d..b1e8cdbd1ce7 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -58,11 +58,6 @@ MODULE_PARM_DESC(comedi_debug, ); #endif -bool comedi_autoconfig = true; -module_param(comedi_autoconfig, bool, S_IRUGO); -MODULE_PARM_DESC(comedi_autoconfig, - "enable drivers to auto-configure comedi devices (default 1)"); - static int comedi_num_legacy_minors; module_param(comedi_num_legacy_minors, int, S_IRUGO); MODULE_PARM_DESC(comedi_num_legacy_minors, @@ -1844,7 +1839,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait) } s = comedi_read_subdevice(info); - if (s) { + if (s && s->async) { poll_wait(file, &s->async->wait_head, wait); if (!s->busy || !comedi_is_subdevice_running(s) || comedi_buf_read_n_available(s->async) > 0) @@ -1852,7 +1847,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait) } s = comedi_write_subdevice(info); - if (s) { + if (s && s->async) { unsigned int bps = bytes_per_sample(s->async->subdevice); poll_wait(file, &s->async->wait_head, wait); @@ -1887,7 +1882,7 @@ static ssize_t comedi_write(struct file *file, const char __user *buf, } s = comedi_write_subdevice(info); - if (!s) + if (!s || !s->async) return -EIO; async = s->async; @@ -1982,7 +1977,7 @@ static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes, } s = comedi_read_subdevice(info); - if (!s) + if (!s || !s->async) return -EIO; async = s->async; @@ -2352,9 +2347,9 @@ int comedi_find_board_minor(struct device *hardware_device) return -ENODEV; } -int comedi_alloc_subdevice_minor(struct comedi_device *dev, - struct comedi_subdevice *s) +int comedi_alloc_subdevice_minor(struct comedi_subdevice *s) { + struct comedi_device *dev = s->device; struct comedi_file_info *info; struct device *csdev; unsigned i; @@ -2437,14 +2432,6 @@ static int __init comedi_init(void) return -EINVAL; } - /* - * comedi is unusable if both comedi_autoconfig and - * comedi_num_legacy_minors are zero, so we might as well adjust the - * defaults in that case - */ - if (!comedi_autoconfig && comedi_num_legacy_minors == 0) - comedi_num_legacy_minors = 16; - memset(comedi_file_info_table, 0, sizeof(struct comedi_file_info *) * COMEDI_NUM_MINORS); diff --git a/drivers/staging/comedi/comedi_internal.h b/drivers/staging/comedi/comedi_internal.h index b36bb954db58..b3743135f4aa 100644 --- a/drivers/staging/comedi/comedi_internal.h +++ b/drivers/staging/comedi/comedi_internal.h @@ -11,6 +11,8 @@ int do_rangeinfo_ioctl(struct comedi_device *dev, int comedi_alloc_board_minor(struct device *hardware_device); void comedi_free_board_minor(unsigned minor); int comedi_find_board_minor(struct device *hardware_device); +int comedi_alloc_subdevice_minor(struct comedi_subdevice *s); +void comedi_free_subdevice_minor(struct comedi_subdevice *s); int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, unsigned long new_size); @@ -19,7 +21,6 @@ unsigned int comedi_buf_write_n_allocated(struct comedi_async *async); extern unsigned int comedi_default_buf_size_kb; extern unsigned int comedi_default_buf_maxsize_kb; -extern bool comedi_autoconfig; /* drivers.c */ diff --git a/drivers/staging/comedi/comedi_pcmcia.c b/drivers/staging/comedi/comedi_pcmcia.c index f10bcc529585..925f12825c1b 100644 --- a/drivers/staging/comedi/comedi_pcmcia.c +++ b/drivers/staging/comedi/comedi_pcmcia.c @@ -37,6 +37,52 @@ struct pcmcia_device *comedi_to_pcmcia_dev(struct comedi_device *dev) } EXPORT_SYMBOL_GPL(comedi_to_pcmcia_dev); +static int comedi_pcmcia_conf_check(struct pcmcia_device *link, + void *priv_data) +{ + if (link->config_index == 0) + return -EINVAL; + + return pcmcia_request_io(link); +} + +/** + * comedi_pcmcia_enable() - Request the regions and enable the PCMCIA device. + * @dev: comedi_device struct + * + * The comedi PCMCIA driver needs to set the link->config_flags, as + * appropriate for that driver, before calling this function in order + * to allow pcmcia_loop_config() to do its internal autoconfiguration. + */ +int comedi_pcmcia_enable(struct comedi_device *dev) +{ + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + int ret; + + if (!link) + return -ENODEV; + + ret = pcmcia_loop_config(link, comedi_pcmcia_conf_check, NULL); + if (ret) + return ret; + + return pcmcia_enable_device(link); +} +EXPORT_SYMBOL_GPL(comedi_pcmcia_enable); + +/** + * comedi_pcmcia_disable() - Disable the PCMCIA device and release the regions. + * @dev: comedi_device struct + */ +void comedi_pcmcia_disable(struct comedi_device *dev) +{ + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + + if (link) + pcmcia_disable_device(link); +} +EXPORT_SYMBOL_GPL(comedi_pcmcia_disable); + /** * comedi_pcmcia_auto_config() - Configure/probe a comedi PCMCIA driver. * @link: pcmcia_device struct diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index f4541aec419e..4836fe6dfb35 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -324,14 +324,7 @@ static inline unsigned int bytes_per_sample(const struct comedi_subdevice *subd) * known bus type. Set automatically for auto-configured devices. * Automatically set to NULL when detaching hardware device. */ -static inline void comedi_set_hw_dev(struct comedi_device *dev, - struct device *hw_dev) -{ - struct device *old_hw_dev = dev->hw_dev; - - dev->hw_dev = get_device(hw_dev); - put_device(old_hw_dev); -} +int comedi_set_hw_dev(struct comedi_device *dev, struct device *hw_dev); unsigned int comedi_buf_write_alloc(struct comedi_async *, unsigned int); unsigned int comedi_buf_write_free(struct comedi_async *, unsigned int); @@ -348,10 +341,6 @@ void comedi_buf_memcpy_to(struct comedi_async *async, unsigned int offset, void comedi_buf_memcpy_from(struct comedi_async *async, unsigned int offset, void *destination, unsigned int num_bytes); -int comedi_alloc_subdevice_minor(struct comedi_device *dev, - struct comedi_subdevice *s); -void comedi_free_subdevice_minor(struct comedi_subdevice *s); - /* drivers.c - general comedi driver functions */ int comedi_alloc_subdevices(struct comedi_device *, int); @@ -388,12 +377,7 @@ int comedi_driver_unregister(struct comedi_driver *); #define PCI_VENDOR_ID_DT 0x1116 #define PCI_VENDOR_ID_IOTECH 0x1616 #define PCI_VENDOR_ID_CONTEC 0x1221 -#define PCI_VENDOR_ID_CB 0x1307 /* Measurement Computing */ -#define PCI_VENDOR_ID_ADVANTECH 0x13fe -#define PCI_VENDOR_ID_MEILHAUS 0x1402 #define PCI_VENDOR_ID_RTD 0x1435 -#define PCI_VENDOR_ID_ADLINK 0x144a -#define PCI_VENDOR_ID_AMPLICON 0x14dc struct pci_dev; struct pci_driver; @@ -456,6 +440,9 @@ struct pcmcia_device; struct pcmcia_device *comedi_to_pcmcia_dev(struct comedi_device *); +int comedi_pcmcia_enable(struct comedi_device *); +void comedi_pcmcia_disable(struct comedi_device *); + int comedi_pcmcia_auto_config(struct pcmcia_device *, struct comedi_driver *); void comedi_pcmcia_auto_unconfig(struct pcmcia_device *); diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index fe91e758184f..e57e661e1251 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -43,6 +43,23 @@ struct comedi_driver *comedi_drivers; +int comedi_set_hw_dev(struct comedi_device *dev, struct device *hw_dev) +{ + if (hw_dev == dev->hw_dev) + return 0; + if (dev->hw_dev != NULL) + return -EEXIST; + dev->hw_dev = get_device(hw_dev); + return 0; +} +EXPORT_SYMBOL_GPL(comedi_set_hw_dev); + +static void comedi_clear_hw_dev(struct comedi_device *dev) +{ + put_device(dev->hw_dev); + dev->hw_dev = NULL; +} + int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices) { struct comedi_subdevice *s; @@ -98,7 +115,7 @@ static void cleanup_device(struct comedi_device *dev) dev->write_subdev = NULL; dev->open = NULL; dev->close = NULL; - comedi_set_hw_dev(dev, NULL); + comedi_clear_hw_dev(dev); } static void __comedi_device_detach(struct comedi_device *dev) @@ -209,7 +226,7 @@ static int __comedi_device_postconfig_async(struct comedi_device *dev, return ret; } - comedi_alloc_subdevice_minor(dev, s); + comedi_alloc_subdevice_minor(s); return 0; } @@ -393,9 +410,6 @@ int comedi_auto_config(struct device *hardware_device, struct comedi_device *comedi_dev; int ret; - if (!comedi_autoconfig) - return 0; - if (!driver->auto_attach) { dev_warn(hardware_device, "BUG! comedi driver '%s' has no auto_attach handler\n", diff --git a/drivers/staging/comedi/drivers/Makefile b/drivers/staging/comedi/drivers/Makefile index fd74e7ecb400..315e836ff99b 100644 --- a/drivers/staging/comedi/drivers/Makefile +++ b/drivers/staging/comedi/drivers/Makefile @@ -25,6 +25,7 @@ obj-$(CONFIG_COMEDI_PCM3730) += pcm3730.o obj-$(CONFIG_COMEDI_RTI800) += rti800.o obj-$(CONFIG_COMEDI_RTI802) += rti802.o obj-$(CONFIG_COMEDI_DAS16M1) += das16m1.o +obj-$(CONFIG_COMEDI_DAS08_ISA) += das08_isa.o obj-$(CONFIG_COMEDI_DAS16) += das16.o obj-$(CONFIG_COMEDI_DAS800) += das800.o obj-$(CONFIG_COMEDI_DAS1800) += das1800.o @@ -81,6 +82,7 @@ obj-$(CONFIG_COMEDI_AMPLC_PC263) += amplc_pc263.o obj-$(CONFIG_COMEDI_AMPLC_PCI224) += amplc_pci224.o obj-$(CONFIG_COMEDI_AMPLC_PCI230) += amplc_pci230.o obj-$(CONFIG_COMEDI_CONTEC_PCI_DIO) += contec_pci_dio.o +obj-$(CONFIG_COMEDI_DAS08_PCI) += das08_pci.o obj-$(CONFIG_COMEDI_DT3000) += dt3000.o obj-$(CONFIG_COMEDI_DYNA_PCI10XX) += dyna_pci10xx.o obj-$(CONFIG_COMEDI_UNIOXX5) += unioxx5.o diff --git a/drivers/staging/comedi/drivers/adl_pci7x3x.c b/drivers/staging/comedi/drivers/adl_pci7x3x.c index 539b1d8e5235..f27f48e6e702 100644 --- a/drivers/staging/comedi/drivers/adl_pci7x3x.c +++ b/drivers/staging/comedi/drivers/adl_pci7x3x.c @@ -38,12 +38,6 @@ Author: H Hartley Sweeten <hsweeten@visionengravers.com> Updated: Thu, 02 Aug 2012 14:27:46 -0700 Status: untested -This driver only attaches using the PCI PnP auto config support -in the comedi core. The module parameter 'comedi_autoconfig' -must be 1 (default) to enable this feature. The COMEDI_DEVCONFIG -ioctl, used by the comedi_config utility, is not supported by -this driver. - The PCI-7230, PCI-7432 and PCI-7433 boards also support external interrupt signals on digital input channels 0 and 1. The PCI-7233 has dual-interrupt sources for change-of-state (COS) on any 16 @@ -51,7 +45,7 @@ digital input channels of LSB and for COS on any 16 digital input lines of MSB. Interrupts are not currently supported by this driver. -Configuration Options: not applicable +Configuration Options: not applicable, uses comedi PCI auto config */ #include <linux/pci.h> diff --git a/drivers/staging/comedi/drivers/cb_das16_cs.c b/drivers/staging/comedi/drivers/cb_das16_cs.c index efff05954133..5bbffd9f8af9 100644 --- a/drivers/staging/comedi/drivers/cb_das16_cs.c +++ b/drivers/staging/comedi/drivers/cb_das16_cs.c @@ -397,15 +397,6 @@ static const void *das16cs_find_boardinfo(struct comedi_device *dev, return NULL; } -static int das16cs_pcmcia_config_loop(struct pcmcia_device *p_dev, - void *priv_data) -{ - if (p_dev->config_index == 0) - return -EINVAL; - - return pcmcia_request_io(p_dev); -} - static int das16cs_auto_attach(struct comedi_device *dev, unsigned long context) { @@ -421,24 +412,15 @@ static int das16cs_auto_attach(struct comedi_device *dev, dev->board_ptr = board; dev->board_name = board->name; - /* Do we need to allocate an interrupt? */ - link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; - - ret = pcmcia_loop_config(link, das16cs_pcmcia_config_loop, NULL); - if (ret) - return ret; - - if (!link->irq) - return -EINVAL; - - ret = pcmcia_enable_device(link); + link->config_flags |= CONF_AUTO_SET_IO | CONF_ENABLE_IRQ; + ret = comedi_pcmcia_enable(dev); if (ret) return ret; dev->iobase = link->resource[0]->start; - ret = request_irq(link->irq, das16cs_interrupt, IRQF_SHARED, - dev->board_name, dev); - if (ret < 0) + link->priv = dev; + ret = pcmcia_request_irq(link, das16cs_interrupt); + if (ret) return ret; dev->irq = link->irq; @@ -495,21 +477,11 @@ static int das16cs_auto_attach(struct comedi_device *dev, return 0; } -static void das16cs_detach(struct comedi_device *dev) -{ - struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); - - if (dev->irq) - free_irq(dev->irq, dev); - if (dev->iobase) - pcmcia_disable_device(link); -} - static struct comedi_driver driver_das16cs = { .driver_name = "cb_das16_cs", .module = THIS_MODULE, .auto_attach = das16cs_auto_attach, - .detach = das16cs_detach, + .detach = comedi_pcmcia_disable, }; static int das16cs_pcmcia_attach(struct pcmcia_device *link) diff --git a/drivers/staging/comedi/drivers/das08.c b/drivers/staging/comedi/drivers/das08.c index 45a937e95910..9823aa06787a 100644 --- a/drivers/staging/comedi/drivers/das08.c +++ b/drivers/staging/comedi/drivers/das08.c @@ -1,6 +1,6 @@ /* * comedi/drivers/das08.c - * DAS08 driver + * comedi driver for common DAS08 support (used by ISA/PCI/PCMCIA drivers) * * COMEDI - Linux Control and Measurement Device Interface * Copyright (C) 2000 David A. Schleef <ds@schleef.org> @@ -27,31 +27,18 @@ /* * Driver: das08 * Description: DAS-08 compatible boards + * Devices: various, see das08_isa, das08_cs, and das08_pci drivers * Author: Warren Jasper, ds, Frank Hess - * Devices: [Keithley Metrabyte] DAS08 (isa-das08), - * [ComputerBoards] DAS08 (isa-das08), DAS08-PGM (das08-pgm), - * DAS08-PGH (das08-pgh), DAS08-PGL (das08-pgl), DAS08-AOH (das08-aoh), - * DAS08-AOL (das08-aol), DAS08-AOM (das08-aom), DAS08/JR-AO (das08/jr-ao), - * DAS08/JR-16-AO (das08jr-16-ao), PCI-DAS08 (pci-das08), - * PC104-DAS08 (pc104-das08), DAS08/JR/16 (das08jr/16) * Updated: Fri, 31 Aug 2012 19:19:06 +0100 * Status: works * - * This is a rewrite of the das08 and das08jr drivers. + * This driver is used by the das08_isa, das08_cs, and das08_pci + * drivers to provide the common support for the DAS-08 hardware. * - * Options (for ISA cards): - * [0] - base io address - * - * Manual configuration of PCI cards is not supported; they are - * configured automatically. - * - * The das08 driver doesn't support asynchronous commands, since - * the cheap das08 hardware doesn't really support them. The - * comedi_rt_timer driver can be used to emulate commands for this - * driver. + * The driver doesn't support asynchronous commands, since the + * cheap das08 hardware doesn't really support them. */ -#include <linux/pci.h> #include <linux/delay.h> #include "../comedidev.h" @@ -60,25 +47,6 @@ #include "8253.h" #include "das08.h" -#define DRV_NAME "das08" - -#define DO_ISA IS_ENABLED(CONFIG_COMEDI_DAS08_ISA) -#define DO_PCI IS_ENABLED(CONFIG_COMEDI_DAS08_PCI) -#define DO_COMEDI_DRIVER_REGISTER (DO_ISA || DO_PCI) - -#define PCI_DEVICE_ID_PCIDAS08 0x29 -#define PCIDAS08_SIZE 0x54 - -/* pci configuration registers */ -#define INTCSR 0x4c -#define INTR1_ENABLE 0x1 -#define INTR1_HIGH_POLARITY 0x2 -#define PCI_INTR_ENABLE 0x40 -#define INTR1_EDGE_TRIG 0x100 /* requires high polarity */ -#define CNTRL 0x50 -#define CNTRL_DIR 0x2 -#define CNTRL_INTR 0x4 - /* cio-das08.pdf @@ -236,16 +204,6 @@ static const int *const das08_gainlists[] = { das08_pgm_gainlist, }; -static inline bool is_isa_board(const struct das08_board_struct *board) -{ - return DO_ISA && board->bustype == isa; -} - -static inline bool is_pci_board(const struct das08_board_struct *board) -{ - return DO_PCI && board->bustype == pci; -} - #define TIMEOUT 100000 static int das08_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, @@ -502,159 +460,6 @@ static int das08_counter_config(struct comedi_device *dev, return 2; } -#if DO_COMEDI_DRIVER_REGISTER -static const struct das08_board_struct das08_boards[] = { -#if DO_ISA - { - .name = "isa-das08", /* cio-das08.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pg_none, - .ai_encoding = das08_encode12, - .di_nchan = 3, - .do_nchan = 4, - .i8255_offset = 8, - .i8254_offset = 4, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08-pgm", /* cio-das08pgx.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pgm, - .ai_encoding = das08_encode12, - .di_nchan = 3, - .do_nchan = 4, - .i8255_offset = 0, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08-pgh", /* cio-das08pgx.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pgh, - .ai_encoding = das08_encode12, - .di_nchan = 3, - .do_nchan = 4, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08-pgl", /* cio-das08pgx.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pgl, - .ai_encoding = das08_encode12, - .di_nchan = 3, - .do_nchan = 4, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08-aoh", /* cio-das08_aox.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pgh, - .ai_encoding = das08_encode12, - .ao_nbits = 12, - .di_nchan = 3, - .do_nchan = 4, - .i8255_offset = 0x0c, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08-aol", /* cio-das08_aox.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pgl, - .ai_encoding = das08_encode12, - .ao_nbits = 12, - .di_nchan = 3, - .do_nchan = 4, - .i8255_offset = 0x0c, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08-aom", /* cio-das08_aox.pdf */ - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pgm, - .ai_encoding = das08_encode12, - .ao_nbits = 12, - .di_nchan = 3, - .do_nchan = 4, - .i8255_offset = 0x0c, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08/jr-ao", /* cio-das08-jr-ao.pdf */ - .bustype = isa, - .is_jr = true, - .ai_nbits = 12, - .ai_pg = das08_pg_none, - .ai_encoding = das08_encode12, - .ao_nbits = 12, - .di_nchan = 8, - .do_nchan = 8, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08jr-16-ao", /* cio-das08jr-16-ao.pdf */ - .bustype = isa, - .is_jr = true, - .ai_nbits = 16, - .ai_pg = das08_pg_none, - .ai_encoding = das08_encode16, - .ao_nbits = 16, - .di_nchan = 8, - .do_nchan = 8, - .i8254_offset = 0x04, - .iosize = 16, /* unchecked */ - }, - { - .name = "pc104-das08", - .bustype = isa, - .ai_nbits = 12, - .ai_pg = das08_pg_none, - .ai_encoding = das08_encode12, - .di_nchan = 3, - .do_nchan = 4, - .i8254_offset = 4, - .iosize = 16, /* unchecked */ - }, - { - .name = "das08jr/16", - .bustype = isa, - .is_jr = true, - .ai_nbits = 16, - .ai_pg = das08_pg_none, - .ai_encoding = das08_encode16, - .di_nchan = 8, - .do_nchan = 8, - .iosize = 16, /* unchecked */ - }, -#endif /* DO_ISA */ -#if DO_PCI - { - .name = "pci-das08", /* pci-das08 */ - .id = PCI_DEVICE_ID_PCIDAS08, - .bustype = pci, - .ai_nbits = 12, - .ai_pg = das08_bipolar5, - .ai_encoding = das08_encode12, - .di_nchan = 3, - .do_nchan = 4, - .i8254_offset = 4, - .iosize = 8, - }, -#endif /* DO_PCI */ -}; -#endif /* DO_COMEDI_DRIVER_REGISTER */ - int das08_common_attach(struct comedi_device *dev, unsigned long iobase) { const struct das08_board_struct *thisboard = comedi_board(dev); @@ -761,84 +566,6 @@ int das08_common_attach(struct comedi_device *dev, unsigned long iobase) } EXPORT_SYMBOL_GPL(das08_common_attach); -static const struct das08_board_struct * -das08_find_pci_board(struct pci_dev *pdev) -{ -#if DO_COMEDI_DRIVER_REGISTER - unsigned int i; - for (i = 0; i < ARRAY_SIZE(das08_boards); i++) - if (is_pci_board(&das08_boards[i]) && - pdev->device == das08_boards[i].id) - return &das08_boards[i]; -#endif - return NULL; -} - -/* only called in the PCI probe path, via comedi_pci_auto_config() */ -static int __maybe_unused -das08_auto_attach(struct comedi_device *dev, unsigned long context_unused) -{ - struct pci_dev *pdev; - struct das08_private_struct *devpriv; - unsigned long iobase; - - if (!DO_PCI) - return -EINVAL; - - pdev = comedi_to_pci_dev(dev); - devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); - if (!devpriv) - return -ENOMEM; - dev->private = devpriv; - - dev_info(dev->class_dev, "attach pci %s\n", pci_name(pdev)); - dev->board_ptr = das08_find_pci_board(pdev); - if (dev->board_ptr == NULL) { - dev_err(dev->class_dev, "BUG! cannot determine board type!\n"); - return -EINVAL; - } - - /* enable PCI device and reserve I/O spaces */ - if (comedi_pci_enable(pdev, dev->driver->driver_name)) { - dev_err(dev->class_dev, - "Error enabling PCI device and requesting regions\n"); - return -EIO; - } - /* read base addresses */ - iobase = pci_resource_start(pdev, 2); - return das08_common_attach(dev, iobase); -} - -static int __maybe_unused -das08_attach(struct comedi_device *dev, struct comedi_devconfig *it) -{ - const struct das08_board_struct *thisboard = comedi_board(dev); - struct das08_private_struct *devpriv; - unsigned long iobase; - - devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); - if (!devpriv) - return -ENOMEM; - dev->private = devpriv; - - dev_info(dev->class_dev, "attach\n"); - if (is_pci_board(thisboard)) { - dev_err(dev->class_dev, - "Manual configuration of PCI board '%s' is not supported\n", - thisboard->name); - return -EIO; - } else if (is_isa_board(thisboard)) { - iobase = it->options[0]; - dev_info(dev->class_dev, "iobase 0x%lx\n", iobase); - if (!request_region(iobase, thisboard->iosize, DRV_NAME)) { - dev_err(dev->class_dev, "I/O port conflict\n"); - return -EIO; - } - return das08_common_attach(dev, iobase); - } else - return -EIO; -} - void das08_common_detach(struct comedi_device *dev) { if (dev->subdevices) @@ -846,79 +573,16 @@ void das08_common_detach(struct comedi_device *dev) } EXPORT_SYMBOL_GPL(das08_common_detach); -static void __maybe_unused das08_detach(struct comedi_device *dev) -{ - const struct das08_board_struct *thisboard = comedi_board(dev); - - if (!thisboard) - return; - das08_common_detach(dev); - if (is_isa_board(thisboard)) { - if (dev->iobase) - release_region(dev->iobase, thisboard->iosize); - } else if (is_pci_board(thisboard)) { - struct pci_dev *pdev = comedi_to_pci_dev(dev); - if (pdev) { - if (dev->iobase) - comedi_pci_disable(pdev); - } - } -} - -#if DO_COMEDI_DRIVER_REGISTER -static struct comedi_driver das08_driver = { - .driver_name = DRV_NAME, - .module = THIS_MODULE, - .attach = das08_attach, - .auto_attach = das08_auto_attach, - .detach = das08_detach, - .board_name = &das08_boards[0].name, - .num_names = sizeof(das08_boards) / sizeof(struct das08_board_struct), - .offset = sizeof(struct das08_board_struct), -}; -#endif - -#if DO_PCI -static DEFINE_PCI_DEVICE_TABLE(das08_pci_table) = { - { PCI_DEVICE(PCI_VENDOR_ID_CB, PCI_DEVICE_ID_PCIDAS08) }, - {0} -}; - -MODULE_DEVICE_TABLE(pci, das08_pci_table); - -static int das08_pci_probe(struct pci_dev *dev, - const struct pci_device_id *ent) -{ - return comedi_pci_auto_config(dev, &das08_driver); -} - -static struct pci_driver das08_pci_driver = { - .id_table = das08_pci_table, - .name = DRV_NAME, - .probe = &das08_pci_probe, - .remove = comedi_pci_auto_unconfig, -}; -#endif /* DO_PCI */ - -#if DO_COMEDI_DRIVER_REGISTER -#if DO_PCI -module_comedi_pci_driver(das08_driver, das08_pci_driver); -#else -module_comedi_driver(das08_driver); -#endif -#else /* DO_COMEDI_DRIVER_REGISTER */ static int __init das08_init(void) { return 0; } +module_init(das08_init); static void __exit das08_exit(void) { } - -module_init(das08_init); module_exit(das08_exit); -#endif /* DO_COMEDI_DRIVER_REGISTER */ MODULE_AUTHOR("Comedi http://www.comedi.org"); MODULE_DESCRIPTION("Comedi low-level driver"); diff --git a/drivers/staging/comedi/drivers/das08.h b/drivers/staging/comedi/drivers/das08.h index 0314baebae39..b102ad4918c4 100644 --- a/drivers/staging/comedi/drivers/das08.h +++ b/drivers/staging/comedi/drivers/das08.h @@ -24,7 +24,6 @@ #ifndef _DAS08_H #define _DAS08_H -enum das08_bustype { isa, pci, pcmcia }; /* different ways ai data is encoded in first two registers */ enum das08_ai_encoding { das08_encode12, das08_encode16, das08_pcm_encode12 }; enum das08_lrange { das08_pg_none, das08_bipolar5, das08_pgh, das08_pgl, @@ -34,7 +33,6 @@ enum das08_lrange { das08_pg_none, das08_bipolar5, das08_pgh, das08_pgl, struct das08_board_struct { const char *name; unsigned int id; /* id for pci/pcmcia boards */ - enum das08_bustype bustype; bool is_jr; /* true for 'JR' boards */ unsigned int ai_nbits; enum das08_lrange ai_pg; diff --git a/drivers/staging/comedi/drivers/das08_cs.c b/drivers/staging/comedi/drivers/das08_cs.c index 23fdb119ada6..818a609b0dba 100644 --- a/drivers/staging/comedi/drivers/das08_cs.c +++ b/drivers/staging/comedi/drivers/das08_cs.c @@ -60,7 +60,6 @@ static const struct das08_board_struct das08_cs_boards[] = { { .name = "pcm-das08", .id = 0x0, /* XXX */ - .bustype = pcmcia, .ai_nbits = 12, .ai_pg = das08_bipolar5, .ai_encoding = das08_pcm_encode12, @@ -70,15 +69,6 @@ static const struct das08_board_struct das08_cs_boards[] = { }, }; -static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev, - void *priv_data) -{ - if (p_dev->config_index == 0) - return -EINVAL; - - return pcmcia_request_io(p_dev); -} - static int das08_cs_auto_attach(struct comedi_device *dev, unsigned long context) { @@ -90,16 +80,8 @@ static int das08_cs_auto_attach(struct comedi_device *dev, /* The das08 driver needs the board_ptr */ dev->board_ptr = &das08_cs_boards[0]; - link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; - - ret = pcmcia_loop_config(link, das08_pcmcia_config_loop, NULL); - if (ret) - return ret; - - if (!link->irq) - return -EINVAL; - - ret = pcmcia_enable_device(link); + link->config_flags |= CONF_AUTO_SET_IO; + ret = comedi_pcmcia_enable(dev); if (ret) return ret; iobase = link->resource[0]->start; @@ -114,11 +96,8 @@ static int das08_cs_auto_attach(struct comedi_device *dev, static void das08_cs_detach(struct comedi_device *dev) { - struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); - das08_common_detach(dev); - if (dev->iobase) - pcmcia_disable_device(link); + comedi_pcmcia_disable(dev); } static struct comedi_driver driver_das08_cs = { diff --git a/drivers/staging/comedi/drivers/das08_isa.c b/drivers/staging/comedi/drivers/das08_isa.c new file mode 100644 index 000000000000..f12078247163 --- /dev/null +++ b/drivers/staging/comedi/drivers/das08_isa.c @@ -0,0 +1,217 @@ +/* + * das08_isa.c + * comedi driver for DAS08 ISA/PC-104 boards + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 2000 David A. Schleef <ds@schleef.org> + * Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net> + * Copyright (C) 2004 Salvador E. Tropea <set@users.sf.net> <set@ieee.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Driver: das08_isa + * Description: DAS-08 ISA/PC-104 compatible boards + * Devices: (Keithley Metrabyte) DAS08 [isa-das08], + * (ComputerBoards) DAS08 [isa-das08] + * (ComputerBoards) DAS08-PGM [das08-pgm] + * (ComputerBoards) DAS08-PGH [das08-pgh] + * (ComputerBoards) DAS08-PGL [das08-pgl] + * (ComputerBoards) DAS08-AOH [das08-aoh] + * (ComputerBoards) DAS08-AOL [das08-aol] + * (ComputerBoards) DAS08-AOM [das08-aom] + * (ComputerBoards) DAS08/JR-AO [das08/jr-ao] + * (ComputerBoards) DAS08/JR-16-AO [das08jr-16-ao] + * (ComputerBoards) PC104-DAS08 [pc104-das08] + * (ComputerBoards) DAS08/JR/16 [das08jr/16] + * Author: Warren Jasper, ds, Frank Hess + * Updated: Fri, 31 Aug 2012 19:19:06 +0100 + * Status: works + * + * This is the ISA/PC-104-specific support split off from the das08 driver. + * + * Configuration Options: + * [0] - base io address + */ + +#include "../comedidev.h" + +#include "das08.h" + +static const struct das08_board_struct das08_isa_boards[] = { + { + /* cio-das08.pdf */ + .name = "isa-das08", + .ai_nbits = 12, + .ai_pg = das08_pg_none, + .ai_encoding = das08_encode12, + .di_nchan = 3, + .do_nchan = 4, + .i8255_offset = 8, + .i8254_offset = 4, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08pgx.pdf */ + .name = "das08-pgm", + .ai_nbits = 12, + .ai_pg = das08_pgm, + .ai_encoding = das08_encode12, + .di_nchan = 3, + .do_nchan = 4, + .i8255_offset = 0, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08pgx.pdf */ + .name = "das08-pgh", + .ai_nbits = 12, + .ai_pg = das08_pgh, + .ai_encoding = das08_encode12, + .di_nchan = 3, + .do_nchan = 4, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08pgx.pdf */ + .name = "das08-pgl", + .ai_nbits = 12, + .ai_pg = das08_pgl, + .ai_encoding = das08_encode12, + .di_nchan = 3, + .do_nchan = 4, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08_aox.pdf */ + .name = "das08-aoh", + .ai_nbits = 12, + .ai_pg = das08_pgh, + .ai_encoding = das08_encode12, + .ao_nbits = 12, + .di_nchan = 3, + .do_nchan = 4, + .i8255_offset = 0x0c, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08_aox.pdf */ + .name = "das08-aol", + .ai_nbits = 12, + .ai_pg = das08_pgl, + .ai_encoding = das08_encode12, + .ao_nbits = 12, + .di_nchan = 3, + .do_nchan = 4, + .i8255_offset = 0x0c, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08_aox.pdf */ + .name = "das08-aom", + .ai_nbits = 12, + .ai_pg = das08_pgm, + .ai_encoding = das08_encode12, + .ao_nbits = 12, + .di_nchan = 3, + .do_nchan = 4, + .i8255_offset = 0x0c, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08-jr-ao.pdf */ + .name = "das08/jr-ao", + .is_jr = true, + .ai_nbits = 12, + .ai_pg = das08_pg_none, + .ai_encoding = das08_encode12, + .ao_nbits = 12, + .di_nchan = 8, + .do_nchan = 8, + .iosize = 16, /* unchecked */ + }, { + /* cio-das08jr-16-ao.pdf */ + .name = "das08jr-16-ao", + .is_jr = true, + .ai_nbits = 16, + .ai_pg = das08_pg_none, + .ai_encoding = das08_encode16, + .ao_nbits = 16, + .di_nchan = 8, + .do_nchan = 8, + .i8254_offset = 0x04, + .iosize = 16, /* unchecked */ + }, { + .name = "pc104-das08", + .ai_nbits = 12, + .ai_pg = das08_pg_none, + .ai_encoding = das08_encode12, + .di_nchan = 3, + .do_nchan = 4, + .i8254_offset = 4, + .iosize = 16, /* unchecked */ + }, { + .name = "das08jr/16", + .is_jr = true, + .ai_nbits = 16, + .ai_pg = das08_pg_none, + .ai_encoding = das08_encode16, + .di_nchan = 8, + .do_nchan = 8, + .iosize = 16, /* unchecked */ + }, +}; + +static int das08_isa_attach(struct comedi_device *dev, + struct comedi_devconfig *it) +{ + const struct das08_board_struct *thisboard = comedi_board(dev); + struct das08_private_struct *devpriv; + + devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); + if (!devpriv) + return -ENOMEM; + dev->private = devpriv; + + if (!request_region(it->options[0], thisboard->iosize, + thisboard->name)) + return -EIO; + + return das08_common_attach(dev, it->options[0]); +} + +static void das08_isa_detach(struct comedi_device *dev) +{ + const struct das08_board_struct *thisboard = comedi_board(dev); + + das08_common_detach(dev); + if (dev->iobase) + release_region(dev->iobase, thisboard->iosize); +} + +static struct comedi_driver das08_isa_driver = { + .driver_name = "isa-das08", + .module = THIS_MODULE, + .attach = das08_isa_attach, + .detach = das08_isa_detach, + .board_name = &das08_isa_boards[0].name, + .num_names = ARRAY_SIZE(das08_isa_boards), + .offset = sizeof(das08_isa_boards[0]), +}; +module_comedi_driver(das08_isa_driver); + +MODULE_AUTHOR("Comedi http://www.comedi.org"); +MODULE_DESCRIPTION("Comedi low-level driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/comedi/drivers/das08_pci.c b/drivers/staging/comedi/drivers/das08_pci.c new file mode 100644 index 000000000000..c405876ddcf7 --- /dev/null +++ b/drivers/staging/comedi/drivers/das08_pci.c @@ -0,0 +1,121 @@ +/* + * das08_pci.c + * comedi driver for DAS08 PCI boards + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 2000 David A. Schleef <ds@schleef.org> + * Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net> + * Copyright (C) 2004 Salvador E. Tropea <set@users.sf.net> <set@ieee.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Driver: das08_pci + * Description: DAS-08 PCI compatible boards + * Devices: (ComputerBoards) PCI-DAS08 [pci-das08] + * Author: Warren Jasper, ds, Frank Hess + * Updated: Fri, 31 Aug 2012 19:19:06 +0100 + * Status: works + * + * This is the PCI-specific support split off from the das08 driver. + * + * Configuration Options: not applicable, uses PCI auto config + */ + +#include <linux/pci.h> + +#include "../comedidev.h" + +#include "das08.h" + +#define PCI_DEVICE_ID_PCIDAS08 0x0029 + +static const struct das08_board_struct das08_pci_boards[] = { + { + .name = "pci-das08", + .id = PCI_DEVICE_ID_PCIDAS08, + .ai_nbits = 12, + .ai_pg = das08_bipolar5, + .ai_encoding = das08_encode12, + .di_nchan = 3, + .do_nchan = 4, + .i8254_offset = 4, + .iosize = 8, + }, +}; + +static int das08_pci_auto_attach(struct comedi_device *dev, + unsigned long context_unused) +{ + struct pci_dev *pdev = comedi_to_pci_dev(dev); + struct das08_private_struct *devpriv; + int ret; + + devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); + if (!devpriv) + return -ENOMEM; + dev->private = devpriv; + + /* The das08 driver needs the board_ptr */ + dev->board_ptr = &das08_pci_boards[0]; + + ret = comedi_pci_enable(pdev, dev->driver->driver_name); + if (ret) + return ret; + dev->iobase = pci_resource_start(pdev, 2); + + return das08_common_attach(dev, dev->iobase); +} + +static void das08_pci_detach(struct comedi_device *dev) +{ + struct pci_dev *pdev = comedi_to_pci_dev(dev); + + das08_common_detach(dev); + if (dev->iobase) + comedi_pci_disable(pdev); +} + +static struct comedi_driver das08_pci_comedi_driver = { + .driver_name = "pci-das08", + .module = THIS_MODULE, + .auto_attach = das08_pci_auto_attach, + .detach = das08_pci_detach, +}; + +static int das08_pci_probe(struct pci_dev *dev, + const struct pci_device_id *ent) +{ + return comedi_pci_auto_config(dev, &das08_pci_comedi_driver); +} + +static DEFINE_PCI_DEVICE_TABLE(das08_pci_table) = { + { PCI_DEVICE(PCI_VENDOR_ID_CB, PCI_DEVICE_ID_PCIDAS08) }, + { 0 } +}; +MODULE_DEVICE_TABLE(pci, das08_pci_table); + +static struct pci_driver das08_pci_driver = { + .name = "pci-das08", + .id_table = das08_pci_table, + .probe = das08_pci_probe, + .remove = comedi_pci_auto_unconfig, +}; +module_comedi_pci_driver(das08_pci_comedi_driver, das08_pci_driver); + +MODULE_AUTHOR("Comedi http://www.comedi.org"); +MODULE_DESCRIPTION("Comedi low-level driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c index e537b8f05903..c8f4c7d2a832 100644 --- a/drivers/staging/comedi/drivers/ni_daq_700.c +++ b/drivers/staging/comedi/drivers/ni_daq_700.c @@ -195,15 +195,6 @@ static void daq700_ai_config(struct comedi_device *dev, inw(iobase + ADFIFO_R); /* read 16bit junk from FIFO to clear */ } -static int daq700_pcmcia_config_loop(struct pcmcia_device *p_dev, - void *priv_data) -{ - if (p_dev->config_index == 0) - return -EINVAL; - - return pcmcia_request_io(p_dev); -} - static int daq700_auto_attach(struct comedi_device *dev, unsigned long context) { @@ -213,14 +204,8 @@ static int daq700_auto_attach(struct comedi_device *dev, dev->board_name = dev->driver->driver_name; - link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_AUDIO | - CONF_AUTO_SET_IO; - - ret = pcmcia_loop_config(link, daq700_pcmcia_config_loop, NULL); - if (ret) - return ret; - - ret = pcmcia_enable_device(link); + link->config_flags |= CONF_AUTO_SET_IO; + ret = comedi_pcmcia_enable(dev); if (ret) return ret; dev->iobase = link->resource[0]->start; @@ -260,19 +245,11 @@ static int daq700_auto_attach(struct comedi_device *dev, return 0; } -static void daq700_detach(struct comedi_device *dev) -{ - struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); - - if (dev->iobase) - pcmcia_disable_device(link); -} - static struct comedi_driver daq700_driver = { .driver_name = "ni_daq_700", .module = THIS_MODULE, .auto_attach = daq700_auto_attach, - .detach = daq700_detach, + .detach = comedi_pcmcia_disable, }; static int daq700_cs_attach(struct pcmcia_device *link) diff --git a/drivers/staging/comedi/drivers/ni_daq_dio24.c b/drivers/staging/comedi/drivers/ni_daq_dio24.c index dd22691b1df1..53fd4d0f88df 100644 --- a/drivers/staging/comedi/drivers/ni_daq_dio24.c +++ b/drivers/staging/comedi/drivers/ni_daq_dio24.c @@ -37,127 +37,43 @@ This is just a wrapper around the 8255.o driver to properly handle the PCMCIA interface. */ - /* #define LABPC_DEBUG *//* enable debugging messages */ -#undef LABPC_DEBUG - -#include <linux/interrupt.h> -#include <linux/slab.h> #include "../comedidev.h" -#include <linux/ioport.h> - -#include "8255.h" - #include <pcmcia/cistpl.h> #include <pcmcia/cisreg.h> #include <pcmcia/ds.h> -static struct pcmcia_device *pcmcia_cur_dev; - -#define DIO24_SIZE 4 /* size of io region used by board */ - -static int dio24_attach(struct comedi_device *dev, struct comedi_devconfig *it); -static void dio24_detach(struct comedi_device *dev); - -enum dio24_bustype { pcmcia_bustype }; - -struct dio24_board_struct { - const char *name; - int device_id; /* device id for pcmcia board */ - enum dio24_bustype bustype; /* PCMCIA */ - int have_dio; /* have 8255 chip */ - /* function pointers so we can use inb/outb or readb/writeb as appropriate */ - unsigned int (*read_byte) (unsigned int address); - void (*write_byte) (unsigned int byte, unsigned int address); -}; - -static const struct dio24_board_struct dio24_boards[] = { - { - .name = "daqcard-dio24", - .device_id = 0x475c, /* 0x10b is manufacturer id, 0x475c is device id */ - .bustype = pcmcia_bustype, - .have_dio = 1, - }, - { - .name = "ni_daq_dio24", - .device_id = 0x475c, /* 0x10b is manufacturer id, 0x475c is device id */ - .bustype = pcmcia_bustype, - .have_dio = 1, - }, -}; - -/* - * Useful for shorthand access to the particular board structure - */ -#define thisboard ((const struct dio24_board_struct *)dev->board_ptr) - -struct dio24_private { +#include "8255.h" - int data; /* number of data points left to be taken */ -}; +static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev, + void *priv_data) +{ + if (p_dev->config_index == 0) + return -EINVAL; -static struct comedi_driver driver_dio24 = { - .driver_name = "ni_daq_dio24", - .module = THIS_MODULE, - .attach = dio24_attach, - .detach = dio24_detach, - .num_names = ARRAY_SIZE(dio24_boards), - .board_name = &dio24_boards[0].name, - .offset = sizeof(struct dio24_board_struct), -}; + return pcmcia_request_io(p_dev); +} -static int dio24_attach(struct comedi_device *dev, struct comedi_devconfig *it) +static int dio24_auto_attach(struct comedi_device *dev, + unsigned long context) { - struct dio24_private *devpriv; + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); struct comedi_subdevice *s; - unsigned long iobase = 0; -#ifdef incomplete - unsigned int irq = 0; -#endif - struct pcmcia_device *link; int ret; - devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); - if (!devpriv) - return -ENOMEM; - dev->private = devpriv; + dev->board_name = dev->driver->driver_name; - /* get base address, irq etc. based on bustype */ - switch (thisboard->bustype) { - case pcmcia_bustype: - link = pcmcia_cur_dev; /* XXX hack */ - if (!link) - return -EIO; - iobase = link->resource[0]->start; -#ifdef incomplete - irq = link->irq; -#endif - break; - default: - pr_err("bug! couldn't determine board type\n"); - return -EINVAL; - break; - } - pr_debug("comedi%d: ni_daq_dio24: %s, io 0x%lx", dev->minor, - thisboard->name, iobase); -#ifdef incomplete - if (irq) - pr_debug("irq %u\n", irq); -#endif - - if (iobase == 0) { - pr_err("io base address is zero!\n"); - return -EINVAL; - } - - dev->iobase = iobase; + link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_AUDIO | + CONF_AUTO_SET_IO; -#ifdef incomplete - /* grab our IRQ */ - dev->irq = irq; -#endif + ret = pcmcia_loop_config(link, dio24_pcmcia_config_loop, NULL); + if (ret) + return ret; - dev->board_name = thisboard->name; + ret = pcmcia_enable_device(link); + if (ret) + return ret; + dev->iobase = link->resource[0]->start; ret = comedi_alloc_subdevices(dev, 1); if (ret) @@ -165,157 +81,51 @@ static int dio24_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* 8255 dio */ s = &dev->subdevices[0]; - subdev_8255_init(dev, s, NULL, dev->iobase); + ret = subdev_8255_init(dev, s, NULL, dev->iobase); + if (ret) + return ret; return 0; -}; +} static void dio24_detach(struct comedi_device *dev) { - struct comedi_subdevice *s; - - if (dev->subdevices) { - s = &dev->subdevices[0]; - subdev_8255_cleanup(dev, s); - } - if (thisboard->bustype != pcmcia_bustype && dev->iobase) - release_region(dev->iobase, DIO24_SIZE); - if (dev->irq) - free_irq(dev->irq, dev); -}; - -static void dio24_config(struct pcmcia_device *link); -static void dio24_release(struct pcmcia_device *link); -static int dio24_cs_suspend(struct pcmcia_device *p_dev); -static int dio24_cs_resume(struct pcmcia_device *p_dev); + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); -static int dio24_cs_attach(struct pcmcia_device *); -static void dio24_cs_detach(struct pcmcia_device *); + if (dev->subdevices) + subdev_8255_cleanup(dev, &dev->subdevices[0]); + if (dev->iobase) + pcmcia_disable_device(link); +} -struct local_info_t { - struct pcmcia_device *link; - int stop; - struct bus_operations *bus; +static struct comedi_driver driver_dio24 = { + .driver_name = "ni_daq_dio24", + .module = THIS_MODULE, + .auto_attach = dio24_auto_attach, + .detach = dio24_detach, }; static int dio24_cs_attach(struct pcmcia_device *link) { - struct local_info_t *local; - - dev_info(&link->dev, "ni_daq_dio24: HOLA SOY YO - CS-attach!\n"); - - dev_dbg(&link->dev, "dio24_cs_attach()\n"); - - /* Allocate space for private device-specific data */ - local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL); - if (!local) - return -ENOMEM; - local->link = link; - link->priv = local; - - pcmcia_cur_dev = link; - - dio24_config(link); - - return 0; -} /* dio24_cs_attach */ - -static void dio24_cs_detach(struct pcmcia_device *link) -{ - ((struct local_info_t *)link->priv)->stop = 1; - dio24_release(link); - - /* This points to the parent local_info_t struct */ - kfree(link->priv); + return comedi_pcmcia_auto_config(link, &driver_dio24); } -static int dio24_pcmcia_config_loop(struct pcmcia_device *p_dev, - void *priv_data) -{ - if (p_dev->config_index == 0) - return -EINVAL; - - return pcmcia_request_io(p_dev); -} - -static void dio24_config(struct pcmcia_device *link) -{ - int ret; - - dev_info(&link->dev, "ni_daq_dio24: HOLA SOY YO! - config\n"); - - dev_dbg(&link->dev, "dio24_config\n"); - - link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_AUDIO | - CONF_AUTO_SET_IO; - - ret = pcmcia_loop_config(link, dio24_pcmcia_config_loop, NULL); - if (ret) { - dev_warn(&link->dev, "no configuration found\n"); - goto failed; - } - - if (!link->irq) - goto failed; - - ret = pcmcia_enable_device(link); - if (ret) - goto failed; - - return; - -failed: - dev_info(&link->dev, "Fallo"); - dio24_release(link); - -} /* dio24_config */ - -static void dio24_release(struct pcmcia_device *link) -{ - dev_dbg(&link->dev, "dio24_release\n"); - - pcmcia_disable_device(link); -} /* dio24_release */ - -static int dio24_cs_suspend(struct pcmcia_device *link) -{ - struct local_info_t *local = link->priv; - - /* Mark the device as stopped, to block IO until later */ - local->stop = 1; - return 0; -} /* dio24_cs_suspend */ - -static int dio24_cs_resume(struct pcmcia_device *link) -{ - struct local_info_t *local = link->priv; - - local->stop = 0; - return 0; -} /* dio24_cs_resume */ - -/*====================================================================*/ - static const struct pcmcia_device_id dio24_cs_ids[] = { - /* N.B. These IDs should match those in dio24_boards */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x475c), /* daqcard-dio24 */ PCMCIA_DEVICE_NULL }; - MODULE_DEVICE_TABLE(pcmcia, dio24_cs_ids); -MODULE_AUTHOR("Daniel Vecino Castel <dvecino@able.es>"); -MODULE_DESCRIPTION("Comedi driver for National Instruments " - "PCMCIA DAQ-Card DIO-24"); -MODULE_LICENSE("GPL"); static struct pcmcia_driver dio24_cs_driver = { - .probe = dio24_cs_attach, - .remove = dio24_cs_detach, - .suspend = dio24_cs_suspend, - .resume = dio24_cs_resume, - .id_table = dio24_cs_ids, - .owner = THIS_MODULE, - .name = "ni_daq_dio24", + .name = "ni_daq_dio24", + .owner = THIS_MODULE, + .id_table = dio24_cs_ids, + .probe = dio24_cs_attach, + .remove = comedi_pcmcia_auto_unconfig, }; - module_comedi_pcmcia_driver(driver_dio24, dio24_cs_driver); + +MODULE_AUTHOR("Daniel Vecino Castel <dvecino@able.es>"); +MODULE_DESCRIPTION( + "Comedi driver for National Instruments PCMCIA DAQ-Card DIO-24"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 9e4d2da5f5a7..f851c54b0c33 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -1204,7 +1204,8 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) else channel = CR_CHAN(cmd->chanlist[0]); /* munge channel bits for differential / scan disabled mode */ - if (mode != MODE_SINGLE_CHAN && aref == AREF_DIFF) + if ((mode == MODE_SINGLE_CHAN || mode == MODE_SINGLE_CHAN_INTERVAL) && + aref == AREF_DIFF) channel *= 2; devpriv->command1_bits |= ADC_CHAN_BITS(channel); devpriv->command1_bits |= thisboard->ai_range_code[range]; @@ -1219,21 +1220,6 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->write_byte(devpriv->command1_bits, dev->iobase + COMMAND1_REG); } - /* setup any external triggering/pacing (command4 register) */ - devpriv->command4_bits = 0; - if (cmd->convert_src != TRIG_EXT) - devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; - /* XXX should discard first scan when using interval scanning - * since manual says it is not synced with scan clock */ - if (labpc_use_continuous_mode(cmd, mode) == 0) { - devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; - if (cmd->scan_begin_src == TRIG_EXT) - devpriv->command4_bits |= EXT_SCAN_EN_BIT; - } - /* single-ended/differential */ - if (aref == AREF_DIFF) - devpriv->command4_bits |= ADC_DIFF_BIT; - devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG); devpriv->write_byte(cmd->chanlist_len, dev->iobase + INTERVAL_COUNT_REG); @@ -1313,6 +1299,22 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT; devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG); + /* setup any external triggering/pacing (command4 register) */ + devpriv->command4_bits = 0; + if (cmd->convert_src != TRIG_EXT) + devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; + /* XXX should discard first scan when using interval scanning + * since manual says it is not synced with scan clock */ + if (labpc_use_continuous_mode(cmd, mode) == 0) { + devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; + if (cmd->scan_begin_src == TRIG_EXT) + devpriv->command4_bits |= EXT_SCAN_EN_BIT; + } + /* single-ended/differential */ + if (aref == AREF_DIFF) + devpriv->command4_bits |= ADC_DIFF_BIT; + devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG); + /* startup acquisition */ /* command2 reg */ diff --git a/drivers/staging/comedi/drivers/ni_labpc_cs.c b/drivers/staging/comedi/drivers/ni_labpc_cs.c index c45988120124..d23977591f58 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_cs.c +++ b/drivers/staging/comedi/drivers/ni_labpc_cs.c @@ -73,8 +73,6 @@ NI manuals: #include <pcmcia/cisreg.h> #include <pcmcia/ds.h> -static struct pcmcia_device *pcmcia_cur_dev; - static const struct labpc_board_struct labpc_cs_boards[] = { { .name = "daqcard-1200", @@ -86,60 +84,9 @@ static const struct labpc_board_struct labpc_cs_boards[] = { .ai_range_table = &range_labpc_1200_ai, .ai_range_code = labpc_1200_ai_gain_bits, .ai_range_is_unipolar = labpc_1200_is_unipolar, - }, { - /* duplicate entry, to support using alternate name */ - .name = "ni_labpc_cs", - .device_id = 0x103, - .ai_speed = 10000, - .bustype = pcmcia_bustype, - .register_layout = labpc_1200_layout, - .has_ao = 1, - .ai_range_table = &range_labpc_1200_ai, - .ai_range_code = labpc_1200_ai_gain_bits, - .ai_range_is_unipolar = labpc_1200_is_unipolar, }, }; -static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it) -{ - const struct labpc_board_struct *thisboard = comedi_board(dev); - struct labpc_private *devpriv; - unsigned long iobase = 0; - unsigned int irq = 0; - struct pcmcia_device *link; - - devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); - if (!devpriv) - return -ENOMEM; - dev->private = devpriv; - - /* get base address, irq etc. based on bustype */ - switch (thisboard->bustype) { - case pcmcia_bustype: - link = pcmcia_cur_dev; /* XXX hack */ - if (!link) - return -EIO; - iobase = link->resource[0]->start; - irq = link->irq; - break; - default: - pr_err("bug! couldn't determine board type\n"); - return -EINVAL; - break; - } - return labpc_common_attach(dev, iobase, irq, 0); -} - -static struct comedi_driver driver_labpc_cs = { - .driver_name = "ni_labpc_cs", - .module = THIS_MODULE, - .attach = labpc_attach, - .detach = labpc_common_detach, - .num_names = ARRAY_SIZE(labpc_cs_boards), - .board_name = &labpc_cs_boards[0].name, - .offset = sizeof(struct labpc_board_struct), -}; - static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev, void *priv_data) { @@ -149,42 +96,61 @@ static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev, return pcmcia_request_io(p_dev); } -static int labpc_cs_attach(struct pcmcia_device *link) +static int labpc_auto_attach(struct comedi_device *dev, + unsigned long context) { + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + struct labpc_private *devpriv; int ret; + /* The ni_labpc driver needs the board_ptr */ + dev->board_ptr = &labpc_cs_boards[0]; + link->config_flags |= CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ | - CONF_AUTO_AUDIO | CONF_AUTO_SET_IO; + CONF_AUTO_AUDIO | CONF_AUTO_SET_IO; ret = pcmcia_loop_config(link, labpc_pcmcia_config_loop, NULL); - if (ret) { - dev_warn(&link->dev, "no configuration found\n"); - goto failed; - } + if (ret) + return ret; if (!link->irq) - goto failed; + return -EINVAL; ret = pcmcia_enable_device(link); if (ret) - goto failed; + return ret; + dev->iobase = link->resource[0]->start; - pcmcia_cur_dev = link; + devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); + if (!devpriv) + return -ENOMEM; + dev->private = devpriv; - return 0; + return labpc_common_attach(dev, dev->iobase, link->irq, 0); +} -failed: - pcmcia_disable_device(link); - return ret; +static void labpc_detach(struct comedi_device *dev) +{ + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + + labpc_common_detach(dev); + if (dev->iobase) + pcmcia_disable_device(link); } -static void labpc_cs_detach(struct pcmcia_device *link) +static struct comedi_driver driver_labpc_cs = { + .driver_name = "ni_labpc_cs", + .module = THIS_MODULE, + .auto_attach = labpc_auto_attach, + .detach = labpc_detach, +}; + +static int labpc_cs_attach(struct pcmcia_device *link) { - pcmcia_disable_device(link); + return comedi_pcmcia_auto_config(link, &driver_labpc_cs); } static const struct pcmcia_device_id labpc_cs_ids[] = { - /* N.B. These IDs should match those in labpc_cs_boards (ni_labpc.c) */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103), /* daqcard-1200 */ PCMCIA_DEVICE_NULL }; @@ -195,7 +161,7 @@ static struct pcmcia_driver labpc_cs_driver = { .owner = THIS_MODULE, .id_table = labpc_cs_ids, .probe = labpc_cs_attach, - .remove = labpc_cs_detach, + .remove = comedi_pcmcia_auto_unconfig, }; module_comedi_pcmcia_driver(driver_labpc_cs, labpc_cs_driver); diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index 07e4bd86577e..4151abad8195 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -207,37 +207,62 @@ static uint16_t mio_cs_win_in(struct comedi_device *dev, int addr) #include "ni_mio_common.c" -static struct pcmcia_device *cur_dev; - -static int ni_getboardtype(struct comedi_device *dev, - struct pcmcia_device *link) +static const void *ni_getboardtype(struct comedi_device *dev, + struct pcmcia_device *link) { + static const struct ni_board_struct *board; int i; - for (i = 0; i < n_ni_boards; i++) { - if (ni_boards[i].device_id == link->card_id) - return i; + for (i = 0; i < ARRAY_SIZE(ni_boards); i++) { + board = &ni_boards[i]; + if (board->device_id == link->card_id) + return board; } + return NULL; +} + +static int mio_pcmcia_config_loop(struct pcmcia_device *p_dev, void *priv_data) +{ + int base, ret; - dev_err(dev->class_dev, - "unknown board 0x%04x -- pretend it is a ", link->card_id); + p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; + p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_16; - return 0; + for (base = 0x000; base < 0x400; base += 0x20) { + p_dev->resource[0]->start = base; + ret = pcmcia_request_io(p_dev); + if (!ret) + return 0; + } + return -ENODEV; } -static int mio_cs_attach(struct comedi_device *dev, - struct comedi_devconfig *it) +static int mio_cs_auto_attach(struct comedi_device *dev, + unsigned long context) { + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + static const struct ni_board_struct *board; struct ni_private *devpriv; - struct pcmcia_device *link; int ret; - link = cur_dev; /* XXX hack */ - if (!link) - return -EIO; + board = ni_getboardtype(dev, link); + if (!board) + return -ENODEV; + dev->board_ptr = board; + dev->board_name = board->name; + + link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; + + ret = pcmcia_loop_config(link, mio_pcmcia_config_loop, NULL); + if (ret) + return ret; + + if (!link->irq) + return -EINVAL; - dev->board_ptr = ni_boards + ni_getboardtype(dev, link); - dev->board_name = boardtype.name; + ret = pcmcia_enable_device(link); + if (ret) + return ret; dev->iobase = link->resource[0]->start; ret = request_irq(link->irq, ni_E_interrupt, NI_E_IRQ_FLAGS, @@ -261,57 +286,25 @@ static int mio_cs_attach(struct comedi_device *dev, static void mio_cs_detach(struct comedi_device *dev) { + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + mio_common_detach(dev); if (dev->irq) free_irq(dev->irq, dev); + if (dev->iobase) + pcmcia_disable_device(link); } static struct comedi_driver driver_ni_mio_cs = { .driver_name = "ni_mio_cs", .module = THIS_MODULE, - .attach = mio_cs_attach, + .auto_attach = mio_cs_auto_attach, .detach = mio_cs_detach, }; -static int mio_pcmcia_config_loop(struct pcmcia_device *p_dev, void *priv_data) -{ - int base, ret; - - p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH; - p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_16; - - for (base = 0x000; base < 0x400; base += 0x20) { - p_dev->resource[0]->start = base; - ret = pcmcia_request_io(p_dev); - if (!ret) - return 0; - } - return -ENODEV; -} - static int cs_attach(struct pcmcia_device *link) { - int ret; - - cur_dev = link; - - link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; - - ret = pcmcia_loop_config(link, mio_pcmcia_config_loop, NULL); - if (ret) { - dev_warn(&link->dev, "no configuration found\n"); - return ret; - } - - if (!link->irq) - dev_info(&link->dev, "no IRQ available\n"); - - return pcmcia_enable_device(link); -} - -static void cs_detach(struct pcmcia_device *link) -{ - pcmcia_disable_device(link); + return comedi_pcmcia_auto_config(link, &driver_ni_mio_cs); } static const struct pcmcia_device_id ni_mio_cs_ids[] = { @@ -329,7 +322,7 @@ static struct pcmcia_driver ni_mio_cs_driver = { .owner = THIS_MODULE, .id_table = ni_mio_cs_ids, .probe = cs_attach, - .remove = cs_detach, + .remove = comedi_pcmcia_auto_unconfig, }; module_comedi_pcmcia_driver(driver_ni_mio_cs, ni_mio_cs_driver); diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index 2c35d75aef52..6ab9083a032f 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -58,28 +58,16 @@ Devices: [Quatech] DAQP-208 (daqp), DAQP-308 #include "comedi_fc.h" -/* Maximum number of separate DAQP devices we'll allow */ -#define MAX_DEV 4 - -struct local_info_t { - struct pcmcia_device *link; +struct daqp_private { int stop; - int table_index; - char board_name[32]; enum { semaphore, buffer } interrupt_mode; struct completion eos; - struct comedi_device *dev; - struct comedi_subdevice *s; int count; }; -/* A list of "instances" of the device. */ - -static struct local_info_t *dev_table[MAX_DEV] = { NULL, /* ... */ }; - /* The DAQP communicates with the system through a 16 byte I/O window. */ #define DAQP_FIFO_SIZE 4096 @@ -176,26 +164,25 @@ static const struct comedi_lrange range_daqp_ai = { static int daqp_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { - struct local_info_t *local = s->private; + struct daqp_private *devpriv = dev->private; - if (local->stop) + if (devpriv->stop) return -EIO; - outb(DAQP_COMMAND_STOP, dev->iobase + DAQP_COMMAND); /* flush any linguring data in FIFO - superfluous here */ /* outb(DAQP_COMMAND_RSTF, dev->iobase+DAQP_COMMAND); */ - local->interrupt_mode = semaphore; + devpriv->interrupt_mode = semaphore; return 0; } /* Interrupt handler * - * Operates in one of two modes. If local->interrupt_mode is - * 'semaphore', just signal the local->eos completion and return + * Operates in one of two modes. If devpriv->interrupt_mode is + * 'semaphore', just signal the devpriv->eos completion and return * (one-shot mode). Otherwise (continuous mode), read data in from * the card, transfer it to the buffer provided by the higher-level * comedi kernel module, and signal various comedi callback routines, @@ -203,24 +190,21 @@ static int daqp_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) */ static enum irqreturn daqp_interrupt(int irq, void *dev_id) { - struct local_info_t *local = dev_id; - struct comedi_device *dev = local ? local->dev : NULL; - struct comedi_subdevice *s = local ? local->s : NULL; + struct comedi_device *dev = dev_id; + struct daqp_private *devpriv = dev->private; + struct comedi_subdevice *s = dev->read_subdev; int loop_limit = 10000; int status; - if (!dev || !dev->attached || !s || s->private != local) + if (!dev->attached) return IRQ_NONE; - switch (local->interrupt_mode) { - + switch (devpriv->interrupt_mode) { case semaphore: - - complete(&local->eos); + complete(&devpriv->eos); break; case buffer: - while (!((status = inb(dev->iobase + DAQP_STATUS)) & DAQP_STATUS_FIFO_EMPTY)) { @@ -244,9 +228,9 @@ static enum irqreturn daqp_interrupt(int irq, void *dev_id) * and stop conversion if zero */ - if (local->count > 0) { - local->count--; - if (local->count == 0) { + if (devpriv->count > 0) { + devpriv->count--; + if (devpriv->count == 0) { daqp_ai_cancel(dev, s); s->async->events |= COMEDI_CB_EOA; break; @@ -271,21 +255,41 @@ static enum irqreturn daqp_interrupt(int irq, void *dev_id) return IRQ_HANDLED; } +static void daqp_ai_set_one_scanlist_entry(struct comedi_device *dev, + unsigned int chanspec, + int start) +{ + unsigned int chan = CR_CHAN(chanspec); + unsigned int range = CR_RANGE(chanspec); + unsigned int aref = CR_AREF(chanspec); + unsigned int val; + + val = DAQP_SCANLIST_CHANNEL(chan) | DAQP_SCANLIST_GAIN(range); + + if (aref == AREF_DIFF) + val |= DAQP_SCANLIST_DIFFERENTIAL; + + if (start) + val |= DAQP_SCANLIST_START; + + outb(val & 0xff, dev->iobase + DAQP_SCANLIST); + outb((val >> 8) & 0xff, dev->iobase + DAQP_SCANLIST); +} + /* One-shot analog data acquisition routine */ static int daqp_ai_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { - struct local_info_t *local = s->private; + struct daqp_private *devpriv = dev->private; int i; int v; int counter = 10000; - if (local->stop) + if (devpriv->stop) return -EIO; - /* Stop any running conversion */ daqp_ai_cancel(dev, s); @@ -295,18 +299,7 @@ static int daqp_ai_insn_read(struct comedi_device *dev, outb(DAQP_COMMAND_RSTQ, dev->iobase + DAQP_COMMAND); /* Program one scan list entry */ - - v = DAQP_SCANLIST_CHANNEL(CR_CHAN(insn->chanspec)) - | DAQP_SCANLIST_GAIN(CR_RANGE(insn->chanspec)); - - if (CR_AREF(insn->chanspec) == AREF_DIFF) - v |= DAQP_SCANLIST_DIFFERENTIAL; - - - v |= DAQP_SCANLIST_START; - - outb(v & 0xff, dev->iobase + DAQP_SCANLIST); - outb(v >> 8, dev->iobase + DAQP_SCANLIST); + daqp_ai_set_one_scanlist_entry(dev, insn->chanspec, 1); /* Reset data FIFO (see page 28 of DAQP User's Manual) */ @@ -332,10 +325,8 @@ static int daqp_ai_insn_read(struct comedi_device *dev, return -1; } - init_completion(&local->eos); - local->interrupt_mode = semaphore; - local->dev = dev; - local->s = s; + init_completion(&devpriv->eos); + devpriv->interrupt_mode = semaphore; for (i = 0; i < insn->n; i++) { @@ -345,7 +336,7 @@ static int daqp_ai_insn_read(struct comedi_device *dev, /* Wait for interrupt service routine to unblock completion */ /* Maybe could use a timeout here, but it's interruptible */ - if (wait_for_completion_interruptible(&local->eos)) + if (wait_for_completion_interruptible(&devpriv->eos)) return -EINTR; data[i] = inb(dev->iobase + DAQP_FIFO); @@ -470,7 +461,7 @@ static int daqp_ai_cmdtest(struct comedi_device *dev, static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { - struct local_info_t *local = s->private; + struct daqp_private *devpriv = dev->private; struct comedi_cmd *cmd = &s->async->cmd; int counter; int scanlist_start_on_every_entry; @@ -479,10 +470,9 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) int i; int v; - if (local->stop) + if (devpriv->stop) return -EIO; - /* Stop any running conversion */ daqp_ai_cancel(dev, s); @@ -521,24 +511,10 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } /* Program scan list */ - for (i = 0; i < cmd->chanlist_len; i++) { + int start = (i == 0 || scanlist_start_on_every_entry); - int chanspec = cmd->chanlist[i]; - - /* Program one scan list entry */ - - v = DAQP_SCANLIST_CHANNEL(CR_CHAN(chanspec)) - | DAQP_SCANLIST_GAIN(CR_RANGE(chanspec)); - - if (CR_AREF(chanspec) == AREF_DIFF) - v |= DAQP_SCANLIST_DIFFERENTIAL; - - if (i == 0 || scanlist_start_on_every_entry) - v |= DAQP_SCANLIST_START; - - outb(v & 0xff, dev->iobase + DAQP_SCANLIST); - outb(v >> 8, dev->iobase + DAQP_SCANLIST); + daqp_ai_set_one_scanlist_entry(dev, cmd->chanlist[i], start); } /* Now it's time to program the FIFO threshold, basically the @@ -604,16 +580,16 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* Save away the number of conversions we should perform, and * compute the FIFO threshold (in bytes, not samples - that's - * why we multiple local->count by 2 = sizeof(sample)) + * why we multiple devpriv->count by 2 = sizeof(sample)) */ if (cmd->stop_src == TRIG_COUNT) { - local->count = cmd->stop_arg * cmd->scan_end_arg; - threshold = 2 * local->count; + devpriv->count = cmd->stop_arg * cmd->scan_end_arg; + threshold = 2 * devpriv->count; while (threshold > DAQP_FIFO_SIZE * 3 / 4) threshold /= 2; } else { - local->count = -1; + devpriv->count = -1; threshold = DAQP_FIFO_SIZE / 2; } @@ -655,9 +631,7 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return -1; } - local->interrupt_mode = buffer; - local->dev = dev; - local->s = s; + devpriv->interrupt_mode = buffer; /* Start conversion */ outb(DAQP_COMMAND_ARM | DAQP_COMMAND_FIFO_DATA, @@ -666,102 +640,98 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -/* Single-shot analog output routine */ - static int daqp_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - struct local_info_t *local = s->private; - int d; - unsigned int chan; + struct daqp_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int val; + int i; - if (local->stop) + if (devpriv->stop) return -EIO; - chan = CR_CHAN(insn->chanspec); - d = data[0]; - d &= 0x0fff; - d ^= 0x0800; /* Flip the sign */ - d |= chan << 12; - /* Make sure D/A update mode is direct update */ outb(0, dev->iobase + DAQP_AUX); - outw(d, dev->iobase + DAQP_DA); + for (i = 0; i > insn->n; i++) { + val = data[0]; + val &= 0x0fff; + val ^= 0x0800; /* Flip the sign */ + val |= (chan << 12); - return 1; -} + outw(val, dev->iobase + DAQP_DA); + } -/* Digital input routine */ + return insn->n; +} -static int daqp_di_insn_read(struct comedi_device *dev, +static int daqp_di_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { - struct local_info_t *local = s->private; + struct daqp_private *devpriv = dev->private; - if (local->stop) + if (devpriv->stop) return -EIO; data[0] = inb(dev->iobase + DAQP_DIGITAL_IO); - return 1; + return insn->n; } -/* Digital output routine */ - -static int daqp_do_insn_write(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int daqp_do_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { - struct local_info_t *local = s->private; + struct daqp_private *devpriv = dev->private; + unsigned int mask = data[0]; + unsigned int bits = data[1]; - if (local->stop) + if (devpriv->stop) return -EIO; - outw(data[0] & 0xf, dev->iobase + DAQP_DIGITAL_IO); + if (mask) { + s->state &= ~mask; + s->state |= (bits & mask); - return 1; -} + outb(s->state, dev->iobase + DAQP_DIGITAL_IO); + } -/* daqp_attach is called via comedi_config to attach a comedi device - * to a /dev/comedi*. Note that this is different from daqp_cs_attach() - * which is called by the pcmcia subsystem to attach the PCMCIA card - * when it is inserted. - */ + data[1] = s->state; + + return insn->n; +} -static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it) +static int daqp_auto_attach(struct comedi_device *dev, + unsigned long context) { - struct local_info_t *local; + struct pcmcia_device *link = comedi_to_pcmcia_dev(dev); + struct daqp_private *devpriv; struct comedi_subdevice *s; int ret; - if (it->options[0] < 0 || it->options[0] >= MAX_DEV) - return -ENODEV; - - local = dev_table[it->options[0]]; - if (!local) - return -ENODEV; + dev->board_name = dev->driver->driver_name; - /* Typically brittle code that I don't completely understand, - * but "it works on my card". The intent is to pull the model - * number of the card out the PCMCIA CIS and stash it away as - * the COMEDI board_name. Looks like the third field in - * CISTPL_VERS_1 (offset 2) holds what we're looking for. If - * it doesn't work, who cares, just leave it as "DAQP". - */ + devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); + if (!devpriv) + return -ENOMEM; + dev->private = devpriv; - strcpy(local->board_name, "DAQP"); - dev->board_name = local->board_name; - if (local->link->prod_id[2]) { - if (strncmp(local->link->prod_id[2], "DAQP", 4) == 0) { - strncpy(local->board_name, local->link->prod_id[2], - sizeof(local->board_name)); - } - } + link->config_flags |= CONF_AUTO_SET_IO | CONF_ENABLE_IRQ; + ret = comedi_pcmcia_enable(dev); + if (ret) + return ret; + dev->iobase = link->resource[0]->start; - dev->iobase = local->link->resource[0]->start; + link->priv = dev; + ret = pcmcia_request_irq(link, daqp_interrupt); + if (ret) + return ret; ret = comedi_alloc_subdevices(dev, 4); if (ret) @@ -769,7 +739,6 @@ static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it) s = &dev->subdevices[0]; dev->read_subdev = s; - s->private = local; s->type = COMEDI_SUBD_AI; s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_DIFF | SDF_CMD_READ; s->n_chan = 8; @@ -782,8 +751,6 @@ static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->cancel = daqp_ai_cancel; s = &dev->subdevices[1]; - dev->write_subdev = s; - s->private = local; s->type = COMEDI_SUBD_AO; s->subdev_flags = SDF_WRITEABLE; s->n_chan = 2; @@ -792,156 +759,57 @@ static int daqp_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->insn_write = daqp_ao_insn_write; s = &dev->subdevices[2]; - s->private = local; s->type = COMEDI_SUBD_DI; s->subdev_flags = SDF_READABLE; s->n_chan = 1; - s->insn_read = daqp_di_insn_read; + s->maxdata = 1; + s->insn_bits = daqp_di_insn_bits; s = &dev->subdevices[3]; - s->private = local; s->type = COMEDI_SUBD_DO; s->subdev_flags = SDF_WRITEABLE; s->n_chan = 1; - s->len_chanlist = 1; - s->insn_write = daqp_do_insn_write; + s->maxdata = 1; + s->insn_bits = daqp_do_insn_bits; return 0; } -static void daqp_detach(struct comedi_device *dev) -{ - /* Nothing to cleanup */ -} - static struct comedi_driver driver_daqp = { .driver_name = "quatech_daqp_cs", .module = THIS_MODULE, - .attach = daqp_attach, - .detach = daqp_detach, + .auto_attach = daqp_auto_attach, + .detach = comedi_pcmcia_disable, }; -/*==================================================================== - - PCMCIA interface code - - The rest of the code in this file is based on dummy_cs.c v1.24 - from the Linux pcmcia_cs distribution v3.1.8 and is subject - to the following license agreement. - - The remaining contents of this file are subject to the Mozilla Public - License Version 1.1 (the "License"); you may not use this file - except in compliance with the License. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS - IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - implied. See the License for the specific language governing - rights and limitations under the License. - - The initial developer of the original code is David A. Hinds - <dhinds@pcmcia.sourceforge.org>. Portions created by David A. Hinds - are Copyright (C) 1999 David A. Hinds. All Rights Reserved. - - Alternatively, the contents of this file may be used under the - terms of the GNU Public License version 2 (the "GPL"), in which - case the provisions of the GPL are applicable instead of the - above. If you wish to allow the use of your version of this file - only under the terms of the GPL and not to allow others to use - your version of this file under the MPL, indicate your decision - by deleting the provisions above and replace them with the notice - and other provisions required by the GPL. If you do not delete - the provisions above, a recipient may use your version of this - file under either the MPL or the GPL. - -======================================================================*/ - static int daqp_cs_suspend(struct pcmcia_device *link) { - struct local_info_t *local = link->priv; + struct comedi_device *dev = link->priv; + struct daqp_private *devpriv = dev ? dev->private : NULL; /* Mark the device as stopped, to block IO until later */ - local->stop = 1; + if (devpriv) + devpriv->stop = 1; + return 0; } static int daqp_cs_resume(struct pcmcia_device *link) { - struct local_info_t *local = link->priv; + struct comedi_device *dev = link->priv; + struct daqp_private *devpriv = dev ? dev->private : NULL; - local->stop = 0; + if (devpriv) + devpriv->stop = 0; return 0; } -static int daqp_pcmcia_config_loop(struct pcmcia_device *p_dev, void *priv_data) -{ - if (p_dev->config_index == 0) - return -EINVAL; - - return pcmcia_request_io(p_dev); -} - static int daqp_cs_attach(struct pcmcia_device *link) { - struct local_info_t *local; - int ret; - int i; - - for (i = 0; i < MAX_DEV; i++) - if (dev_table[i] == NULL) - break; - if (i == MAX_DEV) { - dev_notice(&link->dev, "no devices available\n"); - return -ENODEV; - } - - /* Allocate space for private device-specific data */ - local = kzalloc(sizeof(*local), GFP_KERNEL); - if (!local) - return -ENOMEM; - - local->table_index = i; - dev_table[i] = local; - local->link = link; - link->priv = local; - - link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; - - ret = pcmcia_loop_config(link, daqp_pcmcia_config_loop, NULL); - if (ret) { - dev_warn(&link->dev, "no configuration found\n"); - goto failed; - } - - ret = pcmcia_request_irq(link, daqp_interrupt); - if (ret) - goto failed; - - ret = pcmcia_enable_device(link); - if (ret) - goto failed; - - return 0; - -failed: - pcmcia_disable_device(link); - return ret; -} - -static void daqp_cs_detach(struct pcmcia_device *link) -{ - struct local_info_t *dev = link->priv; - - dev->stop = 1; - pcmcia_disable_device(link); - - /* Unlink device structure, and free it */ - dev_table[dev->table_index] = NULL; - kfree(dev); + return comedi_pcmcia_auto_config(link, &driver_daqp); } -/*====================================================================*/ static const struct pcmcia_device_id daqp_cs_id_table[] = { PCMCIA_DEVICE_MANF_CARD(0x0137, 0x0027), PCMCIA_DEVICE_NULL @@ -953,7 +821,7 @@ static struct pcmcia_driver daqp_cs_driver = { .owner = THIS_MODULE, .id_table = daqp_cs_id_table, .probe = daqp_cs_attach, - .remove = daqp_cs_detach, + .remove = comedi_pcmcia_auto_unconfig, .suspend = daqp_cs_suspend, .resume = daqp_cs_resume, }; diff --git a/drivers/staging/vt6656/80211mgr.h b/drivers/staging/vt6656/80211mgr.h index 29fad08e97cc..f8e16d8989ea 100644 --- a/drivers/staging/vt6656/80211mgr.h +++ b/drivers/staging/vt6656/80211mgr.h @@ -38,7 +38,7 @@ #define WLAN_MIN_ARRAY 1 -// Information Element ID value +/* Information Element ID value */ #define WLAN_EID_SSID 0 #define WLAN_EID_SUPP_RATES 1 #define WLAN_EID_FH_PARMS 2 @@ -59,10 +59,10 @@ #define WLAN_EID_QUIET 40 #define WLAN_EID_IBSS_DFS 41 #define WLAN_EID_ERP 42 -// reference 802.11i 7.3.2 table 20 +/* reference 802.11i 7.3.2 table 20 */ #define WLAN_EID_RSN 48 #define WLAN_EID_EXTSUPP_RATES 50 -// reference WiFi WPA spec. +/* reference WiFi WPA spec */ #define WLAN_EID_RSN_WPA 221 #ifdef Cisco_ccx @@ -75,7 +75,7 @@ #define WLAN_EID_ERP_USE_PROTECTION 0x02 #define WLAN_EID_ERP_BARKER_MODE 0x04 -// Reason Codes +/* reason codes */ #define WLAN_MGMT_REASON_RSVD 0 #define WLAN_MGMT_REASON_UNSPEC 1 #define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2 @@ -100,7 +100,7 @@ #define WLAN_MGMT_REASON_RSNE_CAP_INVALID 22 #define WLAN_MGMT_REASON_80211X_AUTH_FAILED 23 -// Status Codes +/* status codes */ #define WLAN_MGMT_STATUS_SUCCESS 0 #define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1 #define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10 @@ -116,19 +116,16 @@ #define WLAN_MGMT_STATUS_ASSOC_DENIED_PBCC 20 #define WLAN_MGMT_STATUS_ASSOC_DENIED_AGILITY 21 -// reference 802.11h 7.3.1.9 -// +/* reference 802.11h 7.3.1.9 */ #define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SPECTRUM_MNG 22 #define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_PWR_CAP 23 #define WLAN_MGMT_STATUS_ASSOC_REJECT_BCS_SUPP_CH 24 -// -// reference 802.11g 7.3.1.9 -// + +/* reference 802.11g 7.3.1.9 */ #define WLAN_MGMT_STATUS_SHORTSLOTTIME_UNSUPPORTED 25 #define WLAN_MGMT_STATUS_DSSSOFDM_UNSUPPORTED 26 -// -// reference 802.11i 7.3.1.9 table 19 -// + +/* reference 802.11i 7.3.1.9 table 19 */ #define WLAN_MGMT_STATUS_INVALID_IE 40 #define WLAN_MGMT_STATUS_GROUP_CIPHER_INVALID 41 #define WLAN_MGMT_STATUS_PAIRWISE_CIPHER_INVALID 42 @@ -137,17 +134,16 @@ #define WLAN_MGMT_STATUS_INVALID_RSN_IE_CAP 45 #define WLAN_MGMT_STATUS_CIPHER_REJECT 46 - - -// Auth Algorithm +/* auth algorithm */ #define WLAN_AUTH_ALG_OPENSYSTEM 0 #define WLAN_AUTH_ALG_SHAREDKEY 1 +/* management frame field offsets */ - -// Management Frame Field Offsets -// Note: Not all fields are listed because of variable lengths. -// Note: These offsets are from the start of the frame data +/* + * Note: Not all fields are listed because of variable lengths + * Note: These offsets are from the start of the frame data + */ #define WLAN_BEACON_OFF_TS 0 #define WLAN_BEACON_OFF_BCN_INT 8 @@ -189,10 +185,7 @@ #define WLAN_DEAUTHEN_OFF_REASON 0 - -// -// Cipher Suite Selectors defined in 802.11i -// +/* cipher suite selectors defined in 802.11i */ #define WLAN_11i_CSS_USE_GROUP 0 #define WLAN_11i_CSS_WEP40 1 #define WLAN_11i_CSS_TKIP 2 @@ -200,24 +193,22 @@ #define WLAN_11i_CSS_WEP104 5 #define WLAN_11i_CSS_UNKNOWN 255 -// -// Authentication and Key Management Suite Selectors defined in 802.11i -// +/* authentication and key management suite selectors defined in 802.11i */ #define WLAN_11i_AKMSS_802_1X 1 #define WLAN_11i_AKMSS_PSK 2 #define WLAN_11i_AKMSS_UNKNOWN 255 -// Measurement type definitions reference ieee 802.11h Table 20b +/* measurement type definitions reference IEEE 802.11h table 20b */ #define MEASURE_TYPE_BASIC 0 #define MEASURE_TYPE_CCA 1 #define MEASURE_TYPE_RPI 2 -// Measurement request mode definitions reference ieee 802.11h Figure 46h +/* measurement request mode definitions reference IEEE 802.11h figure 46h */ #define MEASURE_MODE_ENABLE 0x02 #define MEASURE_MODE_REQ 0x04 #define MEASURE_MODE_REP 0x08 -// Measurement report mode definitions reference ieee 802.11h Figure 46m +/* measurement report mode definitions reference IEEE 802.11h figure 46m */ #define MEASURE_MODE_LATE 0x01 #define MEASURE_MODE_INCAPABLE 0x02 #define MEASURE_MODE_REFUSED 0x04 @@ -228,7 +219,7 @@ /*--------------------- Export Types ------------------------------*/ -// Information Element Types +/* Information Element types */ #pragma pack(1) typedef struct tagWLAN_IE { @@ -237,7 +228,7 @@ typedef struct tagWLAN_IE { } __attribute__ ((__packed__)) WLAN_IE, *PWLAN_IE; -// Service Set Identity (SSID) +/* Service Set IDentity (SSID) */ #pragma pack(1) typedef struct tagWLAN_IE_SSID { BYTE byElementID; @@ -246,7 +237,7 @@ typedef struct tagWLAN_IE_SSID { } __attribute__ ((__packed__)) WLAN_IE_SSID, *PWLAN_IE_SSID; -// Supported Rates +/* Supported Rates */ #pragma pack(1) typedef struct tagWLAN_IE_SUPP_RATES { BYTE byElementID; @@ -255,7 +246,7 @@ typedef struct tagWLAN_IE_SUPP_RATES { } __attribute__ ((__packed__)) WLAN_IE_SUPP_RATES, *PWLAN_IE_SUPP_RATES; -// FH Parameter Set +/* FH Parameter Set */ #pragma pack(1) typedef struct _WLAN_IE_FH_PARMS { BYTE byElementID; @@ -266,7 +257,7 @@ typedef struct _WLAN_IE_FH_PARMS { BYTE byHopIndex; } WLAN_IE_FH_PARMS, *PWLAN_IE_FH_PARMS; -// DS Parameter Set +/* DS Parameter Set */ #pragma pack(1) typedef struct tagWLAN_IE_DS_PARMS { BYTE byElementID; @@ -275,7 +266,7 @@ typedef struct tagWLAN_IE_DS_PARMS { } __attribute__ ((__packed__)) WLAN_IE_DS_PARMS, *PWLAN_IE_DS_PARMS; -// CF Parameter Set +/* CF Parameter Set */ #pragma pack(1) typedef struct tagWLAN_IE_CF_PARMS { BYTE byElementID; @@ -287,7 +278,7 @@ typedef struct tagWLAN_IE_CF_PARMS { } __attribute__ ((__packed__)) WLAN_IE_CF_PARMS, *PWLAN_IE_CF_PARMS; -// TIM +/* TIM */ #pragma pack(1) typedef struct tagWLAN_IE_TIM { BYTE byElementID; @@ -299,7 +290,7 @@ typedef struct tagWLAN_IE_TIM { } __attribute__ ((__packed__)) WLAN_IE_TIM, *PWLAN_IE_TIM; -// IBSS Parameter Set +/* IBSS Parameter Set */ #pragma pack(1) typedef struct tagWLAN_IE_IBSS_PARMS { BYTE byElementID; @@ -308,7 +299,7 @@ typedef struct tagWLAN_IE_IBSS_PARMS { } __attribute__ ((__packed__)) WLAN_IE_IBSS_PARMS, *PWLAN_IE_IBSS_PARMS; -// Challenge Text +/* Challenge Text */ #pragma pack(1) typedef struct tagWLAN_IE_CHALLENGE { BYTE byElementID; @@ -325,10 +316,10 @@ typedef struct tagWLAN_IE_RSN_EXT { WORD wVersion; BYTE abyMulticast[4]; WORD wPKCount; - struct { - BYTE abyOUI[4]; - } PKSList[1]; // the rest is variable so need to - // overlay ieauth structure + struct { + BYTE abyOUI[4]; + } PKSList[1]; + /* the rest is variable so need to overlay ieauth structure */ } WLAN_IE_RSN_EXT, *PWLAN_IE_RSN_EXT; #pragma pack(1) @@ -339,7 +330,7 @@ typedef struct tagWLAN_IE_RSN_AUTH { } AuthKSList[1]; } WLAN_IE_RSN_AUTH, *PWLAN_IE_RSN_AUTH; -// RSN Identity +/* RSN Identity */ #pragma pack(1) typedef struct tagWLAN_IE_RSN { BYTE byElementID; @@ -348,8 +339,7 @@ typedef struct tagWLAN_IE_RSN { BYTE abyRSN[WLAN_MIN_ARRAY]; } WLAN_IE_RSN, *PWLAN_IE_RSN; - -// CCX Identity DavidWang +/* CCX Identity DavidWang */ #pragma pack(1) typedef struct tagWLAN_IE_CCX { BYTE byElementID; @@ -371,9 +361,7 @@ BYTE len; BYTE abyCCXVer[5]; } WLAN_IE_CCX_Ver, *PWLAN_IE_CCX_Ver; - - -// ERP +/* ERP */ #pragma pack(1) typedef struct tagWLAN_IE_ERP { BYTE byElementID; @@ -505,10 +493,9 @@ typedef struct _WLAN_IE_IBSS_DFS { #pragma pack() +/* frame types */ - -// Frame Types -// prototype structure, all mgmt frame types will start with these members +/* prototype structure, all mgmt frame types will start with these members */ typedef struct tagWLAN_FR_MGMT { unsigned int uType; @@ -518,21 +505,21 @@ typedef struct tagWLAN_FR_MGMT { } WLAN_FR_MGMT, *PWLAN_FR_MGMT; -// Beacon frame +/* beacon frame */ typedef struct tagWLAN_FR_BEACON { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - // fixed fields + /* fixed fields */ u64 *pqwTimestamp; PWORD pwBeaconInterval; PWORD pwCapInfo; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; -// PWLAN_IE_FH_PARMS pFHParms; +/* PWLAN_IE_FH_PARMS pFHParms; */ PWLAN_IE_DS_PARMS pDSParms; PWLAN_IE_CF_PARMS pCFParms; PWLAN_IE_TIM pTIM; @@ -549,8 +536,7 @@ typedef struct tagWLAN_FR_BEACON { } WLAN_FR_BEACON, *PWLAN_FR_BEACON; - -// IBSS ATIM frame +/* IBSS ATIM frame */ typedef struct tagWLAN_FR_IBSSATIM { unsigned int uType; @@ -558,36 +544,36 @@ typedef struct tagWLAN_FR_IBSSATIM { PBYTE pBuf; PUWLAN_80211HDR pHdr; - // fixed fields - // info elements - // this frame type has a null body + /* fixed fields */ + /* info elements */ + /* this frame type has a null body */ } WLAN_FR_IBSSATIM, *PWLAN_FR_IBSSATIM; -// Disassociation +/* disassociation */ typedef struct tagWLAN_FR_DISASSOC { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwReason; - /*-- info elements ----------*/ + /* info elements */ } WLAN_FR_DISASSOC, *PWLAN_FR_DISASSOC; -// Association Request +/* association request */ typedef struct tagWLAN_FR_ASSOCREQ { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwCapInfo; PWORD pwListenInterval; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_RSN pRSN; @@ -601,24 +587,24 @@ typedef struct tagWLAN_FR_ASSOCREQ { } WLAN_FR_ASSOCREQ, *PWLAN_FR_ASSOCREQ; -// Association Response +/* association response */ typedef struct tagWLAN_FR_ASSOCRESP { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwCapInfo; PWORD pwStatus; PWORD pwAid; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_SUPP_RATES pExtSuppRates; } WLAN_FR_ASSOCRESP, *PWLAN_FR_ASSOCRESP; -// Reassociation Request +/* reassociation request */ typedef struct tagWLAN_FR_REASSOCREQ { unsigned int uType; @@ -626,12 +612,12 @@ typedef struct tagWLAN_FR_REASSOCREQ { PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwCapInfo; PWORD pwListenInterval; PIEEE_ADDR pAddrCurrAP; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_RSN pRSN; @@ -643,50 +629,50 @@ typedef struct tagWLAN_FR_REASSOCREQ { } WLAN_FR_REASSOCREQ, *PWLAN_FR_REASSOCREQ; -// Reassociation Response +/* reassociation response */ typedef struct tagWLAN_FR_REASSOCRESP { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwCapInfo; PWORD pwStatus; PWORD pwAid; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_SUPP_RATES pExtSuppRates; } WLAN_FR_REASSOCRESP, *PWLAN_FR_REASSOCRESP; -// Probe Request +/* probe request */ typedef struct tagWLAN_FR_PROBEREQ { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ - /*-- info elements ----------*/ + /* fixed fields */ + /* info elements */ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_SUPP_RATES pExtSuppRates; } WLAN_FR_PROBEREQ, *PWLAN_FR_PROBEREQ; -// Probe Response +/* probe response */ typedef struct tagWLAN_FR_PROBERESP { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ u64 *pqwTimestamp; PWORD pwBeaconInterval; PWORD pwCapInfo; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_SSID pSSID; PWLAN_IE_SUPP_RATES pSuppRates; PWLAN_IE_DS_PARMS pDSParms; @@ -704,37 +690,38 @@ typedef struct tagWLAN_FR_PROBERESP { } WLAN_FR_PROBERESP, *PWLAN_FR_PROBERESP; -// Authentication +/* authentication */ typedef struct tagWLAN_FR_AUTHEN { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwAuthAlgorithm; PWORD pwAuthSequence; PWORD pwStatus; - /*-- info elements ----------*/ + /* info elements */ PWLAN_IE_CHALLENGE pChallenge; } WLAN_FR_AUTHEN, *PWLAN_FR_AUTHEN; -// Deauthentication +/* deauthentication */ typedef struct tagWLAN_FR_DEAUTHEN { unsigned int uType; unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; - /*-- fixed fields -----------*/ + /* fixed fields */ PWORD pwReason; - /*-- info elements ----------*/ + /* info elements */ } WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN; /*--------------------- Export Functions --------------------------*/ + void vMgrEncodeBeacon( PWLAN_FR_BEACON pFrame @@ -845,4 +832,4 @@ vMgrDecodeReassocResponse( PWLAN_FR_REASSOCRESP pFrame ); -#endif// __80211MGR_H__ +#endif /* __80211MGR_H__ */ diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index df5cf0d434c2..fba61605a692 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -42,31 +42,30 @@ #define PREAMBLE_LONG 0 #define PREAMBLE_SHORT 1 -// -// Registers in the BASEBAND -// +/* + * Registers in the BASEBAND + */ #define BB_MAX_CONTEXT_SIZE 256 -#define C_SIFS_A 16 // micro sec. +#define C_SIFS_A 16 /* usec */ #define C_SIFS_BG 10 -#define C_EIFS 80 // micro sec. - +#define C_EIFS 80 /* usec */ -#define C_SLOT_SHORT 9 // micro sec. +#define C_SLOT_SHORT 9 /* usec */ #define C_SLOT_LONG 20 -#define C_CWMIN_A 15 // slot time +#define C_CWMIN_A 15 /* slot time */ #define C_CWMIN_B 31 -#define C_CWMAX 1023 // slot time +#define C_CWMAX 1023 /* slot time */ -//0:11A 1:11B 2:11G +/* 0:11A 1:11B 2:11G */ #define BB_TYPE_11A 0 #define BB_TYPE_11B 1 #define BB_TYPE_11G 2 -//0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate) +/* 0:11a, 1:11b, 2:11gb (only CCK in BasicRate), 3:11ga (OFDM in BasicRate) */ #define PK_TYPE_11A 0 #define PK_TYPE_11B 1 #define PK_TYPE_11GB 2 @@ -108,7 +107,7 @@ void BBvCalculateParameter(struct vnt_private *, u32 cbFrameLength, u16 wRate, u8 byPacketType, u16 *pwPhyLen, u8 *pbyPhySrv, u8 *pbyPhySgn); -// timer for antenna diversity +/* timer for antenna diversity */ void TimerSQ3CallBack(struct vnt_private *); void TimerSQ3Tmax3CallBack(struct vnt_private *); diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index eefe7bbe8a7c..4a234e5980df 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -54,7 +54,8 @@ /*--------------------- Static Variables --------------------------*/ -//static int msglevel =MSG_LEVEL_DEBUG; + +/* static int msglevel = MSG_LEVEL_DEBUG; */ static int msglevel =MSG_LEVEL_INFO; const BYTE acbyIERate[MAX_RATE] = {0x02, 0x04, 0x0B, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C}; @@ -71,7 +72,7 @@ void s_vResetCounter(PKnownNodeDB psNodeDBTable) { BYTE ii; - // clear statistic counter for auto_rate + /* clear statistics counter for auto_rate */ for (ii = 0; ii <= MAX_RATE; ii++) { psNodeDBTable->uTxOk[ii] = 0; psNodeDBTable->uTxFail[ii] = 0; @@ -105,8 +106,8 @@ DATARATEbyGetRateIdx ( { BYTE ii; - //Erase basicRate flag. - byRate = byRate & 0x7F;//0111 1111 + /* erase BasicRate flag */ + byRate = byRate & 0x7F; for (ii = 0; ii < MAX_RATE; ii ++) { if (acbyIERate[ii] == byRate) @@ -159,8 +160,8 @@ RATEwGetRateIdx( { WORD ii; - //Erase basicRate flag. - byRate = byRate & 0x7F;//0111 1111 + /* erase BasicRate flag */ + byRate = byRate & 0x7F; for (ii = 0; ii < MAX_RATE; ii ++) { if (acbyIERate[ii] == byRate) @@ -218,7 +219,10 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, byRate = (BYTE)(pItemRates->abyRates[ii]); if (WLAN_MGMT_IS_BASICRATE(byRate) && (bUpdateBasicRate == TRUE)) { - // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate + /* + * add to basic rate set, update pDevice->byTopCCKBasicRate and + * pDevice->byTopOFDMBasicRate + */ CARDbAddBasicRate((void *)pDevice, RATEwGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate)); } @@ -239,9 +243,12 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, for (ii = 0; ii < uExtRateLen ; ii++) { byRate = (BYTE)(pItemExtRates->abyRates[ii]); - // select highest basic rate + /* select highest basic rate */ if (WLAN_MGMT_IS_BASICRATE(pItemExtRates->abyRates[ii])) { - // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate + /* + * add to basic rate set, update pDevice->byTopCCKBasicRate and + * pDevice->byTopOFDMBasicRate + */ CARDbAddBasicRate((void *)pDevice, RATEwGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate)); } @@ -251,9 +258,11 @@ void RATEvParseMaxRate(struct vnt_private *pDevice, if (byRate > byHighSuppRate) byHighSuppRate = byRate; *pwSuppRate |= (1<<RATEwGetRateIdx(byRate)); - //DBG_PRN_GRP09(("ParseMaxRate : HighSuppRate: %d, %X\n", RATEwGetRateIdx(byRate), byRate)); + + /* DBG_PRN_GRP09(("ParseMaxRate : HighSuppRate: %d, %X\n", + RATEwGetRateIdx(byRate), byRate)); */ } - } //if(pItemExtRates != NULL) + } if ((pDevice->byPacketType == PK_TYPE_11GB) && CARDbIsOFDMinBasicRate((void *)pDevice)) { @@ -363,7 +372,7 @@ void RATEvTxRateFallBack(struct vnt_private *pDevice, (psNodeDBTable->uTxFail[MAX_RATE] * 4) ) { psNodeDBTable->wTxDataRate = wIdxUpRate; } - }else { // adhoc, if uTxOk(total) =0 & uTxFail(total) = 0 + } else { /* adhoc, if uTxOk(total) == 0 & uTxFail(total) == 0 */ if (psNodeDBTable->uTxFail[MAX_RATE] == 0) psNodeDBTable->wTxDataRate = wIdxUpRate; } diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index 1320507ab01d..8dc55bd61669 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -32,16 +32,15 @@ /*--------------------- Export Definitions -------------------------*/ -#define FALLBACK_PKT_COLLECT_TR_H 50 // pkts -#define FALLBACK_PKT_COLLECT_TR_L 10 // pkts -#define FALLBACK_POLL_SECOND 5 // 5 sec -#define FALLBACK_RECOVER_SECOND 30 // 30 sec -#define FALLBACK_THRESHOLD 15 // percent -#define UPGRADE_THRESHOLD 5 // percent -#define UPGRADE_CNT_THRD 3 // times -#define RETRY_TIMES_THRD_H 2 // times -#define RETRY_TIMES_THRD_L 1 // times - +#define FALLBACK_PKT_COLLECT_TR_H 50 /* pkts */ +#define FALLBACK_PKT_COLLECT_TR_L 10 /* pkts */ +#define FALLBACK_POLL_SECOND 5 /* 5 sec */ +#define FALLBACK_RECOVER_SECOND 30 /* 30 sec */ +#define FALLBACK_THRESHOLD 15 /* percent */ +#define UPGRADE_THRESHOLD 5 /* percent */ +#define UPGRADE_CNT_THRD 3 /* times */ +#define RETRY_TIMES_THRD_H 2 /* times */ +#define RETRY_TIMES_THRD_L 1 /* times */ #define RATE_1M 0 #define RATE_2M 1 diff --git a/drivers/staging/vt6656/desc.h b/drivers/staging/vt6656/desc.h index 5007e98d1b0e..0c0b614aaa11 100644 --- a/drivers/staging/vt6656/desc.h +++ b/drivers/staging/vt6656/desc.h @@ -36,92 +36,95 @@ #include "ttype.h" #include "tether.h" -// max transmit or receive buffer size -#define CB_MAX_BUF_SIZE 2900U // max buffer size - // NOTE: must be multiple of 4 +/* max transmit or receive buffer size */ +#define CB_MAX_BUF_SIZE 2900U /* NOTE: must be multiple of 4 */ -#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE // max Tx buffer size -#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE // max Rx buffer size when not use Multi-RD +/* max TX buffer size */ +#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE +/* max RX buffer size when not use Multi-RD */ +#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE -#define CB_BEACON_BUF_SIZE 512U // default beacon buffer size +#define CB_BEACON_BUF_SIZE 512U /* default beacon buffer size */ #define MAX_TOTAL_SIZE_WITH_ALL_HEADERS CB_MAX_BUF_SIZE #define MAX_INTERRUPT_SIZE 32 -#define RX_BLOCKS 64 // form 0x60 to 0xA0 -#define TX_BLOCKS 32 // from 0xA0 to 0xC0 - -#define CB_MAX_RX_DESC 128 // max # of descriptor -#define CB_MIN_RX_DESC 16 // min # of rx descriptor -#define CB_MAX_TX_DESC 128 // max # of descriptor -#define CB_MIN_TX_DESC 16 // min # of tx descriptor - -#define CB_RD_NUM 64 // default # of RD -#define CB_TD_NUM 64 // default # of TD - -// -// Bits in the RSR register -// -#define RSR_ADDRBROAD 0x80 // 1000 0000 -#define RSR_ADDRMULTI 0x40 // 0100 0000 -#define RSR_ADDRUNI 0x00 // 0000 0000 -#define RSR_IVLDTYP 0x20 // 0010 0000 , invalid packet type -#define RSR_IVLDLEN 0x10 // 0001 0000 , invalid len (> 2312 byte) -#define RSR_BSSIDOK 0x08 // 0000 1000 -#define RSR_CRCOK 0x04 // 0000 0100 -#define RSR_BCNSSIDOK 0x02 // 0000 0010 -#define RSR_ADDROK 0x01 // 0000 0001 - -// -// Bits in the new RSR register -// -#define NEWRSR_DECRYPTOK 0x10 // 0001 0000 -#define NEWRSR_CFPIND 0x08 // 0000 1000 -#define NEWRSR_HWUTSF 0x04 // 0000 0100 -#define NEWRSR_BCNHITAID 0x02 // 0000 0010 -#define NEWRSR_BCNHITAID0 0x01 // 0000 0001 - -// -// Bits in the TSR register -// -#define TSR_RETRYTMO 0x08 // 0000 1000 -#define TSR_TMO 0x04 // 0000 0100 -#define TSR_ACKDATA 0x02 // 0000 0010 -#define TSR_VALID 0x01 // 0000 0001 +#define RX_BLOCKS 64 /* from 0x60 to 0xA0 */ +#define TX_BLOCKS 32 /* from 0xA0 to 0xC0 */ + +#define CB_MAX_RX_DESC 128 /* max # of descriptors */ +#define CB_MIN_RX_DESC 16 /* min # of RX descriptors */ +#define CB_MAX_TX_DESC 128 /* max # of descriptors */ +#define CB_MIN_TX_DESC 16 /* min # of TX descriptors */ + +#define CB_RD_NUM 64 /* default # of RD */ +#define CB_TD_NUM 64 /* default # of TD */ + +/* + * bits in the RSR register + */ +#define RSR_ADDRBROAD 0x80 +#define RSR_ADDRMULTI 0x40 +#define RSR_ADDRUNI 0x00 +#define RSR_IVLDTYP 0x20 /* invalid packet type */ +#define RSR_IVLDLEN 0x10 /* invalid len (> 2312 byte) */ +#define RSR_BSSIDOK 0x08 +#define RSR_CRCOK 0x04 +#define RSR_BCNSSIDOK 0x02 +#define RSR_ADDROK 0x01 + +/* + * bits in the new RSR register + */ +#define NEWRSR_DECRYPTOK 0x10 +#define NEWRSR_CFPIND 0x08 +#define NEWRSR_HWUTSF 0x04 +#define NEWRSR_BCNHITAID 0x02 +#define NEWRSR_BCNHITAID0 0x01 + +/* + * bits in the TSR register + */ +#define TSR_RETRYTMO 0x08 +#define TSR_TMO 0x04 +#define TSR_ACKDATA 0x02 +#define TSR_VALID 0x01 #define CB_PROTOCOL_RESERVED_SECTION 16 -// if retrys excess 15 times , tx will abort, and -// if tx fifo underflow, tx will fail -// we should try to resend it +/* + * if retries exceed 15 times, TX will abort, and + * if TX fifo underflow, TX will fail + * we should try to resend it + */ #define CB_MAX_TX_ABORT_RETRY 3 -#define FIFOCTL_AUTO_FB_1 0x1000 // 0001 0000 0000 0000 -#define FIFOCTL_AUTO_FB_0 0x0800 // 0000 1000 0000 0000 -#define FIFOCTL_GRPACK 0x0400 // 0000 0100 0000 0000 -#define FIFOCTL_11GA 0x0300 // 0000 0011 0000 0000 -#define FIFOCTL_11GB 0x0200 // 0000 0010 0000 0000 -#define FIFOCTL_11B 0x0100 // 0000 0001 0000 0000 -#define FIFOCTL_11A 0x0000 // 0000 0000 0000 0000 -#define FIFOCTL_RTS 0x0080 // 0000 0000 1000 0000 -#define FIFOCTL_ISDMA0 0x0040 // 0000 0000 0100 0000 -#define FIFOCTL_GENINT 0x0020 // 0000 0000 0010 0000 -#define FIFOCTL_TMOEN 0x0010 // 0000 0000 0001 0000 -#define FIFOCTL_LRETRY 0x0008 // 0000 0000 0000 1000 -#define FIFOCTL_CRCDIS 0x0004 // 0000 0000 0000 0100 -#define FIFOCTL_NEEDACK 0x0002 // 0000 0000 0000 0010 -#define FIFOCTL_LHEAD 0x0001 // 0000 0000 0000 0001 - -//WMAC definition Frag Control -#define FRAGCTL_AES 0x0300 // 0000 0011 0000 0000 -#define FRAGCTL_TKIP 0x0200 // 0000 0010 0000 0000 -#define FRAGCTL_LEGACY 0x0100 // 0000 0001 0000 0000 -#define FRAGCTL_NONENCRYPT 0x0000 // 0000 0000 0000 0000 -#define FRAGCTL_ENDFRAG 0x0003 // 0000 0000 0000 0011 -#define FRAGCTL_MIDFRAG 0x0002 // 0000 0000 0000 0010 -#define FRAGCTL_STAFRAG 0x0001 // 0000 0000 0000 0001 -#define FRAGCTL_NONFRAG 0x0000 // 0000 0000 0000 0000 +#define FIFOCTL_AUTO_FB_1 0x1000 +#define FIFOCTL_AUTO_FB_0 0x0800 +#define FIFOCTL_GRPACK 0x0400 +#define FIFOCTL_11GA 0x0300 +#define FIFOCTL_11GB 0x0200 +#define FIFOCTL_11B 0x0100 +#define FIFOCTL_11A 0x0000 +#define FIFOCTL_RTS 0x0080 +#define FIFOCTL_ISDMA0 0x0040 +#define FIFOCTL_GENINT 0x0020 +#define FIFOCTL_TMOEN 0x0010 +#define FIFOCTL_LRETRY 0x0008 +#define FIFOCTL_CRCDIS 0x0004 +#define FIFOCTL_NEEDACK 0x0002 +#define FIFOCTL_LHEAD 0x0001 + +/* WMAC definition Frag Control */ +#define FRAGCTL_AES 0x0300 +#define FRAGCTL_TKIP 0x0200 +#define FRAGCTL_LEGACY 0x0100 +#define FRAGCTL_NONENCRYPT 0x0000 +#define FRAGCTL_ENDFRAG 0x0003 +#define FRAGCTL_MIDFRAG 0x0002 +#define FRAGCTL_STAFRAG 0x0001 +#define FRAGCTL_NONFRAG 0x0000 #define TYPE_TXDMA0 0 #define TYPE_AC0DMA 1 @@ -135,14 +138,14 @@ #define TYPE_RXDMA1 1 #define TYPE_MAXRD 2 -// TD_INFO flags control bit -#define TD_FLAGS_NETIF_SKB 0x01 // check if need release skb -#define TD_FLAGS_PRIV_SKB 0x02 // check if called from private skb(hostap) -#define TD_FLAGS_PS_RETRY 0x04 // check if PS STA frame re-transmit +/* TD_INFO flags control bit */ +#define TD_FLAGS_NETIF_SKB 0x01 /* check if need release skb */ +#define TD_FLAGS_PRIV_SKB 0x02 /* check if called from private skb(hostap) */ +#define TD_FLAGS_PS_RETRY 0x04 /* check if PS STA frame re-transmit */ -// -// RsvTime buffer header -// +/* + * RsvTime buffer header + */ typedef struct tagSRrvTime_gRTS { WORD wRTSTxRrvTime_ba; WORD wRTSTxRrvTime_aa; @@ -181,9 +184,9 @@ SRrvTime_atim, *PSRrvTime_atim; typedef const SRrvTime_atim *PCSRrvTime_atim; -// -// RTS buffer header -// +/* + * RTS buffer header + */ typedef struct tagSRTSData { WORD wFrameControl; WORD wDurationID; @@ -257,9 +260,9 @@ SRTS_a_FB, *PSRTS_a_FB; typedef const SRTS_a_FB *PCSRTS_a_FB; -// -// CTS buffer header -// +/* + * CTS buffer header + */ typedef struct tagSCTSData { WORD wFrameControl; WORD wDurationID; @@ -294,9 +297,9 @@ SCTS_FB, *PSCTS_FB; typedef const SCTS_FB *PCSCTS_FB; -// -// Tx FIFO header -// +/* + * TX FIFO header + */ typedef struct tagSTxBufHead { u32 adwTxKey[4]; WORD wFIFOCtl; @@ -314,9 +317,9 @@ typedef struct tagSTxShortBufHead { STxShortBufHead, *PSTxShortBufHead; typedef const STxShortBufHead *PCSTxShortBufHead; -// -// Tx data header -// +/* + * TX data header + */ typedef struct tagSTxDataHead_g { BYTE bySignalField_b; BYTE byServiceField_b; @@ -372,9 +375,9 @@ typedef struct tagSTxDataHead_a_FB { STxDataHead_a_FB, *PSTxDataHead_a_FB; typedef const STxDataHead_a_FB *PCSTxDataHead_a_FB; -// -// MICHDR data header -// +/* + * MICHDR data header + */ typedef struct tagSMICHDRHead { u32 adwHDR0[4]; u32 adwHDR1[4]; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index e153bebfd18d..82af871110ec 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -53,7 +53,7 @@ #undef DEVICE_ETHTOOL_IOCTL_SUPPORT #endif -//please copy below macro to driver_event.c for API +/* please copy below macro to driver_event.c for API */ #define RT_INSMOD_EVENT_FLAG 0x0101 #define RT_UPDEV_EVENT_FLAG 0x0102 #define RT_DISCONNECTED_EVENT_FLAG 0x0103 @@ -61,9 +61,9 @@ #define RT_DOWNDEV_EVENT_FLAG 0x0105 #define RT_RMMOD_EVENT_FLAG 0x0106 -// -// device specific -// +/* + * device specific + */ #include "device_cfg.h" #include "ttype.h" @@ -110,7 +110,7 @@ #define FB_RATE0 0 #define FB_RATE1 1 -// Antenna Mode +/* Antenna Mode */ #define ANT_A 0 #define ANT_B 1 #define ANT_DIVERSITY 2 @@ -125,7 +125,7 @@ #define MAXCHECKHANGCNT 4 -//Packet type +/* Packet type */ #define TX_PKT_UNI 0x00 #define TX_PKT_MULTI 0x01 #define TX_PKT_BROAD 0x02 @@ -137,7 +137,7 @@ #define RUN_AT(x) (jiffies+(x)) #endif -// DMA related +/* DMA related */ #define RESERV_AC0DMA 4 #define PRIVATE_Message 0 @@ -161,17 +161,17 @@ typedef enum __device_init_type { DEVICE_INIT_DXPL /* Dx to D0 power lost init */ } DEVICE_INIT_TYPE, *PDEVICE_INIT_TYPE; -//USB +/* USB */ -// -// Enum of context types for SendPacket -// +/* + * Enum of context types for SendPacket + */ typedef enum _CONTEXT_TYPE { CONTEXT_DATA_PACKET = 1, CONTEXT_MGMT_PACKET } CONTEXT_TYPE; -// RCB (Receive Control Block) +/* RCB (Receive Control Block) */ typedef struct _RCB { void *Next; @@ -184,7 +184,7 @@ typedef struct _RCB } RCB, *PRCB; -// used to track bulk out irps +/* used to track bulk out irps */ typedef struct _USB_SEND_CONTEXT { void *pDevice; struct sk_buff *pPacket; @@ -207,17 +207,17 @@ typedef struct _DEFAULT_CONFIG { signed int eEncryptionStatus; } DEFAULT_CONFIG, *PDEFAULT_CONFIG; -// -// Structure to keep track of usb interrupt packets -// +/* + * Structure to keep track of USB interrupt packets + */ typedef struct { unsigned int uDataLen; PBYTE pDataBuf; -// struct urb *pUrb; + /* struct urb *pUrb; */ BOOL bInUse; } INT_BUFFER, *PINT_BUFFER; -//0:11A 1:11B 2:11G +/* 0:11A 1:11B 2:11G */ typedef enum _VIA_BB_TYPE { BB_TYPE_11A = 0, @@ -225,7 +225,7 @@ typedef enum _VIA_BB_TYPE BB_TYPE_11G } VIA_BB_TYPE, *PVIA_BB_TYPE; -//0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate) +/* 0:11a, 1:11b, 2:11gb (only CCK in BasicRate), 3:11ga(OFDM in BasicRate) */ typedef enum _VIA_PKT_TYPE { PK_TYPE_11A = 0, @@ -234,7 +234,7 @@ typedef enum _VIA_PKT_TYPE PK_TYPE_11GA } VIA_PKT_TYPE, *PVIA_PKT_TYPE; -//++ NDIS related +/*++ NDIS related */ typedef enum __DEVICE_NDIS_STATUS { STATUS_SUCCESS = 0, @@ -245,10 +245,10 @@ typedef enum __DEVICE_NDIS_STATUS { #define MAX_BSSIDINFO_4_PMKID 16 #define MAX_PMKIDLIST 5 -//Flags for PMKID Candidate list structure +/* flags for PMKID Candidate list structure */ #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 -// PMKID Structures +/* PMKID Structures */ typedef unsigned char NDIS_802_11_PMKID_VALUE[16]; @@ -272,13 +272,13 @@ typedef enum _NDIS_802_11_WEP_STATUS typedef enum _NDIS_802_11_STATUS_TYPE { - Ndis802_11StatusType_Authentication, - Ndis802_11StatusType_MediaStreamMode, - Ndis802_11StatusType_PMKID_CandidateList, - Ndis802_11StatusTypeMax // not a real type, defined as an upper bound + Ndis802_11StatusType_Authentication, + Ndis802_11StatusType_MediaStreamMode, + Ndis802_11StatusType_PMKID_CandidateList, + Ndis802_11StatusTypeMax, /* not a real type, defined as upper bound */ } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE; -//Added new types for PMKID Candidate lists. +/* added new types for PMKID Candidate lists */ typedef struct _PMKID_CANDIDATE { NDIS_802_11_MAC_ADDRESS BSSID; unsigned long Flags; @@ -304,9 +304,7 @@ typedef struct tagSPMKIDCandidateEvent { PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST]; } SPMKIDCandidateEvent, *PSPMKIDCandidateEvent; -//-- - -//++ 802.11h related +/*++ 802.11h related */ #define MAX_QUIET_COUNT 8 typedef struct tagSQuietControl { @@ -316,10 +314,7 @@ typedef struct tagSQuietControl { WORD wDuration; } SQuietControl, *PSQuietControl; -//-- - - -// The receive duplicate detection cache entry +/* The receive duplicate detection cache entry */ typedef struct tagSCacheEntry{ WORD wFmSequence; BYTE abyAddr2[ETH_ALEN]; @@ -329,13 +324,15 @@ typedef struct tagSCacheEntry{ typedef struct tagSCache{ /* The receive cache is updated circularly. The next entry to be written is * indexed by the "InPtr". -*/ + */ unsigned int uInPtr; /* Place to use next */ SCacheEntry asCacheEntry[DUPLICATE_RX_CACHE_LENGTH]; } SCache, *PSCache; #define CB_MAX_RX_FRAG 64 -// DeFragment Control Block, used for collecting fragments prior to reassembly +/* + * DeFragment Control Block, used for collecting fragments prior to reassembly + */ typedef struct tagSDeFragControlBlock { WORD wSequence; @@ -348,24 +345,22 @@ typedef struct tagSDeFragControlBlock BOOL bInUse; } SDeFragControlBlock, *PSDeFragControlBlock; - - -//flags for options +/* flags for options */ #define DEVICE_FLAGS_UNPLUG 0x00000001UL #define DEVICE_FLAGS_PREAMBLE_TYPE 0x00000002UL #define DEVICE_FLAGS_OP_MODE 0x00000004UL #define DEVICE_FLAGS_PS_MODE 0x00000008UL #define DEVICE_FLAGS_80211h_MODE 0x00000010UL -//flags for driver status +/* flags for driver status */ #define DEVICE_FLAGS_OPENED 0x00010000UL #define DEVICE_FLAGS_WOL_ENABLED 0x00080000UL -//flags for capbilities +/* flags for capabilities */ #define DEVICE_FLAGS_TX_ALIGN 0x01000000UL #define DEVICE_FLAGS_HAVE_CAM 0x02000000UL #define DEVICE_FLAGS_FLOW_CTRL 0x04000000UL -//flags for MII status +/* flags for MII status */ #define DEVICE_LINK_FAIL 0x00000001UL #define DEVICE_SPEED_10 0x00000002UL #define DEVICE_SPEED_100 0x00000004UL @@ -373,14 +368,14 @@ typedef struct tagSDeFragControlBlock #define DEVICE_DUPLEX_FULL 0x00000010UL #define DEVICE_AUTONEG_ENABLE 0x00000020UL #define DEVICE_FORCED_BY_EEPROM 0x00000040UL -//for device_set_media_duplex +/* for device_set_media_duplex */ #define DEVICE_LINK_CHANGE 0x00000001UL typedef struct __device_opt { - int nRxDescs0; //Number of RX descriptors0 - int nTxDescs0; //Number of TX descriptors 0, 1, 2, 3 - int rts_thresh; //rts threshold + int nRxDescs0; /* number of RX descriptors 0 */ + int nTxDescs0; /* number of TX descriptors 0, 1, 2, 3 */ + int rts_thresh; /* RTS threshold */ int frag_thresh; int OpMode; int data_rate; diff --git a/drivers/staging/vt6656/device_cfg.h b/drivers/staging/vt6656/device_cfg.h index a0b82169dad3..98600d697eeb 100644 --- a/drivers/staging/vt6656/device_cfg.h +++ b/drivers/staging/vt6656/device_cfg.h @@ -67,14 +67,14 @@ struct _version { #define DEVICE_VERSION "1.19_12" #endif -//config file +/* config file */ #include <linux/fs.h> #include <linux/fcntl.h> #ifndef CONFIG_PATH #define CONFIG_PATH "/etc/vntconfiguration.dat" #endif -//Max: 2378=2312Payload + 30HD +4CRC + 2Padding + 4Len + 8TSF + 4RSR +/* Max: 2378 = 2312 Payload + 30HD + 4CRC + 2Padding + 4Len + 8TSF + 4RSR */ #define PKT_BUF_SZ 2390 #define MAX_UINTS 8 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 99ac7eb6cdfe..d258cb2da18b 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -73,15 +73,16 @@ #include "iowpa.h" /*--------------------- Static Definitions -------------------------*/ -//static int msglevel =MSG_LEVEL_DEBUG; +/* static int msglevel = MSG_LEVEL_DEBUG; */ static int msglevel =MSG_LEVEL_INFO; -// -// Define module options -// +/* + * define module options + */ -// Version Information -#define DRIVER_AUTHOR "VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>" +/* version information */ +#define DRIVER_AUTHOR \ + "VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>" MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION(DEVICE_FULL_DRV_NAM); @@ -184,16 +185,16 @@ DEVICE_PARAM(BasebandType, "baseband type"); DEVICE_PARAM(b80211hEnable, "802.11h mode"); -// -// Static vars definitions -// +/* + * Static vars definitions + */ static struct usb_device_id vt6656_table[] = { {USB_DEVICE(VNT_USB_VENDOR_ID, VNT_USB_PRODUCT_ID)}, {} }; -// Frequency list (map channels to frequencies) +/* frequency list (map channels to frequencies) */ /* static const long frequency_list[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484, @@ -288,7 +289,7 @@ device_set_options(struct vnt_private *pDevice) { pDevice->wCTSDuration = 0; pDevice->byPreambleType = 0; pDevice->bExistSWNetAddr = FALSE; -// pDevice->bDiversityRegCtlON = TRUE; + /* pDevice->bDiversityRegCtlON = TRUE; */ pDevice->bDiversityRegCtlON = FALSE; } @@ -314,9 +315,9 @@ static void device_init_diversity_timer(struct vnt_private *pDevice) } -// -// Initialization of MAC & BBP registers -// +/* + * initialization of MAC & BBP registers + */ static int device_init_registers(struct vnt_private *pDevice, DEVICE_INIT_TYPE InitType) @@ -372,7 +373,7 @@ static int device_init_registers(struct vnt_private *pDevice, sInitCmd.byShortRetryLimit = pDevice->byShortRetryLimit; sInitCmd.byLongRetryLimit = pDevice->byLongRetryLimit; - //issue Card_init command to device + /* issue card_init command to device */ ntStatus = CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_CARDINIT, 0, @@ -395,7 +396,7 @@ static int device_init_registers(struct vnt_private *pDevice, return FALSE; } - //Local ID for AES functions + /* local ID for AES functions */ ntStatus = CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, MAC_REG_LOCALID, @@ -408,10 +409,12 @@ static int device_init_registers(struct vnt_private *pDevice, return FALSE; } - // Do MACbSoftwareReset in MACvInitialize - // force CCK + /* do MACbSoftwareReset in MACvInitialize */ + + /* force CCK */ pDevice->bCCK = TRUE; - pDevice->bProtectMode = FALSE; //Only used in 11g type, sync with ERP IE + pDevice->bProtectMode = FALSE; + /* only used in 11g type, sync with ERP IE */ pDevice->bNonERPPresent = FALSE; pDevice->bBarkerPreambleMd = FALSE; if ( pDevice->bFixRate ) { @@ -427,13 +430,14 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->byTopOFDMBasicRate = RATE_24M; pDevice->byTopCCKBasicRate = RATE_1M; - pDevice->byRevId = 0; //Target to IF pin while programming to RF chip. + pDevice->byRevId = 0; + /* target to IF pin while programming to RF chip */ pDevice->byCurPwr = 0xFF; pDevice->byCCKPwr = pDevice->abyEEPROM[EEP_OFS_PWR_CCK]; pDevice->byOFDMPwrG = pDevice->abyEEPROM[EEP_OFS_PWR_OFDMG]; - // Load power Table - for (ii=0;ii<14;ii++) { + /* load power table */ + for (ii = 0; ii < 14; ii++) { pDevice->abyCCKPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_CCK_PWR_TBL]; if (pDevice->abyCCKPwrTbl[ii] == 0) pDevice->abyCCKPwrTbl[ii] = pDevice->byCCKPwr; @@ -442,8 +446,10 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->abyOFDMPwrTbl[ii] = pDevice->byOFDMPwrG; } - //original zonetype is USA,but customize zonetype is europe, - // then need recover 12,13 ,14 channel with 11 channel + /* + * original zonetype is USA, but custom zonetype is Europe, + * then need to recover 12, 13, 14 channels with 11 channel + */ if(((pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Japan) || (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] == ZoneType_Europe))&& (pDevice->byOriginalZonetype == ZoneType_USA)) { @@ -453,15 +459,14 @@ static int device_init_registers(struct vnt_private *pDevice, } } - //{{ RobertYu: 20041124 - pDevice->byOFDMPwrA = 0x34; // same as RFbMA2829SelectChannel - // Load OFDM A Power Table - for (ii=0;ii<CB_MAX_CHANNEL_5G;ii++) { //RobertYu:20041224, bug using CB_MAX_CHANNEL + pDevice->byOFDMPwrA = 0x34; /* same as RFbMA2829SelectChannel */ + + /* load OFDM A power table */ + for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) { pDevice->abyOFDMAPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_OFDMA_PWR_TBL]; if (pDevice->abyOFDMAPwrTbl[ii] == 0) pDevice->abyOFDMAPwrTbl[ii] = pDevice->byOFDMPwrA; } - //}} RobertYu byAntenna = pDevice->abyEEPROM[EEP_OFS_ANTENNA]; if (byAntenna & EEP_ANTINV) @@ -471,7 +476,7 @@ static int device_init_registers(struct vnt_private *pDevice, byAntenna &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); - if (byAntenna == 0) // if not set default is All + if (byAntenna == 0) /* if not set default is both */ byAntenna = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN); if (byAntenna == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) { @@ -513,35 +518,34 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->byTMax2 = 4; pDevice->ulSQ3TH = 0; pDevice->byTMax3 = 64; - // ----------------------------------------------------------------- - //Get Auto Fall Back Type + /* get Auto Fall Back type */ pDevice->byAutoFBCtrl = AUTO_FB_0; - // Set SCAN Time + /* set SCAN Time */ pDevice->uScanTime = WLAN_SCAN_MINITIME; - // default Auto Mode - //pDevice->NetworkType = Ndis802_11Automode; + /* default Auto Mode */ + /* pDevice->NetworkType = Ndis802_11Automode; */ pDevice->eConfigPHYMode = PHY_TYPE_AUTO; pDevice->byBBType = BB_TYPE_11G; - // initialize BBP registers + /* initialize BBP registers */ pDevice->ulTxPower = 25; - // Get Channel range + /* get channel range */ pDevice->byMinChannel = 1; pDevice->byMaxChannel = CB_MAX_CHANNEL; - // Get RFType + /* get RFType */ pDevice->byRFType = sInitRsp.byRFType; if ((pDevice->byRFType & RF_EMU) != 0) { - // force change RevID for VT3253 emu - pDevice->byRevId = 0x80; + /* force change RevID for VT3253 emu */ + pDevice->byRevId = 0x80; } - // Load EEPROM calibrated vt3266 parameters + /* load vt3266 calibration parameters in EEPROM */ if (pDevice->byRFType == RF_VT3226D0) { if((pDevice->abyEEPROM[EEP_OFS_MAJOR_VER] == 0x1) && (pDevice->abyEEPROM[EEP_OFS_MINOR_VER] >= 0x4)) { @@ -549,13 +553,32 @@ static int device_init_registers(struct vnt_private *pDevice, byCalibTXDC = pDevice->abyEEPROM[EEP_OFS_CALIB_TX_DC]; byCalibRXIQ = pDevice->abyEEPROM[EEP_OFS_CALIB_RX_IQ]; if( (byCalibTXIQ || byCalibTXDC || byCalibRXIQ) ) { - ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x03); // CR255, Set BB to support TX/RX IQ and DC compensation Mode - ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFB, byCalibTXIQ); // CR251, TX I/Q Imbalance Calibration - ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFC, byCalibTXDC); // CR252, TX DC-Offset Calibration - ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFD, byCalibRXIQ); // CR253, RX I/Q Imbalance Calibration + /* CR255, enable TX/RX IQ and DC compensation mode */ + ControlvWriteByte(pDevice, + MESSAGE_REQUEST_BBREG, + 0xFF, + 0x03); + /* CR251, TX I/Q Imbalance Calibration */ + ControlvWriteByte(pDevice, + MESSAGE_REQUEST_BBREG, + 0xFB, + byCalibTXIQ); + /* CR252, TX DC-Offset Calibration */ + ControlvWriteByte(pDevice, + MESSAGE_REQUEST_BBREG, + 0xFC, + byCalibTXDC); + /* CR253, RX I/Q Imbalance Calibration */ + ControlvWriteByte(pDevice, + MESSAGE_REQUEST_BBREG, + 0xFD, + byCalibRXIQ); } else { - // turn off BB Calibration compensation - ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xFF, 0x0); // CR255 + /* CR255, turn off BB Calibration compensation */ + ControlvWriteByte(pDevice, + MESSAGE_REQUEST_BBREG, + 0xFF, + 0x0); } } } @@ -564,20 +587,21 @@ static int device_init_registers(struct vnt_private *pDevice, pMgmt->uIBSSChannel = pDevice->uChannel; CARDbSetMediaChannel(pDevice, pMgmt->uCurrChannel); - // get Permanent network address + /* get permanent network address */ memcpy(pDevice->abyPermanentNetAddr,&(sInitRsp.byNetAddr[0]),6); memcpy(pDevice->abyCurrentNetAddr, pDevice->abyPermanentNetAddr, ETH_ALEN); - // if exist SW network address, use SW network address. - + /* if exist SW network address, use it */ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Network address = %pM\n", pDevice->abyCurrentNetAddr); } - // Set BB and packet type at the same time. - // Set Short Slot Time, xIFS, and RSPINF. + /* + * set BB and packet type at the same time + * set Short Slot Time, xIFS, and RSPINF + */ if (pDevice->byBBType == BB_TYPE_11A) { CARDbAddBasicRate(pDevice, RATE_6M); pDevice->bShortSlotTime = TRUE; @@ -616,7 +640,7 @@ static int device_init_registers(struct vnt_private *pDevice, pDevice->bHWRadioOff = FALSE; } - } //EEP_RADIOCTL_ENABLE + } ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_TMLEN,0x38); ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW); @@ -741,7 +765,7 @@ static void device_free_tx_bufs(struct vnt_private *pDevice) for (ii = 0; ii < pDevice->cbTD; ii++) { pTxContext = pDevice->apTD[ii]; - //de-allocate URBs + /* deallocate URBs */ if (pTxContext->pUrb) { usb_kill_urb(pTxContext->pUrb); usb_free_urb(pTxContext->pUrb); @@ -760,12 +784,12 @@ static void device_free_rx_bufs(struct vnt_private *pDevice) for (ii = 0; ii < pDevice->cbRD; ii++) { pRCB = pDevice->apRCB[ii]; - //de-allocate URBs + /* deallocate URBs */ if (pRCB->pUrb) { usb_kill_urb(pRCB->pUrb); usb_free_urb(pRCB->pUrb); } - //de-allocate skb + /* deallocate skb */ if (pRCB->skb) dev_kfree_skb(pRCB->skb); } @@ -807,7 +831,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) } pDevice->apTD[ii] = pTxContext; pTxContext->pDevice = (void *) pDevice; - //allocate URBs + /* allocate URBs */ pTxContext->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pTxContext->pUrb == NULL) { DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "alloc tx urb failed\n"); @@ -816,7 +840,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) pTxContext->bBoolInUse = FALSE; } - // allocate rcb mem + /* allocate RCB mem */ pDevice->pRCBMem = kzalloc((sizeof(RCB) * pDevice->cbRD), GFP_KERNEL); if (pDevice->pRCBMem == NULL) { DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s : alloc rx usb context failed\n", pDevice->dev->name); @@ -835,7 +859,7 @@ static BOOL device_alloc_bufs(struct vnt_private *pDevice) pDevice->apRCB[ii] = pRCB; pRCB->pDevice = (void *) pDevice; - //allocate URBs + /* allocate URBs */ pRCB->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pRCB->pUrb == NULL) { @@ -974,7 +998,7 @@ static int device_open(struct net_device *dev) MP_SET_FLAG(pDevice, fMP_POST_READS); MP_SET_FLAG(pDevice, fMP_POST_WRITES); - //read config file + /* read config file */ Read_config_file(pDevice); if (device_init_registers(pDevice, DEVICE_INIT_COLD) == FALSE) { @@ -983,8 +1007,8 @@ static int device_open(struct net_device *dev) } device_set_multi(pDevice->dev); - // Init for Key Management + /* init for key management */ KeyvInitTable(pDevice,&pDevice->sKey); memcpy(pDevice->vnt_mgmt.abyMACAddr, pDevice->abyCurrentNetAddr, ETH_ALEN); @@ -1003,7 +1027,7 @@ static int device_open(struct net_device *dev) tasklet_init(&pDevice->ReadWorkItem, (void *)RXvWorkItem, (unsigned long)pDevice); tasklet_init(&pDevice->EventWorkItem, (void *)INTvWorkItem, (unsigned long)pDevice); add_timer(&pDevice->vnt_mgmt.sTimerSecondCallback); - pDevice->int_interval = 100; //Max 100 microframes. + pDevice->int_interval = 100; /* max 100 microframes */ pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; pDevice->bIsRxWorkItemQueued = TRUE; @@ -1021,7 +1045,7 @@ static int device_open(struct net_device *dev) RXvWorkItem(pDevice); INTvWorkItem(pDevice); - // Patch: if WEP key already set by iwconfig but device not yet open + /* if WEP key already set by iwconfig but device not yet open */ if ((pDevice->bEncryptionEnable == TRUE) && (pDevice->bTransmitKey == TRUE)) { spin_lock_irq(&pDevice->lock); KeybSetDefaultKey( pDevice, @@ -1221,7 +1245,7 @@ static inline u32 ether_crc(int length, unsigned char *data) return crc; } -//find out the start position of str2 from str1 +/* find out the start position of str2 from str1 */ static unsigned char *kstrstr(const unsigned char *str1, const unsigned char *str2) { int str1_len = strlen(str1); @@ -1250,12 +1274,12 @@ static int Config_FileGetParameter(unsigned char *string, strcat(buf1, "="); source+=strlen(buf1); -//find target string start point + /* find target string start point */ start_p = kstrstr(source,buf1); if (start_p == NULL) return FALSE; -//check if current config line is marked by "#" ?? + /* check if current config line is marked by "#" */ for (ii = 1; ; ii++) { if (memcmp(start_p - ii, "\n", 1) == 0) break; @@ -1263,24 +1287,24 @@ static int Config_FileGetParameter(unsigned char *string, return FALSE; } -//find target string end point + /* find target string end point */ end_p = kstrstr(start_p,"\n"); - if (end_p == NULL) { //can't find "\n",but don't care - end_p=start_p+strlen(start_p); //no include "\n" - } + if (end_p == NULL) { /* can't find "\n", but don't care */ + end_p = start_p + strlen(start_p); /* no include "\n" */ + } memset(buf2,0,100); - memcpy(buf2,start_p,end_p-start_p); //get the target line + memcpy(buf2, start_p, end_p-start_p); /* get the target line */ buf2[end_p-start_p]='\0'; - //find value + /* find value */ start_p = kstrstr(buf2,"="); if (start_p == NULL) return FALSE; memset(buf1,0,100); strcpy(buf1,start_p+1); - //except space + /* except space */ tmp_p = buf1; while(*tmp_p != 0x00) { if(*tmp_p==' ') @@ -1293,26 +1317,19 @@ static int Config_FileGetParameter(unsigned char *string, return TRUE; } -//if read fail,return NULL,or return data pointer; +/* if read fails, return NULL, or return data pointer */ static unsigned char *Config_FileOperation(struct vnt_private *pDevice) { unsigned char *config_path = CONFIG_PATH; unsigned char *buffer = NULL; struct file *filp=NULL; mm_segment_t old_fs = get_fs(); - //int oldfsuid=0,oldfsgid=0; + int result = 0; set_fs (KERNEL_DS); - /* Can't do this anymore, so we rely on correct filesystem permissions: - //Make sure a caller can read or write power as root - oldfsuid=current->fsuid; - oldfsgid=current->fsgid; - current->fsuid = 0; - current->fsgid = 0; - */ - - //open file + + /* open file */ filp = filp_open(config_path, O_RDWR, 0); if (IS_ERR(filp)) { printk("Config_FileOperation file Not exist\n"); @@ -1345,11 +1362,6 @@ error1: error2: set_fs (old_fs); - /* - current->fsuid=oldfsuid; - current->fsgid=oldfsgid; - */ - if(result!=0) { kfree(buffer); buffer=NULL; @@ -1357,14 +1369,14 @@ if(result!=0) { return buffer; } -//return --->-1:fail; >=0:successful +/* return --->-1:fail; >=0:successful */ static int Read_config_file(struct vnt_private *pDevice) { int result = 0; unsigned char tmpbuffer[100]; unsigned char *buffer = NULL; - //init config setting + /* init config setting */ pDevice->config_file.ZoneType = -1; pDevice->config_file.eAuthenMode = -1; pDevice->config_file.eEncryptionStatus = -1; @@ -1375,7 +1387,7 @@ static int Read_config_file(struct vnt_private *pDevice) return result; } -//get zonetype +/* get zonetype */ { memset(tmpbuffer,0,sizeof(tmpbuffer)); if(Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer) ==TRUE) { @@ -1394,7 +1406,7 @@ static int Read_config_file(struct vnt_private *pDevice) } } -//get other parameter +/* get other parameter */ { memset(tmpbuffer,0,sizeof(tmpbuffer)); if(Config_FileGetParameter("AUTHENMODE",tmpbuffer,buffer)==TRUE) { @@ -1435,9 +1447,9 @@ static void device_set_multi(struct net_device *dev) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRxMode in= %x\n", pDevice->byRxMode); - if (dev->flags & IFF_PROMISC) { // Set promiscuous. + if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ DBG_PRT(MSG_LEVEL_ERR,KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); - // Unconditionally log net taps. + /* unconditionally log net taps */ pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST); } else if ((netdev_mc_count(dev) > pDevice->multicast_limit) || @@ -1466,7 +1478,10 @@ static void device_set_multi(struct net_device *dev) } if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - // If AP mode, don't enable RCR_UNICAST. Since hw only compare addr1 with local mac. + /* + * If AP mode, don't enable RCR_UNICAST since HW only compares + * addr1 with local MAC + */ pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); pDevice->byRxMode &= ~(RCR_UNICAST); } @@ -1530,9 +1545,6 @@ static int ethtool_ioctl(struct net_device *dev, void *useraddr) return -EOPNOTSUPP; } - -/*------------------------------------------------------------------*/ - MODULE_DEVICE_TABLE(usb, vt6656_table); static struct usb_driver vt6656_driver = { diff --git a/drivers/staging/wlan-ng/hfa384x.h b/drivers/staging/wlan-ng/hfa384x.h index 5631ad0a7237..04c04336ee75 100644 --- a/drivers/staging/wlan-ng/hfa384x.h +++ b/drivers/staging/wlan-ng/hfa384x.h @@ -81,8 +81,8 @@ #define HFA384x_WEPFLAGS_EXCLUDE ((u16)BIT(1)) #define HFA384x_WEPFLAGS_DISABLE_TXCRYPT ((u16)BIT(4)) #define HFA384x_WEPFLAGS_DISABLE_RXCRYPT ((u16)BIT(7)) -#define HFA384x_ROAMMODE_HOSTSCAN_HOSTROAM ((u16)3) -#define HFA384x_PORTSTATUS_DISABLED ((u16)1) +#define HFA384x_ROAMMODE_HOSTSCAN_HOSTROAM ((u16)3) +#define HFA384x_PORTSTATUS_DISABLED ((u16)1) #define HFA384x_RATEBIT_1 ((u16)1) #define HFA384x_RATEBIT_2 ((u16)2) #define HFA384x_RATEBIT_5dot5 ((u16)4) @@ -164,7 +164,7 @@ #define HFA384x_CMDCODE_DOWNLD ((u16)0x22) /*--- Debugging Commands -----------------------------*/ -#define HFA384x_CMDCODE_MONITOR ((u16)(0x38)) +#define HFA384x_CMDCODE_MONITOR ((u16)(0x38)) #define HFA384x_MONITOR_ENABLE ((u16)(0x0b)) #define HFA384x_MONITOR_DISABLE ((u16)(0x0f)) @@ -275,15 +275,15 @@ API ENHANCEMENTS (NOT ALREADY IMPLEMENTED) #define HFA384x_RID_CNFAUTHENTICATION ((u16)0xFC2A) #define HFA384x_RID_CNFROAMINGMODE ((u16)0xFC2D) #define HFA384x_RID_CNFAPBCNint ((u16)0xFC33) -#define HFA384x_RID_CNFDBMADJUST ((u16)0xFC46) -#define HFA384x_RID_CNFWPADATA ((u16)0xFC48) +#define HFA384x_RID_CNFDBMADJUST ((u16)0xFC46) +#define HFA384x_RID_CNFWPADATA ((u16)0xFC48) #define HFA384x_RID_CNFBASICRATES ((u16)0xFCB3) #define HFA384x_RID_CNFSUPPRATES ((u16)0xFCB4) #define HFA384x_RID_CNFPASSIVESCANCTRL ((u16)0xFCBA) -#define HFA384x_RID_TXPOWERMAX ((u16)0xFCBE) +#define HFA384x_RID_TXPOWERMAX ((u16)0xFCBE) #define HFA384x_RID_JOINREQUEST ((u16)0xFCE2) #define HFA384x_RID_AUTHENTICATESTA ((u16)0xFCE3) -#define HFA384x_RID_HOSTSCAN ((u16)0xFCE5) +#define HFA384x_RID_HOSTSCAN ((u16)0xFCE5) #define HFA384x_RID_CNFWEPDEFAULTKEY_LEN ((u16)6) #define HFA384x_RID_CNFWEP128DEFAULTKEY_LEN ((u16)14) @@ -311,7 +311,7 @@ PD Record codes #define HFA384x_PDR_HFA3861_IFRF ((u16)0x0204) #define HFA384x_PDR_HFA3861_CHCALSP ((u16)0x0300) #define HFA384x_PDR_HFA3861_CHCALI ((u16)0x0301) -#define HFA384x_PDR_MAX_TX_POWER ((u16)0x0302) +#define HFA384x_PDR_MAX_TX_POWER ((u16)0x0302) #define HFA384x_PDR_MASTER_CHAN_LIST ((u16)0x0303) #define HFA384x_PDR_3842_NIC_CONFIG ((u16)0x0400) #define HFA384x_PDR_USB_ID ((u16)0x0401) @@ -322,10 +322,10 @@ PD Record codes #define HFA384x_PDR_USB_POWER_TYPE ((u16)0x0407) #define HFA384x_PDR_USB_MAX_POWER ((u16)0x0409) #define HFA384x_PDR_USB_MANUFACTURER ((u16)0x0410) -#define HFA384x_PDR_USB_PRODUCT ((u16)0x0411) -#define HFA384x_PDR_ANT_DIVERSITY ((u16)0x0412) -#define HFA384x_PDR_HFO_DELAY ((u16)0x0413) -#define HFA384x_PDR_SCALE_THRESH ((u16)0x0414) +#define HFA384x_PDR_USB_PRODUCT ((u16)0x0411) +#define HFA384x_PDR_ANT_DIVERSITY ((u16)0x0412) +#define HFA384x_PDR_HFO_DELAY ((u16)0x0413) +#define HFA384x_PDR_SCALE_THRESH ((u16)0x0414) #define HFA384x_PDR_HFA3861_MANF_TESTSP ((u16)0x0900) #define HFA384x_PDR_HFA3861_MANF_TESTI ((u16)0x0901) @@ -383,7 +383,7 @@ typedef struct hfa384x_caplevel { /*-- Configuration Record: cnfAuthentication --*/ #define HFA384x_CNFAUTHENTICATION_OPENSYSTEM 0x0001 #define HFA384x_CNFAUTHENTICATION_SHAREDKEY 0x0002 -#define HFA384x_CNFAUTHENTICATION_LEAP 0x0004 +#define HFA384x_CNFAUTHENTICATION_LEAP 0x0004 /*-------------------------------------------------------------------- Configuration Record Structures: @@ -575,8 +575,8 @@ Information Types #define HFA384x_IT_AUTHREQ ((u16)0xF202UL) #define HFA384x_IT_PSUSERCNT ((u16)0xF203UL) #define HFA384x_IT_KEYIDCHANGED ((u16)0xF204UL) -#define HFA384x_IT_ASSOCREQ ((u16)0xF205UL) -#define HFA384x_IT_MICFAILURE ((u16)0xF206UL) +#define HFA384x_IT_ASSOCREQ ((u16)0xF205UL) +#define HFA384x_IT_MICFAILURE ((u16)0xF206UL) /*-------------------------------------------------------------------- Information Frames Structures diff --git a/drivers/staging/xgifb/XGI_main_26.c b/drivers/staging/xgifb/XGI_main_26.c index 68a216fcefb1..387d1bd0c418 100644 --- a/drivers/staging/xgifb/XGI_main_26.c +++ b/drivers/staging/xgifb/XGI_main_26.c @@ -91,11 +91,10 @@ static int XGIfb_mode_rate_to_ddata(struct vb_device_info *XGI_Pr, unsigned short ModeIdIndex, index = 0; unsigned short RefreshRateTableIndex = 0; - unsigned short VRE, VBE, VRS, VBS, VDE, VT; - unsigned short HRE, HBE, HRS, HBS, HDE, HT; + unsigned short VRE, VBE, VRS, VDE; + unsigned short HRE, HBE, HRS, HDE; unsigned char sr_data, cr_data, cr_data2; - unsigned long cr_data3; - int A, B, C, D, E, F, temp, j; + int B, C, D, F, temp, j; InitTo330Pointer(HwDeviceExtension->jChipType, XGI_Pr); if (!XGI_SearchModeID(ModeNo, &ModeIdIndex, XGI_Pr)) return 0; @@ -105,25 +104,13 @@ static int XGIfb_mode_rate_to_ddata(struct vb_device_info *XGI_Pr, sr_data = XGI_CRT1Table[index].CR[5]; - cr_data = XGI_CRT1Table[index].CR[0]; - - /* Horizontal total */ - HT = (cr_data & 0xff) | ((unsigned short) (sr_data & 0x03) << 8); - A = HT + 5; - - HDE = (XGI330_RefIndex[RefreshRateTableIndex].XRes >> 3) - 1; - E = HDE + 1; + HDE = (XGI330_RefIndex[RefreshRateTableIndex].XRes >> 3); cr_data = XGI_CRT1Table[index].CR[3]; /* Horizontal retrace (=sync) start */ HRS = (cr_data & 0xff) | ((unsigned short) (sr_data & 0xC0) << 2); - F = HRS - E - 3; - - cr_data = XGI_CRT1Table[index].CR[1]; - - /* Horizontal blank start */ - HBS = (cr_data & 0xff) | ((unsigned short) (sr_data & 0x30) << 4); + F = HRS - HDE - 3; sr_data = XGI_CRT1Table[index].CR[6]; @@ -138,10 +125,10 @@ static int XGIfb_mode_rate_to_ddata(struct vb_device_info *XGI_Pr, /* Horizontal retrace (=sync) end */ HRE = (cr_data2 & 0x1f) | ((sr_data & 0x04) << 3); - temp = HBE - ((E - 1) & 255); + temp = HBE - ((HDE - 1) & 255); B = (temp > 0) ? temp : (temp + 256); - temp = HRE - ((E + F + 3) & 63); + temp = HRE - ((HDE + F + 3) & 63); C = (temp > 0) ? temp : (temp + 64); D = B - F - C; @@ -152,18 +139,9 @@ static int XGIfb_mode_rate_to_ddata(struct vb_device_info *XGI_Pr, sr_data = XGI_CRT1Table[index].CR[14]; - cr_data = XGI_CRT1Table[index].CR[8]; - cr_data2 = XGI_CRT1Table[index].CR[9]; - /* Vertical total */ - VT = (cr_data & 0xFF) | ((unsigned short) (cr_data2 & 0x01) << 8) - | ((unsigned short) (cr_data2 & 0x20) << 4) - | ((unsigned short) (sr_data & 0x01) << 10); - A = VT + 2; - - VDE = XGI330_RefIndex[RefreshRateTableIndex].YRes - 1; - E = VDE + 1; + VDE = XGI330_RefIndex[RefreshRateTableIndex].YRes; cr_data = XGI_CRT1Table[index].CR[10]; @@ -171,29 +149,20 @@ static int XGIfb_mode_rate_to_ddata(struct vb_device_info *XGI_Pr, VRS = (cr_data & 0xff) | ((unsigned short) (cr_data2 & 0x04) << 6) | ((unsigned short) (cr_data2 & 0x80) << 2) | ((unsigned short) (sr_data & 0x08) << 7); - F = VRS + 1 - E; - - cr_data = XGI_CRT1Table[index].CR[12]; - - cr_data3 = (XGI_CRT1Table[index].CR[14] & 0x80) << 5; - - /* Vertical blank start */ - VBS = (cr_data & 0xff) | ((unsigned short) (cr_data2 & 0x08) << 5) - | ((unsigned short) (cr_data3 & 0x20) << 4) - | ((unsigned short) (sr_data & 0x04) << 8); + F = VRS + 1 - VDE; cr_data = XGI_CRT1Table[index].CR[13]; /* Vertical blank end */ VBE = (cr_data & 0xff) | ((unsigned short) (sr_data & 0x10) << 4); - temp = VBE - ((E - 1) & 511); + temp = VBE - ((VDE - 1) & 511); B = (temp > 0) ? temp : (temp + 512); cr_data = XGI_CRT1Table[index].CR[11]; /* Vertical retrace (=sync) end */ VRE = (cr_data & 0x0f) | ((sr_data & 0x20) >> 1); - temp = VRE - ((E + F - 1) & 31); + temp = VRE - ((VDE + F - 1) & 31); C = (temp > 0) ? temp : (temp + 32); D = B - F - C; @@ -1160,22 +1129,10 @@ static int XGIfb_release(struct fb_info *info, int user) return 0; } +/* similar to sisfb_get_cmap_len */ static int XGIfb_get_cmap_len(const struct fb_var_screeninfo *var) { - int rc = 16; - - switch (var->bits_per_pixel) { - case 8: - rc = 256; - break; - case 16: - rc = 16; - break; - case 32: - rc = 16; - break; - } - return rc; + return (var->bits_per_pixel == 8) ? 256 : 16; } static int XGIfb_setcolreg(unsigned regno, unsigned red, unsigned green, @@ -1362,12 +1319,6 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) /* Adapt RGB settings */ XGIfb_bpp_to_var(xgifb_info, var); - /* Sanity check for offsets */ - if (var->xoffset < 0) - var->xoffset = 0; - if (var->yoffset < 0) - var->yoffset = 0; - if (!XGIfb_ypan) { if (var->xres != var->xres_virtual) var->xres_virtual = var->xres; @@ -1402,8 +1353,7 @@ static int XGIfb_pan_display(struct fb_var_screeninfo *var, return -EINVAL; if (var->vmode & FB_VMODE_YWRAP) { - if (var->yoffset < 0 || var->yoffset >= info->var.yres_virtual - || var->xoffset) + if (var->yoffset >= info->var.yres_virtual || var->xoffset) return -EINVAL; } else if (var->xoffset + info->var.xres > info->var.xres_virtual || var->yoffset + info->var.yres @@ -1838,7 +1788,7 @@ static int xgifb_probe(struct pci_dev *pdev, if (!XGIInitNew(pdev)) dev_err(&pdev->dev, "XGIInitNew() failed!\n"); - xgifb_info->mtrr = (unsigned int) 0; + xgifb_info->mtrr = -1; xgifb_info->hasVB = HASVB_NONE; if ((xgifb_info->chip == XG20) || @@ -1957,6 +1907,7 @@ static int xgifb_probe(struct pci_dev *pdev, if (xgifb_info->mode_idx < 0) { dev_err(&pdev->dev, "No supported video mode found\n"); + ret = -EINVAL; goto error_1; } diff --git a/drivers/staging/xgifb/XGIfb.h b/drivers/staging/xgifb/XGIfb.h index 80547983759b..af50362395d5 100644 --- a/drivers/staging/xgifb/XGIfb.h +++ b/drivers/staging/xgifb/XGIfb.h @@ -67,7 +67,7 @@ struct xgifb_video_info { unsigned long mmio_size; void __iomem *mmio_vbase; unsigned long vga_base; - unsigned long mtrr; + int mtrr; int video_bpp; int video_cmap_len; diff --git a/drivers/staging/xgifb/vb_init.c b/drivers/staging/xgifb/vb_init.c index dd34570347aa..1c6e0f3ada12 100644 --- a/drivers/staging/xgifb/vb_init.c +++ b/drivers/staging/xgifb/vb_init.c @@ -413,6 +413,19 @@ static void XGINew_DDR2_DefaultRegister( XGINew_DDR2_MRS_XG20(HwDeviceExtension, P3c4, pVBInfo); } +static void XGI_SetDRAM_Helper(unsigned long P3d4, u8 seed, u8 temp2, u8 reg, + u8 shift_factor, u8 mask1, u8 mask2) +{ + u8 j; + for (j = 0; j < 4; j++) { + temp2 |= (((seed >> (2 * j)) & 0x03) << shift_factor); + xgifb_reg_set(P3d4, reg, temp2); + xgifb_reg_get(P3d4, reg); + temp2 &= mask1; + temp2 += mask2; + } +} + static void XGINew_SetDRAMDefaultRegister340( struct xgi_hw_device_info *HwDeviceExtension, unsigned long Port, struct vb_device_info *pVBInfo) @@ -426,54 +439,18 @@ static void XGINew_SetDRAMDefaultRegister340( xgifb_reg_set(P3d4, 0x69, pVBInfo->CR40[6][pVBInfo->ram_type]); xgifb_reg_set(P3d4, 0x6A, pVBInfo->CR40[7][pVBInfo->ram_type]); - temp2 = 0; - for (i = 0; i < 4; i++) { - /* CR6B DQS fine tune delay */ - temp = XGI340_CR6B[pVBInfo->ram_type][i]; - for (j = 0; j < 4; j++) { - temp1 = ((temp >> (2 * j)) & 0x03) << 2; - temp2 |= temp1; - xgifb_reg_set(P3d4, 0x6B, temp2); - /* Insert read command for delay */ - xgifb_reg_get(P3d4, 0x6B); - temp2 &= 0xF0; - temp2 += 0x10; - } - } + /* CR6B DQS fine tune delay */ + temp = (pVBInfo->ram_type <= 2) ? 0xaa : 0x00; + XGI_SetDRAM_Helper(P3d4, temp, 0, 0x6B, 2, 0xF0, 0x10); - temp2 = 0; - for (i = 0; i < 4; i++) { - /* CR6E DQM fine tune delay */ - temp = 0; - for (j = 0; j < 4; j++) { - temp1 = ((temp >> (2 * j)) & 0x03) << 2; - temp2 |= temp1; - xgifb_reg_set(P3d4, 0x6E, temp2); - /* Insert read command for delay */ - xgifb_reg_get(P3d4, 0x6E); - temp2 &= 0xF0; - temp2 += 0x10; - } - } + /* CR6E DQM fine tune delay */ + XGI_SetDRAM_Helper(P3d4, 0, 0, 0x6E, 2, 0xF0, 0x10); temp3 = 0; for (k = 0; k < 4; k++) { /* CR6E_D[1:0] select channel */ xgifb_reg_and_or(P3d4, 0x6E, 0xFC, temp3); - temp2 = 0; - for (i = 0; i < 8; i++) { - /* CR6F DQ fine tune delay */ - temp = 0; - for (j = 0; j < 4; j++) { - temp1 = (temp >> (2 * j)) & 0x03; - temp2 |= temp1; - xgifb_reg_set(P3d4, 0x6F, temp2); - /* Insert read command for delay */ - xgifb_reg_get(P3d4, 0x6F); - temp2 &= 0xF8; - temp2 += 0x08; - } - } + XGI_SetDRAM_Helper(P3d4, 0, 0, 0x6F, 0, 0xF8, 0x08); temp3 += 0x01; } @@ -486,15 +463,7 @@ static void XGINew_SetDRAMDefaultRegister340( temp2 = 0x80; /* CR89 terminator type select */ - temp = 0; - for (j = 0; j < 4; j++) { - temp1 = (temp >> (2 * j)) & 0x03; - temp2 |= temp1; - xgifb_reg_set(P3d4, 0x89, temp2); - xgifb_reg_get(P3d4, 0x89); /* Insert read command for delay */ - temp2 &= 0xF0; - temp2 += 0x10; - } + XGI_SetDRAM_Helper(P3d4, 0, temp2, 0x89, 0, 0xF0, 0x10); temp = 0; temp1 = temp & 0x03; diff --git a/drivers/staging/xgifb/vb_setmode.c b/drivers/staging/xgifb/vb_setmode.c index 53b55571fec6..bd816567ab2a 100644 --- a/drivers/staging/xgifb/vb_setmode.c +++ b/drivers/staging/xgifb/vb_setmode.c @@ -64,29 +64,15 @@ static void XGI_SetSeqRegs(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { - unsigned char tempah, SRdata; - unsigned short i, modeflag; - - modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; + unsigned char SRdata, i; xgifb_reg_set(pVBInfo->P3c4, 0x00, 0x03); /* Set SR0 */ - tempah = XGI330_StandTable.SR[0]; - - i = XGI_SetCRT2ToLCDA; - if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) { - tempah |= 0x01; - } else if (pVBInfo->VBInfo & (SetCRT2ToTV | SetCRT2ToLCD)) { - if (pVBInfo->VBInfo & SetInSlaveMode) - tempah |= 0x01; - } - - tempah |= 0x20; /* screen off */ - xgifb_reg_set(pVBInfo->P3c4, 0x01, tempah); /* Set SR1 */ - for (i = 02; i <= 04; i++) { - /* Get SR2,3,4 from file */ - SRdata = XGI330_StandTable.SR[i - 1]; - xgifb_reg_set(pVBInfo->P3c4, i, SRdata); /* Set SR2 3 4 */ + for (i = 0; i < 4; i++) { + /* Get SR1,2,3,4 from file */ + /* SR1 is with screen off 0x20 */ + SRdata = XGI330_StandTable.SR[i]; + xgifb_reg_set(pVBInfo->P3c4, i+1, SRdata); /* Set SR 1 2 3 4 */ } } @@ -641,10 +627,7 @@ static void xgifb_set_lcd(int chip_id, unsigned short RefreshRateTableIndex, unsigned short ModeNo) { - unsigned short Data, Temp; - unsigned short XGI_P3cc; - - XGI_P3cc = pVBInfo->P3cc; + unsigned short temp; xgifb_reg_set(pVBInfo->P3d4, 0x2E, 0x00); xgifb_reg_set(pVBInfo->P3d4, 0x2F, 0x00); @@ -652,8 +635,8 @@ static void xgifb_set_lcd(int chip_id, xgifb_reg_set(pVBInfo->P3d4, 0x47, 0x00); if (chip_id == XG27) { - Temp = xgifb_reg_get(pVBInfo->P3d4, 0x37); - if ((Temp & 0x03) == 0) { /* dual 12 */ + temp = xgifb_reg_get(pVBInfo->P3d4, 0x37); + if ((temp & 0x03) == 0) { /* dual 12 */ xgifb_reg_set(pVBInfo->P3d4, 0x46, 0x13); xgifb_reg_set(pVBInfo->P3d4, 0x47, 0x13); } @@ -662,8 +645,8 @@ static void xgifb_set_lcd(int chip_id, if (chip_id == XG27) { XGI_SetXG27FPBits(pVBInfo); } else { - Temp = xgifb_reg_get(pVBInfo->P3d4, 0x37); - if (Temp & 0x01) { + temp = xgifb_reg_get(pVBInfo->P3d4, 0x37); + if (temp & 0x01) { /* 18 bits FP */ xgifb_reg_or(pVBInfo->P3c4, 0x06, 0x40); xgifb_reg_or(pVBInfo->P3c4, 0x09, 0x40); @@ -675,11 +658,11 @@ static void xgifb_set_lcd(int chip_id, xgifb_reg_and(pVBInfo->P3c4, 0x30, ~0x20); /* Hsync polarity */ xgifb_reg_and(pVBInfo->P3c4, 0x35, ~0x80); /* Vsync polarity */ - Data = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag; - if (Data & 0x4000) + temp = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag; + if (temp & 0x4000) /* Hsync polarity */ xgifb_reg_or(pVBInfo->P3c4, 0x30, 0x20); - if (Data & 0x8000) + if (temp & 0x8000) /* Vsync polarity */ xgifb_reg_or(pVBInfo->P3c4, 0x35, 0x80); } @@ -877,16 +860,12 @@ static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeNo, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo) { - unsigned short CRT2Index, VCLKIndex; - unsigned short modeflag, resinfo; + unsigned short VCLKIndex, modeflag; /* si+Ext_ResInfo */ modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; - resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; - CRT2Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; if (pVBInfo->IF_DEF_LVDS == 0) { - CRT2Index = CRT2Index >> 6; /* for LCD */ if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { /*301b*/ if (pVBInfo->LCDResInfo != Panel_1024x768) @@ -1104,10 +1083,8 @@ static void XGI_SetCRT1ModeRegs(struct xgi_hw_device_info *HwDeviceExtension, data = 0x0048; } - data2 = data & 0x00FF; - xgifb_reg_and_or(pVBInfo->P3d4, 0x19, 0xFF, data2); - data2 = (data & 0xFF00) >> 8; - xgifb_reg_and_or(pVBInfo->P3d4, 0x19, 0xFC, data2); + xgifb_reg_and_or(pVBInfo->P3d4, 0x19, 0xFF, data); + xgifb_reg_and_or(pVBInfo->P3d4, 0x19, 0xFC, 0); if (modeflag & HalfDCLK) xgifb_reg_and_or(pVBInfo->P3c4, 0x01, 0xF7, 0x08); @@ -1390,14 +1367,10 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo) { - unsigned char index; unsigned short i; struct XGI_LVDSCRT1HDataStruct const *LCDPtr = NULL; struct XGI_LVDSCRT1VDataStruct const *LCDPtr1 = NULL; - index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; - index = index & IndexMask; - if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { LCDPtr = XGI_GetLcdPtr(xgifb_epllcd_crt1_h, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo); @@ -1497,18 +1470,11 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, { unsigned short tempbx, tempax, tempcx, tempdx, push1, push2, modeflag; unsigned long temp, temp1, temp2, temp3, push3; - struct XGI_LCDDesStruct const *LCDPtr = NULL; struct XGI330_LCDDataDesStruct2 const *LCDPtr1 = NULL; modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; - if (pVBInfo->LCDInfo & EnableScalingLCD) - LCDPtr1 = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo, - ModeIdIndex, RefreshRateTableIndex, - pVBInfo); - else - LCDPtr = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo, - ModeIdIndex, RefreshRateTableIndex, - pVBInfo); + LCDPtr1 = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeNo, ModeIdIndex, + RefreshRateTableIndex, pVBInfo); XGI_GetLCDSync(&tempax, &tempbx, pVBInfo); push1 = tempbx; @@ -1540,10 +1506,7 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, tempax = pVBInfo->HT; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDHDES; - else - tempbx = LCDPtr->LCDHDES; + tempbx = LCDPtr1->LCDHDES; tempcx = pVBInfo->HDE; tempbx = tempbx & 0x0fff; @@ -1564,10 +1527,7 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, tempax = pVBInfo->HT; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDHRS; - else - tempbx = LCDPtr->LCDHRS; + tempbx = LCDPtr1->LCDHRS; tempcx = push2; @@ -1592,10 +1552,7 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, (unsigned short) (tempbx & 0xff)); tempax = pVBInfo->VT; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDVDES; - else - tempbx = LCDPtr->LCDVDES; + tempbx = LCDPtr1->LCDVDES; tempcx = pVBInfo->VDE; tempbx = tempbx & 0x0fff; @@ -1616,10 +1573,7 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, | tempbx)); tempax = pVBInfo->VT; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDVRS; - else - tempbx = LCDPtr->LCDVRS; + tempbx = LCDPtr1->LCDVRS; tempcx = push1; @@ -2208,31 +2162,25 @@ static void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, static void XGI_GetTVInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { - unsigned short temp, tempbx = 0, resinfo = 0, modeflag, index1; - - tempbx = 0; - resinfo = 0; + unsigned short tempbx = 0, resinfo = 0, modeflag, index1; if (pVBInfo->VBInfo & SetCRT2ToTV) { modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; - if (pVBInfo->VBInfo & SetCRT2ToTV) { - temp = xgifb_reg_get(pVBInfo->P3d4, 0x35); - tempbx = temp; - if (tempbx & TVSetPAL) { - tempbx &= (SetCHTVOverScan | - TVSetPALM | - TVSetPALN | - TVSetPAL); - if (tempbx & TVSetPALM) - /* set to NTSC if PAL-M */ - tempbx &= ~TVSetPAL; - } else - tempbx &= (SetCHTVOverScan | - TVSetNTSCJ | - TVSetPAL); - } + tempbx = xgifb_reg_get(pVBInfo->P3d4, 0x35); + if (tempbx & TVSetPAL) { + tempbx &= (SetCHTVOverScan | + TVSetPALM | + TVSetPALN | + TVSetPAL); + if (tempbx & TVSetPALM) + /* set to NTSC if PAL-M */ + tempbx &= ~TVSetPAL; + } else + tempbx &= (SetCHTVOverScan | + TVSetNTSCJ | + TVSetPAL); if (pVBInfo->IF_DEF_LVDS == 0) { if (pVBInfo->VBInfo & SetCRT2ToSCART) @@ -2294,13 +2242,12 @@ static void XGI_GetTVInfo(unsigned short ModeNo, unsigned short ModeIdIndex, static unsigned char XGI_GetLCDInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { - unsigned short temp, tempax, tempbx, modeflag, resinfo = 0, LCDIdIndex; + unsigned short temp, tempax, tempbx, resinfo = 0, LCDIdIndex; pVBInfo->LCDResInfo = 0; pVBInfo->LCDTypeInfo = 0; pVBInfo->LCDInfo = 0; - modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; /* si+Ext_ResInfo // */ resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; temp = xgifb_reg_get(pVBInfo->P3d4, 0x36); /* Get LCD Res.Info */ @@ -2352,9 +2299,7 @@ static unsigned char XGI_GetLCDInfo(unsigned short ModeNo, & VB_XGI301C)) && (tempax & XGI_LCDDualLink)) { tempbx |= SetLCDDualLink; } - } - if (pVBInfo->IF_DEF_LVDS == 0) { if ((pVBInfo->LCDResInfo == Panel_1400x1050) && (pVBInfo->VBInfo & SetCRT2ToLCD) && (resinfo == 9) && (!(tempbx & EnableScalingLCD))) @@ -3023,11 +2968,7 @@ static void XGI_PreSetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo) { - unsigned short tempcx = 0, CRT1Index = 0, resinfo = 0; - - CRT1Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC; - CRT1Index &= IndexMask; - resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; + u8 tempcx; XGI_SetCRT2Offset(ModeNo, ModeIdIndex, RefreshRateTableIndex, HwDeviceExtension, pVBInfo); @@ -3046,11 +2987,10 @@ static void XGI_SetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { unsigned short temp = 0, tempax = 0, tempbx = 0, tempcx = 0, - pushbx = 0, CRT1Index = 0, modeflag, resinfo = 0; + pushbx = 0, CRT1Index, modeflag; CRT1Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC; CRT1Index &= IndexMask; - resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; /* bainy change table name */ @@ -3205,13 +3145,11 @@ static void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { unsigned short push1, push2, tempax, tempbx = 0, tempcx, temp, resinfo, - modeflag, CRT1Index; + modeflag; /* si+Ext_ResInfo */ modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; - CRT1Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC; - CRT1Index &= IndexMask; if (!(pVBInfo->VBInfo & SetInSlaveMode)) return; @@ -3502,15 +3440,13 @@ static void XGI_SetGroup2(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { unsigned short i, j, tempax, tempbx, tempcx, temp, push1, push2, - modeflag, resinfo, crt2crtc; + modeflag; unsigned char const *TimingPoint; unsigned long longtemp, tempeax, tempebx, temp2, tempecx; /* si+Ext_ResInfo */ modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; - resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; - crt2crtc = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; tempax = 0; @@ -3941,17 +3877,12 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo) { - unsigned short push1, push2, pushbx, tempax, tempbx, tempcx, temp, - tempah, tempbh, tempch, resinfo, modeflag, CRT1Index; + unsigned short pushbx, tempax, tempbx, tempcx, temp, tempah, + tempbh, tempch; struct XGI_LCDDesStruct const *LCDBDesPtr = NULL; /* si+Ext_ResInfo */ - modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; - resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO; - CRT1Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC; - CRT1Index &= IndexMask; - if (!(pVBInfo->VBInfo & SetCRT2ToLCD)) return; @@ -3970,7 +3901,6 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex, xgifb_reg_set(pVBInfo->Part2Port, 0x0B, temp); tempbx = pVBInfo->VDE; /* RTVACTEO=(VDE-1)&0xFF */ - push1 = tempbx; tempbx--; temp = tempbx & 0x00FF; xgifb_reg_set(pVBInfo->Part2Port, 0x03, temp); @@ -3978,7 +3908,6 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex, xgifb_reg_and_or(pVBInfo->Part2Port, 0x0C, ~0x07, temp); tempcx = pVBInfo->VT - 1; - push2 = tempcx + 1; temp = tempcx & 0x00FF; /* RVTVT=VT-1 */ xgifb_reg_set(pVBInfo->Part2Port, 0x19, temp); temp = (tempcx & 0xFF00) >> 8; @@ -4460,10 +4389,6 @@ static void XGINew_EnableCRT2(struct vb_device_info *pVBInfo) static void XGI_SetGroup5(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { - unsigned short Pindex, Pdata; - - Pindex = pVBInfo->Part5Port; - Pdata = pVBInfo->Part5Port + 1; if (pVBInfo->ModeType == ModeVGA) { if (!(pVBInfo->VBInfo & (SetInSlaveMode | LoadDACFlag | DisableCRT2Display))) { @@ -4738,43 +4663,21 @@ static unsigned char XGI_IsLCDON(struct vb_device_info *pVBInfo) } /* --------------------------------------------------------------------- */ -/* Function : XGI_DisableChISLCD */ -/* Input : */ -/* Output : 0 -> Not LCD Mode */ -/* Description : */ -/* --------------------------------------------------------------------- */ -static unsigned char XGI_DisableChISLCD(struct vb_device_info *pVBInfo) -{ - unsigned short tempbx, tempah; - - tempbx = pVBInfo->SetFlag & (DisableChA | DisableChB); - tempah = ~((unsigned short) xgifb_reg_get(pVBInfo->Part1Port, 0x2E)); - - if (tempbx & (EnableChA | DisableChA)) { - if (!(tempah & 0x08)) /* Chk LCDA Mode */ - return 0; - } - - if (!(tempbx & (EnableChB | DisableChB))) - return 0; - - if (tempah & 0x01) /* Chk LCDB Mode */ - return 1; - - return 0; -} - -/* --------------------------------------------------------------------- */ /* Function : XGI_EnableChISLCD */ /* Input : */ /* Output : 0 -> Not LCD mode */ -/* Description : */ +/* Description : if bool enable = true -> enable, else disable */ /* --------------------------------------------------------------------- */ -static unsigned char XGI_EnableChISLCD(struct vb_device_info *pVBInfo) +static unsigned char XGI_EnableChISLCD(struct vb_device_info *pVBInfo, + bool enable) { unsigned short tempbx, tempah; - tempbx = pVBInfo->SetFlag & (EnableChA | EnableChB); + if (enable) + tempbx = pVBInfo->SetFlag & (EnableChA | EnableChB); + else + tempbx = pVBInfo->SetFlag & (DisableChA | DisableChB); + tempah = ~((unsigned short) xgifb_reg_get(pVBInfo->Part1Port, 0x2E)); if (tempbx & (EnableChA | DisableChA)) { @@ -4826,9 +4729,9 @@ static void XGI_DisableBridge(struct xgifb_video_info *xgifb_info, if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) { if (((pVBInfo->VBInfo & - (SetCRT2ToLCD | XGI_SetCRT2ToLCDA))) - || (XGI_DisableChISLCD(pVBInfo)) - || (XGI_IsLCDON(pVBInfo))) + (SetCRT2ToLCD | XGI_SetCRT2ToLCDA))) || + (XGI_EnableChISLCD(pVBInfo, false)) || + (XGI_IsLCDON(pVBInfo))) /* LVDS Driver power down */ xgifb_reg_or(pVBInfo->Part4Port, 0x30, 0x80); } @@ -5119,12 +5022,8 @@ static void XGI_SetLCDCap(struct vb_device_info *pVBInfo) tempcx = pVBInfo->LCDCapList[XGI_GetLCDCapPtr(pVBInfo)].LCD_Capability; - if (pVBInfo->VBType & - (VB_SIS301B | - VB_SIS302B | - VB_SIS301LV | - VB_SIS302LV | - VB_XGI301C)) { /* 301LV/302LV only */ + if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV | + VB_SIS302LV | VB_XGI301C)) { if (pVBInfo->VBType & (VB_SIS301LV | VB_SIS302LV | VB_XGI301C)) { /* Set 301LV Capability */ @@ -5136,10 +5035,7 @@ static void XGI_SetLCDCap(struct vb_device_info *pVBInfo) ~((EnableVBCLKDRVLOW | EnablePLLSPLOW) >> 8), (unsigned short) ((tempcx & (EnableVBCLKDRVLOW | EnablePLLSPLOW)) >> 8)); - } - if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV - | VB_SIS302LV | VB_XGI301C)) { if (pVBInfo->VBInfo & SetCRT2ToLCD) XGI_SetLCDCap_B(tempcx, pVBInfo); else if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) @@ -5511,13 +5407,10 @@ unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE, unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { - short LCDRefreshIndex[] = { 0x00, 0x00, 0x03, 0x01 }, - LCDARefreshIndex[] = { 0x00, 0x00, 0x03, 0x01, 0x01, - 0x01, 0x01 }; + const u8 LCDARefreshIndex[] = { + 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00 }; - unsigned short RefreshRateTableIndex, i, modeflag, index, temp; - - modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag; + unsigned short RefreshRateTableIndex, i, index, temp; index = xgifb_reg_get(pVBInfo->P3d4, 0x33); index = index >> pVBInfo->SelectCRT2Rate; @@ -5532,15 +5425,8 @@ unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE, if (pVBInfo->SetFlag & ProgrammingCRT2) { if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { if (pVBInfo->IF_DEF_LVDS == 0) { - if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B - | VB_SIS301LV | VB_SIS302LV - | VB_XGI301C)) - /* 301b */ - temp = LCDARefreshIndex[ - pVBInfo->LCDResInfo & 0x0F]; - else - temp = LCDRefreshIndex[ - pVBInfo->LCDResInfo & 0x0F]; + temp = LCDARefreshIndex[ + pVBInfo->LCDResInfo & 0x07]; if (index > temp) index = temp; @@ -5618,9 +5504,8 @@ static unsigned char XGI_SetCRT2Group301(unsigned short ModeNo, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo) { - unsigned short tempbx, ModeIdIndex, RefreshRateTableIndex; + unsigned short ModeIdIndex, RefreshRateTableIndex; - tempbx = pVBInfo->VBInfo; pVBInfo->SetFlag |= ProgrammingCRT2; XGI_SearchModeID(ModeNo, &ModeIdIndex, pVBInfo); pVBInfo->SelectCRT2Rate = 4; @@ -5796,8 +5681,8 @@ static void XGI_EnableBridge(struct xgifb_video_info *xgifb_info, xgifb_reg_and_or(pVBInfo->Part2Port, 0x00, ~0xE0, 0x20); /* shampoo 0129 */ if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) { - if (!XGI_DisableChISLCD(pVBInfo)) { - if (XGI_EnableChISLCD(pVBInfo) || + if (!XGI_EnableChISLCD(pVBInfo, false)) { + if (XGI_EnableChISLCD(pVBInfo, true) || (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA))) /* LVDS PLL power on */ @@ -5994,7 +5879,8 @@ unsigned char XGISetModeNew(struct xgifb_video_info *xgifb_info, XGI_GetLCDInfo(ModeNo, ModeIdIndex, pVBInfo); XGI_DisableBridge(xgifb_info, HwDeviceExtension, pVBInfo); - if (pVBInfo->VBInfo & (SetSimuScanMode | XGI_SetCRT2ToLCDA)) { + if (pVBInfo->VBInfo & (SetSimuScanMode | XGI_SetCRT2ToLCDA) || + (!(pVBInfo->VBInfo & SwitchCRT2))) { XGI_SetCRT1Group(xgifb_info, HwDeviceExtension, ModeNo, ModeIdIndex, pVBInfo); @@ -6002,24 +5888,11 @@ unsigned char XGISetModeNew(struct xgifb_video_info *xgifb_info, XGI_SetLCDAGroup(ModeNo, ModeIdIndex, HwDeviceExtension, pVBInfo); } - } else if (!(pVBInfo->VBInfo & SwitchCRT2)) { - XGI_SetCRT1Group(xgifb_info, - HwDeviceExtension, ModeNo, - ModeIdIndex, pVBInfo); - if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) { - XGI_SetLCDAGroup(ModeNo, ModeIdIndex, - HwDeviceExtension, - pVBInfo); - } } if (pVBInfo->VBInfo & (SetSimuScanMode | SwitchCRT2)) { switch (HwDeviceExtension->ujVBChipID) { - case VB_CHIP_301: - XGI_SetCRT2Group301(ModeNo, HwDeviceExtension, - pVBInfo); /*add for CRT2 */ - break; - + case VB_CHIP_301: /* fall through */ case VB_CHIP_302: XGI_SetCRT2Group301(ModeNo, HwDeviceExtension, pVBInfo); /*add for CRT2 */ diff --git a/drivers/staging/xgifb/vb_table.h b/drivers/staging/xgifb/vb_table.h index 39f528b14f01..34e16569de3b 100644 --- a/drivers/staging/xgifb/vb_table.h +++ b/drivers/staging/xgifb/vb_table.h @@ -103,17 +103,6 @@ static const unsigned char XGI27_cr41[24][8] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /* 23 CRC5 */ }; -const unsigned char XGI340_CR6B[8][4] = { - {0xaa, 0xaa, 0xaa, 0xaa}, - {0xaa, 0xaa, 0xaa, 0xaa}, - {0xaa, 0xaa, 0xaa, 0xaa}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00} -}; - /* CR47,CR48,CR49,CR4A,CR4B,CR4C,CR70,CR71,CR74,CR75,CR76,CR77 */ const unsigned char XGI340_AGPReg[12] = { 0x28, 0x23, 0x00, 0x20, 0x00, 0x20, @@ -195,7 +184,7 @@ const struct XGI_ExtStruct XGI330_EModeIDTable[] = { static const struct SiS_StandTable_S XGI330_StandTable = { /* ExtVGATable */ 0x00, 0x00, 0x00, 0x0000, - {0x01, 0x0f, 0x00, 0x0e}, + {0x21, 0x0f, 0x00, 0x0e}, /* 0x21 = 0x01 | (0x20 = screen off) */ 0x23, {0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/drivers/staging/zram/zram.txt b/drivers/staging/zram/zram.txt index 5f75d2987564..765d790ae831 100644 --- a/drivers/staging/zram/zram.txt +++ b/drivers/staging/zram/zram.txt @@ -23,17 +23,17 @@ Following shows a typical sequence of steps for using zram. This creates 4 devices: /dev/zram{0,1,2,3} (num_devices parameter is optional. Default: 1) -2) Set Disksize (Optional): - Set disk size by writing the value to sysfs node 'disksize' - (in bytes). If disksize is not given, default value of 25% - of RAM is used. - - # Initialize /dev/zram0 with 50MB disksize - echo $((50*1024*1024)) > /sys/block/zram0/disksize - - NOTE: disksize cannot be changed if the disk contains any - data. So, for such a disk, you need to issue 'reset' (see below) - before you can change its disksize. +2) Set Disksize + Set disk size by writing the value to sysfs node 'disksize'. + The value can be either in bytes or you can use mem suffixes. + Examples: + # Initialize /dev/zram0 with 50MB disksize + echo $((50*1024*1024)) > /sys/block/zram0/disksize + + # Using mem suffixes + echo 256K > /sys/block/zram0/disksize + echo 512M > /sys/block/zram0/disksize + echo 1G > /sys/block/zram0/disksize 3) Activate: mkswap /dev/zram0 @@ -65,8 +65,9 @@ Following shows a typical sequence of steps for using zram. echo 1 > /sys/block/zram0/reset echo 1 > /sys/block/zram1/reset - (This frees all the memory allocated for the given device). - + This frees all the memory allocated for the given device and + resets the disksize to zero. You must set the disksize again + before reusing the device. Please report any problems at: - Mailing list: linux-mm-cc at laptop dot org diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c index 941b7c62ea20..85055c4fc2f2 100644 --- a/drivers/staging/zram/zram_drv.c +++ b/drivers/staging/zram/zram_drv.c @@ -94,34 +94,6 @@ static int page_zero_filled(void *ptr) return 1; } -static void zram_set_disksize(struct zram *zram, size_t totalram_bytes) -{ - if (!zram->disksize) { - pr_info( - "disk size not provided. You can use disksize_kb module " - "param to specify size.\nUsing default: (%u%% of RAM).\n", - default_disksize_perc_ram - ); - zram->disksize = default_disksize_perc_ram * - (totalram_bytes / 100); - } - - if (zram->disksize > 2 * (totalram_bytes)) { - pr_info( - "There is little point creating a zram of greater than " - "twice the size of memory since we expect a 2:1 compression " - "ratio. Note that zram uses about 0.1%% of the size of " - "the disk when not in use so a huge zram is " - "wasteful.\n" - "\tMemory Size: %zu kB\n" - "\tSize you selected: %llu kB\n" - "Continuing anyway ...\n", - totalram_bytes >> 10, zram->disksize >> 10); - } - - zram->disksize &= PAGE_MASK; -} - static void zram_free_page(struct zram *zram, size_t index) { unsigned long handle = zram->table[index].handle; @@ -217,11 +189,12 @@ static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec, return 0; } - user_mem = kmap_atomic(page); if (is_partial_io(bvec)) /* Use a temporary buffer to decompress the page */ - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL); - else + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO); + + user_mem = kmap_atomic(page); + if (!is_partial_io(bvec)) uncmem = user_mem; if (!uncmem) { @@ -268,7 +241,7 @@ static int zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index, * This is a partial IO. We need to read the full page * before to write the changes. */ - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL); + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO); if (!uncmem) { pr_info("Error allocating temp memory!\n"); ret = -ENOMEM; @@ -469,16 +442,13 @@ static void zram_make_request(struct request_queue *queue, struct bio *bio) { struct zram *zram = queue->queuedata; - if (unlikely(!zram->init_done) && zram_init_device(zram)) - goto error; - down_read(&zram->init_lock); if (unlikely(!zram->init_done)) - goto error_unlock; + goto error; if (!valid_io_request(zram, bio)) { zram_stat64_inc(zram, &zram->stats.invalid_io); - goto error_unlock; + goto error; } __zram_make_request(zram, bio, bio_data_dir(bio)); @@ -486,9 +456,8 @@ static void zram_make_request(struct request_queue *queue, struct bio *bio) return; -error_unlock: - up_read(&zram->init_lock); error: + up_read(&zram->init_lock); bio_io_error(bio); } @@ -496,6 +465,9 @@ void __zram_reset_device(struct zram *zram) { size_t index; + if (!zram->init_done) + return; + zram->init_done = 0; /* Free various per-device buffers */ @@ -524,6 +496,7 @@ void __zram_reset_device(struct zram *zram) memset(&zram->stats, 0, sizeof(zram->stats)); zram->disksize = 0; + set_capacity(zram->disk, 0); } void zram_reset_device(struct zram *zram) @@ -533,20 +506,26 @@ void zram_reset_device(struct zram *zram) up_write(&zram->init_lock); } +/* zram->init_lock should be held */ int zram_init_device(struct zram *zram) { int ret; size_t num_pages; - down_write(&zram->init_lock); - - if (zram->init_done) { - up_write(&zram->init_lock); - return 0; + if (zram->disksize > 2 * (totalram_pages << PAGE_SHIFT)) { + pr_info( + "There is little point creating a zram of greater than " + "twice the size of memory since we expect a 2:1 compression " + "ratio. Note that zram uses about 0.1%% of the size of " + "the disk when not in use so a huge zram is " + "wasteful.\n" + "\tMemory Size: %zu kB\n" + "\tSize you selected: %llu kB\n" + "Continuing anyway ...\n", + (totalram_pages << PAGE_SHIFT) >> 10, zram->disksize >> 10 + ); } - zram_set_disksize(zram, totalram_pages << PAGE_SHIFT); - zram->compress_workmem = kzalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL); if (!zram->compress_workmem) { pr_err("Error allocating compressor working memory!\n"); @@ -570,8 +549,6 @@ int zram_init_device(struct zram *zram) goto fail_no_table; } - set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); - /* zram devices sort of resembles non-rotational disks */ queue_flag_set_unlocked(QUEUE_FLAG_NONROT, zram->disk->queue); @@ -583,7 +560,6 @@ int zram_init_device(struct zram *zram) } zram->init_done = 1; - up_write(&zram->init_lock); pr_debug("Initialization done!\n"); return 0; @@ -593,7 +569,6 @@ fail_no_table: zram->disksize = 0; fail: __zram_reset_device(zram); - up_write(&zram->init_lock); pr_err("Initialization failed: err=%d\n", ret); return ret; } @@ -750,8 +725,7 @@ static void __exit zram_exit(void) zram = &zram_devices[i]; destroy_device(zram); - if (zram->init_done) - zram_reset_device(zram); + zram_reset_device(zram); } unregister_blkdev(zram_major, "zram"); diff --git a/drivers/staging/zram/zram_drv.h b/drivers/staging/zram/zram_drv.h index df2eec407db6..5b671d177e1c 100644 --- a/drivers/staging/zram/zram_drv.h +++ b/drivers/staging/zram/zram_drv.h @@ -28,9 +28,6 @@ static const unsigned max_num_devices = 32; /*-- Configurable parameters */ -/* Default zram disk size: 25% of total RAM */ -static const unsigned default_disksize_perc_ram = 25; - /* * Pages that compress to size greater than this are stored * uncompressed in memory. @@ -115,6 +112,6 @@ extern struct attribute_group zram_disk_attr_group; #endif extern int zram_init_device(struct zram *zram); -extern void __zram_reset_device(struct zram *zram); +extern void zram_reset_device(struct zram *zram); #endif diff --git a/drivers/staging/zram/zram_sysfs.c b/drivers/staging/zram/zram_sysfs.c index de1eacf65dbd..369db1250f96 100644 --- a/drivers/staging/zram/zram_sysfs.c +++ b/drivers/staging/zram/zram_sysfs.c @@ -71,6 +71,7 @@ static ssize_t disksize_store(struct device *dev, zram->disksize = PAGE_ALIGN(disksize); set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT); + zram_init_device(zram); up_write(&zram->init_lock); return len; @@ -110,11 +111,7 @@ static ssize_t reset_store(struct device *dev, if (bdev) fsync_bdev(bdev); - down_write(&zram->init_lock); - if (zram->init_done) - __zram_reset_device(zram); - up_write(&zram->init_lock); - + zram_reset_device(zram); return len; } |