diff options
90 files changed, 773 insertions, 2371 deletions
diff --git a/Documentation/admin-guide/devices.txt b/Documentation/admin-guide/devices.txt index 440633642fea7..f544399675fa3 100644 --- a/Documentation/admin-guide/devices.txt +++ b/Documentation/admin-guide/devices.txt @@ -291,7 +291,6 @@ 154 = /dev/pmu Macintosh PowerBook power manager 155 = 156 = /dev/lcd Front panel LCD display - 157 = /dev/ac Applicom Intl Profibus card 158 = /dev/nwbutton Netwinder external button 159 = /dev/nwdebug Netwinder debug interface 160 = /dev/nwflash Netwinder flash memory diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst index 6c8fdcf8db66a..3f0ef1e27eb07 100644 --- a/Documentation/userspace-api/ioctl/ioctl-number.rst +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst @@ -340,7 +340,6 @@ Code Seq# Include File Comments 0xA2 all uapi/linux/acrn.h ACRN hypervisor 0xA3 80-8F Port ACL in development: <mailto:tlewis@mindspring.com> -0xA3 90-9F linux/dtlk.h 0xA4 00-1F uapi/linux/tee.h Generic TEE subsystem 0xA4 00-1F uapi/asm/sgx.h <mailto:linux-sgx@vger.kernel.org> 0xA5 01-05 linux/surface_aggregator/cdev.h Microsoft Surface Platform System Aggregator diff --git a/MAINTAINERS b/MAINTAINERS index 8609a4b9c49e8..bcc39b4703d0b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7799,13 +7799,6 @@ T: git git://linuxtv.org/media.git F: Documentation/devicetree/bindings/media/i2c/dongwoon,dw9807-vcm.yaml F: drivers/media/i2c/dw9807-vcm.c -DOUBLETALK DRIVER -M: "James R. Van Zandt" <jrv@vanzandt.mv.com> -L: blinux-list@redhat.com -S: Maintained -F: drivers/char/dtlk.c -F: include/linux/dtlk.h - DPAA2 DATAPATH I/O (DPIO) DRIVER M: Roy Pledge <Roy.Pledge@nxp.com> L: linux-kernel@vger.kernel.org diff --git a/arch/powerpc/configs/ppc6xx_defconfig b/arch/powerpc/configs/ppc6xx_defconfig index b8177fa0b2f2a..3e38909bf5a0b 100644 --- a/arch/powerpc/configs/ppc6xx_defconfig +++ b/arch/powerpc/configs/ppc6xx_defconfig @@ -573,7 +573,6 @@ CONFIG_PPDEV=m CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=m CONFIG_NVRAM=y -CONFIG_DTLK=m CONFIG_IPWIRELESS=m CONFIG_I2C_CHARDEV=m CONFIG_I2C_HYDRA=m diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 9e61942245936..ec0ab4f285301 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -3080,12 +3080,10 @@ static void binder_transaction(struct binder_proc *proc, int t_debug_id = atomic_inc_return(&binder_last_id); ktime_t t_start_time = ktime_get(); struct lsm_context lsmctx = { }; - struct list_head sgc_head; - struct list_head pf_head; + LIST_HEAD(sgc_head); + LIST_HEAD(pf_head); const void __user *user_buffer = (const void __user *) (uintptr_t)tr->data.ptr.buffer; - INIT_LIST_HEAD(&sgc_head); - INIT_LIST_HEAD(&pf_head); e = binder_transaction_log_add(&binder_transaction_log); e->debug_id = t_debug_id; diff --git a/drivers/android/binder/page_range.rs b/drivers/android/binder/page_range.rs index e54a90e62402a..e82a5523804f4 100644 --- a/drivers/android/binder/page_range.rs +++ b/drivers/android/binder/page_range.rs @@ -705,7 +705,7 @@ unsafe extern "C" fn rust_shrink_free_page( let page; let page_index; let mm; - let mmap_read; + let vma_read; let mm_mutex; let vma_addr; let range_ptr; @@ -728,17 +728,18 @@ unsafe extern "C" fn rust_shrink_free_page( None => return LRU_SKIP, }; - mmap_read = match mm.mmap_read_trylock() { - Some(guard) => guard, - None => return LRU_SKIP, - }; - // We can't lock it normally here, since we hold the lru lock. let inner = match range.lock.try_lock() { Some(inner) => inner, None => return LRU_SKIP, }; + vma_addr = inner.vma_addr; + vma_read = match mm.lock_vma_under_rcu(vma_addr) { + Some(guard) => guard, + None => return LRU_SKIP, + }; + // SAFETY: The item is in this lru list, so it's okay to remove it. unsafe { bindings::list_lru_isolate(lru, item) }; @@ -751,7 +752,6 @@ unsafe extern "C" fn rust_shrink_free_page( // `zap_page_range` before we release the mmap lock, so `use_page_slow` will not be able to // insert a new page until after our call to `zap_page_range`. page = unsafe { PageInfo::take_page(info) }; - vma_addr = inner.vma_addr; // From this point on, we don't access this PageInfo or ShrinkablePageRange again, because // they can be freed at any point after we unlock `lru_lock`. This is with the exception of @@ -761,14 +761,12 @@ unsafe extern "C" fn rust_shrink_free_page( // SAFETY: The lru lock is locked when this method is called. unsafe { bindings::spin_unlock(&raw mut (*lru).lock) }; - if let Some(unchecked_vma) = mmap_read.vma_lookup(vma_addr) { - if let Some(vma) = check_vma(unchecked_vma, range_ptr) { - let user_page_addr = vma_addr + (page_index << PAGE_SHIFT); - vma.zap_vma_range(user_page_addr, PAGE_SIZE); - } + if let Some(vma) = check_vma(&vma_read, range_ptr) { + let user_page_addr = vma_addr + (page_index << PAGE_SHIFT); + vma.zap_vma_range(user_page_addr, PAGE_SIZE); } - drop(mmap_read); + drop(vma_read); drop(mm_mutex); drop(mm); drop(page); diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 2a3a37b2cf3cb..9865227af167d 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -199,17 +199,6 @@ config NWFLASH source "drivers/char/hw_random/Kconfig" -config DTLK - tristate "Double Talk PC internal speech card support" - depends on ISA - help - This driver is for the DoubleTalk PC, a speech synthesizer - manufactured by RC Systems (<https://www.rcsys.com/>). It is also - called the `internal DoubleTalk'. - - To compile this driver as a module, choose M here: the - module will be called dtlk. - config XILINX_HWICAP tristate "Xilinx HWICAP Support" depends on MICROBLAZE @@ -220,21 +209,6 @@ config XILINX_HWICAP If unsure, say N. -config APPLICOM - tristate "Applicom intelligent fieldbus card support" - depends on PCI - help - This driver provides the kernel-side support for the intelligent - fieldbus cards made by Applicom International. More information - about these cards can be found on the WWW at the address - <https://www.applicom-int.com/>, or by email from David Woodhouse - <dwmw2@infradead.org>. - - To compile this driver as a module, choose M here: the - module will be called applicom. - - If unsure, say N. - config SONYPI tristate "Sony Vaio Programmable I/O Control Device support" depends on X86_32 && PCI && INPUT && HAS_IOPORT diff --git a/drivers/char/Makefile b/drivers/char/Makefile index 47bdc882797ad..a46d7bf7c4c82 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile @@ -16,8 +16,6 @@ obj-$(CONFIG_PRINTER) += lp.o obj-$(CONFIG_APM_EMULATION) += apm-emulation.o -obj-$(CONFIG_DTLK) += dtlk.o -obj-$(CONFIG_APPLICOM) += applicom.o obj-$(CONFIG_SONYPI) += sonypi.o obj-$(CONFIG_HPET) += hpet.o obj-$(CONFIG_XILINX_HWICAP) += xilinx_hwicap/ diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c deleted file mode 100644 index c138c468f3a44..0000000000000 --- a/drivers/char/applicom.c +++ /dev/null @@ -1,857 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* Derived from Applicom driver ac.c for SCO Unix */ -/* Ported by David Woodhouse, Axiom (Cambridge) Ltd. */ -/* dwmw2@infradead.org 30/8/98 */ -/* $Id: ac.c,v 1.30 2000/03/22 16:03:57 dwmw2 Exp $ */ -/* This module is for Linux 2.1 and 2.2 series kernels. */ -/*****************************************************************************/ -/* J PAGET 18/02/94 passage V2.4.2 ioctl avec code 2 reset to les interrupt */ -/* ceci pour reseter correctement apres une sortie sauvage */ -/* J PAGET 02/05/94 passage V2.4.3 dans le traitement de d'interruption, */ -/* LoopCount n'etait pas initialise a 0. */ -/* F LAFORSE 04/07/95 version V2.6.0 lecture bidon apres acces a une carte */ -/* pour liberer le bus */ -/* J.PAGET 19/11/95 version V2.6.1 Nombre, addresse,irq n'est plus configure */ -/* et passe en argument a acinit, mais est scrute sur le bus pour s'adapter */ -/* au nombre de cartes presentes sur le bus. IOCL code 6 affichait V2.4.3 */ -/* F.LAFORSE 28/11/95 creation de fichiers acXX.o avec les differentes */ -/* addresses de base des cartes, IOCTL 6 plus complet */ -/* J.PAGET le 19/08/96 copie de la version V2.6 en V2.8.0 sans modification */ -/* de code autre que le texte V2.6.1 en V2.8.0 */ -/*****************************************************************************/ - - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/interrupt.h> -#include <linux/sched/signal.h> -#include <linux/slab.h> -#include <linux/errno.h> -#include <linux/mutex.h> -#include <linux/miscdevice.h> -#include <linux/pci.h> -#include <linux/wait.h> -#include <linux/init.h> -#include <linux/fs.h> -#include <linux/nospec.h> - -#include <asm/io.h> -#include <linux/uaccess.h> - -#include "applicom.h" - - -/* NOTE: We use for loops with {write,read}b() instead of - memcpy_{from,to}io throughout this driver. This is because - the board doesn't correctly handle word accesses - only - bytes. -*/ - - -#undef DEBUG - -#define MAX_BOARD 8 /* maximum of pc board possible */ -#define MAX_ISA_BOARD 4 -#define LEN_RAM_IO 0x800 - -#ifndef PCI_VENDOR_ID_APPLICOM -#define PCI_VENDOR_ID_APPLICOM 0x1389 -#define PCI_DEVICE_ID_APPLICOM_PCIGENERIC 0x0001 -#define PCI_DEVICE_ID_APPLICOM_PCI2000IBS_CAN 0x0002 -#define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003 -#endif - -static DEFINE_MUTEX(ac_mutex); -static char *applicom_pci_devnames[] = { - "PCI board", - "PCI2000IBS / PCI2000CAN", - "PCI2000PFB" -}; - -static const struct pci_device_id applicom_pci_tbl[] = { - { PCI_VDEVICE(APPLICOM, PCI_DEVICE_ID_APPLICOM_PCIGENERIC) }, - { PCI_VDEVICE(APPLICOM, PCI_DEVICE_ID_APPLICOM_PCI2000IBS_CAN) }, - { PCI_VDEVICE(APPLICOM, PCI_DEVICE_ID_APPLICOM_PCI2000PFB) }, - { 0 } -}; -MODULE_DEVICE_TABLE(pci, applicom_pci_tbl); - -MODULE_AUTHOR("David Woodhouse & Applicom International"); -MODULE_DESCRIPTION("Driver for Applicom Profibus card"); -MODULE_LICENSE("GPL"); -MODULE_ALIAS_MISCDEV(AC_MINOR); - -static struct applicom_board { - unsigned long PhysIO; - void __iomem *RamIO; - wait_queue_head_t FlagSleepSend; - long irq; - spinlock_t mutex; -} apbs[MAX_BOARD]; - -static unsigned int irq; /* interrupt number IRQ */ -static unsigned long mem; /* physical segment of board */ - -module_param_hw(irq, uint, irq, 0); -MODULE_PARM_DESC(irq, "IRQ of the Applicom board"); -module_param_hw(mem, ulong, iomem, 0); -MODULE_PARM_DESC(mem, "Shared Memory Address of Applicom board"); - -static unsigned int numboards; /* number of installed boards */ -static volatile unsigned char Dummy; -static DECLARE_WAIT_QUEUE_HEAD(FlagSleepRec); -static unsigned int WriteErrorCount; /* number of write error */ -static unsigned int ReadErrorCount; /* number of read error */ -static unsigned int DeviceErrorCount; /* number of device error */ - -static ssize_t ac_read (struct file *, char __user *, size_t, loff_t *); -static ssize_t ac_write (struct file *, const char __user *, size_t, loff_t *); -static long ac_ioctl(struct file *, unsigned int, unsigned long); -static irqreturn_t ac_interrupt(int, void *); - -static const struct file_operations ac_fops = { - .owner = THIS_MODULE, - .read = ac_read, - .write = ac_write, - .unlocked_ioctl = ac_ioctl, -}; - -static struct miscdevice ac_miscdev = { - AC_MINOR, - "ac", - &ac_fops -}; - -static int dummy; /* dev_id for request_irq() */ - -static int ac_register_board(unsigned long physloc, void __iomem *loc, - unsigned char boardno) -{ - volatile unsigned char byte_reset_it; - - if((readb(loc + CONF_END_TEST) != 0x00) || - (readb(loc + CONF_END_TEST + 1) != 0x55) || - (readb(loc + CONF_END_TEST + 2) != 0xAA) || - (readb(loc + CONF_END_TEST + 3) != 0xFF)) - return 0; - - if (!boardno) - boardno = readb(loc + NUMCARD_OWNER_TO_PC); - - if (!boardno || boardno > MAX_BOARD) { - printk(KERN_WARNING "Board #%d (at 0x%lx) is out of range (1 <= x <= %d).\n", - boardno, physloc, MAX_BOARD); - return 0; - } - - if (apbs[boardno - 1].RamIO) { - printk(KERN_WARNING "Board #%d (at 0x%lx) conflicts with previous board #%d (at 0x%lx)\n", - boardno, physloc, boardno, apbs[boardno-1].PhysIO); - return 0; - } - - boardno--; - - apbs[boardno].PhysIO = physloc; - apbs[boardno].RamIO = loc; - init_waitqueue_head(&apbs[boardno].FlagSleepSend); - spin_lock_init(&apbs[boardno].mutex); - byte_reset_it = readb(loc + RAM_IT_TO_PC); - - numboards++; - return boardno + 1; -} - -static void __exit applicom_exit(void) -{ - unsigned int i; - - misc_deregister(&ac_miscdev); - - for (i = 0; i < MAX_BOARD; i++) { - - if (!apbs[i].RamIO) - continue; - - if (apbs[i].irq) - free_irq(apbs[i].irq, &dummy); - - iounmap(apbs[i].RamIO); - } -} - -static int __init applicom_init(void) -{ - int i, numisa = 0; - struct pci_dev *dev = NULL; - void __iomem *RamIO; - int boardno, ret; - - printk(KERN_INFO "Applicom driver: $Id: ac.c,v 1.30 2000/03/22 16:03:57 dwmw2 Exp $\n"); - - /* No mem and irq given - check for a PCI card */ - - while ( (dev = pci_get_class(PCI_CLASS_OTHERS << 16, dev))) { - - if (!pci_match_id(applicom_pci_tbl, dev)) - continue; - - if (pci_enable_device(dev)) { - pci_dev_put(dev); - return -EIO; - } - - RamIO = ioremap(pci_resource_start(dev, 0), LEN_RAM_IO); - - if (!RamIO) { - printk(KERN_INFO "ac.o: Failed to ioremap PCI memory " - "space at 0x%llx\n", - (unsigned long long)pci_resource_start(dev, 0)); - pci_disable_device(dev); - pci_dev_put(dev); - return -EIO; - } - - printk(KERN_INFO "Applicom %s found at mem 0x%llx, irq %d\n", - applicom_pci_devnames[dev->device-1], - (unsigned long long)pci_resource_start(dev, 0), - dev->irq); - - boardno = ac_register_board(pci_resource_start(dev, 0), - RamIO, 0); - if (!boardno) { - printk(KERN_INFO "ac.o: PCI Applicom device doesn't have correct signature.\n"); - iounmap(RamIO); - pci_disable_device(dev); - continue; - } - - if (request_irq(dev->irq, &ac_interrupt, IRQF_SHARED, "Applicom PCI", &dummy)) { - printk(KERN_INFO "Could not allocate IRQ %d for PCI Applicom device.\n", dev->irq); - iounmap(RamIO); - pci_disable_device(dev); - apbs[boardno - 1].RamIO = NULL; - continue; - } - - /* Enable interrupts. */ - - writeb(0x40, apbs[boardno - 1].RamIO + RAM_IT_FROM_PC); - - apbs[boardno - 1].irq = dev->irq; - } - - /* Finished with PCI cards. If none registered, - * and there was no mem/irq specified, exit */ - - if (!mem || !irq) { - if (numboards) - goto fin; - else { - printk(KERN_INFO "ac.o: No PCI boards found.\n"); - printk(KERN_INFO "ac.o: For an ISA board you must supply memory and irq parameters.\n"); - return -ENXIO; - } - } - - /* Now try the specified ISA cards */ - - for (i = 0; i < MAX_ISA_BOARD; i++) { - RamIO = ioremap(mem + (LEN_RAM_IO * i), LEN_RAM_IO); - - if (!RamIO) { - printk(KERN_INFO "ac.o: Failed to ioremap the ISA card's memory space (slot #%d)\n", i + 1); - continue; - } - - if (!(boardno = ac_register_board((unsigned long)mem+ (LEN_RAM_IO*i), - RamIO,i+1))) { - iounmap(RamIO); - continue; - } - - printk(KERN_NOTICE "Applicom ISA card found at mem 0x%lx, irq %d\n", mem + (LEN_RAM_IO*i), irq); - - if (!numisa) { - if (request_irq(irq, &ac_interrupt, IRQF_SHARED, "Applicom ISA", &dummy)) { - printk(KERN_WARNING "Could not allocate IRQ %d for ISA Applicom device.\n", irq); - iounmap(RamIO); - apbs[boardno - 1].RamIO = NULL; - } - else - apbs[boardno - 1].irq = irq; - } - else - apbs[boardno - 1].irq = 0; - - numisa++; - } - - if (!numisa) - printk(KERN_WARNING "ac.o: No valid ISA Applicom boards found " - "at mem 0x%lx\n", mem); - - fin: - init_waitqueue_head(&FlagSleepRec); - - WriteErrorCount = 0; - ReadErrorCount = 0; - DeviceErrorCount = 0; - - if (numboards) { - ret = misc_register(&ac_miscdev); - if (ret) { - printk(KERN_WARNING "ac.o: Unable to register misc device\n"); - goto out; - } - for (i = 0; i < MAX_BOARD; i++) { - int serial; - char boardname[(SERIAL_NUMBER - TYPE_CARD) + 1]; - - if (!apbs[i].RamIO) - continue; - - for (serial = 0; serial < SERIAL_NUMBER - TYPE_CARD; serial++) - boardname[serial] = readb(apbs[i].RamIO + TYPE_CARD + serial); - - boardname[serial] = 0; - - - printk(KERN_INFO "Applicom board %d: %s, PROM V%d.%d", - i+1, boardname, - (int)(readb(apbs[i].RamIO + VERS) >> 4), - (int)(readb(apbs[i].RamIO + VERS) & 0xF)); - - serial = (readb(apbs[i].RamIO + SERIAL_NUMBER) << 16) + - (readb(apbs[i].RamIO + SERIAL_NUMBER + 1) << 8) + - (readb(apbs[i].RamIO + SERIAL_NUMBER + 2) ); - - if (serial != 0) - printk(" S/N %d\n", serial); - else - printk("\n"); - } - return 0; - } - - else - return -ENXIO; - -out: - for (i = 0; i < MAX_BOARD; i++) { - if (!apbs[i].RamIO) - continue; - if (apbs[i].irq) - free_irq(apbs[i].irq, &dummy); - iounmap(apbs[i].RamIO); - } - return ret; -} - -module_init(applicom_init); -module_exit(applicom_exit); - - -static ssize_t ac_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos) -{ - unsigned int NumCard; /* Board number 1 -> 8 */ - unsigned int IndexCard; /* Index board number 0 -> 7 */ - unsigned char TicCard; /* Board TIC to send */ - unsigned long flags; /* Current priority */ - struct st_ram_io st_loc; - struct mailbox tmpmailbox; -#ifdef DEBUG - int c; -#endif - DECLARE_WAITQUEUE(wait, current); - - if (count != sizeof(struct st_ram_io) + sizeof(struct mailbox)) { - static int warncount = 5; - if (warncount) { - printk(KERN_INFO "Hmmm. write() of Applicom card, length %zd != expected %zd\n", - count, sizeof(struct st_ram_io) + sizeof(struct mailbox)); - warncount--; - } - return -EINVAL; - } - - if(copy_from_user(&st_loc, buf, sizeof(struct st_ram_io))) - return -EFAULT; - - if(copy_from_user(&tmpmailbox, &buf[sizeof(struct st_ram_io)], - sizeof(struct mailbox))) - return -EFAULT; - - NumCard = st_loc.num_card; /* board number to send */ - TicCard = st_loc.tic_des_from_pc; /* tic number to send */ - IndexCard = NumCard - 1; - - if (IndexCard >= MAX_BOARD) - return -EINVAL; - IndexCard = array_index_nospec(IndexCard, MAX_BOARD); - - if (!apbs[IndexCard].RamIO) - return -EINVAL; - -#ifdef DEBUG - printk("Write to applicom card #%d. struct st_ram_io follows:", - IndexCard+1); - - for (c = 0; c < sizeof(struct st_ram_io);) { - - printk("\n%5.5X: %2.2X", c, ((unsigned char *) &st_loc)[c]); - - for (c++; c % 8 && c < sizeof(struct st_ram_io); c++) { - printk(" %2.2X", ((unsigned char *) &st_loc)[c]); - } - } - - printk("\nstruct mailbox follows:"); - - for (c = 0; c < sizeof(struct mailbox);) { - printk("\n%5.5X: %2.2X", c, ((unsigned char *) &tmpmailbox)[c]); - - for (c++; c % 8 && c < sizeof(struct mailbox); c++) { - printk(" %2.2X", ((unsigned char *) &tmpmailbox)[c]); - } - } - - printk("\n"); -#endif - - spin_lock_irqsave(&apbs[IndexCard].mutex, flags); - - /* Test octet ready correct */ - if(readb(apbs[IndexCard].RamIO + DATA_FROM_PC_READY) > 2) { - Dummy = readb(apbs[IndexCard].RamIO + VERS); - spin_unlock_irqrestore(&apbs[IndexCard].mutex, flags); - printk(KERN_WARNING "APPLICOM driver write error board %d, DataFromPcReady = %d\n", - IndexCard,(int)readb(apbs[IndexCard].RamIO + DATA_FROM_PC_READY)); - DeviceErrorCount++; - return -EIO; - } - - /* Place ourselves on the wait queue */ - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&apbs[IndexCard].FlagSleepSend, &wait); - - /* Check whether the card is ready for us */ - while (readb(apbs[IndexCard].RamIO + DATA_FROM_PC_READY) != 0) { - Dummy = readb(apbs[IndexCard].RamIO + VERS); - /* It's busy. Sleep. */ - - spin_unlock_irqrestore(&apbs[IndexCard].mutex, flags); - schedule(); - if (signal_pending(current)) { - remove_wait_queue(&apbs[IndexCard].FlagSleepSend, - &wait); - return -EINTR; - } - spin_lock_irqsave(&apbs[IndexCard].mutex, flags); - set_current_state(TASK_INTERRUPTIBLE); - } - - /* We may not have actually slept */ - set_current_state(TASK_RUNNING); - remove_wait_queue(&apbs[IndexCard].FlagSleepSend, &wait); - - writeb(1, apbs[IndexCard].RamIO + DATA_FROM_PC_READY); - - /* Which is best - lock down the pages with rawio and then - copy directly, or use bounce buffers? For now we do the latter - because it works with 2.2 still */ - { - unsigned char *from = (unsigned char *) &tmpmailbox; - void __iomem *to = apbs[IndexCard].RamIO + RAM_FROM_PC; - int c; - - for (c = 0; c < sizeof(struct mailbox); c++) - writeb(*(from++), to++); - } - - writeb(0x20, apbs[IndexCard].RamIO + TIC_OWNER_FROM_PC); - writeb(0xff, apbs[IndexCard].RamIO + NUMCARD_OWNER_FROM_PC); - writeb(TicCard, apbs[IndexCard].RamIO + TIC_DES_FROM_PC); - writeb(NumCard, apbs[IndexCard].RamIO + NUMCARD_DES_FROM_PC); - writeb(2, apbs[IndexCard].RamIO + DATA_FROM_PC_READY); - writeb(1, apbs[IndexCard].RamIO + RAM_IT_FROM_PC); - Dummy = readb(apbs[IndexCard].RamIO + VERS); - spin_unlock_irqrestore(&apbs[IndexCard].mutex, flags); - return 0; -} - -static int do_ac_read(int IndexCard, char __user *buf, - struct st_ram_io *st_loc, struct mailbox *mailbox) -{ - void __iomem *from = apbs[IndexCard].RamIO + RAM_TO_PC; - unsigned char *to = (unsigned char *)mailbox; -#ifdef DEBUG - int c; -#endif - - st_loc->tic_owner_to_pc = readb(apbs[IndexCard].RamIO + TIC_OWNER_TO_PC); - st_loc->numcard_owner_to_pc = readb(apbs[IndexCard].RamIO + NUMCARD_OWNER_TO_PC); - - - { - int c; - - for (c = 0; c < sizeof(struct mailbox); c++) - *(to++) = readb(from++); - } - writeb(1, apbs[IndexCard].RamIO + ACK_FROM_PC_READY); - writeb(1, apbs[IndexCard].RamIO + TYP_ACK_FROM_PC); - writeb(IndexCard+1, apbs[IndexCard].RamIO + NUMCARD_ACK_FROM_PC); - writeb(readb(apbs[IndexCard].RamIO + TIC_OWNER_TO_PC), - apbs[IndexCard].RamIO + TIC_ACK_FROM_PC); - writeb(2, apbs[IndexCard].RamIO + ACK_FROM_PC_READY); - writeb(0, apbs[IndexCard].RamIO + DATA_TO_PC_READY); - writeb(2, apbs[IndexCard].RamIO + RAM_IT_FROM_PC); - Dummy = readb(apbs[IndexCard].RamIO + VERS); - -#ifdef DEBUG - printk("Read from applicom card #%d. struct st_ram_io follows:", NumCard); - - for (c = 0; c < sizeof(struct st_ram_io);) { - printk("\n%5.5X: %2.2X", c, ((unsigned char *)st_loc)[c]); - - for (c++; c % 8 && c < sizeof(struct st_ram_io); c++) { - printk(" %2.2X", ((unsigned char *)st_loc)[c]); - } - } - - printk("\nstruct mailbox follows:"); - - for (c = 0; c < sizeof(struct mailbox);) { - printk("\n%5.5X: %2.2X", c, ((unsigned char *)mailbox)[c]); - - for (c++; c % 8 && c < sizeof(struct mailbox); c++) { - printk(" %2.2X", ((unsigned char *)mailbox)[c]); - } - } - printk("\n"); -#endif - return (sizeof(struct st_ram_io) + sizeof(struct mailbox)); -} - -static ssize_t ac_read (struct file *filp, char __user *buf, size_t count, loff_t *ptr) -{ - unsigned long flags; - unsigned int i; - unsigned char tmp; - int ret = 0; - DECLARE_WAITQUEUE(wait, current); -#ifdef DEBUG - int loopcount=0; -#endif - /* No need to ratelimit this. Only root can trigger it anyway */ - if (count != sizeof(struct st_ram_io) + sizeof(struct mailbox)) { - printk( KERN_WARNING "Hmmm. read() of Applicom card, length %zd != expected %zd\n", - count,sizeof(struct st_ram_io) + sizeof(struct mailbox)); - return -EINVAL; - } - - while(1) { - /* Stick ourself on the wait queue */ - set_current_state(TASK_INTERRUPTIBLE); - add_wait_queue(&FlagSleepRec, &wait); - - /* Scan each board, looking for one which has a packet for us */ - for (i=0; i < MAX_BOARD; i++) { - if (!apbs[i].RamIO) - continue; - spin_lock_irqsave(&apbs[i].mutex, flags); - - tmp = readb(apbs[i].RamIO + DATA_TO_PC_READY); - - if (tmp == 2) { - struct st_ram_io st_loc; - struct mailbox mailbox; - - /* Got a packet for us */ - memset(&st_loc, 0, sizeof(st_loc)); - ret = do_ac_read(i, buf, &st_loc, &mailbox); - spin_unlock_irqrestore(&apbs[i].mutex, flags); - set_current_state(TASK_RUNNING); - remove_wait_queue(&FlagSleepRec, &wait); - - if (copy_to_user(buf, &st_loc, sizeof(st_loc))) - return -EFAULT; - if (copy_to_user(buf + sizeof(st_loc), &mailbox, sizeof(mailbox))) - return -EFAULT; - return tmp; - } - - if (tmp > 2) { - /* Got an error */ - Dummy = readb(apbs[i].RamIO + VERS); - - spin_unlock_irqrestore(&apbs[i].mutex, flags); - set_current_state(TASK_RUNNING); - remove_wait_queue(&FlagSleepRec, &wait); - - printk(KERN_WARNING "APPLICOM driver read error board %d, DataToPcReady = %d\n", - i,(int)readb(apbs[i].RamIO + DATA_TO_PC_READY)); - DeviceErrorCount++; - return -EIO; - } - - /* Nothing for us. Try the next board */ - Dummy = readb(apbs[i].RamIO + VERS); - spin_unlock_irqrestore(&apbs[i].mutex, flags); - - } /* per board */ - - /* OK - No boards had data for us. Sleep now */ - - schedule(); - remove_wait_queue(&FlagSleepRec, &wait); - - if (signal_pending(current)) - return -EINTR; - -#ifdef DEBUG - if (loopcount++ > 2) { - printk(KERN_DEBUG "Looping in ac_read. loopcount %d\n", loopcount); - } -#endif - } -} - -static irqreturn_t ac_interrupt(int vec, void *dev_instance) -{ - unsigned int i; - unsigned int FlagInt; - unsigned int LoopCount; - int handled = 0; - - // printk("Applicom interrupt on IRQ %d occurred\n", vec); - - LoopCount = 0; - - do { - FlagInt = 0; - for (i = 0; i < MAX_BOARD; i++) { - - /* Skip if this board doesn't exist */ - if (!apbs[i].RamIO) - continue; - - spin_lock(&apbs[i].mutex); - - /* Skip if this board doesn't want attention */ - if(readb(apbs[i].RamIO + RAM_IT_TO_PC) == 0) { - spin_unlock(&apbs[i].mutex); - continue; - } - - handled = 1; - FlagInt = 1; - writeb(0, apbs[i].RamIO + RAM_IT_TO_PC); - - if (readb(apbs[i].RamIO + DATA_TO_PC_READY) > 2) { - printk(KERN_WARNING "APPLICOM driver interrupt err board %d, DataToPcReady = %d\n", - i+1,(int)readb(apbs[i].RamIO + DATA_TO_PC_READY)); - DeviceErrorCount++; - } - - if((readb(apbs[i].RamIO + DATA_FROM_PC_READY) > 2) && - (readb(apbs[i].RamIO + DATA_FROM_PC_READY) != 6)) { - - printk(KERN_WARNING "APPLICOM driver interrupt err board %d, DataFromPcReady = %d\n", - i+1,(int)readb(apbs[i].RamIO + DATA_FROM_PC_READY)); - DeviceErrorCount++; - } - - if (readb(apbs[i].RamIO + DATA_TO_PC_READY) == 2) { /* mailbox sent by the card ? */ - if (waitqueue_active(&FlagSleepRec)) { - wake_up_interruptible(&FlagSleepRec); - } - } - - if (readb(apbs[i].RamIO + DATA_FROM_PC_READY) == 0) { /* ram i/o free for write by pc ? */ - if (waitqueue_active(&apbs[i].FlagSleepSend)) { /* process sleep during read ? */ - wake_up_interruptible(&apbs[i].FlagSleepSend); - } - } - Dummy = readb(apbs[i].RamIO + VERS); - - if(readb(apbs[i].RamIO + RAM_IT_TO_PC)) { - /* There's another int waiting on this card */ - spin_unlock(&apbs[i].mutex); - i--; - } else { - spin_unlock(&apbs[i].mutex); - } - } - if (FlagInt) - LoopCount = 0; - else - LoopCount++; - } while(LoopCount < 2); - return IRQ_RETVAL(handled); -} - - - -static long ac_ioctl(struct file *file, unsigned int cmd, unsigned long arg) - -{ /* @ ADG ou ATO selon le cas */ - int i; - unsigned char IndexCard; - void __iomem *pmem; - int ret = 0; - static int warncount = 10; - volatile unsigned char byte_reset_it; - struct st_ram_io *adgl; - void __user *argp = (void __user *)arg; - - /* In general, the device is only openable by root anyway, so we're not - particularly concerned that bogus ioctls can flood the console. */ - - adgl = memdup_user(argp, sizeof(struct st_ram_io)); - if (IS_ERR(adgl)) - return PTR_ERR(adgl); - - mutex_lock(&ac_mutex); - IndexCard = adgl->num_card-1; - - if (cmd != 6 && IndexCard >= MAX_BOARD) - goto err; - IndexCard = array_index_nospec(IndexCard, MAX_BOARD); - - if (cmd != 6 && !apbs[IndexCard].RamIO) - goto err; - - switch (cmd) { - - case 0: - pmem = apbs[IndexCard].RamIO; - for (i = 0; i < sizeof(struct st_ram_io); i++) - ((unsigned char *)adgl)[i]=readb(pmem++); - if (copy_to_user(argp, adgl, sizeof(struct st_ram_io))) - ret = -EFAULT; - break; - case 1: - pmem = apbs[IndexCard].RamIO + CONF_END_TEST; - for (i = 0; i < 4; i++) - adgl->conf_end_test[i] = readb(pmem++); - for (i = 0; i < 2; i++) - adgl->error_code[i] = readb(pmem++); - for (i = 0; i < 4; i++) - adgl->parameter_error[i] = readb(pmem++); - pmem = apbs[IndexCard].RamIO + VERS; - adgl->vers = readb(pmem); - pmem = apbs[IndexCard].RamIO + TYPE_CARD; - for (i = 0; i < 20; i++) - adgl->reserv1[i] = readb(pmem++); - *(int *)&adgl->reserv1[20] = - (readb(apbs[IndexCard].RamIO + SERIAL_NUMBER) << 16) + - (readb(apbs[IndexCard].RamIO + SERIAL_NUMBER + 1) << 8) + - (readb(apbs[IndexCard].RamIO + SERIAL_NUMBER + 2) ); - - if (copy_to_user(argp, adgl, sizeof(struct st_ram_io))) - ret = -EFAULT; - break; - case 2: - pmem = apbs[IndexCard].RamIO + CONF_END_TEST; - for (i = 0; i < 10; i++) - writeb(0xff, pmem++); - writeb(adgl->data_from_pc_ready, - apbs[IndexCard].RamIO + DATA_FROM_PC_READY); - - writeb(1, apbs[IndexCard].RamIO + RAM_IT_FROM_PC); - - for (i = 0; i < MAX_BOARD; i++) { - if (apbs[i].RamIO) { - byte_reset_it = readb(apbs[i].RamIO + RAM_IT_TO_PC); - } - } - break; - case 3: - pmem = apbs[IndexCard].RamIO + TIC_DES_FROM_PC; - writeb(adgl->tic_des_from_pc, pmem); - break; - case 4: - pmem = apbs[IndexCard].RamIO + TIC_OWNER_TO_PC; - adgl->tic_owner_to_pc = readb(pmem++); - adgl->numcard_owner_to_pc = readb(pmem); - if (copy_to_user(argp, adgl,sizeof(struct st_ram_io))) - ret = -EFAULT; - break; - case 5: - writeb(adgl->num_card, apbs[IndexCard].RamIO + NUMCARD_OWNER_TO_PC); - writeb(adgl->num_card, apbs[IndexCard].RamIO + NUMCARD_DES_FROM_PC); - writeb(adgl->num_card, apbs[IndexCard].RamIO + NUMCARD_ACK_FROM_PC); - writeb(4, apbs[IndexCard].RamIO + DATA_FROM_PC_READY); - writeb(1, apbs[IndexCard].RamIO + RAM_IT_FROM_PC); - break; - case 6: - printk(KERN_INFO "APPLICOM driver release .... V2.8.0 ($Revision: 1.30 $)\n"); - printk(KERN_INFO "Number of installed boards . %d\n", (int) numboards); - printk(KERN_INFO "Segment of board ........... %X\n", (int) mem); - printk(KERN_INFO "Interrupt IRQ number ....... %d\n", (int) irq); - for (i = 0; i < MAX_BOARD; i++) { - int serial; - char boardname[(SERIAL_NUMBER - TYPE_CARD) + 1]; - - if (!apbs[i].RamIO) - continue; - - for (serial = 0; serial < SERIAL_NUMBER - TYPE_CARD; serial++) - boardname[serial] = readb(apbs[i].RamIO + TYPE_CARD + serial); - boardname[serial] = 0; - - printk(KERN_INFO "Prom version board %d ....... V%d.%d %s", - i+1, - (int)(readb(apbs[i].RamIO + VERS) >> 4), - (int)(readb(apbs[i].RamIO + VERS) & 0xF), - boardname); - - - serial = (readb(apbs[i].RamIO + SERIAL_NUMBER) << 16) + - (readb(apbs[i].RamIO + SERIAL_NUMBER + 1) << 8) + - (readb(apbs[i].RamIO + SERIAL_NUMBER + 2) ); - - if (serial != 0) - printk(" S/N %d\n", serial); - else - printk("\n"); - } - if (DeviceErrorCount != 0) - printk(KERN_INFO "DeviceErrorCount ........... %d\n", DeviceErrorCount); - if (ReadErrorCount != 0) - printk(KERN_INFO "ReadErrorCount ............. %d\n", ReadErrorCount); - if (WriteErrorCount != 0) - printk(KERN_INFO "WriteErrorCount ............ %d\n", WriteErrorCount); - if (waitqueue_active(&FlagSleepRec)) - printk(KERN_INFO "Process in read pending\n"); - for (i = 0; i < MAX_BOARD; i++) { - if (apbs[i].RamIO && waitqueue_active(&apbs[i].FlagSleepSend)) - printk(KERN_INFO "Process in write pending board %d\n",i+1); - } - break; - default: - ret = -ENOTTY; - break; - } - - if (cmd != 6) - Dummy = readb(apbs[IndexCard].RamIO + VERS); - - kfree(adgl); - mutex_unlock(&ac_mutex); - return ret; - -err: - if (warncount) { - pr_warn("APPLICOM driver IOCTL, bad board number %d\n", - (int)IndexCard + 1); - warncount--; - } - kfree(adgl); - mutex_unlock(&ac_mutex); - return -EINVAL; - -} - diff --git a/drivers/char/applicom.h b/drivers/char/applicom.h deleted file mode 100644 index 282e08f159d5c..0000000000000 --- a/drivers/char/applicom.h +++ /dev/null @@ -1,86 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* $Id: applicom.h,v 1.2 1999/08/28 15:09:49 dwmw2 Exp $ */ - - -#ifndef __LINUX_APPLICOM_H__ -#define __LINUX_APPLICOM_H__ - - -#define DATA_TO_PC_READY 0x00 -#define TIC_OWNER_TO_PC 0x01 -#define NUMCARD_OWNER_TO_PC 0x02 -#define TIC_DES_TO_PC 0x03 -#define NUMCARD_DES_TO_PC 0x04 -#define DATA_FROM_PC_READY 0x05 -#define TIC_OWNER_FROM_PC 0x06 -#define NUMCARD_OWNER_FROM_PC 0x07 -#define TIC_DES_FROM_PC 0x08 -#define NUMCARD_DES_FROM_PC 0x09 -#define ACK_FROM_PC_READY 0x0E -#define TIC_ACK_FROM_PC 0x0F -#define NUMCARD_ACK_FROM_PC 0x010 -#define TYP_ACK_FROM_PC 0x011 -#define CONF_END_TEST 0x012 -#define ERROR_CODE 0x016 -#define PARAMETER_ERROR 0x018 -#define VERS 0x01E -#define RAM_TO_PC 0x040 -#define RAM_FROM_PC 0x0170 -#define TYPE_CARD 0x03C0 -#define SERIAL_NUMBER 0x03DA -#define RAM_IT_FROM_PC 0x03FE -#define RAM_IT_TO_PC 0x03FF - -struct mailbox{ - u16 stjb_codef; /* offset 00 */ - s16 stjb_status; /* offset 02 */ - u16 stjb_ticuser_root; /* offset 04 */ - u8 stjb_piduser[4]; /* offset 06 */ - u16 stjb_mode; /* offset 0A */ - u16 stjb_time; /* offset 0C */ - u16 stjb_stop; /* offset 0E */ - u16 stjb_nfonc; /* offset 10 */ - u16 stjb_ncard; /* offset 12 */ - u16 stjb_nchan; /* offset 14 */ - u16 stjb_nes; /* offset 16 */ - u16 stjb_nb; /* offset 18 */ - u16 stjb_typvar; /* offset 1A */ - u32 stjb_adr; /* offset 1C */ - u16 stjb_ticuser_dispcyc; /* offset 20 */ - u16 stjb_ticuser_protocol; /* offset 22 */ - u8 stjb_filler[12]; /* offset 24 */ - u8 stjb_data[256]; /* offset 30 */ - }; - -struct st_ram_io -{ - unsigned char data_to_pc_ready; - unsigned char tic_owner_to_pc; - unsigned char numcard_owner_to_pc; - unsigned char tic_des_to_pc; - unsigned char numcard_des_to_pc; - unsigned char data_from_pc_ready; - unsigned char tic_owner_from_pc; - unsigned char numcard_owner_from_pc; - unsigned char tic_des_from_pc; - unsigned char numcard_des_from_pc; - unsigned char ack_to_pc_ready; - unsigned char tic_ack_to_pc; - unsigned char numcard_ack_to_pc; - unsigned char typ_ack_to_pc; - unsigned char ack_from_pc_ready; - unsigned char tic_ack_from_pc; - unsigned char numcard_ack_from_pc; - unsigned char typ_ack_from_pc; - unsigned char conf_end_test[4]; - unsigned char error_code[2]; - unsigned char parameter_error[4]; - unsigned char time_base; - unsigned char nul_inc; - unsigned char vers; - unsigned char num_card; - unsigned char reserv1[32]; -}; - - -#endif /* __LINUX_APPLICOM_H__ */ diff --git a/drivers/char/dtlk.c b/drivers/char/dtlk.c deleted file mode 100644 index 16618079298ac..0000000000000 --- a/drivers/char/dtlk.c +++ /dev/null @@ -1,663 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* -*- linux-c -*- - * dtlk.c - DoubleTalk PC driver for Linux - * - * Original author: Chris Pallotta <chris@allmedia.com> - * Current maintainer: Jim Van Zandt <jrv@vanzandt.mv.com> - * - * 2000-03-18 Jim Van Zandt: Fix polling. - * Eliminate dtlk_timer_active flag and separate dtlk_stop_timer - * function. Don't restart timer in dtlk_timer_tick. Restart timer - * in dtlk_poll after every poll. dtlk_poll returns mask (duh). - * Eliminate unused function dtlk_write_byte. Misc. code cleanups. - */ - -/* This driver is for the DoubleTalk PC, a speech synthesizer - manufactured by RC Systems (http://www.rcsys.com/). It was written - based on documentation in their User's Manual file and Developer's - Tools disk. - - The DoubleTalk PC contains four voice synthesizers: text-to-speech - (TTS), linear predictive coding (LPC), PCM/ADPCM, and CVSD. It - also has a tone generator. Output data for LPC are written to the - LPC port, and output data for the other modes are written to the - TTS port. - - Two kinds of data can be read from the DoubleTalk: status - information (in response to the "\001?" interrogation command) is - read from the TTS port, and index markers (which mark the progress - of the speech) are read from the LPC port. Not all models of the - DoubleTalk PC implement index markers. Both the TTS and LPC ports - can also display status flags. - - The DoubleTalk PC generates no interrupts. - - These characteristics are mapped into the Unix stream I/O model as - follows: - - "write" sends bytes to the TTS port. It is the responsibility of - the user program to switch modes among TTS, PCM/ADPCM, and CVSD. - This driver was written for use with the text-to-speech - synthesizer. If LPC output is needed some day, other minor device - numbers can be used to select among output modes. - - "read" gets index markers from the LPC port. If the device does - not implement index markers, the read will fail with error EINVAL. - - Status information is available using the DTLK_INTERROGATE ioctl. - - */ - -#include <linux/module.h> - -#define KERNEL -#include <linux/types.h> -#include <linux/fs.h> -#include <linux/mm.h> -#include <linux/errno.h> /* for -EBUSY */ -#include <linux/ioport.h> /* for request_region */ -#include <linux/delay.h> /* for loops_per_jiffy */ -#include <linux/sched.h> -#include <linux/mutex.h> -#include <asm/io.h> /* for inb_p, outb_p, inb, outb, etc. */ -#include <linux/uaccess.h> /* for get_user, etc. */ -#include <linux/wait.h> /* for wait_queue */ -#include <linux/init.h> /* for __init, module_{init,exit} */ -#include <linux/poll.h> /* for EPOLLIN, etc. */ -#include <linux/dtlk.h> /* local header file for DoubleTalk values */ - -#ifdef TRACING -#define TRACE_TEXT(str) printk(str); -#define TRACE_RET printk(")") -#else /* !TRACING */ -#define TRACE_TEXT(str) ((void) 0) -#define TRACE_RET ((void) 0) -#endif /* TRACING */ - -static DEFINE_MUTEX(dtlk_mutex); -static void dtlk_timer_tick(struct timer_list *unused); - -static int dtlk_major; -static int dtlk_port_lpc; -static int dtlk_port_tts; -static int dtlk_busy; -static int dtlk_has_indexing; -static unsigned int dtlk_portlist[] = -{0x25e, 0x29e, 0x2de, 0x31e, 0x35e, 0x39e, 0}; -static wait_queue_head_t dtlk_process_list; -static DEFINE_TIMER(dtlk_timer, dtlk_timer_tick); - -/* prototypes for file_operations struct */ -static ssize_t dtlk_read(struct file *, char __user *, - size_t nbytes, loff_t * ppos); -static ssize_t dtlk_write(struct file *, const char __user *, - size_t nbytes, loff_t * ppos); -static __poll_t dtlk_poll(struct file *, poll_table *); -static int dtlk_open(struct inode *, struct file *); -static int dtlk_release(struct inode *, struct file *); -static long dtlk_ioctl(struct file *file, - unsigned int cmd, unsigned long arg); - -static const struct file_operations dtlk_fops = -{ - .owner = THIS_MODULE, - .read = dtlk_read, - .write = dtlk_write, - .poll = dtlk_poll, - .unlocked_ioctl = dtlk_ioctl, - .open = dtlk_open, - .release = dtlk_release, -}; - -/* local prototypes */ -static int dtlk_dev_probe(void); -static struct dtlk_settings *dtlk_interrogate(void); -static int dtlk_readable(void); -static char dtlk_read_lpc(void); -static char dtlk_read_tts(void); -static int dtlk_writeable(void); -static char dtlk_write_bytes(const char *buf, int n); -static char dtlk_write_tts(char); -/* - static void dtlk_handle_error(char, char, unsigned int); - */ - -static ssize_t dtlk_read(struct file *file, char __user *buf, - size_t count, loff_t * ppos) -{ - unsigned int minor = iminor(file_inode(file)); - char ch; - int i = 0, retries; - - TRACE_TEXT("(dtlk_read"); - /* printk("DoubleTalk PC - dtlk_read()\n"); */ - - if (minor != DTLK_MINOR || !dtlk_has_indexing) - return -EINVAL; - - for (retries = 0; retries < loops_per_jiffy; retries++) { - while (i < count && dtlk_readable()) { - ch = dtlk_read_lpc(); - /* printk("dtlk_read() reads 0x%02x\n", ch); */ - if (put_user(ch, buf++)) - return -EFAULT; - i++; - } - if (i) - return i; - if (file->f_flags & O_NONBLOCK) - break; - msleep_interruptible(100); - } - if (retries == loops_per_jiffy) - printk(KERN_ERR "dtlk_read times out\n"); - TRACE_RET; - return -EAGAIN; -} - -static ssize_t dtlk_write(struct file *file, const char __user *buf, - size_t count, loff_t * ppos) -{ - int i = 0, retries = 0, ch; - - TRACE_TEXT("(dtlk_write"); -#ifdef TRACING - printk(" \""); - { - int i, ch; - for (i = 0; i < count; i++) { - if (get_user(ch, buf + i)) - return -EFAULT; - if (' ' <= ch && ch <= '~') - printk("%c", ch); - else - printk("\\%03o", ch); - } - printk("\""); - } -#endif - - if (iminor(file_inode(file)) != DTLK_MINOR) - return -EINVAL; - - while (1) { - while (i < count && !get_user(ch, buf) && - (ch == DTLK_CLEAR || dtlk_writeable())) { - dtlk_write_tts(ch); - buf++; - i++; - if (i % 5 == 0) - /* We yield our time until scheduled - again. This reduces the transfer - rate to 500 bytes/sec, but that's - still enough to keep up with the - speech synthesizer. */ - msleep_interruptible(1); - else { - /* the RDY bit goes zero 2-3 usec - after writing, and goes 1 again - 180-190 usec later. Here, we wait - up to 250 usec for the RDY bit to - go nonzero. */ - for (retries = 0; - retries < loops_per_jiffy / (4000/HZ); - retries++) - if (inb_p(dtlk_port_tts) & - TTS_WRITABLE) - break; - } - retries = 0; - } - if (i == count) - return i; - if (file->f_flags & O_NONBLOCK) - break; - - msleep_interruptible(1); - - if (++retries > 10 * HZ) { /* wait no more than 10 sec - from last write */ - printk("dtlk: write timeout. " - "inb_p(dtlk_port_tts) = 0x%02x\n", - inb_p(dtlk_port_tts)); - TRACE_RET; - return -EBUSY; - } - } - TRACE_RET; - return -EAGAIN; -} - -static __poll_t dtlk_poll(struct file *file, poll_table * wait) -{ - __poll_t mask = 0; - unsigned long expires; - - TRACE_TEXT(" dtlk_poll"); - /* - static long int j; - printk("."); - printk("<%ld>", jiffies-j); - j=jiffies; - */ - poll_wait(file, &dtlk_process_list, wait); - - if (dtlk_has_indexing && dtlk_readable()) { - timer_delete(&dtlk_timer); - mask = EPOLLIN | EPOLLRDNORM; - } - if (dtlk_writeable()) { - timer_delete(&dtlk_timer); - mask |= EPOLLOUT | EPOLLWRNORM; - } - /* there are no exception conditions */ - - /* There won't be any interrupts, so we set a timer instead. */ - expires = jiffies + 3*HZ / 100; - mod_timer(&dtlk_timer, expires); - - return mask; -} - -static void dtlk_timer_tick(struct timer_list *unused) -{ - TRACE_TEXT(" dtlk_timer_tick"); - wake_up_interruptible(&dtlk_process_list); -} - -static long dtlk_ioctl(struct file *file, - unsigned int cmd, - unsigned long arg) -{ - char __user *argp = (char __user *)arg; - struct dtlk_settings *sp; - char portval; - TRACE_TEXT(" dtlk_ioctl"); - - switch (cmd) { - - case DTLK_INTERROGATE: - mutex_lock(&dtlk_mutex); - sp = dtlk_interrogate(); - mutex_unlock(&dtlk_mutex); - if (copy_to_user(argp, sp, sizeof(struct dtlk_settings))) - return -EINVAL; - return 0; - - case DTLK_STATUS: - portval = inb_p(dtlk_port_tts); - return put_user(portval, argp); - - default: - return -EINVAL; - } -} - -/* Note that nobody ever sets dtlk_busy... */ -static int dtlk_open(struct inode *inode, struct file *file) -{ - TRACE_TEXT("(dtlk_open"); - - switch (iminor(inode)) { - case DTLK_MINOR: - if (dtlk_busy) - return -EBUSY; - return stream_open(inode, file); - - default: - return -ENXIO; - } -} - -static int dtlk_release(struct inode *inode, struct file *file) -{ - TRACE_TEXT("(dtlk_release"); - - switch (iminor(inode)) { - case DTLK_MINOR: - break; - - default: - break; - } - TRACE_RET; - - timer_delete_sync(&dtlk_timer); - - return 0; -} - -static int __init dtlk_init(void) -{ - int err; - - dtlk_port_lpc = 0; - dtlk_port_tts = 0; - dtlk_busy = 0; - dtlk_major = register_chrdev(0, "dtlk", &dtlk_fops); - if (dtlk_major < 0) { - printk(KERN_ERR "DoubleTalk PC - cannot register device\n"); - return dtlk_major; - } - err = dtlk_dev_probe(); - if (err) { - unregister_chrdev(dtlk_major, "dtlk"); - return err; - } - printk(", MAJOR %d\n", dtlk_major); - - init_waitqueue_head(&dtlk_process_list); - - return 0; -} - -static void __exit dtlk_cleanup (void) -{ - dtlk_write_bytes("goodbye", 8); - msleep_interruptible(500); /* nap 0.50 sec but - could be awakened - earlier by - signals... */ - - dtlk_write_tts(DTLK_CLEAR); - unregister_chrdev(dtlk_major, "dtlk"); - release_region(dtlk_port_lpc, DTLK_IO_EXTENT); -} - -module_init(dtlk_init); -module_exit(dtlk_cleanup); - -/* ------------------------------------------------------------------------ */ - -static int dtlk_readable(void) -{ -#ifdef TRACING - printk(" dtlk_readable=%u@%u", inb_p(dtlk_port_lpc) != 0x7f, jiffies); -#endif - return inb_p(dtlk_port_lpc) != 0x7f; -} - -static int dtlk_writeable(void) -{ - /* TRACE_TEXT(" dtlk_writeable"); */ -#ifdef TRACINGMORE - printk(" dtlk_writeable=%u", (inb_p(dtlk_port_tts) & TTS_WRITABLE)!=0); -#endif - return inb_p(dtlk_port_tts) & TTS_WRITABLE; -} - -static int __init dtlk_dev_probe(void) -{ - unsigned int testval = 0; - int i = 0; - struct dtlk_settings *sp; - - if (dtlk_port_lpc | dtlk_port_tts) - return -EBUSY; - - for (i = 0; dtlk_portlist[i]; i++) { -#if 0 - printk("DoubleTalk PC - Port %03x = %04x\n", - dtlk_portlist[i], (testval = inw_p(dtlk_portlist[i]))); -#endif - - if (!request_region(dtlk_portlist[i], DTLK_IO_EXTENT, - "dtlk")) - continue; - testval = inw_p(dtlk_portlist[i]); - if ((testval &= 0xfbff) == 0x107f) { - dtlk_port_lpc = dtlk_portlist[i]; - dtlk_port_tts = dtlk_port_lpc + 1; - - sp = dtlk_interrogate(); - printk("DoubleTalk PC at %03x-%03x, " - "ROM version %s, serial number %u", - dtlk_portlist[i], dtlk_portlist[i] + - DTLK_IO_EXTENT - 1, - sp->rom_version, sp->serial_number); - - /* put LPC port into known state, so - dtlk_readable() gives valid result */ - outb_p(0xff, dtlk_port_lpc); - - /* INIT string and index marker */ - dtlk_write_bytes("\036\1@\0\0012I\r", 8); - /* posting an index takes 18 msec. Here, we - wait up to 100 msec to see whether it - appears. */ - msleep_interruptible(100); - dtlk_has_indexing = dtlk_readable(); -#ifdef TRACING - printk(", indexing %d\n", dtlk_has_indexing); -#endif -#ifdef INSCOPE - { -/* This macro records ten samples read from the LPC port, for later display */ -#define LOOK \ -for (i = 0; i < 10; i++) \ - { \ - buffer[b++] = inb_p(dtlk_port_lpc); \ - __delay(loops_per_jiffy/(1000000/HZ)); \ - } - char buffer[1000]; - int b = 0, i, j; - - LOOK - outb_p(0xff, dtlk_port_lpc); - buffer[b++] = 0; - LOOK - dtlk_write_bytes("\0012I\r", 4); - buffer[b++] = 0; - __delay(50 * loops_per_jiffy / (1000/HZ)); - outb_p(0xff, dtlk_port_lpc); - buffer[b++] = 0; - LOOK - - printk("\n"); - for (j = 0; j < b; j++) - printk(" %02x", buffer[j]); - printk("\n"); - } -#endif /* INSCOPE */ - -#ifdef OUTSCOPE - { -/* This macro records ten samples read from the TTS port, for later display */ -#define LOOK \ -for (i = 0; i < 10; i++) \ - { \ - buffer[b++] = inb_p(dtlk_port_tts); \ - __delay(loops_per_jiffy/(1000000/HZ)); /* 1 us */ \ - } - char buffer[1000]; - int b = 0, i, j; - - mdelay(10); /* 10 ms */ - LOOK - outb_p(0x03, dtlk_port_tts); - buffer[b++] = 0; - LOOK - LOOK - - printk("\n"); - for (j = 0; j < b; j++) - printk(" %02x", buffer[j]); - printk("\n"); - } -#endif /* OUTSCOPE */ - - dtlk_write_bytes("Double Talk found", 18); - - return 0; - } - release_region(dtlk_portlist[i], DTLK_IO_EXTENT); - } - - printk(KERN_INFO "DoubleTalk PC - not found\n"); - return -ENODEV; -} - -/* - static void dtlk_handle_error(char op, char rc, unsigned int minor) - { - printk(KERN_INFO"\nDoubleTalk PC - MINOR: %d, OPCODE: %d, ERROR: %d\n", - minor, op, rc); - return; - } - */ - -/* interrogate the DoubleTalk PC and return its settings */ -static struct dtlk_settings *dtlk_interrogate(void) -{ - unsigned char *t; - static char buf[sizeof(struct dtlk_settings) + 1]; - int total, i; - static struct dtlk_settings status; - TRACE_TEXT("(dtlk_interrogate"); - dtlk_write_bytes("\030\001?", 3); - for (total = 0, i = 0; i < 50; i++) { - buf[total] = dtlk_read_tts(); - if (total > 2 && buf[total] == 0x7f) - break; - if (total < sizeof(struct dtlk_settings)) - total++; - } - /* - if (i==50) printk("interrogate() read overrun\n"); - for (i=0; i<sizeof(buf); i++) - printk(" %02x", buf[i]); - printk("\n"); - */ - t = buf; - status.serial_number = t[0] + t[1] * 256; /* serial number is - little endian */ - t += 2; - - i = 0; - while (*t != '\r') { - status.rom_version[i] = *t; - if (i < sizeof(status.rom_version) - 1) - i++; - t++; - } - status.rom_version[i] = 0; - t++; - - status.mode = *t++; - status.punc_level = *t++; - status.formant_freq = *t++; - status.pitch = *t++; - status.speed = *t++; - status.volume = *t++; - status.tone = *t++; - status.expression = *t++; - status.ext_dict_loaded = *t++; - status.ext_dict_status = *t++; - status.free_ram = *t++; - status.articulation = *t++; - status.reverb = *t++; - status.eob = *t++; - status.has_indexing = dtlk_has_indexing; - TRACE_RET; - return &status; -} - -static char dtlk_read_tts(void) -{ - int portval, retries = 0; - char ch; - TRACE_TEXT("(dtlk_read_tts"); - - /* verify DT is ready, read char, wait for ACK */ - do { - portval = inb_p(dtlk_port_tts); - } while ((portval & TTS_READABLE) == 0 && - retries++ < DTLK_MAX_RETRIES); - if (retries > DTLK_MAX_RETRIES) - printk(KERN_ERR "dtlk_read_tts() timeout\n"); - - ch = inb_p(dtlk_port_tts); /* input from TTS port */ - ch &= 0x7f; - outb_p(ch, dtlk_port_tts); - - retries = 0; - do { - portval = inb_p(dtlk_port_tts); - } while ((portval & TTS_READABLE) != 0 && - retries++ < DTLK_MAX_RETRIES); - if (retries > DTLK_MAX_RETRIES) - printk(KERN_ERR "dtlk_read_tts() timeout\n"); - - TRACE_RET; - return ch; -} - -static char dtlk_read_lpc(void) -{ - int retries = 0; - char ch; - TRACE_TEXT("(dtlk_read_lpc"); - - /* no need to test -- this is only called when the port is readable */ - - ch = inb_p(dtlk_port_lpc); /* input from LPC port */ - - outb_p(0xff, dtlk_port_lpc); - - /* acknowledging a read takes 3-4 - usec. Here, we wait up to 20 usec - for the acknowledgement */ - retries = (loops_per_jiffy * 20) / (1000000/HZ); - while (inb_p(dtlk_port_lpc) != 0x7f && --retries > 0); - if (retries == 0) - printk(KERN_ERR "dtlk_read_lpc() timeout\n"); - - TRACE_RET; - return ch; -} - -/* write n bytes to tts port */ -static char dtlk_write_bytes(const char *buf, int n) -{ - char val = 0; - /* printk("dtlk_write_bytes(\"%-*s\", %d)\n", n, buf, n); */ - TRACE_TEXT("(dtlk_write_bytes"); - while (n-- > 0) - val = dtlk_write_tts(*buf++); - TRACE_RET; - return val; -} - -static char dtlk_write_tts(char ch) -{ - int retries = 0; -#ifdef TRACINGMORE - printk(" dtlk_write_tts("); - if (' ' <= ch && ch <= '~') - printk("'%c'", ch); - else - printk("0x%02x", ch); -#endif - if (ch != DTLK_CLEAR) /* no flow control for CLEAR command */ - while ((inb_p(dtlk_port_tts) & TTS_WRITABLE) == 0 && - retries++ < DTLK_MAX_RETRIES) /* DT ready? */ - ; - if (retries > DTLK_MAX_RETRIES) - printk(KERN_ERR "dtlk_write_tts() timeout\n"); - - outb_p(ch, dtlk_port_tts); /* output to TTS port */ - /* the RDY bit goes zero 2-3 usec after writing, and goes - 1 again 180-190 usec later. Here, we wait up to 10 - usec for the RDY bit to go zero. */ - for (retries = 0; retries < loops_per_jiffy / (100000/HZ); retries++) - if ((inb_p(dtlk_port_tts) & TTS_WRITABLE) == 0) - break; - -#ifdef TRACINGMORE - printk(")\n"); -#endif - return 0; -} - -MODULE_DESCRIPTION("RC Systems DoubleTalk PC speech card driver"); -MODULE_LICENSE("GPL"); diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c index 46c84e5df00fd..285c6037417ab 100644 --- a/drivers/char/hpet.c +++ b/drivers/char/hpet.c @@ -976,10 +976,14 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data) static int hpet_acpi_probe(struct platform_device *pdev) { - struct acpi_device *device = ACPI_COMPANION(&pdev->dev); + struct acpi_device *device; acpi_status result; struct hpet_data data; + device = ACPI_COMPANION(&pdev->dev); + if (!device) + return -ENODEV; + memset(&data, 0, sizeof(data)); result = diff --git a/drivers/char/nvram.c b/drivers/char/nvram.c index 9eff426a92865..e89cc1f1c89ea 100644 --- a/drivers/char/nvram.c +++ b/drivers/char/nvram.c @@ -53,7 +53,6 @@ #include <asm/nvram.h> #endif -static DEFINE_MUTEX(nvram_mutex); static DEFINE_SPINLOCK(nvram_state_lock); static int nvram_open_cnt; /* #times opened */ static int nvram_open_mode; /* special open modes */ @@ -310,11 +309,8 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, break; #ifdef CONFIG_PPC32 case IOC_NVRAM_SYNC: - if (ppc_md.nvram_sync != NULL) { - mutex_lock(&nvram_mutex); + if (ppc_md.nvram_sync) ppc_md.nvram_sync(); - mutex_unlock(&nvram_mutex); - } ret = 0; break; #endif @@ -324,11 +320,8 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, if (!capable(CAP_SYS_ADMIN)) return -EACCES; - if (arch_nvram_ops.initialize != NULL) { - mutex_lock(&nvram_mutex); + if (arch_nvram_ops.initialize) ret = arch_nvram_ops.initialize(); - mutex_unlock(&nvram_mutex); - } break; case NVRAM_SETCKS: /* just set checksum, contents unchanged (maybe useful after @@ -336,11 +329,8 @@ static long nvram_misc_ioctl(struct file *file, unsigned int cmd, if (!capable(CAP_SYS_ADMIN)) return -EACCES; - if (arch_nvram_ops.set_checksum != NULL) { - mutex_lock(&nvram_mutex); + if (arch_nvram_ops.set_checksum) ret = arch_nvram_ops.set_checksum(); - mutex_unlock(&nvram_mutex); - } break; #endif /* CONFIG_X86 || CONFIG_M68K */ } diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c index 959949f04f7d9..9309cfb935be2 100644 --- a/drivers/char/sonypi.c +++ b/drivers/char/sonypi.c @@ -1118,7 +1118,11 @@ static int sonypi_disable(void) #ifdef CONFIG_ACPI static int sonypi_acpi_probe(struct platform_device *pdev) { - struct acpi_device *device = ACPI_COMPANION(&pdev->dev); + struct acpi_device *device; + + device = ACPI_COMPANION(&pdev->dev); + if (!device) + return -ENODEV; sonypi_acpi_device = device; strscpy(acpi_device_name(device), "Sony laptop hotkeys"); diff --git a/drivers/char/tlclk.c b/drivers/char/tlclk.c index 677d230a226cf..dd45fe5eb6f27 100644 --- a/drivers/char/tlclk.c +++ b/drivers/char/tlclk.c @@ -264,6 +264,7 @@ static ssize_t tlclk_read(struct file *filp, char __user *buf, size_t count, } static const struct file_operations tlclk_fops = { + .owner = THIS_MODULE, .read = tlclk_read, .open = tlclk_open, .release = tlclk_release, @@ -837,6 +838,9 @@ static void __exit tlclk_cleanup(void) misc_deregister(&tlclk_miscdev); unregister_chrdev(tlclk_major, "telco_clock"); + got_event = 1; + wake_up_all(&wq); + release_region(TLCLK_BASE, 8); timer_delete_sync(&switchover_timer); kfree(alarm_events); diff --git a/drivers/comedi/drivers/8255_pci.c b/drivers/comedi/drivers/8255_pci.c index 8498cabe4d91d..737e4cf455715 100644 --- a/drivers/comedi/drivers/8255_pci.c +++ b/drivers/comedi/drivers/8255_pci.c @@ -267,25 +267,25 @@ static int pci_8255_pci_probe(struct pci_dev *dev, static const struct pci_device_id pci_8255_pci_table[] = { #ifdef CONFIG_HAS_IOPORT - { PCI_VDEVICE(ADLINK, 0x7224), BOARD_ADLINK_PCI7224 }, - { PCI_VDEVICE(ADLINK, 0x7248), BOARD_ADLINK_PCI7248 }, - { PCI_VDEVICE(ADLINK, 0x7296), BOARD_ADLINK_PCI7296 }, - { PCI_VDEVICE(CB, 0x0028), BOARD_CB_PCIDIO24 }, - { PCI_VDEVICE(CB, 0x0014), BOARD_CB_PCIDIO24H }, - { PCI_DEVICE_SUB(PCI_VENDOR_ID_CB, 0x000b, 0x0000, 0x0000), + { PCI_VDEVICE(ADLINK, 0x7224), .driver_data = BOARD_ADLINK_PCI7224 }, + { PCI_VDEVICE(ADLINK, 0x7248), .driver_data = BOARD_ADLINK_PCI7248 }, + { PCI_VDEVICE(ADLINK, 0x7296), .driver_data = BOARD_ADLINK_PCI7296 }, + { PCI_VDEVICE(CB, 0x0028), .driver_data = BOARD_CB_PCIDIO24 }, + { PCI_VDEVICE(CB, 0x0014), .driver_data = BOARD_CB_PCIDIO24H }, + { PCI_VDEVICE_SUB(CB, 0x000b, 0x0000, 0x0000), .driver_data = BOARD_CB_PCIDIO48H_OLD }, - { PCI_DEVICE_SUB(PCI_VENDOR_ID_CB, 0x000b, PCI_VENDOR_ID_CB, 0x000b), + { PCI_VDEVICE_SUB(CB, 0x000b, PCI_VENDOR_ID_CB, 0x000b), .driver_data = BOARD_CB_PCIDIO48H_NEW }, - { PCI_VDEVICE(CB, 0x0017), BOARD_CB_PCIDIO96H }, + { PCI_VDEVICE(CB, 0x0017), .driver_data = BOARD_CB_PCIDIO96H }, #endif /* CONFIG_HAS_IOPORT */ - { PCI_VDEVICE(NI, 0x0160), BOARD_NI_PCIDIO96 }, - { PCI_VDEVICE(NI, 0x1630), BOARD_NI_PCIDIO96B }, - { PCI_VDEVICE(NI, 0x13c0), BOARD_NI_PXI6508 }, - { PCI_VDEVICE(NI, 0x0400), BOARD_NI_PCI6503 }, - { PCI_VDEVICE(NI, 0x1250), BOARD_NI_PCI6503B }, - { PCI_VDEVICE(NI, 0x17d0), BOARD_NI_PCI6503X }, - { PCI_VDEVICE(NI, 0x1800), BOARD_NI_PXI_6503 }, - { 0 } + { PCI_VDEVICE(NI, 0x0160), .driver_data = BOARD_NI_PCIDIO96 }, + { PCI_VDEVICE(NI, 0x1630), .driver_data = BOARD_NI_PCIDIO96B }, + { PCI_VDEVICE(NI, 0x13c0), .driver_data = BOARD_NI_PXI6508 }, + { PCI_VDEVICE(NI, 0x0400), .driver_data = BOARD_NI_PCI6503 }, + { PCI_VDEVICE(NI, 0x1250), .driver_data = BOARD_NI_PCI6503B }, + { PCI_VDEVICE(NI, 0x17d0), .driver_data = BOARD_NI_PCI6503X }, + { PCI_VDEVICE(NI, 0x1800), .driver_data = BOARD_NI_PXI_6503 }, + { } }; MODULE_DEVICE_TABLE(pci, pci_8255_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_1032.c b/drivers/comedi/drivers/addi_apci_1032.c index 8eec6d9402de7..9ca6980705e5f 100644 --- a/drivers/comedi/drivers/addi_apci_1032.c +++ b/drivers/comedi/drivers/addi_apci_1032.c @@ -378,8 +378,8 @@ static int apci1032_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci1032_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x1003) }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x1003) }, + { } }; MODULE_DEVICE_TABLE(pci, apci1032_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_1500.c b/drivers/comedi/drivers/addi_apci_1500.c index c94c785888898..a203e27888e2f 100644 --- a/drivers/comedi/drivers/addi_apci_1500.c +++ b/drivers/comedi/drivers/addi_apci_1500.c @@ -869,8 +869,8 @@ static int apci1500_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci1500_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMCC, 0x80fc) }, - { 0 } + { PCI_VDEVICE(AMCC, 0x80fc) }, + { } }; MODULE_DEVICE_TABLE(pci, apci1500_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_1516.c b/drivers/comedi/drivers/addi_apci_1516.c index 3c48b72dad9d5..397f06f8858a6 100644 --- a/drivers/comedi/drivers/addi_apci_1516.c +++ b/drivers/comedi/drivers/addi_apci_1516.c @@ -196,10 +196,10 @@ static int apci1516_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci1516_pci_table[] = { - { PCI_VDEVICE(ADDIDATA, 0x1000), BOARD_APCI1016 }, - { PCI_VDEVICE(ADDIDATA, 0x1001), BOARD_APCI1516 }, - { PCI_VDEVICE(ADDIDATA, 0x1002), BOARD_APCI2016 }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x1000), .driver_data = BOARD_APCI1016 }, + { PCI_VDEVICE(ADDIDATA, 0x1001), .driver_data = BOARD_APCI1516 }, + { PCI_VDEVICE(ADDIDATA, 0x1002), .driver_data = BOARD_APCI2016 }, + { } }; MODULE_DEVICE_TABLE(pci, apci1516_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_1564.c b/drivers/comedi/drivers/addi_apci_1564.c index 0cd40948bee77..a54df64afc3d3 100644 --- a/drivers/comedi/drivers/addi_apci_1564.c +++ b/drivers/comedi/drivers/addi_apci_1564.c @@ -802,8 +802,8 @@ static int apci1564_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci1564_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x1006) }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x1006) }, + { } }; MODULE_DEVICE_TABLE(pci, apci1564_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_16xx.c b/drivers/comedi/drivers/addi_apci_16xx.c index ec2c321d24317..87d62c65a4d2a 100644 --- a/drivers/comedi/drivers/addi_apci_16xx.c +++ b/drivers/comedi/drivers/addi_apci_16xx.c @@ -158,9 +158,9 @@ static int apci16xx_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci16xx_pci_table[] = { - { PCI_VDEVICE(ADDIDATA, 0x1009), BOARD_APCI1648 }, - { PCI_VDEVICE(ADDIDATA, 0x100a), BOARD_APCI1696 }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x1009), .driver_data = BOARD_APCI1648 }, + { PCI_VDEVICE(ADDIDATA, 0x100a), .driver_data = BOARD_APCI1696 }, + { } }; MODULE_DEVICE_TABLE(pci, apci16xx_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_2032.c b/drivers/comedi/drivers/addi_apci_2032.c index d0f52d5ece8ff..59bc0de4d8640 100644 --- a/drivers/comedi/drivers/addi_apci_2032.c +++ b/drivers/comedi/drivers/addi_apci_2032.c @@ -312,8 +312,8 @@ static int apci2032_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci2032_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x1004) }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x1004) }, + { } }; MODULE_DEVICE_TABLE(pci, apci2032_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_2200.c b/drivers/comedi/drivers/addi_apci_2200.c index 00378c9dddc82..686f6ec2cbb62 100644 --- a/drivers/comedi/drivers/addi_apci_2200.c +++ b/drivers/comedi/drivers/addi_apci_2200.c @@ -125,8 +125,8 @@ static int apci2200_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci2200_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x1005) }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x1005) }, + { } }; MODULE_DEVICE_TABLE(pci, apci2200_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_3120.c b/drivers/comedi/drivers/addi_apci_3120.c index 28a242e697217..049399cf56817 100644 --- a/drivers/comedi/drivers/addi_apci_3120.c +++ b/drivers/comedi/drivers/addi_apci_3120.c @@ -1098,9 +1098,9 @@ static int apci3120_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci3120_pci_table[] = { - { PCI_VDEVICE(AMCC, 0x818d), BOARD_APCI3120 }, - { PCI_VDEVICE(AMCC, 0x828d), BOARD_APCI3001 }, - { 0 } + { PCI_VDEVICE(AMCC, 0x818d), .driver_data = BOARD_APCI3120 }, + { PCI_VDEVICE(AMCC, 0x828d), .driver_data = BOARD_APCI3001 }, + { } }; MODULE_DEVICE_TABLE(pci, apci3120_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_3501.c b/drivers/comedi/drivers/addi_apci_3501.c index ecb5552f17859..3bcf5c067820c 100644 --- a/drivers/comedi/drivers/addi_apci_3501.c +++ b/drivers/comedi/drivers/addi_apci_3501.c @@ -399,8 +399,8 @@ static int apci3501_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci3501_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3001) }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x3001) }, + { } }; MODULE_DEVICE_TABLE(pci, apci3501_pci_table); diff --git a/drivers/comedi/drivers/addi_apci_3xxx.c b/drivers/comedi/drivers/addi_apci_3xxx.c index bc72273e6a291..695cce1031779 100644 --- a/drivers/comedi/drivers/addi_apci_3xxx.c +++ b/drivers/comedi/drivers/addi_apci_3xxx.c @@ -918,32 +918,32 @@ static int apci3xxx_pci_probe(struct pci_dev *dev, } static const struct pci_device_id apci3xxx_pci_table[] = { - { PCI_VDEVICE(ADDIDATA, 0x3010), BOARD_APCI3000_16 }, - { PCI_VDEVICE(ADDIDATA, 0x300f), BOARD_APCI3000_8 }, - { PCI_VDEVICE(ADDIDATA, 0x300e), BOARD_APCI3000_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3013), BOARD_APCI3006_16 }, - { PCI_VDEVICE(ADDIDATA, 0x3014), BOARD_APCI3006_8 }, - { PCI_VDEVICE(ADDIDATA, 0x3015), BOARD_APCI3006_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3016), BOARD_APCI3010_16 }, - { PCI_VDEVICE(ADDIDATA, 0x3017), BOARD_APCI3010_8 }, - { PCI_VDEVICE(ADDIDATA, 0x3018), BOARD_APCI3010_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3019), BOARD_APCI3016_16 }, - { PCI_VDEVICE(ADDIDATA, 0x301a), BOARD_APCI3016_8 }, - { PCI_VDEVICE(ADDIDATA, 0x301b), BOARD_APCI3016_4 }, - { PCI_VDEVICE(ADDIDATA, 0x301c), BOARD_APCI3100_16_4 }, - { PCI_VDEVICE(ADDIDATA, 0x301d), BOARD_APCI3100_8_4 }, - { PCI_VDEVICE(ADDIDATA, 0x301e), BOARD_APCI3106_16_4 }, - { PCI_VDEVICE(ADDIDATA, 0x301f), BOARD_APCI3106_8_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3020), BOARD_APCI3110_16_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3021), BOARD_APCI3110_8_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3022), BOARD_APCI3116_16_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3023), BOARD_APCI3116_8_4 }, - { PCI_VDEVICE(ADDIDATA, 0x300B), BOARD_APCI3003 }, - { PCI_VDEVICE(ADDIDATA, 0x3002), BOARD_APCI3002_16 }, - { PCI_VDEVICE(ADDIDATA, 0x3003), BOARD_APCI3002_8 }, - { PCI_VDEVICE(ADDIDATA, 0x3004), BOARD_APCI3002_4 }, - { PCI_VDEVICE(ADDIDATA, 0x3024), BOARD_APCI3500 }, - { 0 } + { PCI_VDEVICE(ADDIDATA, 0x3010), .driver_data = BOARD_APCI3000_16 }, + { PCI_VDEVICE(ADDIDATA, 0x300f), .driver_data = BOARD_APCI3000_8 }, + { PCI_VDEVICE(ADDIDATA, 0x300e), .driver_data = BOARD_APCI3000_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3013), .driver_data = BOARD_APCI3006_16 }, + { PCI_VDEVICE(ADDIDATA, 0x3014), .driver_data = BOARD_APCI3006_8 }, + { PCI_VDEVICE(ADDIDATA, 0x3015), .driver_data = BOARD_APCI3006_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3016), .driver_data = BOARD_APCI3010_16 }, + { PCI_VDEVICE(ADDIDATA, 0x3017), .driver_data = BOARD_APCI3010_8 }, + { PCI_VDEVICE(ADDIDATA, 0x3018), .driver_data = BOARD_APCI3010_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3019), .driver_data = BOARD_APCI3016_16 }, + { PCI_VDEVICE(ADDIDATA, 0x301a), .driver_data = BOARD_APCI3016_8 }, + { PCI_VDEVICE(ADDIDATA, 0x301b), .driver_data = BOARD_APCI3016_4 }, + { PCI_VDEVICE(ADDIDATA, 0x301c), .driver_data = BOARD_APCI3100_16_4 }, + { PCI_VDEVICE(ADDIDATA, 0x301d), .driver_data = BOARD_APCI3100_8_4 }, + { PCI_VDEVICE(ADDIDATA, 0x301e), .driver_data = BOARD_APCI3106_16_4 }, + { PCI_VDEVICE(ADDIDATA, 0x301f), .driver_data = BOARD_APCI3106_8_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3020), .driver_data = BOARD_APCI3110_16_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3021), .driver_data = BOARD_APCI3110_8_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3022), .driver_data = BOARD_APCI3116_16_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3023), .driver_data = BOARD_APCI3116_8_4 }, + { PCI_VDEVICE(ADDIDATA, 0x300B), .driver_data = BOARD_APCI3003 }, + { PCI_VDEVICE(ADDIDATA, 0x3002), .driver_data = BOARD_APCI3002_16 }, + { PCI_VDEVICE(ADDIDATA, 0x3003), .driver_data = BOARD_APCI3002_8 }, + { PCI_VDEVICE(ADDIDATA, 0x3004), .driver_data = BOARD_APCI3002_4 }, + { PCI_VDEVICE(ADDIDATA, 0x3024), .driver_data = BOARD_APCI3500 }, + { } }; MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table); diff --git a/drivers/comedi/drivers/adl_pci6208.c b/drivers/comedi/drivers/adl_pci6208.c index b27354a51f5c9..57d1af105d418 100644 --- a/drivers/comedi/drivers/adl_pci6208.c +++ b/drivers/comedi/drivers/adl_pci6208.c @@ -180,10 +180,9 @@ static int adl_pci6208_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adl_pci6208_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, 0x6208) }, - { PCI_DEVICE_SUB(PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, - 0x9999, 0x6208) }, - { 0 } + { PCI_VDEVICE(ADLINK, 0x6208) }, + { PCI_VDEVICE_SUB(PLX, PCI_DEVICE_ID_PLX_9050, 0x9999, 0x6208) }, + { } }; MODULE_DEVICE_TABLE(pci, adl_pci6208_pci_table); diff --git a/drivers/comedi/drivers/adl_pci7250.c b/drivers/comedi/drivers/adl_pci7250.c index 78c85a4024352..b2772cf17ad25 100644 --- a/drivers/comedi/drivers/adl_pci7250.c +++ b/drivers/comedi/drivers/adl_pci7250.c @@ -194,16 +194,16 @@ static int adl_pci7250_pci_probe(struct pci_dev *dev, static const struct pci_device_id adl_pci7250_pci_table[] = { #ifdef CONFIG_HAS_IOPORT - { PCI_DEVICE_SUB(PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, - 0x9999, 0x7250) }, - { PCI_DEVICE_SUB(PCI_VENDOR_ID_ADLINK, 0x7250, - 0x9999, 0x7250) }, - { PCI_DEVICE_SUB(PCI_VENDOR_ID_ADLINK, 0x7250, - PCI_VENDOR_ID_ADLINK, 0x7250) }, + { PCI_VDEVICE_SUB(PLX, PCI_DEVICE_ID_PLX_9050, + 0x9999, 0x7250) }, + { PCI_VDEVICE_SUB(ADLINK, 0x7250, + 0x9999, 0x7250) }, + { PCI_VDEVICE_SUB(ADLINK, 0x7250, + PCI_VENDOR_ID_ADLINK, 0x7250) }, #endif - { PCI_DEVICE_SUB(PCI_VENDOR_ID_ADLINK, 0x7250, - PCI_VENDOR_ID_ADLINK, 0x7000) }, /* newer LPCIe-7250 */ - { 0 } + { PCI_VDEVICE_SUB(ADLINK, 0x7250, + PCI_VENDOR_ID_ADLINK, 0x7000) }, /* newer LPCIe-7250 */ + { } }; MODULE_DEVICE_TABLE(pci, adl_pci7250_pci_table); diff --git a/drivers/comedi/drivers/adl_pci7x3x.c b/drivers/comedi/drivers/adl_pci7x3x.c index e9f22de9b6f1b..3e558a9b2ad74 100644 --- a/drivers/comedi/drivers/adl_pci7x3x.c +++ b/drivers/comedi/drivers/adl_pci7x3x.c @@ -518,13 +518,13 @@ static int adl_pci7x3x_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adl_pci7x3x_pci_table[] = { - { PCI_VDEVICE(ADLINK, 0x7230), BOARD_PCI7230 }, - { PCI_VDEVICE(ADLINK, 0x7233), BOARD_PCI7233 }, - { PCI_VDEVICE(ADLINK, 0x7234), BOARD_PCI7234 }, - { PCI_VDEVICE(ADLINK, 0x7432), BOARD_PCI7432 }, - { PCI_VDEVICE(ADLINK, 0x7433), BOARD_PCI7433 }, - { PCI_VDEVICE(ADLINK, 0x7434), BOARD_PCI7434 }, - { 0 } + { PCI_VDEVICE(ADLINK, 0x7230), .driver_data = BOARD_PCI7230 }, + { PCI_VDEVICE(ADLINK, 0x7233), .driver_data = BOARD_PCI7233 }, + { PCI_VDEVICE(ADLINK, 0x7234), .driver_data = BOARD_PCI7234 }, + { PCI_VDEVICE(ADLINK, 0x7432), .driver_data = BOARD_PCI7432 }, + { PCI_VDEVICE(ADLINK, 0x7433), .driver_data = BOARD_PCI7433 }, + { PCI_VDEVICE(ADLINK, 0x7434), .driver_data = BOARD_PCI7434 }, + { } }; MODULE_DEVICE_TABLE(pci, adl_pci7x3x_pci_table); diff --git a/drivers/comedi/drivers/adl_pci8164.c b/drivers/comedi/drivers/adl_pci8164.c index 0c513a67a2646..3b56a307a900b 100644 --- a/drivers/comedi/drivers/adl_pci8164.c +++ b/drivers/comedi/drivers/adl_pci8164.c @@ -135,8 +135,8 @@ static int adl_pci8164_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adl_pci8164_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, 0x8164) }, - { 0 } + { PCI_VDEVICE(ADLINK, 0x8164) }, + { } }; MODULE_DEVICE_TABLE(pci, adl_pci8164_pci_table); diff --git a/drivers/comedi/drivers/adl_pci9111.c b/drivers/comedi/drivers/adl_pci9111.c index 086d93f40cb98..7e8e669c21d6f 100644 --- a/drivers/comedi/drivers/adl_pci9111.c +++ b/drivers/comedi/drivers/adl_pci9111.c @@ -727,9 +727,9 @@ static int pci9111_pci_probe(struct pci_dev *dev, } static const struct pci_device_id pci9111_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, 0x9111) }, - /* { PCI_DEVICE(PCI_VENDOR_ID_ADLINK, PCI9111_HG_DEVICE_ID) }, */ - { 0 } + { PCI_VDEVICE(ADLINK, 0x9111) }, + /* { PCI_VDEVICE(ADLINK, PCI9111_HG_DEVICE_ID) }, */ + { } }; MODULE_DEVICE_TABLE(pci, pci9111_pci_table); diff --git a/drivers/comedi/drivers/adl_pci9118.c b/drivers/comedi/drivers/adl_pci9118.c index 67c663892e481..75c487bb2f5b7 100644 --- a/drivers/comedi/drivers/adl_pci9118.c +++ b/drivers/comedi/drivers/adl_pci9118.c @@ -1715,10 +1715,10 @@ static int adl_pci9118_pci_probe(struct pci_dev *dev, /* FIXME: All the supported board types have the same device ID! */ static const struct pci_device_id adl_pci9118_pci_table[] = { - { PCI_VDEVICE(AMCC, 0x80d9), BOARD_PCI9118DG }, -/* { PCI_VDEVICE(AMCC, 0x80d9), BOARD_PCI9118HG }, */ -/* { PCI_VDEVICE(AMCC, 0x80d9), BOARD_PCI9118HR }, */ - { 0 } + { PCI_VDEVICE(AMCC, 0x80d9), .driver_data = BOARD_PCI9118DG }, +/* { PCI_VDEVICE(AMCC, 0x80d9), .driver_data = BOARD_PCI9118HG }, */ +/* { PCI_VDEVICE(AMCC, 0x80d9), .driver_data = BOARD_PCI9118HR }, */ + { } }; MODULE_DEVICE_TABLE(pci, adl_pci9118_pci_table); diff --git a/drivers/comedi/drivers/adv_pci1710.c b/drivers/comedi/drivers/adv_pci1710.c index c49b0f1f52283..fc749241da416 100644 --- a/drivers/comedi/drivers/adv_pci1710.c +++ b/drivers/comedi/drivers/adv_pci1710.c @@ -892,60 +892,66 @@ static int adv_pci1710_pci_probe(struct pci_dev *dev, static const struct pci_device_id adv_pci1710_pci_table[] = { { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0x0000), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0x0000), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xb100), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xb100), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xb200), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xb200), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xc100), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xc100), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xc200), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xc200), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, 0x1000, 0xd100), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, 0x1000, 0xd100), .driver_data = BOARD_PCI1710, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0x0002), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0x0002), .driver_data = BOARD_PCI1710HG, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xb102), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xb102), .driver_data = BOARD_PCI1710HG, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xb202), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xb202), .driver_data = BOARD_PCI1710HG, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xc102), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xc102), .driver_data = BOARD_PCI1710HG, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, - PCI_VENDOR_ID_ADVANTECH, 0xc202), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, + PCI_VENDOR_ID_ADVANTECH, 0xc202), .driver_data = BOARD_PCI1710HG, }, { - PCI_DEVICE_SUB(PCI_VENDOR_ID_ADVANTECH, 0x1710, 0x1000, 0xd102), + PCI_VDEVICE_SUB(ADVANTECH, 0x1710, 0x1000, 0xd102), .driver_data = BOARD_PCI1710HG, + }, { + PCI_VDEVICE(ADVANTECH, 0x1711), + .driver_data = BOARD_PCI1711, + }, { + PCI_VDEVICE(ADVANTECH, 0x1713), + .driver_data = BOARD_PCI1713, + }, { + PCI_VDEVICE(ADVANTECH, 0x1731), + .driver_data = BOARD_PCI1731, }, - { PCI_VDEVICE(ADVANTECH, 0x1711), BOARD_PCI1711 }, - { PCI_VDEVICE(ADVANTECH, 0x1713), BOARD_PCI1713 }, - { PCI_VDEVICE(ADVANTECH, 0x1731), BOARD_PCI1731 }, - { 0 } + { } }; MODULE_DEVICE_TABLE(pci, adv_pci1710_pci_table); diff --git a/drivers/comedi/drivers/adv_pci1720.c b/drivers/comedi/drivers/adv_pci1720.c index 2619591ba3013..cc21212c5d524 100644 --- a/drivers/comedi/drivers/adv_pci1720.c +++ b/drivers/comedi/drivers/adv_pci1720.c @@ -167,8 +167,8 @@ static int adv_pci1720_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adv_pci1720_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADVANTECH, 0x1720) }, - { 0 } + { PCI_VDEVICE(ADVANTECH, 0x1720) }, + { } }; MODULE_DEVICE_TABLE(pci, adv_pci1720_pci_table); diff --git a/drivers/comedi/drivers/adv_pci1723.c b/drivers/comedi/drivers/adv_pci1723.c index e2aedb152068b..e7f55251500c8 100644 --- a/drivers/comedi/drivers/adv_pci1723.c +++ b/drivers/comedi/drivers/adv_pci1723.c @@ -208,8 +208,8 @@ static int adv_pci1723_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adv_pci1723_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADVANTECH, 0x1723) }, - { 0 } + { PCI_VDEVICE(ADVANTECH, 0x1723) }, + { } }; MODULE_DEVICE_TABLE(pci, adv_pci1723_pci_table); diff --git a/drivers/comedi/drivers/adv_pci1724.c b/drivers/comedi/drivers/adv_pci1724.c index bb43b7deeb564..e736f2bcdb044 100644 --- a/drivers/comedi/drivers/adv_pci1724.c +++ b/drivers/comedi/drivers/adv_pci1724.c @@ -189,8 +189,8 @@ static int adv_pci1724_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adv_pci1724_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADVANTECH, 0x1724) }, - { 0 } + { PCI_VDEVICE(ADVANTECH, 0x1724) }, + { } }; MODULE_DEVICE_TABLE(pci, adv_pci1724_pci_table); diff --git a/drivers/comedi/drivers/adv_pci1760.c b/drivers/comedi/drivers/adv_pci1760.c index 27f3890f471df..c9b0600be7f50 100644 --- a/drivers/comedi/drivers/adv_pci1760.c +++ b/drivers/comedi/drivers/adv_pci1760.c @@ -405,8 +405,8 @@ static int pci1760_pci_probe(struct pci_dev *dev, } static const struct pci_device_id pci1760_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ADVANTECH, 0x1760) }, - { 0 } + { PCI_VDEVICE(ADVANTECH, 0x1760) }, + { } }; MODULE_DEVICE_TABLE(pci, pci1760_pci_table); diff --git a/drivers/comedi/drivers/adv_pci_dio.c b/drivers/comedi/drivers/adv_pci_dio.c index ca80545047607..49e2b2efe46d0 100644 --- a/drivers/comedi/drivers/adv_pci_dio.c +++ b/drivers/comedi/drivers/adv_pci_dio.c @@ -768,21 +768,21 @@ static int adv_pci_dio_pci_probe(struct pci_dev *dev, } static const struct pci_device_id adv_pci_dio_pci_table[] = { - { PCI_VDEVICE(ADVANTECH, 0x1730), TYPE_PCI1730 }, - { PCI_VDEVICE(ADVANTECH, 0x1733), TYPE_PCI1733 }, - { PCI_VDEVICE(ADVANTECH, 0x1734), TYPE_PCI1734 }, - { PCI_VDEVICE(ADVANTECH, 0x1735), TYPE_PCI1735 }, - { PCI_VDEVICE(ADVANTECH, 0x1736), TYPE_PCI1736 }, - { PCI_VDEVICE(ADVANTECH, 0x1739), TYPE_PCI1739 }, - { PCI_VDEVICE(ADVANTECH, 0x1750), TYPE_PCI1750 }, - { PCI_VDEVICE(ADVANTECH, 0x1751), TYPE_PCI1751 }, - { PCI_VDEVICE(ADVANTECH, 0x1752), TYPE_PCI1752 }, - { PCI_VDEVICE(ADVANTECH, 0x1753), TYPE_PCI1753 }, - { PCI_VDEVICE(ADVANTECH, 0x1754), TYPE_PCI1754 }, - { PCI_VDEVICE(ADVANTECH, 0x1756), TYPE_PCI1756 }, - { PCI_VDEVICE(ADVANTECH, 0x1761), TYPE_PCI1761 }, - { PCI_VDEVICE(ADVANTECH, 0x1762), TYPE_PCI1762 }, - { 0 } + { PCI_VDEVICE(ADVANTECH, 0x1730), .driver_data = TYPE_PCI1730 }, + { PCI_VDEVICE(ADVANTECH, 0x1733), .driver_data = TYPE_PCI1733 }, + { PCI_VDEVICE(ADVANTECH, 0x1734), .driver_data = TYPE_PCI1734 }, + { PCI_VDEVICE(ADVANTECH, 0x1735), .driver_data = TYPE_PCI1735 }, + { PCI_VDEVICE(ADVANTECH, 0x1736), .driver_data = TYPE_PCI1736 }, + { PCI_VDEVICE(ADVANTECH, 0x1739), .driver_data = TYPE_PCI1739 }, + { PCI_VDEVICE(ADVANTECH, 0x1750), .driver_data = TYPE_PCI1750 }, + { PCI_VDEVICE(ADVANTECH, 0x1751), .driver_data = TYPE_PCI1751 }, + { PCI_VDEVICE(ADVANTECH, 0x1752), .driver_data = TYPE_PCI1752 }, + { PCI_VDEVICE(ADVANTECH, 0x1753), .driver_data = TYPE_PCI1753 }, + { PCI_VDEVICE(ADVANTECH, 0x1754), .driver_data = TYPE_PCI1754 }, + { PCI_VDEVICE(ADVANTECH, 0x1756), .driver_data = TYPE_PCI1756 }, + { PCI_VDEVICE(ADVANTECH, 0x1761), .driver_data = TYPE_PCI1761 }, + { PCI_VDEVICE(ADVANTECH, 0x1762), .driver_data = TYPE_PCI1762 }, + { } }; MODULE_DEVICE_TABLE(pci, adv_pci_dio_pci_table); diff --git a/drivers/comedi/drivers/amplc_dio200_pci.c b/drivers/comedi/drivers/amplc_dio200_pci.c index cb5b328a28e3a..b057bbdd00631 100644 --- a/drivers/comedi/drivers/amplc_dio200_pci.c +++ b/drivers/comedi/drivers/amplc_dio200_pci.c @@ -394,13 +394,13 @@ static struct comedi_driver dio200_pci_comedi_driver = { static const struct pci_device_id dio200_pci_table[] = { #ifdef CONFIG_HAS_IOPORT - { PCI_VDEVICE(AMPLICON, 0x000b), pci215_model }, - { PCI_VDEVICE(AMPLICON, 0x000a), pci272_model }, + { PCI_VDEVICE(AMPLICON, 0x000b), .driver_data = pci215_model }, + { PCI_VDEVICE(AMPLICON, 0x000a), .driver_data = pci272_model }, #endif /* CONFIG_HAS_IOPORT */ - { PCI_VDEVICE(AMPLICON, 0x0011), pcie236_model }, - { PCI_VDEVICE(AMPLICON, 0x0012), pcie215_model }, - { PCI_VDEVICE(AMPLICON, 0x0014), pcie296_model }, - {0} + { PCI_VDEVICE(AMPLICON, 0x0011), .driver_data = pcie236_model }, + { PCI_VDEVICE(AMPLICON, 0x0012), .driver_data = pcie215_model }, + { PCI_VDEVICE(AMPLICON, 0x0014), .driver_data = pcie296_model }, + { } }; MODULE_DEVICE_TABLE(pci, dio200_pci_table); diff --git a/drivers/comedi/drivers/amplc_pci224.c b/drivers/comedi/drivers/amplc_pci224.c index 1373637c2ca22..55292a28f28c3 100644 --- a/drivers/comedi/drivers/amplc_pci224.c +++ b/drivers/comedi/drivers/amplc_pci224.c @@ -1122,9 +1122,9 @@ static int amplc_pci224_pci_probe(struct pci_dev *dev, } static const struct pci_device_id amplc_pci224_pci_table[] = { - { PCI_VDEVICE(AMPLICON, 0x0007), pci224_model }, - { PCI_VDEVICE(AMPLICON, 0x0008), pci234_model }, - { 0 } + { PCI_VDEVICE(AMPLICON, 0x0007), .driver_data = pci224_model }, + { PCI_VDEVICE(AMPLICON, 0x0008), .driver_data = pci234_model }, + { } }; MODULE_DEVICE_TABLE(pci, amplc_pci224_pci_table); diff --git a/drivers/comedi/drivers/amplc_pci230.c b/drivers/comedi/drivers/amplc_pci230.c index c74209c2e83a2..aa9c502b94293 100644 --- a/drivers/comedi/drivers/amplc_pci230.c +++ b/drivers/comedi/drivers/amplc_pci230.c @@ -2554,9 +2554,9 @@ static int amplc_pci230_pci_probe(struct pci_dev *dev, } static const struct pci_device_id amplc_pci230_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, PCI_DEVICE_ID_PCI230) }, - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, PCI_DEVICE_ID_PCI260) }, - { 0 } + { PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_PCI230) }, + { PCI_VDEVICE(AMPLICON, PCI_DEVICE_ID_PCI260) }, + { } }; MODULE_DEVICE_TABLE(pci, amplc_pci230_pci_table); diff --git a/drivers/comedi/drivers/amplc_pci236.c b/drivers/comedi/drivers/amplc_pci236.c index 482eb261c3330..b5d8c9e8d48ae 100644 --- a/drivers/comedi/drivers/amplc_pci236.c +++ b/drivers/comedi/drivers/amplc_pci236.c @@ -116,8 +116,8 @@ static struct comedi_driver amplc_pci236_driver = { }; static const struct pci_device_id pci236_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, 0x0009) }, - { 0 } + { PCI_VDEVICE(AMPLICON, 0x0009) }, + { } }; MODULE_DEVICE_TABLE(pci, pci236_pci_table); diff --git a/drivers/comedi/drivers/amplc_pci263.c b/drivers/comedi/drivers/amplc_pci263.c index 1609665c4b185..5a248bf5a7d28 100644 --- a/drivers/comedi/drivers/amplc_pci263.c +++ b/drivers/comedi/drivers/amplc_pci263.c @@ -85,8 +85,8 @@ static struct comedi_driver amplc_pci263_driver = { }; static const struct pci_device_id pci263_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_AMPLICON, 0x000c) }, - {0} + { PCI_VDEVICE(AMPLICON, 0x000c) }, + { } }; MODULE_DEVICE_TABLE(pci, pci263_pci_table); diff --git a/drivers/comedi/drivers/cb_pcidas.c b/drivers/comedi/drivers/cb_pcidas.c index 8bb9b0623869f..bb6c32f902212 100644 --- a/drivers/comedi/drivers/cb_pcidas.c +++ b/drivers/comedi/drivers/cb_pcidas.c @@ -1474,15 +1474,15 @@ static int cb_pcidas_pci_probe(struct pci_dev *dev, } static const struct pci_device_id cb_pcidas_pci_table[] = { - { PCI_VDEVICE(CB, 0x0001), BOARD_PCIDAS1602_16 }, - { PCI_VDEVICE(CB, 0x000f), BOARD_PCIDAS1200 }, - { PCI_VDEVICE(CB, 0x0010), BOARD_PCIDAS1602_12 }, - { PCI_VDEVICE(CB, 0x0019), BOARD_PCIDAS1200_JR }, - { PCI_VDEVICE(CB, 0x001c), BOARD_PCIDAS1602_16_JR }, - { PCI_VDEVICE(CB, 0x004c), BOARD_PCIDAS1000 }, - { PCI_VDEVICE(CB, 0x001a), BOARD_PCIDAS1001 }, - { PCI_VDEVICE(CB, 0x001b), BOARD_PCIDAS1002 }, - { 0 } + { PCI_VDEVICE(CB, 0x0001), .driver_data = BOARD_PCIDAS1602_16 }, + { PCI_VDEVICE(CB, 0x000f), .driver_data = BOARD_PCIDAS1200 }, + { PCI_VDEVICE(CB, 0x0010), .driver_data = BOARD_PCIDAS1602_12 }, + { PCI_VDEVICE(CB, 0x0019), .driver_data = BOARD_PCIDAS1200_JR }, + { PCI_VDEVICE(CB, 0x001c), .driver_data = BOARD_PCIDAS1602_16_JR }, + { PCI_VDEVICE(CB, 0x004c), .driver_data = BOARD_PCIDAS1000 }, + { PCI_VDEVICE(CB, 0x001a), .driver_data = BOARD_PCIDAS1001 }, + { PCI_VDEVICE(CB, 0x001b), .driver_data = BOARD_PCIDAS1002 }, + { } }; MODULE_DEVICE_TABLE(pci, cb_pcidas_pci_table); diff --git a/drivers/comedi/drivers/cb_pcidas64.c b/drivers/comedi/drivers/cb_pcidas64.c index d398c6df94822..549caadc2e8d4 100644 --- a/drivers/comedi/drivers/cb_pcidas64.c +++ b/drivers/comedi/drivers/cb_pcidas64.c @@ -4074,28 +4074,28 @@ static int cb_pcidas64_pci_probe(struct pci_dev *dev, } static const struct pci_device_id cb_pcidas64_pci_table[] = { - { PCI_VDEVICE(CB, 0x001d), BOARD_PCIDAS6402_16 }, - { PCI_VDEVICE(CB, 0x001e), BOARD_PCIDAS6402_12 }, - { PCI_VDEVICE(CB, 0x0035), BOARD_PCIDAS64_M1_16 }, - { PCI_VDEVICE(CB, 0x0036), BOARD_PCIDAS64_M2_16 }, - { PCI_VDEVICE(CB, 0x0037), BOARD_PCIDAS64_M3_16 }, - { PCI_VDEVICE(CB, 0x0052), BOARD_PCIDAS4020_12 }, - { PCI_VDEVICE(CB, 0x005d), BOARD_PCIDAS6023 }, - { PCI_VDEVICE(CB, 0x005e), BOARD_PCIDAS6025 }, - { PCI_VDEVICE(CB, 0x005f), BOARD_PCIDAS6030 }, - { PCI_VDEVICE(CB, 0x0060), BOARD_PCIDAS6031 }, - { PCI_VDEVICE(CB, 0x0061), BOARD_PCIDAS6032 }, - { PCI_VDEVICE(CB, 0x0062), BOARD_PCIDAS6033 }, - { PCI_VDEVICE(CB, 0x0063), BOARD_PCIDAS6034 }, - { PCI_VDEVICE(CB, 0x0064), BOARD_PCIDAS6035 }, - { PCI_VDEVICE(CB, 0x0065), BOARD_PCIDAS6040 }, - { PCI_VDEVICE(CB, 0x0066), BOARD_PCIDAS6052 }, - { PCI_VDEVICE(CB, 0x0067), BOARD_PCIDAS6070 }, - { PCI_VDEVICE(CB, 0x0068), BOARD_PCIDAS6071 }, - { PCI_VDEVICE(CB, 0x006f), BOARD_PCIDAS6036 }, - { PCI_VDEVICE(CB, 0x0078), BOARD_PCIDAS6013 }, - { PCI_VDEVICE(CB, 0x0079), BOARD_PCIDAS6014 }, - { 0 } + { PCI_VDEVICE(CB, 0x001d), .driver_data = BOARD_PCIDAS6402_16 }, + { PCI_VDEVICE(CB, 0x001e), .driver_data = BOARD_PCIDAS6402_12 }, + { PCI_VDEVICE(CB, 0x0035), .driver_data = BOARD_PCIDAS64_M1_16 }, + { PCI_VDEVICE(CB, 0x0036), .driver_data = BOARD_PCIDAS64_M2_16 }, + { PCI_VDEVICE(CB, 0x0037), .driver_data = BOARD_PCIDAS64_M3_16 }, + { PCI_VDEVICE(CB, 0x0052), .driver_data = BOARD_PCIDAS4020_12 }, + { PCI_VDEVICE(CB, 0x005d), .driver_data = BOARD_PCIDAS6023 }, + { PCI_VDEVICE(CB, 0x005e), .driver_data = BOARD_PCIDAS6025 }, + { PCI_VDEVICE(CB, 0x005f), .driver_data = BOARD_PCIDAS6030 }, + { PCI_VDEVICE(CB, 0x0060), .driver_data = BOARD_PCIDAS6031 }, + { PCI_VDEVICE(CB, 0x0061), .driver_data = BOARD_PCIDAS6032 }, + { PCI_VDEVICE(CB, 0x0062), .driver_data = BOARD_PCIDAS6033 }, + { PCI_VDEVICE(CB, 0x0063), .driver_data = BOARD_PCIDAS6034 }, + { PCI_VDEVICE(CB, 0x0064), .driver_data = BOARD_PCIDAS6035 }, + { PCI_VDEVICE(CB, 0x0065), .driver_data = BOARD_PCIDAS6040 }, + { PCI_VDEVICE(CB, 0x0066), .driver_data = BOARD_PCIDAS6052 }, + { PCI_VDEVICE(CB, 0x0067), .driver_data = BOARD_PCIDAS6070 }, + { PCI_VDEVICE(CB, 0x0068), .driver_data = BOARD_PCIDAS6071 }, + { PCI_VDEVICE(CB, 0x006f), .driver_data = BOARD_PCIDAS6036 }, + { PCI_VDEVICE(CB, 0x0078), .driver_data = BOARD_PCIDAS6013 }, + { PCI_VDEVICE(CB, 0x0079), .driver_data = BOARD_PCIDAS6014 }, + { } }; MODULE_DEVICE_TABLE(pci, cb_pcidas64_pci_table); diff --git a/drivers/comedi/drivers/cb_pcidda.c b/drivers/comedi/drivers/cb_pcidda.c index c353d0f87da91..31f368e7c9dfc 100644 --- a/drivers/comedi/drivers/cb_pcidda.c +++ b/drivers/comedi/drivers/cb_pcidda.c @@ -396,13 +396,13 @@ static int cb_pcidda_pci_probe(struct pci_dev *dev, } static const struct pci_device_id cb_pcidda_pci_table[] = { - { PCI_VDEVICE(CB, 0x0020), BOARD_DDA02_12 }, - { PCI_VDEVICE(CB, 0x0021), BOARD_DDA04_12 }, - { PCI_VDEVICE(CB, 0x0022), BOARD_DDA08_12 }, - { PCI_VDEVICE(CB, 0x0023), BOARD_DDA02_16 }, - { PCI_VDEVICE(CB, 0x0024), BOARD_DDA04_16 }, - { PCI_VDEVICE(CB, 0x0025), BOARD_DDA08_16 }, - { 0 } + { PCI_VDEVICE(CB, 0x0020), .driver_data = BOARD_DDA02_12 }, + { PCI_VDEVICE(CB, 0x0021), .driver_data = BOARD_DDA04_12 }, + { PCI_VDEVICE(CB, 0x0022), .driver_data = BOARD_DDA08_12 }, + { PCI_VDEVICE(CB, 0x0023), .driver_data = BOARD_DDA02_16 }, + { PCI_VDEVICE(CB, 0x0024), .driver_data = BOARD_DDA04_16 }, + { PCI_VDEVICE(CB, 0x0025), .driver_data = BOARD_DDA08_16 }, + { } }; MODULE_DEVICE_TABLE(pci, cb_pcidda_pci_table); diff --git a/drivers/comedi/drivers/cb_pcimdas.c b/drivers/comedi/drivers/cb_pcimdas.c index 641c30df392e5..ae25347d83758 100644 --- a/drivers/comedi/drivers/cb_pcimdas.c +++ b/drivers/comedi/drivers/cb_pcimdas.c @@ -455,9 +455,9 @@ static int cb_pcimdas_pci_probe(struct pci_dev *dev, } static const struct pci_device_id cb_pcimdas_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_CB, 0x0056) }, /* PCIM-DAS1602/16 */ - { PCI_DEVICE(PCI_VENDOR_ID_CB, 0x0115) }, /* PCIe-DAS1602/16 */ - { 0 } + { PCI_VDEVICE(CB, 0x0056) }, /* PCIM-DAS1602/16 */ + { PCI_VDEVICE(CB, 0x0115) }, /* PCIe-DAS1602/16 */ + { } }; MODULE_DEVICE_TABLE(pci, cb_pcimdas_pci_table); diff --git a/drivers/comedi/drivers/cb_pcimdda.c b/drivers/comedi/drivers/cb_pcimdda.c index 541b5742bb1b7..2f270b044b388 100644 --- a/drivers/comedi/drivers/cb_pcimdda.c +++ b/drivers/comedi/drivers/cb_pcimdda.c @@ -172,8 +172,8 @@ static int cb_pcimdda_pci_probe(struct pci_dev *dev, } static const struct pci_device_id cb_pcimdda_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_CB, PCI_ID_PCIM_DDA06_16) }, - { 0 } + { PCI_VDEVICE(CB, PCI_ID_PCIM_DDA06_16) }, + { } }; MODULE_DEVICE_TABLE(pci, cb_pcimdda_pci_table); diff --git a/drivers/comedi/drivers/contec_pci_dio.c b/drivers/comedi/drivers/contec_pci_dio.c index 41d42ff141444..56b11a280b20c 100644 --- a/drivers/comedi/drivers/contec_pci_dio.c +++ b/drivers/comedi/drivers/contec_pci_dio.c @@ -98,8 +98,8 @@ static int contec_pci_dio_pci_probe(struct pci_dev *dev, } static const struct pci_device_id contec_pci_dio_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_CONTEC, 0x8172) }, - { 0 } + { PCI_VDEVICE(CONTEC, 0x8172) }, + { } }; MODULE_DEVICE_TABLE(pci, contec_pci_dio_pci_table); diff --git a/drivers/comedi/drivers/daqboard2000.c b/drivers/comedi/drivers/daqboard2000.c index 897bf46b95ee8..f05b8d3afc547 100644 --- a/drivers/comedi/drivers/daqboard2000.c +++ b/drivers/comedi/drivers/daqboard2000.c @@ -764,11 +764,11 @@ static int db2k_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) } static const struct pci_device_id db2k_pci_table[] = { - { PCI_DEVICE_SUB(PCI_VENDOR_ID_IOTECH, 0x0409, PCI_VENDOR_ID_IOTECH, - 0x0002), .driver_data = BOARD_DAQBOARD2000, }, - { PCI_DEVICE_SUB(PCI_VENDOR_ID_IOTECH, 0x0409, PCI_VENDOR_ID_IOTECH, - 0x0004), .driver_data = BOARD_DAQBOARD2001, }, - { 0 } + { PCI_VDEVICE_SUB(IOTECH, 0x0409, PCI_VENDOR_ID_IOTECH, 0x0002), + .driver_data = BOARD_DAQBOARD2000 }, + { PCI_VDEVICE_SUB(IOTECH, 0x0409, PCI_VENDOR_ID_IOTECH, 0x0004), + .driver_data = BOARD_DAQBOARD2001 }, + { } }; MODULE_DEVICE_TABLE(pci, db2k_pci_table); diff --git a/drivers/comedi/drivers/das08_pci.c b/drivers/comedi/drivers/das08_pci.c index 982f3ab0ccbda..a439e0ddbb6d7 100644 --- a/drivers/comedi/drivers/das08_pci.c +++ b/drivers/comedi/drivers/das08_pci.c @@ -77,8 +77,8 @@ static int das08_pci_probe(struct pci_dev *dev, } static const struct pci_device_id das08_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_CB, 0x0029) }, - { 0 } + { PCI_VDEVICE(CB, 0x0029) }, + { } }; MODULE_DEVICE_TABLE(pci, das08_pci_table); diff --git a/drivers/comedi/drivers/dt3000.c b/drivers/comedi/drivers/dt3000.c index fc6e9c30e5223..198aaf8127470 100644 --- a/drivers/comedi/drivers/dt3000.c +++ b/drivers/comedi/drivers/dt3000.c @@ -715,14 +715,14 @@ static int dt3000_pci_probe(struct pci_dev *dev, } static const struct pci_device_id dt3000_pci_table[] = { - { PCI_VDEVICE(DT, 0x0022), BOARD_DT3001 }, - { PCI_VDEVICE(DT, 0x0023), BOARD_DT3002 }, - { PCI_VDEVICE(DT, 0x0024), BOARD_DT3003 }, - { PCI_VDEVICE(DT, 0x0025), BOARD_DT3004 }, - { PCI_VDEVICE(DT, 0x0026), BOARD_DT3005 }, - { PCI_VDEVICE(DT, 0x0027), BOARD_DT3001_PGL }, - { PCI_VDEVICE(DT, 0x0028), BOARD_DT3003_PGL }, - { 0 } + { PCI_VDEVICE(DT, 0x0022), .driver_data = BOARD_DT3001 }, + { PCI_VDEVICE(DT, 0x0023), .driver_data = BOARD_DT3002 }, + { PCI_VDEVICE(DT, 0x0024), .driver_data = BOARD_DT3003 }, + { PCI_VDEVICE(DT, 0x0025), .driver_data = BOARD_DT3004 }, + { PCI_VDEVICE(DT, 0x0026), .driver_data = BOARD_DT3005 }, + { PCI_VDEVICE(DT, 0x0027), .driver_data = BOARD_DT3001_PGL }, + { PCI_VDEVICE(DT, 0x0028), .driver_data = BOARD_DT3003_PGL }, + { } }; MODULE_DEVICE_TABLE(pci, dt3000_pci_table); diff --git a/drivers/comedi/drivers/dyna_pci10xx.c b/drivers/comedi/drivers/dyna_pci10xx.c index 407a038fb3e0a..3b11bbf50648e 100644 --- a/drivers/comedi/drivers/dyna_pci10xx.c +++ b/drivers/comedi/drivers/dyna_pci10xx.c @@ -246,8 +246,8 @@ static int dyna_pci10xx_pci_probe(struct pci_dev *dev, } static const struct pci_device_id dyna_pci10xx_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_PLX, 0x1050) }, - { 0 } + { PCI_VDEVICE(PLX, 0x1050) }, + { } }; MODULE_DEVICE_TABLE(pci, dyna_pci10xx_pci_table); diff --git a/drivers/comedi/drivers/gsc_hpdi.c b/drivers/comedi/drivers/gsc_hpdi.c index c09d135df38df..b71abefabd969 100644 --- a/drivers/comedi/drivers/gsc_hpdi.c +++ b/drivers/comedi/drivers/gsc_hpdi.c @@ -703,9 +703,9 @@ static int gsc_hpdi_pci_probe(struct pci_dev *dev, } static const struct pci_device_id gsc_hpdi_pci_table[] = { - { PCI_DEVICE_SUB(PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9080, - PCI_VENDOR_ID_PLX, 0x2400) }, - { 0 } + { PCI_VDEVICE_SUB(PLX, PCI_DEVICE_ID_PLX_9080, + PCI_VENDOR_ID_PLX, 0x2400) }, + { } }; MODULE_DEVICE_TABLE(pci, gsc_hpdi_pci_table); diff --git a/drivers/comedi/drivers/icp_multi.c b/drivers/comedi/drivers/icp_multi.c index ac4b11dbd741f..2abee92bfae42 100644 --- a/drivers/comedi/drivers/icp_multi.c +++ b/drivers/comedi/drivers/icp_multi.c @@ -317,8 +317,8 @@ static int icp_multi_pci_probe(struct pci_dev *dev, } static const struct pci_device_id icp_multi_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_ICP, 0x8000) }, - { 0 } + { PCI_VDEVICE(ICP, 0x8000) }, + { } }; MODULE_DEVICE_TABLE(pci, icp_multi_pci_table); diff --git a/drivers/comedi/drivers/jr3_pci.c b/drivers/comedi/drivers/jr3_pci.c index 51287cbc3e48b..603e57dd2f139 100644 --- a/drivers/comedi/drivers/jr3_pci.c +++ b/drivers/comedi/drivers/jr3_pci.c @@ -779,12 +779,12 @@ static int jr3_pci_pci_probe(struct pci_dev *dev, } static const struct pci_device_id jr3_pci_pci_table[] = { - { PCI_VDEVICE(JR3, 0x1111), BOARD_JR3_1 }, - { PCI_VDEVICE(JR3, 0x3111), BOARD_JR3_1 }, - { PCI_VDEVICE(JR3, 0x3112), BOARD_JR3_2 }, - { PCI_VDEVICE(JR3, 0x3113), BOARD_JR3_3 }, - { PCI_VDEVICE(JR3, 0x3114), BOARD_JR3_4 }, - { 0 } + { PCI_VDEVICE(JR3, 0x1111), .driver_data = BOARD_JR3_1 }, + { PCI_VDEVICE(JR3, 0x3111), .driver_data = BOARD_JR3_1 }, + { PCI_VDEVICE(JR3, 0x3112), .driver_data = BOARD_JR3_2 }, + { PCI_VDEVICE(JR3, 0x3113), .driver_data = BOARD_JR3_3 }, + { PCI_VDEVICE(JR3, 0x3114), .driver_data = BOARD_JR3_4 }, + { } }; MODULE_DEVICE_TABLE(pci, jr3_pci_pci_table); diff --git a/drivers/comedi/drivers/ke_counter.c b/drivers/comedi/drivers/ke_counter.c index b825cf60e1e0a..40177ffc904d7 100644 --- a/drivers/comedi/drivers/ke_counter.c +++ b/drivers/comedi/drivers/ke_counter.c @@ -213,8 +213,8 @@ static int ke_counter_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ke_counter_pci_table[] = { - { PCI_DEVICE(PCI_VENDOR_ID_KOLTER, 0x0014) }, - { 0 } + { PCI_VDEVICE(KOLTER, 0x0014) }, + { } }; MODULE_DEVICE_TABLE(pci, ke_counter_pci_table); diff --git a/drivers/comedi/drivers/me4000.c b/drivers/comedi/drivers/me4000.c index effe9fdbbafe3..e62f6e5eca3d3 100644 --- a/drivers/comedi/drivers/me4000.c +++ b/drivers/comedi/drivers/me4000.c @@ -1254,20 +1254,20 @@ static int me4000_pci_probe(struct pci_dev *dev, } static const struct pci_device_id me4000_pci_table[] = { - { PCI_VDEVICE(MEILHAUS, 0x4650), BOARD_ME4650 }, - { PCI_VDEVICE(MEILHAUS, 0x4660), BOARD_ME4660 }, - { PCI_VDEVICE(MEILHAUS, 0x4661), BOARD_ME4660I }, - { PCI_VDEVICE(MEILHAUS, 0x4662), BOARD_ME4660S }, - { PCI_VDEVICE(MEILHAUS, 0x4663), BOARD_ME4660IS }, - { PCI_VDEVICE(MEILHAUS, 0x4670), BOARD_ME4670 }, - { PCI_VDEVICE(MEILHAUS, 0x4671), BOARD_ME4670I }, - { PCI_VDEVICE(MEILHAUS, 0x4672), BOARD_ME4670S }, - { PCI_VDEVICE(MEILHAUS, 0x4673), BOARD_ME4670IS }, - { PCI_VDEVICE(MEILHAUS, 0x4680), BOARD_ME4680 }, - { PCI_VDEVICE(MEILHAUS, 0x4681), BOARD_ME4680I }, - { PCI_VDEVICE(MEILHAUS, 0x4682), BOARD_ME4680S }, - { PCI_VDEVICE(MEILHAUS, 0x4683), BOARD_ME4680IS }, - { 0 } + { PCI_VDEVICE(MEILHAUS, 0x4650), .driver_data = BOARD_ME4650 }, + { PCI_VDEVICE(MEILHAUS, 0x4660), .driver_data = BOARD_ME4660 }, + { PCI_VDEVICE(MEILHAUS, 0x4661), .driver_data = BOARD_ME4660I }, + { PCI_VDEVICE(MEILHAUS, 0x4662), .driver_data = BOARD_ME4660S }, + { PCI_VDEVICE(MEILHAUS, 0x4663), .driver_data = BOARD_ME4660IS }, + { PCI_VDEVICE(MEILHAUS, 0x4670), .driver_data = BOARD_ME4670 }, + { PCI_VDEVICE(MEILHAUS, 0x4671), .driver_data = BOARD_ME4670I }, + { PCI_VDEVICE(MEILHAUS, 0x4672), .driver_data = BOARD_ME4670S }, + { PCI_VDEVICE(MEILHAUS, 0x4673), .driver_data = BOARD_ME4670IS }, + { PCI_VDEVICE(MEILHAUS, 0x4680), .driver_data = BOARD_ME4680 }, + { PCI_VDEVICE(MEILHAUS, 0x4681), .driver_data = BOARD_ME4680I }, + { PCI_VDEVICE(MEILHAUS, 0x4682), .driver_data = BOARD_ME4680S }, + { PCI_VDEVICE(MEILHAUS, 0x4683), .driver_data = BOARD_ME4680IS }, + { } }; MODULE_DEVICE_TABLE(pci, me4000_pci_table); diff --git a/drivers/comedi/drivers/me_daq.c b/drivers/comedi/drivers/me_daq.c index 2f2ea029cffc2..ff8699620ec24 100644 --- a/drivers/comedi/drivers/me_daq.c +++ b/drivers/comedi/drivers/me_daq.c @@ -538,9 +538,9 @@ static int me_daq_pci_probe(struct pci_dev *dev, } static const struct pci_device_id me_daq_pci_table[] = { - { PCI_VDEVICE(MEILHAUS, 0x2600), BOARD_ME2600 }, - { PCI_VDEVICE(MEILHAUS, 0x2000), BOARD_ME2000 }, - { 0 } + { PCI_VDEVICE(MEILHAUS, 0x2600), .driver_data = BOARD_ME2600 }, + { PCI_VDEVICE(MEILHAUS, 0x2000), .driver_data = BOARD_ME2000 }, + { } }; MODULE_DEVICE_TABLE(pci, me_daq_pci_table); diff --git a/drivers/comedi/drivers/mf6x4.c b/drivers/comedi/drivers/mf6x4.c index 14f1d5e9cd593..0e63c374bc3b8 100644 --- a/drivers/comedi/drivers/mf6x4.c +++ b/drivers/comedi/drivers/mf6x4.c @@ -290,9 +290,14 @@ static int mf6x4_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) } static const struct pci_device_id mf6x4_pci_table[] = { - { PCI_VDEVICE(HUMUSOFT, 0x0634), BOARD_MF634 }, - { PCI_VDEVICE(HUMUSOFT, 0x0624), BOARD_MF624 }, - { 0 } + { + PCI_VDEVICE(HUMUSOFT, 0x0634), + .driver_data = BOARD_MF634, + }, { + PCI_VDEVICE(HUMUSOFT, 0x0624), + .driver_data = BOARD_MF624, + }, + { } }; MODULE_DEVICE_TABLE(pci, mf6x4_pci_table); diff --git a/drivers/comedi/drivers/ni_6527.c b/drivers/comedi/drivers/ni_6527.c index ac5820085231f..8c0d27c7f8a9f 100644 --- a/drivers/comedi/drivers/ni_6527.c +++ b/drivers/comedi/drivers/ni_6527.c @@ -473,9 +473,9 @@ static int ni6527_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ni6527_pci_table[] = { - { PCI_VDEVICE(NI, 0x2b10), BOARD_PXI6527 }, - { PCI_VDEVICE(NI, 0x2b20), BOARD_PCI6527 }, - { 0 } + { PCI_VDEVICE(NI, 0x2b10), .driver_data = BOARD_PXI6527 }, + { PCI_VDEVICE(NI, 0x2b20), .driver_data = BOARD_PCI6527 }, + { } }; MODULE_DEVICE_TABLE(pci, ni6527_pci_table); diff --git a/drivers/comedi/drivers/ni_65xx.c b/drivers/comedi/drivers/ni_65xx.c index 58334de3b2539..6ab91f6e75c52 100644 --- a/drivers/comedi/drivers/ni_65xx.c +++ b/drivers/comedi/drivers/ni_65xx.c @@ -783,29 +783,29 @@ static int ni_65xx_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ni_65xx_pci_table[] = { - { PCI_VDEVICE(NI, 0x1710), BOARD_PXI6509 }, - { PCI_VDEVICE(NI, 0x7085), BOARD_PCI6509 }, - { PCI_VDEVICE(NI, 0x7086), BOARD_PXI6528 }, - { PCI_VDEVICE(NI, 0x7087), BOARD_PCI6515 }, - { PCI_VDEVICE(NI, 0x7088), BOARD_PCI6514 }, - { PCI_VDEVICE(NI, 0x70a9), BOARD_PCI6528 }, - { PCI_VDEVICE(NI, 0x70c3), BOARD_PCI6511 }, - { PCI_VDEVICE(NI, 0x70c8), BOARD_PCI6513 }, - { PCI_VDEVICE(NI, 0x70c9), BOARD_PXI6515 }, - { PCI_VDEVICE(NI, 0x70cc), BOARD_PCI6512 }, - { PCI_VDEVICE(NI, 0x70cd), BOARD_PXI6514 }, - { PCI_VDEVICE(NI, 0x70d1), BOARD_PXI6513 }, - { PCI_VDEVICE(NI, 0x70d2), BOARD_PXI6512 }, - { PCI_VDEVICE(NI, 0x70d3), BOARD_PXI6511 }, - { PCI_VDEVICE(NI, 0x7124), BOARD_PCI6510 }, - { PCI_VDEVICE(NI, 0x7125), BOARD_PCI6516 }, - { PCI_VDEVICE(NI, 0x7126), BOARD_PCI6517 }, - { PCI_VDEVICE(NI, 0x7127), BOARD_PCI6518 }, - { PCI_VDEVICE(NI, 0x7128), BOARD_PCI6519 }, - { PCI_VDEVICE(NI, 0x718b), BOARD_PCI6521 }, - { PCI_VDEVICE(NI, 0x718c), BOARD_PXI6521 }, - { PCI_VDEVICE(NI, 0x71c5), BOARD_PCI6520 }, - { 0 } + { PCI_VDEVICE(NI, 0x1710), .driver_data = BOARD_PXI6509 }, + { PCI_VDEVICE(NI, 0x7085), .driver_data = BOARD_PCI6509 }, + { PCI_VDEVICE(NI, 0x7086), .driver_data = BOARD_PXI6528 }, + { PCI_VDEVICE(NI, 0x7087), .driver_data = BOARD_PCI6515 }, + { PCI_VDEVICE(NI, 0x7088), .driver_data = BOARD_PCI6514 }, + { PCI_VDEVICE(NI, 0x70a9), .driver_data = BOARD_PCI6528 }, + { PCI_VDEVICE(NI, 0x70c3), .driver_data = BOARD_PCI6511 }, + { PCI_VDEVICE(NI, 0x70c8), .driver_data = BOARD_PCI6513 }, + { PCI_VDEVICE(NI, 0x70c9), .driver_data = BOARD_PXI6515 }, + { PCI_VDEVICE(NI, 0x70cc), .driver_data = BOARD_PCI6512 }, + { PCI_VDEVICE(NI, 0x70cd), .driver_data = BOARD_PXI6514 }, + { PCI_VDEVICE(NI, 0x70d1), .driver_data = BOARD_PXI6513 }, + { PCI_VDEVICE(NI, 0x70d2), .driver_data = BOARD_PXI6512 }, + { PCI_VDEVICE(NI, 0x70d3), .driver_data = BOARD_PXI6511 }, + { PCI_VDEVICE(NI, 0x7124), .driver_data = BOARD_PCI6510 }, + { PCI_VDEVICE(NI, 0x7125), .driver_data = BOARD_PCI6516 }, + { PCI_VDEVICE(NI, 0x7126), .driver_data = BOARD_PCI6517 }, + { PCI_VDEVICE(NI, 0x7127), .driver_data = BOARD_PCI6518 }, + { PCI_VDEVICE(NI, 0x7128), .driver_data = BOARD_PCI6519 }, + { PCI_VDEVICE(NI, 0x718b), .driver_data = BOARD_PCI6521 }, + { PCI_VDEVICE(NI, 0x718c), .driver_data = BOARD_PXI6521 }, + { PCI_VDEVICE(NI, 0x71c5), .driver_data = BOARD_PCI6520 }, + { } }; MODULE_DEVICE_TABLE(pci, ni_65xx_pci_table); diff --git a/drivers/comedi/drivers/ni_660x.c b/drivers/comedi/drivers/ni_660x.c index 0679bc39e0bc5..5508cdb1b0bac 100644 --- a/drivers/comedi/drivers/ni_660x.c +++ b/drivers/comedi/drivers/ni_660x.c @@ -1230,14 +1230,14 @@ static int ni_660x_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ni_660x_pci_table[] = { - { PCI_VDEVICE(NI, 0x1310), BOARD_PCI6602 }, - { PCI_VDEVICE(NI, 0x1360), BOARD_PXI6602 }, - { PCI_VDEVICE(NI, 0x2c60), BOARD_PCI6601 }, - { PCI_VDEVICE(NI, 0x2db0), BOARD_PCI6608 }, - { PCI_VDEVICE(NI, 0x2cc0), BOARD_PXI6608 }, - { PCI_VDEVICE(NI, 0x1e30), BOARD_PCI6624 }, - { PCI_VDEVICE(NI, 0x1e40), BOARD_PXI6624 }, - { 0 } + { PCI_VDEVICE(NI, 0x1310), .driver_data = BOARD_PCI6602 }, + { PCI_VDEVICE(NI, 0x1360), .driver_data = BOARD_PXI6602 }, + { PCI_VDEVICE(NI, 0x2c60), .driver_data = BOARD_PCI6601 }, + { PCI_VDEVICE(NI, 0x2db0), .driver_data = BOARD_PCI6608 }, + { PCI_VDEVICE(NI, 0x2cc0), .driver_data = BOARD_PXI6608 }, + { PCI_VDEVICE(NI, 0x1e30), .driver_data = BOARD_PCI6624 }, + { PCI_VDEVICE(NI, 0x1e40), .driver_data = BOARD_PXI6624 }, + { } }; MODULE_DEVICE_TABLE(pci, ni_660x_pci_table); diff --git a/drivers/comedi/drivers/ni_670x.c b/drivers/comedi/drivers/ni_670x.c index 9455c2abcc242..670ffe2c744b0 100644 --- a/drivers/comedi/drivers/ni_670x.c +++ b/drivers/comedi/drivers/ni_670x.c @@ -259,10 +259,10 @@ static int ni_670x_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ni_670x_pci_table[] = { - { PCI_VDEVICE(NI, 0x1290), BOARD_PCI6704 }, - { PCI_VDEVICE(NI, 0x1920), BOARD_PXI6704 }, - { PCI_VDEVICE(NI, 0x2c90), BOARD_PCI6703 }, - { 0 } + { PCI_VDEVICE(NI, 0x1290), .driver_data = BOARD_PCI6704 }, + { PCI_VDEVICE(NI, 0x1920), .driver_data = BOARD_PXI6704 }, + { PCI_VDEVICE(NI, 0x2c90), .driver_data = BOARD_PCI6703 }, + { } }; MODULE_DEVICE_TABLE(pci, ni_670x_pci_table); diff --git a/drivers/comedi/drivers/ni_labpc_pci.c b/drivers/comedi/drivers/ni_labpc_pci.c index e2a44bbd9fa6b..4c8cf97769249 100644 --- a/drivers/comedi/drivers/ni_labpc_pci.c +++ b/drivers/comedi/drivers/ni_labpc_pci.c @@ -106,8 +106,8 @@ static struct comedi_driver labpc_pci_comedi_driver = { }; static const struct pci_device_id labpc_pci_table[] = { - { PCI_VDEVICE(NI, 0x161), BOARD_NI_PCI1200 }, - { 0 } + { PCI_VDEVICE(NI, 0x0161), .driver_data = BOARD_NI_PCI1200 }, + { } }; MODULE_DEVICE_TABLE(pci, labpc_pci_table); diff --git a/drivers/comedi/drivers/ni_pcidio.c b/drivers/comedi/drivers/ni_pcidio.c index 2c7bb9c1ea5bd..b137bf14bcfd6 100644 --- a/drivers/comedi/drivers/ni_pcidio.c +++ b/drivers/comedi/drivers/ni_pcidio.c @@ -987,10 +987,10 @@ static int ni_pcidio_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ni_pcidio_pci_table[] = { - { PCI_VDEVICE(NI, 0x1150), BOARD_PCIDIO_32HS }, - { PCI_VDEVICE(NI, 0x12b0), BOARD_PCI6534 }, - { PCI_VDEVICE(NI, 0x1320), BOARD_PXI6533 }, - { 0 } + { PCI_VDEVICE(NI, 0x1150), .driver_data = BOARD_PCIDIO_32HS }, + { PCI_VDEVICE(NI, 0x12b0), .driver_data = BOARD_PCI6534 }, + { PCI_VDEVICE(NI, 0x1320), .driver_data = BOARD_PXI6533 }, + { } }; MODULE_DEVICE_TABLE(pci, ni_pcidio_pci_table); diff --git a/drivers/comedi/drivers/ni_pcimio.c b/drivers/comedi/drivers/ni_pcimio.c index f63c390314e1f..4be9ca4f4828c 100644 --- a/drivers/comedi/drivers/ni_pcimio.c +++ b/drivers/comedi/drivers/ni_pcimio.c @@ -1402,72 +1402,72 @@ static int ni_pcimio_pci_probe(struct pci_dev *dev, } static const struct pci_device_id ni_pcimio_pci_table[] = { - { PCI_VDEVICE(NI, 0x0162), BOARD_PCIMIO_16XE_50 }, /* 0x1620? */ - { PCI_VDEVICE(NI, 0x1170), BOARD_PCIMIO_16XE_10 }, - { PCI_VDEVICE(NI, 0x1180), BOARD_PCIMIO_16E_1 }, - { PCI_VDEVICE(NI, 0x1190), BOARD_PCIMIO_16E_4 }, - { PCI_VDEVICE(NI, 0x11b0), BOARD_PXI6070E }, - { PCI_VDEVICE(NI, 0x11c0), BOARD_PXI6040E }, - { PCI_VDEVICE(NI, 0x11d0), BOARD_PXI6030E }, - { PCI_VDEVICE(NI, 0x1270), BOARD_PCI6032E }, - { PCI_VDEVICE(NI, 0x1330), BOARD_PCI6031E }, - { PCI_VDEVICE(NI, 0x1340), BOARD_PCI6033E }, - { PCI_VDEVICE(NI, 0x1350), BOARD_PCI6071E }, - { PCI_VDEVICE(NI, 0x14e0), BOARD_PCI6110 }, - { PCI_VDEVICE(NI, 0x14f0), BOARD_PCI6111 }, - { PCI_VDEVICE(NI, 0x1580), BOARD_PXI6031E }, - { PCI_VDEVICE(NI, 0x15b0), BOARD_PXI6071E }, - { PCI_VDEVICE(NI, 0x1880), BOARD_PCI6711 }, - { PCI_VDEVICE(NI, 0x1870), BOARD_PCI6713 }, - { PCI_VDEVICE(NI, 0x18b0), BOARD_PCI6052E }, - { PCI_VDEVICE(NI, 0x18c0), BOARD_PXI6052E }, - { PCI_VDEVICE(NI, 0x2410), BOARD_PCI6733 }, - { PCI_VDEVICE(NI, 0x2420), BOARD_PXI6733 }, - { PCI_VDEVICE(NI, 0x2430), BOARD_PCI6731 }, - { PCI_VDEVICE(NI, 0x2890), BOARD_PCI6036E }, - { PCI_VDEVICE(NI, 0x28c0), BOARD_PCI6014 }, - { PCI_VDEVICE(NI, 0x2a60), BOARD_PCI6023E }, - { PCI_VDEVICE(NI, 0x2a70), BOARD_PCI6024E }, - { PCI_VDEVICE(NI, 0x2a80), BOARD_PCI6025E }, - { PCI_VDEVICE(NI, 0x2ab0), BOARD_PXI6025E }, - { PCI_VDEVICE(NI, 0x2b80), BOARD_PXI6713 }, - { PCI_VDEVICE(NI, 0x2b90), BOARD_PXI6711 }, - { PCI_VDEVICE(NI, 0x2c80), BOARD_PCI6035E }, - { PCI_VDEVICE(NI, 0x2ca0), BOARD_PCI6034E }, - { PCI_VDEVICE(NI, 0x70aa), BOARD_PCI6229 }, - { PCI_VDEVICE(NI, 0x70ab), BOARD_PCI6259 }, - { PCI_VDEVICE(NI, 0x70ac), BOARD_PCI6289 }, - { PCI_VDEVICE(NI, 0x70ad), BOARD_PXI6251 }, - { PCI_VDEVICE(NI, 0x70ae), BOARD_PXI6220 }, - { PCI_VDEVICE(NI, 0x70af), BOARD_PCI6221 }, - { PCI_VDEVICE(NI, 0x70b0), BOARD_PCI6220 }, - { PCI_VDEVICE(NI, 0x70b1), BOARD_PXI6229 }, - { PCI_VDEVICE(NI, 0x70b2), BOARD_PXI6259 }, - { PCI_VDEVICE(NI, 0x70b3), BOARD_PXI6289 }, - { PCI_VDEVICE(NI, 0x70b4), BOARD_PCI6250 }, - { PCI_VDEVICE(NI, 0x70b5), BOARD_PXI6221 }, - { PCI_VDEVICE(NI, 0x70b6), BOARD_PCI6280 }, - { PCI_VDEVICE(NI, 0x70b7), BOARD_PCI6254 }, - { PCI_VDEVICE(NI, 0x70b8), BOARD_PCI6251 }, - { PCI_VDEVICE(NI, 0x70b9), BOARD_PXI6250 }, - { PCI_VDEVICE(NI, 0x70ba), BOARD_PXI6254 }, - { PCI_VDEVICE(NI, 0x70bb), BOARD_PXI6280 }, - { PCI_VDEVICE(NI, 0x70bc), BOARD_PCI6284 }, - { PCI_VDEVICE(NI, 0x70bd), BOARD_PCI6281 }, - { PCI_VDEVICE(NI, 0x70be), BOARD_PXI6284 }, - { PCI_VDEVICE(NI, 0x70bf), BOARD_PXI6281 }, - { PCI_VDEVICE(NI, 0x70c0), BOARD_PCI6143 }, - { PCI_VDEVICE(NI, 0x70f2), BOARD_PCI6224 }, - { PCI_VDEVICE(NI, 0x70f3), BOARD_PXI6224 }, - { PCI_VDEVICE(NI, 0x710d), BOARD_PXI6143 }, - { PCI_VDEVICE(NI, 0x716c), BOARD_PCI6225 }, - { PCI_VDEVICE(NI, 0x716d), BOARD_PXI6225 }, - { PCI_VDEVICE(NI, 0x717d), BOARD_PCIE6251 }, - { PCI_VDEVICE(NI, 0x717f), BOARD_PCIE6259 }, - { PCI_VDEVICE(NI, 0x71bc), BOARD_PCI6221_37PIN }, - { PCI_VDEVICE(NI, 0x72e8), BOARD_PXIE6251 }, - { PCI_VDEVICE(NI, 0x72e9), BOARD_PXIE6259 }, - { 0 } + { PCI_VDEVICE(NI, 0x0162), .driver_data = BOARD_PCIMIO_16XE_50 }, /* 0x1620? */ + { PCI_VDEVICE(NI, 0x1170), .driver_data = BOARD_PCIMIO_16XE_10 }, + { PCI_VDEVICE(NI, 0x1180), .driver_data = BOARD_PCIMIO_16E_1 }, + { PCI_VDEVICE(NI, 0x1190), .driver_data = BOARD_PCIMIO_16E_4 }, + { PCI_VDEVICE(NI, 0x11b0), .driver_data = BOARD_PXI6070E }, + { PCI_VDEVICE(NI, 0x11c0), .driver_data = BOARD_PXI6040E }, + { PCI_VDEVICE(NI, 0x11d0), .driver_data = BOARD_PXI6030E }, + { PCI_VDEVICE(NI, 0x1270), .driver_data = BOARD_PCI6032E }, + { PCI_VDEVICE(NI, 0x1330), .driver_data = BOARD_PCI6031E }, + { PCI_VDEVICE(NI, 0x1340), .driver_data = BOARD_PCI6033E }, + { PCI_VDEVICE(NI, 0x1350), .driver_data = BOARD_PCI6071E }, + { PCI_VDEVICE(NI, 0x14e0), .driver_data = BOARD_PCI6110 }, + { PCI_VDEVICE(NI, 0x14f0), .driver_data = BOARD_PCI6111 }, + { PCI_VDEVICE(NI, 0x1580), .driver_data = BOARD_PXI6031E }, + { PCI_VDEVICE(NI, 0x15b0), .driver_data = BOARD_PXI6071E }, + { PCI_VDEVICE(NI, 0x1880), .driver_data = BOARD_PCI6711 }, + { PCI_VDEVICE(NI, 0x1870), .driver_data = BOARD_PCI6713 }, + { PCI_VDEVICE(NI, 0x18b0), .driver_data = BOARD_PCI6052E }, + { PCI_VDEVICE(NI, 0x18c0), .driver_data = BOARD_PXI6052E }, + { PCI_VDEVICE(NI, 0x2410), .driver_data = BOARD_PCI6733 }, + { PCI_VDEVICE(NI, 0x2420), .driver_data = BOARD_PXI6733 }, + { PCI_VDEVICE(NI, 0x2430), .driver_data = BOARD_PCI6731 }, + { PCI_VDEVICE(NI, 0x2890), .driver_data = BOARD_PCI6036E }, + { PCI_VDEVICE(NI, 0x28c0), .driver_data = BOARD_PCI6014 }, + { PCI_VDEVICE(NI, 0x2a60), .driver_data = BOARD_PCI6023E }, + { PCI_VDEVICE(NI, 0x2a70), .driver_data = BOARD_PCI6024E }, + { PCI_VDEVICE(NI, 0x2a80), .driver_data = BOARD_PCI6025E }, + { PCI_VDEVICE(NI, 0x2ab0), .driver_data = BOARD_PXI6025E }, + { PCI_VDEVICE(NI, 0x2b80), .driver_data = BOARD_PXI6713 }, + { PCI_VDEVICE(NI, 0x2b90), .driver_data = BOARD_PXI6711 }, + { PCI_VDEVICE(NI, 0x2c80), .driver_data = BOARD_PCI6035E }, + { PCI_VDEVICE(NI, 0x2ca0), .driver_data = BOARD_PCI6034E }, + { PCI_VDEVICE(NI, 0x70aa), .driver_data = BOARD_PCI6229 }, + { PCI_VDEVICE(NI, 0x70ab), .driver_data = BOARD_PCI6259 }, + { PCI_VDEVICE(NI, 0x70ac), .driver_data = BOARD_PCI6289 }, + { PCI_VDEVICE(NI, 0x70ad), .driver_data = BOARD_PXI6251 }, + { PCI_VDEVICE(NI, 0x70ae), .driver_data = BOARD_PXI6220 }, + { PCI_VDEVICE(NI, 0x70af), .driver_data = BOARD_PCI6221 }, + { PCI_VDEVICE(NI, 0x70b0), .driver_data = BOARD_PCI6220 }, + { PCI_VDEVICE(NI, 0x70b1), .driver_data = BOARD_PXI6229 }, + { PCI_VDEVICE(NI, 0x70b2), .driver_data = BOARD_PXI6259 }, + { PCI_VDEVICE(NI, 0x70b3), .driver_data = BOARD_PXI6289 }, + { PCI_VDEVICE(NI, 0x70b4), .driver_data = BOARD_PCI6250 }, + { PCI_VDEVICE(NI, 0x70b5), .driver_data = BOARD_PXI6221 }, + { PCI_VDEVICE(NI, 0x70b6), .driver_data = BOARD_PCI6280 }, + { PCI_VDEVICE(NI, 0x70b7), .driver_data = BOARD_PCI6254 }, + { PCI_VDEVICE(NI, 0x70b8), .driver_data = BOARD_PCI6251 }, + { PCI_VDEVICE(NI, 0x70b9), .driver_data = BOARD_PXI6250 }, + { PCI_VDEVICE(NI, 0x70ba), .driver_data = BOARD_PXI6254 }, + { PCI_VDEVICE(NI, 0x70bb), .driver_data = BOARD_PXI6280 }, + { PCI_VDEVICE(NI, 0x70bc), .driver_data = BOARD_PCI6284 }, + { PCI_VDEVICE(NI, 0x70bd), .driver_data = BOARD_PCI6281 }, + { PCI_VDEVICE(NI, 0x70be), .driver_data = BOARD_PXI6284 }, + { PCI_VDEVICE(NI, 0x70bf), .driver_data = BOARD_PXI6281 }, + { PCI_VDEVICE(NI, 0x70c0), .driver_data = BOARD_PCI6143 }, + { PCI_VDEVICE(NI, 0x70f2), .driver_data = BOARD_PCI6224 }, + { PCI_VDEVICE(NI, 0x70f3), .driver_data = BOARD_PXI6224 }, + { PCI_VDEVICE(NI, 0x710d), .driver_data = BOARD_PXI6143 }, + { PCI_VDEVICE(NI, 0x716c), .driver_data = BOARD_PCI6225 }, + { PCI_VDEVICE(NI, 0x716d), .driver_data = BOARD_PXI6225 }, + { PCI_VDEVICE(NI, 0x717d), .driver_data = BOARD_PCIE6251 }, + { PCI_VDEVICE(NI, 0x717f), .driver_data = BOARD_PCIE6259 }, + { PCI_VDEVICE(NI, 0x71bc), .driver_data = BOARD_PCI6221_37PIN }, + { PCI_VDEVICE(NI, 0x72e8), .driver_data = BOARD_PXIE6251 }, + { PCI_VDEVICE(NI, 0x72e9), .driver_data = BOARD_PXIE6259 }, + { } }; MODULE_DEVICE_TABLE(pci, ni_pcimio_pci_table); diff --git a/drivers/comedi/drivers/rtd520.c b/drivers/comedi/drivers/rtd520.c index 44bb0decd7a4e..0575913abfe72 100644 --- a/drivers/comedi/drivers/rtd520.c +++ b/drivers/comedi/drivers/rtd520.c @@ -1345,9 +1345,9 @@ static int rtd520_pci_probe(struct pci_dev *dev, } static const struct pci_device_id rtd520_pci_table[] = { - { PCI_VDEVICE(RTD, 0x7520), BOARD_DM7520 }, - { PCI_VDEVICE(RTD, 0x4520), BOARD_PCI4520 }, - { 0 } + { PCI_VDEVICE(RTD, 0x7520), .driver_data = BOARD_DM7520 }, + { PCI_VDEVICE(RTD, 0x4520), .driver_data = BOARD_PCI4520 }, + { } }; MODULE_DEVICE_TABLE(pci, rtd520_pci_table); diff --git a/drivers/comedi/drivers/s626.c b/drivers/comedi/drivers/s626.c index 0e5f9a9a7fd35..ce7ae6b6d40b5 100644 --- a/drivers/comedi/drivers/s626.c +++ b/drivers/comedi/drivers/s626.c @@ -2585,9 +2585,9 @@ static int s626_pci_probe(struct pci_dev *dev, * Philips SAA7146 media/dvb based cards. */ static const struct pci_device_id s626_pci_table[] = { - { PCI_DEVICE_SUB(PCI_VENDOR_ID_PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA7146, - 0x6000, 0x0272) }, - { 0 } + { PCI_VDEVICE_SUB(PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA7146, + 0x6000, 0x0272) }, + { } }; MODULE_DEVICE_TABLE(pci, s626_pci_table); diff --git a/drivers/gpib/agilent_82357a/agilent_82357a.c b/drivers/gpib/agilent_82357a/agilent_82357a.c index 770ba6eb40d1d..2468a471d1755 100644 --- a/drivers/gpib/agilent_82357a/agilent_82357a.c +++ b/drivers/gpib/agilent_82357a/agilent_82357a.c @@ -1298,7 +1298,7 @@ static inline int agilent_82357a_device_match(struct usb_interface *interface, if (gpib_match_device_path(&interface->dev, config->device_path) == 0) return 0; if (config->serial_number && - strcmp(usbdev->serial, config->serial_number) != 0) + (!usbdev->serial || strcmp(usbdev->serial, config->serial_number) != 0)) return 0; return 1; diff --git a/drivers/gpib/common/gpib_os.c b/drivers/gpib/common/gpib_os.c index 5909274ddc122..69f6aa73ab9a3 100644 --- a/drivers/gpib/common/gpib_os.c +++ b/drivers/gpib/common/gpib_os.c @@ -544,13 +544,6 @@ int ibopen(struct inode *inode, struct file *filep) priv = filep->private_data; init_gpib_file_private((struct gpib_file_private *)filep->private_data); - if (board->use_count == 0) { - int retval; - - retval = request_module("gpib%i", minor); - if (retval) - dev_dbg(board->gpib_dev, "request module returned %i\n", retval); - } if (board->interface) { if (!try_module_get(board->provider_module)) { dev_err(board->gpib_dev, "try_module_get() failed\n"); @@ -613,7 +606,7 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) unsigned int minor = iminor(file_inode(filep)); struct gpib_board *board; struct gpib_file_private *file_priv = filep->private_data; - long retval = -ENOTTY; + long retval = -EBADRQC; if (minor >= GPIB_MAX_NUM_BOARDS) { pr_err("gpib: invalid minor number of device file\n"); @@ -806,7 +799,6 @@ long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg) mutex_unlock(&board->big_gpib_mutex); return write_ioctl(file_priv, board, arg); default: - retval = -ENOTTY; goto done; } @@ -1018,7 +1010,6 @@ static int command_ioctl(struct gpib_file_private *file_priv, userbuf += bytes_written; if (retval < 0) { atomic_set(&desc->io_in_progress, 0); - atomic_dec(&desc->descriptor_busy); wake_up_interruptible(&board->wait); break; diff --git a/drivers/gpib/ines/ines.h b/drivers/gpib/ines/ines.h index 6ad57e9a12166..22af596828700 100644 --- a/drivers/gpib/ines/ines.h +++ b/drivers/gpib/ines/ines.h @@ -21,6 +21,7 @@ enum ines_pci_chip { PCI_CHIP_AMCC5920, PCI_CHIP_QUANCOM, PCI_CHIP_QUICKLOGIC5030, + PCI_CHIP_INES_72130, }; struct ines_priv { @@ -162,4 +163,19 @@ enum ines_auxd_bits { INES_T6_50us = 0x10, }; +enum ines72130_regs { + BUS_STATUS_REG = 0xc, +}; + +enum ines_72130_bus_status_bits { + BSR_NRFD_BIT = 0x1, + BSR_NDAC_BIT = 0x2, + BSR_DAV_BIT = 0x4, + BSR_EOI_BIT = 0x8, + BSR_SRQ_BIT = 0x10, + BSR_ATN_BIT = 0x20, + BSR_REN_BIT = 0x40, + BSR_IFC_BIT = 0x80, +}; + #endif // _INES_GPIB_H diff --git a/drivers/gpib/ines/ines_gpib.c b/drivers/gpib/ines/ines_gpib.c index c000f647fbb57..3562f3184c288 100644 --- a/drivers/gpib/ines/ines_gpib.c +++ b/drivers/gpib/ines/ines_gpib.c @@ -57,6 +57,34 @@ static int ines_line_status(const struct gpib_board *board) return status; } +static int ines72130_line_status(const struct gpib_board *board) +{ + int status = VALID_ALL; + int bsr_bits; + struct ines_priv *ines_priv = board->private_data; + + bsr_bits = ines_inb(ines_priv, BUS_STATUS_REG); + + if (bsr_bits & BSR_REN_BIT) + status |= BUS_REN; + if (bsr_bits & BSR_IFC_BIT) + status |= BUS_IFC; + if (bsr_bits & BSR_SRQ_BIT) + status |= BUS_SRQ; + if (bsr_bits & BSR_EOI_BIT) + status |= BUS_EOI; + if (bsr_bits & BSR_NRFD_BIT) + status |= BUS_NRFD; + if (bsr_bits & BSR_NDAC_BIT) + status |= BUS_NDAC; + if (bsr_bits & BSR_DAV_BIT) + status |= BUS_DAV; + if (bsr_bits & BSR_ATN_BIT) + status |= BUS_ATN; + + return status; +} + static void ines_set_xfer_counter(struct ines_priv *priv, unsigned int count) { if (count > 0xffff) { @@ -75,6 +103,9 @@ static int ines_t1_delay(struct gpib_board *board, unsigned int nano_sec) retval = nec7210_t1_delay(board, nec_priv, nano_sec); + if (ines_priv->pci_chip_type == PCI_CHIP_INES_72130) + return retval; + if (nano_sec <= 250) { write_byte(nec_priv, INES_AUXD | INES_FOLLOWING_T1_250ns | INES_INITIAL_T1_2000ns, AUXMR); @@ -294,6 +325,8 @@ static irqreturn_t ines_interrupt(struct gpib_board *board) spin_lock_irqsave(&board->spinlock, flags); nec7210_interrupt(board, nec_priv); + if (priv->pci_chip_type == PCI_CHIP_INES_72130) + goto out; isr3_bits = ines_inb(priv, ISR3); isr4_bits = ines_inb(priv, ISR4); if (isr3_bits & IFC_ACTIVE_BIT) { @@ -311,11 +344,13 @@ static irqreturn_t ines_interrupt(struct gpib_board *board) if (wake) wake_up_interruptible(&board->wait); +out: spin_unlock_irqrestore(&board->spinlock, flags); return IRQ_HANDLED; } static int ines_pci_attach(struct gpib_board *board, const struct gpib_board_config *config); +static int ines_pci_xl_attach(struct gpib_board *board, const struct gpib_board_config *config); static int ines_pci_accel_attach(struct gpib_board *board, const struct gpib_board_config *config); static int ines_isa_attach(struct gpib_board *board, const struct gpib_board_config *config); @@ -569,6 +604,34 @@ static struct gpib_interface ines_pci_unaccel_interface = { .return_to_local = ines_return_to_local, }; +static struct gpib_interface ines_pci_xl_interface = { + .name = "ines_pci_xl", + .attach = ines_pci_xl_attach, + .detach = ines_pci_detach, + .read = ines_read, + .write = ines_write, + .command = ines_command, + .take_control = ines_take_control, + .go_to_standby = ines_go_to_standby, + .request_system_control = ines_request_system_control, + .interface_clear = ines_interface_clear, + .remote_enable = ines_remote_enable, + .enable_eos = ines_enable_eos, + .disable_eos = ines_disable_eos, + .parallel_poll = ines_parallel_poll, + .parallel_poll_configure = ines_parallel_poll_configure, + .parallel_poll_response = ines_parallel_poll_response, + .local_parallel_poll_mode = NULL, // XXX + .line_status = ines72130_line_status, + .update_status = ines_update_status, + .primary_address = ines_primary_address, + .secondary_address = ines_secondary_address, + .serial_poll_response = ines_serial_poll_response, + .serial_poll_status = ines_serial_poll_status, + .t1_delay = ines_t1_delay, + .return_to_local = ines_return_to_local, +}; + static struct gpib_interface ines_pci_interface = { .name = "ines_pci", .attach = ines_pci_accel_attach, @@ -870,6 +933,24 @@ static int ines_pci_attach(struct gpib_board *board, const struct gpib_board_con return 0; } +static int ines_pci_xl_attach(struct gpib_board *board, const struct gpib_board_config *config) +{ + struct ines_priv *ines_priv; + struct nec7210_priv *nec_priv; + int retval; + + retval = ines_common_pci_attach(board, config); + if (retval < 0) + return retval; + + ines_priv = board->private_data; + ines_priv->pci_chip_type = PCI_CHIP_INES_72130; + nec_priv = &ines_priv->nec7210_priv; + nec7210_board_online(nec_priv, board); + + return 0; +} + static int ines_pci_accel_attach(struct gpib_board *board, const struct gpib_board_config *config) { struct ines_priv *ines_priv; @@ -1419,6 +1500,12 @@ static int __init ines_init_module(void) goto err_pci_unaccel; } + ret = gpib_register_driver(&ines_pci_xl_interface, THIS_MODULE); + if (ret) { + pr_err("gpib_register_driver failed: error = %d\n", ret); + goto err_pci_xl; + } + ret = gpib_register_driver(&ines_pci_accel_interface, THIS_MODULE); if (ret) { pr_err("gpib_register_driver failed: error = %d\n", ret); @@ -1473,6 +1560,8 @@ err_isa: gpib_unregister_driver(&ines_pci_accel_interface); err_pci_accel: gpib_unregister_driver(&ines_pci_unaccel_interface); +err_pci_xl: + gpib_unregister_driver(&ines_pci_xl_interface); err_pci_unaccel: gpib_unregister_driver(&ines_pci_interface); err_pci: @@ -1485,6 +1574,7 @@ static void __exit ines_exit_module(void) { gpib_unregister_driver(&ines_pci_interface); gpib_unregister_driver(&ines_pci_unaccel_interface); + gpib_unregister_driver(&ines_pci_xl_interface); gpib_unregister_driver(&ines_pci_accel_interface); gpib_unregister_driver(&ines_isa_interface); #ifdef CONFIG_GPIB_PCMCIA diff --git a/drivers/gpib/ni_usb/ni_usb_gpib.c b/drivers/gpib/ni_usb/ni_usb_gpib.c index 0bbc13ecebf91..28de1d543ad6d 100644 --- a/drivers/gpib/ni_usb/ni_usb_gpib.c +++ b/drivers/gpib/ni_usb/ni_usb_gpib.c @@ -720,7 +720,7 @@ static int ni_usb_read(struct gpib_board *board, u8 *buffer, size_t length, break; } ni_usb_soft_update_status(board, status.ibsta, 0); - if (status.ibsta & END) + if ((status.ibsta & END) && (status.error_code == NIUSB_NO_ERROR)) *end = 1; else *end = 0; diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c index 2b6a994c6fe1f..c4d54ca2fa804 100644 --- a/drivers/misc/cardreader/rtsx_pcr.c +++ b/drivers/misc/cardreader/rtsx_pcr.c @@ -42,21 +42,21 @@ static struct mfd_cell rtsx_pcr_cells[] = { }; static const struct pci_device_id rtsx_pci_ids[] = { - { PCI_DEVICE(0x10EC, 0x5209), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5229), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5289), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5227), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x522A), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5249), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5287), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5286), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x524A), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x525A), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5260), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5261), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5228), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { PCI_DEVICE(0x10EC, 0x5264), PCI_CLASS_OTHERS << 16, 0xFF0000 }, - { 0, } + { PCI_DEVICE(0x10EC, 0x5209), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5229), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5289), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5227), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x522A), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5249), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5287), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5286), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x524A), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x525A), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5260), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5261), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5228), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { PCI_DEVICE(0x10EC, 0x5264), .class = PCI_CLASS_OTHERS << 16, .class_mask = 0xFF0000 }, + { } }; MODULE_DEVICE_TABLE(pci, rtsx_pci_ids); diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h index f145e8e36cb3d..b9a67629496ba 100644 --- a/drivers/misc/mei/hw-me-regs.h +++ b/drivers/misc/mei/hw-me-regs.h @@ -6,6 +6,8 @@ #ifndef _MEI_HW_MEI_REGS_H_ #define _MEI_HW_MEI_REGS_H_ +#include <linux/bits.h> + /* * MEI device IDs */ @@ -142,6 +144,8 @@ # define PCI_CFG_HFS_2_PM_CM_RESET_ERROR 0x5000000 /* CME reset due to exception */ # define PCI_CFG_HFS_2_PM_EVENT_MASK 0xf000000 #define PCI_CFG_HFS_3 0x60 +# define PCI_CFG_HFS_3_EXT_SKU_MSK GENMASK(3, 0) /* IOE detection bits */ +# define PCI_CFG_HFS_3_EXT_SKU_IOE 0x00000001 # define PCI_CFG_HFS_3_FW_SKU_MSK 0x00000070 # define PCI_CFG_HFS_3_FW_SKU_IGN 0x00000000 # define PCI_CFG_HFS_3_FW_SKU_SPS 0x00000060 diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c index e286763b52ec1..e7fbc02fb70fe 100644 --- a/drivers/misc/mei/hw-me.c +++ b/drivers/misc/mei/hw-me.c @@ -4,13 +4,13 @@ * Intel Management Engine Interface (Intel MEI) Linux driver */ -#include <linux/pci.h> - -#include <linux/kthread.h> +#include <linux/bitfield.h> +#include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/kthread.h> +#include <linux/pci.h> #include <linux/pm_runtime.h> #include <linux/sizes.h> -#include <linux/delay.h> #include "mei_dev.h" #include "hbm.h" @@ -1584,17 +1584,57 @@ static bool mei_me_fw_type_sps_ign(const struct pci_dev *pdev) fw_type == PCI_CFG_HFS_3_FW_SKU_SPS; } -#define MEI_CFG_KIND_ITOUCH \ - .kind = "itouch" +#define MEI_CFG_FW_SPS_IGN \ + .quirk_probe = mei_me_fw_type_sps_ign + +static enum mei_dev_kind mei_cfg_kind_mei(const struct device *parent) +{ + return MEI_DEV_KIND_MEI; +} + +#define MEI_CFG_KIND_MEI \ + .get_kind = mei_cfg_kind_mei + +static enum mei_dev_kind mei_cfg_kind_itouch(const struct device *parent) +{ + return MEI_DEV_KIND_ITOUCH; +} -#define MEI_CFG_TYPE_GSC \ - .kind = "gsc" +#define MEI_CFG_KIND_ITOUCH \ + .get_kind = mei_cfg_kind_itouch -#define MEI_CFG_TYPE_GSCFI \ - .kind = "gscfi" +static enum mei_dev_kind mei_cfg_kind_gsc(const struct device *parent) +{ + return MEI_DEV_KIND_GSC; +} -#define MEI_CFG_FW_SPS_IGN \ - .quirk_probe = mei_me_fw_type_sps_ign +#define MEI_CFG_KIND_GSC \ + .get_kind = mei_cfg_kind_gsc + +static enum mei_dev_kind mei_cfg_kind_gscfi(const struct device *parent) +{ + return MEI_DEV_KIND_GSCFI; +} + +#define MEI_CFG_KIND_GSCFI \ + .get_kind = mei_cfg_kind_gscfi + +static enum mei_dev_kind mei_cfg_kind_ioe(const struct device *parent) +{ + const struct pci_dev *pdev = to_pci_dev(parent); + unsigned int devfn; + u32 reg; + int ret; + + devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0); + ret = pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_3, ®); + trace_mei_pci_cfg_read(parent, "PCI_CFG_HFS_3", PCI_CFG_HFS_3, reg, ret); + return FIELD_GET(PCI_CFG_HFS_3_EXT_SKU_MSK, reg) == PCI_CFG_HFS_3_EXT_SKU_IOE ? + MEI_DEV_KIND_IOE : MEI_DEV_KIND_MEI; +} + +#define MEI_CFG_KIND_IOE \ + .get_kind = mei_cfg_kind_ioe #define MEI_CFG_FW_VER_SUPP \ .fw_ver_supported = 1 @@ -1630,27 +1670,32 @@ static bool mei_me_fw_type_sps_ign(const struct pci_dev *pdev) /* ICH Legacy devices */ static const struct mei_cfg mei_me_ich_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_ICH_HFS, }; /* ICH devices */ static const struct mei_cfg mei_me_ich10_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_ICH10_HFS, }; /* PCH6 devices */ static const struct mei_cfg mei_me_pch6_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH_HFS, }; /* PCH7 devices */ static const struct mei_cfg mei_me_pch7_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH_HFS, MEI_CFG_FW_VER_SUPP, }; /* PCH Cougar Point and Patsburg with quirk for Node Manager exclusion */ static const struct mei_cfg mei_me_pch_cpt_pbg_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_FW_NM, @@ -1658,6 +1703,7 @@ static const struct mei_cfg mei_me_pch_cpt_pbg_cfg = { /* PCH8 Lynx Point and newer devices */ static const struct mei_cfg mei_me_pch8_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, }; @@ -1671,6 +1717,7 @@ static const struct mei_cfg mei_me_pch8_itouch_cfg = { /* PCH8 Lynx Point with quirk for SPS Firmware exclusion */ static const struct mei_cfg mei_me_pch8_sps_4_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_FW_SPS_4, @@ -1678,6 +1725,7 @@ static const struct mei_cfg mei_me_pch8_sps_4_cfg = { /* LBG with quirk for SPS (4.0) Firmware exclusion */ static const struct mei_cfg mei_me_pch12_sps_4_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_FW_SPS_4, @@ -1685,6 +1733,7 @@ static const struct mei_cfg mei_me_pch12_sps_4_cfg = { /* Cannon Lake and newer devices */ static const struct mei_cfg mei_me_pch12_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_DMA_128, @@ -1692,6 +1741,7 @@ static const struct mei_cfg mei_me_pch12_cfg = { /* Cannon Lake with quirk for SPS 5.0 and newer Firmware exclusion */ static const struct mei_cfg mei_me_pch12_sps_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_DMA_128, @@ -1710,6 +1760,7 @@ static const struct mei_cfg mei_me_pch12_itouch_sps_cfg = { /* Tiger Lake and newer devices */ static const struct mei_cfg mei_me_pch15_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_DMA_128, @@ -1718,6 +1769,7 @@ static const struct mei_cfg mei_me_pch15_cfg = { /* Tiger Lake with quirk for SPS 5.0 and newer Firmware exclusion */ static const struct mei_cfg mei_me_pch15_sps_cfg = { + MEI_CFG_KIND_MEI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, MEI_CFG_DMA_128, @@ -1727,23 +1779,32 @@ static const struct mei_cfg mei_me_pch15_sps_cfg = { /* Graphics System Controller */ static const struct mei_cfg mei_me_gsc_cfg = { - MEI_CFG_TYPE_GSC, + MEI_CFG_KIND_GSC, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, }; /* Graphics System Controller Firmware Interface */ static const struct mei_cfg mei_me_gscfi_cfg = { - MEI_CFG_TYPE_GSCFI, + MEI_CFG_KIND_GSCFI, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, }; /* Chassis System Controller Firmware Interface */ static const struct mei_cfg mei_me_csc_cfg = { - MEI_CFG_TYPE_GSCFI, + MEI_CFG_KIND_GSCFI, + MEI_CFG_PCH8_HFS, + MEI_CFG_FW_VER_SUPP, +}; + +/* Nova Lake with possible IOE devices */ +static const struct mei_cfg mei_me_pch22_ioe_cfg = { + MEI_CFG_KIND_IOE, MEI_CFG_PCH8_HFS, MEI_CFG_FW_VER_SUPP, + MEI_CFG_DMA_128, + MEI_CFG_TRC, }; /* @@ -1769,6 +1830,7 @@ static const struct mei_cfg *const mei_cfg_list[] = { [MEI_ME_GSC_CFG] = &mei_me_gsc_cfg, [MEI_ME_GSCFI_CFG] = &mei_me_gscfi_cfg, [MEI_ME_CSC_CFG] = &mei_me_csc_cfg, + [MEI_ME_PCH22_IOE_CFG] = &mei_me_pch22_ioe_cfg, }; const struct mei_cfg *mei_me_get_cfg(kernel_ulong_t idx) @@ -1812,7 +1874,7 @@ struct mei_device *mei_me_dev_init(struct device *parent, dev->fw_f_fw_ver_supported = cfg->fw_ver_supported; - dev->kind = cfg->kind; + dev->kind = cfg->get_kind(parent); return dev; } diff --git a/drivers/misc/mei/hw-me.h b/drivers/misc/mei/hw-me.h index 8da8662a9d61a..0038a6d431fd6 100644 --- a/drivers/misc/mei/hw-me.h +++ b/drivers/misc/mei/hw-me.h @@ -19,7 +19,7 @@ * * @fw_status: FW status * @quirk_probe: device exclusion quirk - * @kind: MEI head kind + * @get_kind: MEI head kind helper * @dma_size: device DMA buffers size * @fw_ver_supported: is fw version retrievable from FW * @hw_trc_supported: does the hw support trc register @@ -27,7 +27,7 @@ struct mei_cfg { const struct mei_fw_status fw_status; bool (*quirk_probe)(const struct pci_dev *pdev); - const char *kind; + enum mei_dev_kind (*get_kind)(const struct device *parent); size_t dma_size[DMA_DSCR_NUM]; u32 fw_ver_supported:1; u32 hw_trc_supported:1; @@ -105,6 +105,7 @@ static inline bool mei_me_hw_use_polling(const struct mei_me_hw *hw) * @MEI_ME_GSC_CFG: Graphics System Controller * @MEI_ME_GSCFI_CFG: Graphics System Controller Firmware Interface * @MEI_ME_CSC_CFG: Chassis System Controller Firmware Interface + * @MEI_ME_PCH22_IOE_CFG: Platform Controller Hub Gen22 and newer with IOE detection * @MEI_ME_NUM_CFG: Upper Sentinel. */ enum mei_cfg_idx { @@ -126,7 +127,8 @@ enum mei_cfg_idx { MEI_ME_GSC_CFG, MEI_ME_GSCFI_CFG, MEI_ME_CSC_CFG, - MEI_ME_NUM_CFG, + MEI_ME_PCH22_IOE_CFG, + MEI_ME_NUM_CFG }; const struct mei_cfg *mei_me_get_cfg(kernel_ulong_t idx); diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c index 54f70f513482f..4fbf0b323616c 100644 --- a/drivers/misc/mei/main.c +++ b/drivers/misc/mei/main.c @@ -1165,6 +1165,16 @@ void mei_set_devstate(struct mei_device *dev, enum mei_dev_state state) } } +static const char * const mei_kind_names[] = { + "mei", + "itouch", + "gsc", + "gscfi", + "ivsc", + "ioe", +}; +static_assert(ARRAY_SIZE(mei_kind_names) == MEI_DEV_KIND_MAX); + /** * kind_show - display device kind * @@ -1178,14 +1188,11 @@ static ssize_t kind_show(struct device *device, struct device_attribute *attr, char *buf) { struct mei_device *dev = dev_get_drvdata(device); - ssize_t ret; - if (dev->kind) - ret = sprintf(buf, "%s\n", dev->kind); - else - ret = sprintf(buf, "%s\n", "mei"); + if (dev->kind < MEI_DEV_KIND_MEI || dev->kind >= MEI_DEV_KIND_MAX) + return -EINVAL; - return ret; + return sysfs_emit(buf, "%s\n", mei_kind_names[dev->kind]); } static DEVICE_ATTR_RO(kind); diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h index d8634a7269901..e651b06704a1e 100644 --- a/drivers/misc/mei/mei_dev.h +++ b/drivers/misc/mei/mei_dev.h @@ -470,6 +470,27 @@ struct mei_dev_timeouts { }; /** + * enum mei_dev_kind - device type + * + * @MEI_DEV_KIND_MEI: basic device + * @MEI_DEV_KIND_ITOUCH: itouch support + * @MEI_DEV_KIND_GSC: discete graphics content protection + * @MEI_DEV_KIND_GSCFI: discete graphics chassis controller + * @MEI_DEV_KIND_IVSC: visual sensing controller + * @MEI_DEV_KIND_IOE: IO extender + * @MEI_DEV_KIND_MAX: sentinel + */ +enum mei_dev_kind { + MEI_DEV_KIND_MEI, + MEI_DEV_KIND_ITOUCH, + MEI_DEV_KIND_GSC, + MEI_DEV_KIND_GSCFI, + MEI_DEV_KIND_IVSC, + MEI_DEV_KIND_IOE, + MEI_DEV_KIND_MAX +}; + +/** * struct mei_device - MEI private device struct * * @parent : device on a bus @@ -650,7 +671,7 @@ struct mei_device { struct list_head device_list; struct mutex cl_bus_lock; - const char *kind; + enum mei_dev_kind kind; #if IS_ENABLED(CONFIG_DEBUG_FS) struct dentry *dbgfs_dir; @@ -911,8 +932,7 @@ static inline ssize_t mei_fw_status_str(struct mei_device *dev, */ static inline bool kind_is_gsc(struct mei_device *dev) { - /* check kind for NULL because it may be not set, like at the fist call to hw_start */ - return dev->kind && (strcmp(dev->kind, "gsc") == 0); + return dev->kind == MEI_DEV_KIND_GSC; } /** @@ -924,7 +944,6 @@ static inline bool kind_is_gsc(struct mei_device *dev) */ static inline bool kind_is_gscfi(struct mei_device *dev) { - /* check kind for NULL because it may be not set, like at the fist call to hw_start */ - return dev->kind && (strcmp(dev->kind, "gscfi") == 0); + return dev->kind == MEI_DEV_KIND_GSCFI; } #endif diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index 9efeafa8f1cae..55e0b8a988279 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c @@ -130,7 +130,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {PCI_DEVICE_DATA(INTEL, MEI_WCL_P, MEI_ME_PCH15_CFG)}, - {PCI_DEVICE_DATA(INTEL, MEI_NVL_S, MEI_ME_PCH15_CFG)}, + {PCI_DEVICE_DATA(INTEL, MEI_NVL_S, MEI_ME_PCH22_IOE_CFG)}, {PCI_DEVICE_DATA(INTEL, MEI_NVL_H, MEI_ME_PCH15_CFG)}, /* required last entry */ diff --git a/drivers/misc/mei/pci-txe.c b/drivers/misc/mei/pci-txe.c index 98d1bc2c7f4b5..f5441bc5efe28 100644 --- a/drivers/misc/mei/pci-txe.c +++ b/drivers/misc/mei/pci-txe.c @@ -84,6 +84,7 @@ static int mei_txe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) err = -ENOMEM; goto end; } + dev->kind = MEI_DEV_KIND_MEI; hw = to_txe_hw(dev); hw->mem_addr = pcim_iomap_table(pdev); diff --git a/drivers/misc/mei/platform-vsc.c b/drivers/misc/mei/platform-vsc.c index 9787b9cee71ca..5100234ba5b69 100644 --- a/drivers/misc/mei/platform-vsc.c +++ b/drivers/misc/mei/platform-vsc.c @@ -350,7 +350,7 @@ static int mei_vsc_probe(struct platform_device *pdev) mei_device_init(mei_dev, dev, false, &mei_vsc_hw_ops); mei_dev->fw_f_fw_ver_supported = 0; - mei_dev->kind = "ivsc"; + mei_dev->kind = MEI_DEV_KIND_IVSC; hw = mei_dev_to_vsc_hw(mei_dev); atomic_set(&hw->write_lock_cnt, 0); diff --git a/drivers/misc/pch_phub.c b/drivers/misc/pch_phub.c index fd147fd2800f4..19c4fa017f243 100644 --- a/drivers/misc/pch_phub.c +++ b/drivers/misc/pch_phub.c @@ -149,129 +149,6 @@ static void pch_phub_read_modify_write_reg(struct pch_phub_reg *chip, iowrite32(((ioread32(reg_addr) & ~mask)) | data, reg_addr); } -/* pch_phub_save_reg_conf - saves register configuration */ -static void __maybe_unused pch_phub_save_reg_conf(struct pci_dev *pdev) -{ - unsigned int i; - struct pch_phub_reg *chip = pci_get_drvdata(pdev); - - void __iomem *p = chip->pch_phub_base_address; - - chip->phub_id_reg = ioread32(p + PCH_PHUB_ID_REG); - chip->q_pri_val_reg = ioread32(p + PCH_PHUB_QUEUE_PRI_VAL_REG); - chip->rc_q_maxsize_reg = ioread32(p + PCH_PHUB_RC_QUEUE_MAXSIZE_REG); - chip->bri_q_maxsize_reg = ioread32(p + PCH_PHUB_BRI_QUEUE_MAXSIZE_REG); - chip->comp_resp_timeout_reg = - ioread32(p + PCH_PHUB_COMP_RESP_TIMEOUT_REG); - chip->bus_slave_control_reg = - ioread32(p + PCH_PHUB_BUS_SLAVE_CONTROL_REG); - chip->deadlock_avoid_type_reg = - ioread32(p + PCH_PHUB_DEADLOCK_AVOID_TYPE_REG); - chip->intpin_reg_wpermit_reg0 = - ioread32(p + PCH_PHUB_INTPIN_REG_WPERMIT_REG0); - chip->intpin_reg_wpermit_reg1 = - ioread32(p + PCH_PHUB_INTPIN_REG_WPERMIT_REG1); - chip->intpin_reg_wpermit_reg2 = - ioread32(p + PCH_PHUB_INTPIN_REG_WPERMIT_REG2); - chip->intpin_reg_wpermit_reg3 = - ioread32(p + PCH_PHUB_INTPIN_REG_WPERMIT_REG3); - dev_dbg(&pdev->dev, "%s : " - "chip->phub_id_reg=%x, " - "chip->q_pri_val_reg=%x, " - "chip->rc_q_maxsize_reg=%x, " - "chip->bri_q_maxsize_reg=%x, " - "chip->comp_resp_timeout_reg=%x, " - "chip->bus_slave_control_reg=%x, " - "chip->deadlock_avoid_type_reg=%x, " - "chip->intpin_reg_wpermit_reg0=%x, " - "chip->intpin_reg_wpermit_reg1=%x, " - "chip->intpin_reg_wpermit_reg2=%x, " - "chip->intpin_reg_wpermit_reg3=%x\n", __func__, - chip->phub_id_reg, - chip->q_pri_val_reg, - chip->rc_q_maxsize_reg, - chip->bri_q_maxsize_reg, - chip->comp_resp_timeout_reg, - chip->bus_slave_control_reg, - chip->deadlock_avoid_type_reg, - chip->intpin_reg_wpermit_reg0, - chip->intpin_reg_wpermit_reg1, - chip->intpin_reg_wpermit_reg2, - chip->intpin_reg_wpermit_reg3); - for (i = 0; i < MAX_NUM_INT_REDUCE_CONTROL_REG; i++) { - chip->int_reduce_control_reg[i] = - ioread32(p + PCH_PHUB_INT_REDUCE_CONTROL_REG_BASE + 4 * i); - dev_dbg(&pdev->dev, "%s : " - "chip->int_reduce_control_reg[%d]=%x\n", - __func__, i, chip->int_reduce_control_reg[i]); - } - chip->clkcfg_reg = ioread32(p + CLKCFG_REG_OFFSET); - if ((chip->ioh_type == 2) || (chip->ioh_type == 4)) - chip->funcsel_reg = ioread32(p + FUNCSEL_REG_OFFSET); -} - -/* pch_phub_restore_reg_conf - restore register configuration */ -static void __maybe_unused pch_phub_restore_reg_conf(struct pci_dev *pdev) -{ - unsigned int i; - struct pch_phub_reg *chip = pci_get_drvdata(pdev); - void __iomem *p; - p = chip->pch_phub_base_address; - - iowrite32(chip->phub_id_reg, p + PCH_PHUB_ID_REG); - iowrite32(chip->q_pri_val_reg, p + PCH_PHUB_QUEUE_PRI_VAL_REG); - iowrite32(chip->rc_q_maxsize_reg, p + PCH_PHUB_RC_QUEUE_MAXSIZE_REG); - iowrite32(chip->bri_q_maxsize_reg, p + PCH_PHUB_BRI_QUEUE_MAXSIZE_REG); - iowrite32(chip->comp_resp_timeout_reg, - p + PCH_PHUB_COMP_RESP_TIMEOUT_REG); - iowrite32(chip->bus_slave_control_reg, - p + PCH_PHUB_BUS_SLAVE_CONTROL_REG); - iowrite32(chip->deadlock_avoid_type_reg, - p + PCH_PHUB_DEADLOCK_AVOID_TYPE_REG); - iowrite32(chip->intpin_reg_wpermit_reg0, - p + PCH_PHUB_INTPIN_REG_WPERMIT_REG0); - iowrite32(chip->intpin_reg_wpermit_reg1, - p + PCH_PHUB_INTPIN_REG_WPERMIT_REG1); - iowrite32(chip->intpin_reg_wpermit_reg2, - p + PCH_PHUB_INTPIN_REG_WPERMIT_REG2); - iowrite32(chip->intpin_reg_wpermit_reg3, - p + PCH_PHUB_INTPIN_REG_WPERMIT_REG3); - dev_dbg(&pdev->dev, "%s : " - "chip->phub_id_reg=%x, " - "chip->q_pri_val_reg=%x, " - "chip->rc_q_maxsize_reg=%x, " - "chip->bri_q_maxsize_reg=%x, " - "chip->comp_resp_timeout_reg=%x, " - "chip->bus_slave_control_reg=%x, " - "chip->deadlock_avoid_type_reg=%x, " - "chip->intpin_reg_wpermit_reg0=%x, " - "chip->intpin_reg_wpermit_reg1=%x, " - "chip->intpin_reg_wpermit_reg2=%x, " - "chip->intpin_reg_wpermit_reg3=%x\n", __func__, - chip->phub_id_reg, - chip->q_pri_val_reg, - chip->rc_q_maxsize_reg, - chip->bri_q_maxsize_reg, - chip->comp_resp_timeout_reg, - chip->bus_slave_control_reg, - chip->deadlock_avoid_type_reg, - chip->intpin_reg_wpermit_reg0, - chip->intpin_reg_wpermit_reg1, - chip->intpin_reg_wpermit_reg2, - chip->intpin_reg_wpermit_reg3); - for (i = 0; i < MAX_NUM_INT_REDUCE_CONTROL_REG; i++) { - iowrite32(chip->int_reduce_control_reg[i], - p + PCH_PHUB_INT_REDUCE_CONTROL_REG_BASE + 4 * i); - dev_dbg(&pdev->dev, "%s : " - "chip->int_reduce_control_reg[%d]=%x\n", - __func__, i, chip->int_reduce_control_reg[i]); - } - - iowrite32(chip->clkcfg_reg, p + CLKCFG_REG_OFFSET); - if ((chip->ioh_type == 2) || (chip->ioh_type == 4)) - iowrite32(chip->funcsel_reg, p + FUNCSEL_REG_OFFSET); -} - /** * pch_phub_read_serial_rom() - Reading Serial ROM * @chip: Pointer to the PHUB register structure @@ -660,6 +537,14 @@ static const struct bin_attribute pch_bin_attr = { .write = pch_phub_bin_write, }; +enum { + PCH_EG20T, + PCH_ML7213, + PCH_ML7223M, + PCH_ML7223N, + PCH_ML7831, +}; + static int pch_phub_probe(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -702,7 +587,7 @@ static int pch_phub_probe(struct pci_dev *pdev, chip->pdev = pdev; /* Save pci device struct */ - if (id->driver_data == 1) { /* EG20T PCH */ + if (id->driver_data == PCH_EG20T) { /* EG20T PCH */ const char *board_name; unsigned int prefetch = 0x000affaa; @@ -750,7 +635,7 @@ static int pch_phub_probe(struct pci_dev *pdev, CLKCFG_UART_MASK); } } - } else if (id->driver_data == 2) { /* ML7213 IOH */ + } else if (id->driver_data == PCH_ML7213) { /* ML7213 IOH */ ret = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr); if (ret) goto err_sysfs_create; @@ -763,7 +648,7 @@ static int pch_phub_probe(struct pci_dev *pdev, iowrite32(0x000affa0, chip->pch_phub_base_address + 0x14); chip->pch_opt_rom_start_address =\ PCH_PHUB_ROM_START_ADDR_ML7213; - } else if (id->driver_data == 3) { /* ML7223 IOH Bus-m*/ + } else if (id->driver_data == PCH_ML7223M) { /* ML7223 IOH Bus-m*/ /* set the prefech value * Device8(GbE) */ @@ -773,7 +658,7 @@ static int pch_phub_probe(struct pci_dev *pdev, chip->pch_opt_rom_start_address =\ PCH_PHUB_ROM_START_ADDR_ML7223; chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223; - } else if (id->driver_data == 4) { /* ML7223 IOH Bus-n*/ + } else if (id->driver_data == PCH_ML7223N) { /* ML7223 IOH Bus-n*/ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); if (ret) @@ -790,7 +675,7 @@ static int pch_phub_probe(struct pci_dev *pdev, chip->pch_opt_rom_start_address =\ PCH_PHUB_ROM_START_ADDR_ML7223; chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223; - } else if (id->driver_data == 5) { /* ML7831 */ + } else if (id->driver_data == PCH_ML7831) { /* ML7831 */ ret = sysfs_create_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr); if (ret) @@ -854,11 +739,11 @@ static int __maybe_unused pch_phub_resume(struct device *dev_d) } static const struct pci_device_id pch_phub_pcidev_id[] = { - { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_PCH1_PHUB), 1, }, - { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7213_PHUB), 2, }, - { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7223_mPHUB), 3, }, - { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7223_nPHUB), 4, }, - { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7831_PHUB), 5, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_PCH1_PHUB), .driver_data = PCH_EG20T }, + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7213_PHUB), .driver_data = PCH_ML7213 }, + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7223_mPHUB), .driver_data = PCH_ML7223M }, + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7223_nPHUB), .driver_data = PCH_ML7223N }, + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7831_PHUB), .driver_data = PCH_ML7831 }, { } }; MODULE_DEVICE_TABLE(pci, pch_phub_pcidev_id); diff --git a/drivers/misc/tifm_7xx1.c b/drivers/misc/tifm_7xx1.c index 1d54680d6ed20..4677d5a309413 100644 --- a/drivers/misc/tifm_7xx1.c +++ b/drivers/misc/tifm_7xx1.c @@ -400,12 +400,9 @@ static void tifm_7xx1_remove(struct pci_dev *dev) } static const struct pci_device_id tifm_7xx1_pci_tbl[] = { - { PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11_FM, PCI_ANY_ID, - PCI_ANY_ID, 0, 0, 0 }, /* xx21 - the one I have */ - { PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX12_FM, PCI_ANY_ID, - PCI_ANY_ID, 0, 0, 0 }, - { PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX20_FM, PCI_ANY_ID, - PCI_ANY_ID, 0, 0, 0 }, + { PCI_VDEVICE(TI, PCI_DEVICE_ID_TI_XX21_XX11_FM) }, /* xx21 - the one I have */ + { PCI_VDEVICE(TI, PCI_DEVICE_ID_TI_XX12_FM) }, + { PCI_VDEVICE(TI, PCI_DEVICE_ID_TI_XX20_FM) }, { } }; diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c index b777bc3fdde29..46bba9bef5530 100644 --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c @@ -420,7 +420,7 @@ static int qp_memcpy_from_queue_iter(struct iov_iter *to, /* * Allocates two list of PPNs --- one for the pages in the produce queue, - * and the other for the pages in the consume queue. Intializes the list + * and the other for the pages in the consume queue. Initializes the list * of PPNs with the page frame numbers of the KVA for the two queues (and * the queue headers). */ diff --git a/drivers/virt/acrn/irqfd.c b/drivers/virt/acrn/irqfd.c index aab15f94166ae..ac583c843f704 100644 --- a/drivers/virt/acrn/irqfd.c +++ b/drivers/virt/acrn/irqfd.c @@ -16,6 +16,9 @@ #include "acrn_drv.h" +/* Cleanup work has been queued; set via test_and_set_bit(). */ +#define HSM_IRQFD_FLAG_SHUTDOWN 0 + /** * struct hsm_irqfd - Properties of HSM irqfd * @vm: Associated VM pointer @@ -25,6 +28,7 @@ * @list: Entry within &acrn_vm.irqfds of irqfds of a VM * @pt: Structure for select/poll on the associated eventfd * @msi: MSI data + * @flags: Internal lifecycle flags (HSM_IRQFD_FLAG_*) */ struct hsm_irqfd { struct acrn_vm *vm; @@ -34,6 +38,7 @@ struct hsm_irqfd { struct list_head list; poll_table pt; struct acrn_msi_entry msi; + unsigned long flags; }; static void acrn_irqfd_inject(struct hsm_irqfd *irqfd) @@ -44,30 +49,29 @@ static void acrn_irqfd_inject(struct hsm_irqfd *irqfd) irqfd->msi.msi_data); } -static void hsm_irqfd_shutdown(struct hsm_irqfd *irqfd) +/* Queue the cleanup work at most once. Safe from atomic context. */ +static void hsm_irqfd_queue_shutdown(struct hsm_irqfd *irqfd) { - u64 cnt; - - lockdep_assert_held(&irqfd->vm->irqfds_lock); - - /* remove from wait queue */ - list_del_init(&irqfd->list); - eventfd_ctx_remove_wait_queue(irqfd->eventfd, &irqfd->wait, &cnt); - eventfd_ctx_put(irqfd->eventfd); - kfree(irqfd); + if (!test_and_set_bit(HSM_IRQFD_FLAG_SHUTDOWN, &irqfd->flags)) + queue_work(irqfd->vm->irqfd_wq, &irqfd->shutdown); } +/* Sole owner of @irqfd: unhook waitqueue, drop eventfd ref, free. */ static void hsm_irqfd_shutdown_work(struct work_struct *work) { - struct hsm_irqfd *irqfd; - struct acrn_vm *vm; + struct hsm_irqfd *irqfd = container_of(work, struct hsm_irqfd, + shutdown); + struct acrn_vm *vm = irqfd->vm; + u64 cnt; - irqfd = container_of(work, struct hsm_irqfd, shutdown); - vm = irqfd->vm; mutex_lock(&vm->irqfds_lock); if (!list_empty(&irqfd->list)) - hsm_irqfd_shutdown(irqfd); + list_del_init(&irqfd->list); mutex_unlock(&vm->irqfds_lock); + + eventfd_ctx_remove_wait_queue(irqfd->eventfd, &irqfd->wait, &cnt); + eventfd_ctx_put(irqfd->eventfd); + kfree(irqfd); } /* Called with wqh->lock held and interrupts disabled */ @@ -76,17 +80,16 @@ static int hsm_irqfd_wakeup(wait_queue_entry_t *wait, unsigned int mode, { unsigned long poll_bits = (unsigned long)key; struct hsm_irqfd *irqfd; - struct acrn_vm *vm; irqfd = container_of(wait, struct hsm_irqfd, wait); - vm = irqfd->vm; + if (poll_bits & POLLIN) /* An event has been signaled, inject an interrupt */ acrn_irqfd_inject(irqfd); if (poll_bits & POLLHUP) - /* Do shutdown work in thread to hold wqh->lock */ - queue_work(vm->irqfd_wq, &irqfd->shutdown); + /* Defer teardown to the cleanup work; can't sleep here. */ + hsm_irqfd_queue_shutdown(irqfd); return 0; } @@ -142,6 +145,12 @@ static int acrn_irqfd_assign(struct acrn_vm *vm, struct acrn_irqfd *args) init_waitqueue_func_entry(&irqfd->wait, hsm_irqfd_wakeup); init_poll_funcptr(&irqfd->pt, hsm_irqfd_poll_func); + /* + * Hold irqfds_lock across waitqueue install and list_add so the + * irqfd is not visible to deassign/deinit before its waitqueue + * entry is in place, and any racing EPOLLHUP cleanup work blocks + * on irqfds_lock until publication completes. + */ mutex_lock(&vm->irqfds_lock); list_for_each_entry(tmp, &vm->irqfds, list) { if (irqfd->eventfd != tmp->eventfd) @@ -150,14 +159,12 @@ static int acrn_irqfd_assign(struct acrn_vm *vm, struct acrn_irqfd *args) mutex_unlock(&vm->irqfds_lock); goto fail; } - list_add_tail(&irqfd->list, &vm->irqfds); - mutex_unlock(&vm->irqfds_lock); - /* Check the pending event in this stage */ events = vfs_poll(fd_file(f), &irqfd->pt); - + list_add_tail(&irqfd->list, &vm->irqfds); if (events & EPOLLIN) acrn_irqfd_inject(irqfd); + mutex_unlock(&vm->irqfds_lock); return 0; fail: @@ -180,13 +187,17 @@ static int acrn_irqfd_deassign(struct acrn_vm *vm, mutex_lock(&vm->irqfds_lock); list_for_each_entry_safe(irqfd, tmp, &vm->irqfds, list) { if (irqfd->eventfd == eventfd) { - hsm_irqfd_shutdown(irqfd); + list_del_init(&irqfd->list); + hsm_irqfd_queue_shutdown(irqfd); break; } } mutex_unlock(&vm->irqfds_lock); eventfd_ctx_put(eventfd); + /* Wait for cleanup work to finish so the eventfd is fully detached. */ + flush_workqueue(vm->irqfd_wq); + return 0; } @@ -219,9 +230,15 @@ void acrn_irqfd_deinit(struct acrn_vm *vm) struct hsm_irqfd *irqfd, *next; dev_dbg(acrn_dev.this_device, "VM %u irqfd deinit.\n", vm->vmid); - destroy_workqueue(vm->irqfd_wq); + mutex_lock(&vm->irqfds_lock); - list_for_each_entry_safe(irqfd, next, &vm->irqfds, list) - hsm_irqfd_shutdown(irqfd); + list_for_each_entry_safe(irqfd, next, &vm->irqfds, list) { + list_del_init(&irqfd->list); + hsm_irqfd_queue_shutdown(irqfd); + } mutex_unlock(&vm->irqfds_lock); + + /* Drain all cleanup work before tearing the workqueue down. */ + flush_workqueue(vm->irqfd_wq); + destroy_workqueue(vm->irqfd_wq); } diff --git a/include/linux/dtlk.h b/include/linux/dtlk.h deleted file mode 100644 index 27b95e70bde3d..0000000000000 --- a/include/linux/dtlk.h +++ /dev/null @@ -1,86 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#define DTLK_MINOR 0 -#define DTLK_IO_EXTENT 0x02 - - /* ioctl's use magic number of 0xa3 */ -#define DTLK_INTERROGATE 0xa390 /* get settings from the DoubleTalk */ -#define DTLK_STATUS 0xa391 /* get status from the DoubleTalk */ - - -#define DTLK_CLEAR 0x18 /* stops speech */ - -#define DTLK_MAX_RETRIES (loops_per_jiffy/(10000/HZ)) - - /* TTS Port Status Flags */ -#define TTS_READABLE 0x80 /* mask for bit which is nonzero if a - byte can be read from the TTS port */ -#define TTS_SPEAKING 0x40 /* mask for SYNC bit, which is nonzero - while DoubleTalk is producing - output with TTS, PCM or CVSD - synthesizers or tone generators - (that is, all but LPC) */ -#define TTS_SPEAKING2 0x20 /* mask for SYNC2 bit, - which falls to zero up to 0.4 sec - before speech stops */ -#define TTS_WRITABLE 0x10 /* mask for RDY bit, which when set to - 1, indicates the TTS port is ready - to accept a byte of data. The RDY - bit goes zero 2-3 usec after - writing, and goes 1 again 180-190 - usec later. */ -#define TTS_ALMOST_FULL 0x08 /* mask for AF bit: When set to 1, - indicates that less than 300 free - bytes are available in the TTS - input buffer. AF is always 0 in the - PCM, TGN and CVSD modes. */ -#define TTS_ALMOST_EMPTY 0x04 /* mask for AE bit: When set to 1, - indicates that less than 300 bytes - of data remain in DoubleTalk's - input (TTS or PCM) buffer. AE is - always 1 in the TGN and CVSD - modes. */ - - /* LPC speak commands */ -#define LPC_5220_NORMAL 0x60 /* 5220 format decoding table, normal rate */ -#define LPC_5220_FAST 0x64 /* 5220 format decoding table, fast rate */ -#define LPC_D6_NORMAL 0x20 /* D6 format decoding table, normal rate */ -#define LPC_D6_FAST 0x24 /* D6 format decoding table, fast rate */ - - /* LPC Port Status Flags (valid only after one of the LPC - speak commands) */ -#define LPC_SPEAKING 0x80 /* mask for TS bit: When set to 1, - indicates the LPC synthesizer is - producing speech.*/ -#define LPC_BUFFER_LOW 0x40 /* mask for BL bit: When set to 1, - indicates that the hardware LPC - data buffer has less than 30 bytes - remaining. (Total internal buffer - size = 4096 bytes.) */ -#define LPC_BUFFER_EMPTY 0x20 /* mask for BE bit: When set to 1, - indicates that the LPC data buffer - ran out of data (error condition if - TS is also 1). */ - - /* data returned by Interrogate command */ -struct dtlk_settings -{ - unsigned short serial_number; /* 0-7Fh:0-7Fh */ - unsigned char rom_version[24]; /* null terminated string */ - unsigned char mode; /* 0=Character; 1=Phoneme; 2=Text */ - unsigned char punc_level; /* nB; 0-7 */ - unsigned char formant_freq; /* nF; 0-9 */ - unsigned char pitch; /* nP; 0-99 */ - unsigned char speed; /* nS; 0-9 */ - unsigned char volume; /* nV; 0-9 */ - unsigned char tone; /* nX; 0-2 */ - unsigned char expression; /* nE; 0-9 */ - unsigned char ext_dict_loaded; /* 1=exception dictionary loaded */ - unsigned char ext_dict_status; /* 1=exception dictionary enabled */ - unsigned char free_ram; /* # pages (truncated) remaining for - text buffer */ - unsigned char articulation; /* nA; 0-9 */ - unsigned char reverb; /* nR; 0-9 */ - unsigned char eob; /* 7Fh value indicating end of - parameter block */ - unsigned char has_indexing; /* nonzero if indexing is implemented */ -}; diff --git a/rust/kernel/miscdevice.rs b/rust/kernel/miscdevice.rs index c3c2052c92069..83ce50def5ac9 100644 --- a/rust/kernel/miscdevice.rs +++ b/rust/kernel/miscdevice.rs @@ -11,16 +11,27 @@ use crate::{ bindings, device::Device, - error::{to_result, Error, Result, VTABLE_DEFAULT_ERROR}, - ffi::{c_int, c_long, c_uint, c_ulong}, - fs::{File, Kiocb}, - iov::{IovIterDest, IovIterSource}, + error::{ + to_result, + VTABLE_DEFAULT_ERROR, // + }, + fs::{ + File, + Kiocb, // + }, + iov::{ + IovIterDest, + IovIterSource, // + }, mm::virt::VmaNew, prelude::*, seq_file::SeqFile, - types::{ForeignOwnable, Opaque}, + types::{ + ForeignOwnable, + Opaque, // + }, }; -use core::{marker::PhantomData, pin::Pin}; +use core::marker::PhantomData; /// Options for creating a misc device. #[derive(Copy, Clone)] diff --git a/samples/rust/rust_misc_device.rs b/samples/rust/rust_misc_device.rs index 87a1fe63533ae..41e26c825060b 100644 --- a/samples/rust/rust_misc_device.rs +++ b/samples/rust/rust_misc_device.rs @@ -97,14 +97,36 @@ use kernel::{ device::Device, - fs::{File, Kiocb}, - ioctl::{_IO, _IOC_SIZE, _IOR, _IOW}, - iov::{IovIterDest, IovIterSource}, - miscdevice::{MiscDevice, MiscDeviceOptions, MiscDeviceRegistration}, + fs::{ + File, + Kiocb, // + }, + ioctl::{ + _IO, + _IOC_SIZE, + _IOR, + _IOW, // + }, + iov::{ + IovIterDest, + IovIterSource, // + }, + miscdevice::{ + MiscDevice, + MiscDeviceOptions, + MiscDeviceRegistration, // + }, new_mutex, prelude::*, - sync::{aref::ARef, Mutex}, - uaccess::{UserSlice, UserSliceReader, UserSliceWriter}, + sync::{ + aref::ARef, + Mutex, // + }, + uaccess::{ + UserSlice, + UserSliceReader, + UserSliceWriter, // + }, }; const RUST_MISC_DEV_HELLO: u32 = _IO('|' as u32, 0x80); |
