aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--Documentation/admin-guide/devices.txt1
-rw-r--r--Documentation/userspace-api/ioctl/ioctl-number.rst1
-rw-r--r--MAINTAINERS7
-rw-r--r--arch/powerpc/configs/ppc6xx_defconfig1
-rw-r--r--drivers/android/binder.c6
-rw-r--r--drivers/android/binder/page_range.rs24
-rw-r--r--drivers/char/Kconfig26
-rw-r--r--drivers/char/Makefile2
-rw-r--r--drivers/char/applicom.c857
-rw-r--r--drivers/char/applicom.h86
-rw-r--r--drivers/char/dtlk.c663
-rw-r--r--drivers/char/hpet.c6
-rw-r--r--drivers/char/nvram.c16
-rw-r--r--drivers/char/sonypi.c6
-rw-r--r--drivers/char/tlclk.c4
-rw-r--r--drivers/comedi/drivers/8255_pci.c32
-rw-r--r--drivers/comedi/drivers/addi_apci_1032.c4
-rw-r--r--drivers/comedi/drivers/addi_apci_1500.c4
-rw-r--r--drivers/comedi/drivers/addi_apci_1516.c8
-rw-r--r--drivers/comedi/drivers/addi_apci_1564.c4
-rw-r--r--drivers/comedi/drivers/addi_apci_16xx.c6
-rw-r--r--drivers/comedi/drivers/addi_apci_2032.c4
-rw-r--r--drivers/comedi/drivers/addi_apci_2200.c4
-rw-r--r--drivers/comedi/drivers/addi_apci_3120.c6
-rw-r--r--drivers/comedi/drivers/addi_apci_3501.c4
-rw-r--r--drivers/comedi/drivers/addi_apci_3xxx.c52
-rw-r--r--drivers/comedi/drivers/adl_pci6208.c7
-rw-r--r--drivers/comedi/drivers/adl_pci7250.c18
-rw-r--r--drivers/comedi/drivers/adl_pci7x3x.c14
-rw-r--r--drivers/comedi/drivers/adl_pci8164.c4
-rw-r--r--drivers/comedi/drivers/adl_pci9111.c6
-rw-r--r--drivers/comedi/drivers/adl_pci9118.c8
-rw-r--r--drivers/comedi/drivers/adv_pci1710.c62
-rw-r--r--drivers/comedi/drivers/adv_pci1720.c4
-rw-r--r--drivers/comedi/drivers/adv_pci1723.c4
-rw-r--r--drivers/comedi/drivers/adv_pci1724.c4
-rw-r--r--drivers/comedi/drivers/adv_pci1760.c4
-rw-r--r--drivers/comedi/drivers/adv_pci_dio.c30
-rw-r--r--drivers/comedi/drivers/amplc_dio200_pci.c12
-rw-r--r--drivers/comedi/drivers/amplc_pci224.c6
-rw-r--r--drivers/comedi/drivers/amplc_pci230.c6
-rw-r--r--drivers/comedi/drivers/amplc_pci236.c4
-rw-r--r--drivers/comedi/drivers/amplc_pci263.c4
-rw-r--r--drivers/comedi/drivers/cb_pcidas.c18
-rw-r--r--drivers/comedi/drivers/cb_pcidas64.c44
-rw-r--r--drivers/comedi/drivers/cb_pcidda.c14
-rw-r--r--drivers/comedi/drivers/cb_pcimdas.c6
-rw-r--r--drivers/comedi/drivers/cb_pcimdda.c4
-rw-r--r--drivers/comedi/drivers/contec_pci_dio.c4
-rw-r--r--drivers/comedi/drivers/daqboard2000.c10
-rw-r--r--drivers/comedi/drivers/das08_pci.c4
-rw-r--r--drivers/comedi/drivers/dt3000.c16
-rw-r--r--drivers/comedi/drivers/dyna_pci10xx.c4
-rw-r--r--drivers/comedi/drivers/gsc_hpdi.c6
-rw-r--r--drivers/comedi/drivers/icp_multi.c4
-rw-r--r--drivers/comedi/drivers/jr3_pci.c12
-rw-r--r--drivers/comedi/drivers/ke_counter.c4
-rw-r--r--drivers/comedi/drivers/me4000.c28
-rw-r--r--drivers/comedi/drivers/me_daq.c6
-rw-r--r--drivers/comedi/drivers/mf6x4.c11
-rw-r--r--drivers/comedi/drivers/ni_6527.c6
-rw-r--r--drivers/comedi/drivers/ni_65xx.c46
-rw-r--r--drivers/comedi/drivers/ni_660x.c16
-rw-r--r--drivers/comedi/drivers/ni_670x.c8
-rw-r--r--drivers/comedi/drivers/ni_labpc_pci.c4
-rw-r--r--drivers/comedi/drivers/ni_pcidio.c8
-rw-r--r--drivers/comedi/drivers/ni_pcimio.c132
-rw-r--r--drivers/comedi/drivers/rtd520.c6
-rw-r--r--drivers/comedi/drivers/s626.c6
-rw-r--r--drivers/gpib/agilent_82357a/agilent_82357a.c2
-rw-r--r--drivers/gpib/common/gpib_os.c11
-rw-r--r--drivers/gpib/ines/ines.h16
-rw-r--r--drivers/gpib/ines/ines_gpib.c90
-rw-r--r--drivers/gpib/ni_usb/ni_usb_gpib.c2
-rw-r--r--drivers/misc/cardreader/rtsx_pcr.c30
-rw-r--r--drivers/misc/mei/hw-me-regs.h4
-rw-r--r--drivers/misc/mei/hw-me.c94
-rw-r--r--drivers/misc/mei/hw-me.h8
-rw-r--r--drivers/misc/mei/main.c19
-rw-r--r--drivers/misc/mei/mei_dev.h29
-rw-r--r--drivers/misc/mei/pci-me.c2
-rw-r--r--drivers/misc/mei/pci-txe.c1
-rw-r--r--drivers/misc/mei/platform-vsc.c2
-rw-r--r--drivers/misc/pch_phub.c151
-rw-r--r--drivers/misc/tifm_7xx1.c9
-rw-r--r--drivers/misc/vmw_vmci/vmci_queue_pair.c2
-rw-r--r--drivers/virt/acrn/irqfd.c71
-rw-r--r--include/linux/dtlk.h86
-rw-r--r--rust/kernel/miscdevice.rs23
-rw-r--r--samples/rust/rust_misc_device.rs34
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, &reg);
+ 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);