Merge with /usr/src/ntfs-2.6.git
This commit is contained in:
commit
36050271e6
@ -4,6 +4,16 @@ The EtherDrive (R) HOWTO for users of 2.6 kernels is found at ...
|
||||
|
||||
It has many tips and hints!
|
||||
|
||||
The aoetools are userland programs that are designed to work with this
|
||||
driver. The aoetools are on sourceforge.
|
||||
|
||||
http://aoetools.sourceforge.net/
|
||||
|
||||
The scripts in this Documentation/aoe directory are intended to
|
||||
document the use of the driver and are not necessary if you install
|
||||
the aoetools.
|
||||
|
||||
|
||||
CREATING DEVICE NODES
|
||||
|
||||
Users of udev should find the block device nodes created
|
||||
@ -35,14 +45,15 @@ USING DEVICE NODES
|
||||
|
||||
"echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to
|
||||
limit ATA over Ethernet traffic to eth2 and eth4. AoE traffic from
|
||||
untrusted networks should be ignored as a matter of security.
|
||||
untrusted networks should be ignored as a matter of security. See
|
||||
also the aoe_iflist driver option described below.
|
||||
|
||||
"echo > /dev/etherd/discover" tells the driver to find out what AoE
|
||||
devices are available.
|
||||
|
||||
These character devices may disappear and be replaced by sysfs
|
||||
counterparts, so distribution maintainers are encouraged to create
|
||||
scripts that use these devices.
|
||||
counterparts. Using the commands in aoetools insulates users from
|
||||
these implementation details.
|
||||
|
||||
The block devices are named like this:
|
||||
|
||||
@ -66,7 +77,8 @@ USING SYSFS
|
||||
through which we are communicating with the remote AoE device.
|
||||
|
||||
There is a script in this directory that formats this information
|
||||
in a convenient way.
|
||||
in a convenient way. Users with aoetools can use the aoe-stat
|
||||
command.
|
||||
|
||||
root@makki root# sh Documentation/aoe/status.sh
|
||||
e10.0 eth3 up
|
||||
@ -89,3 +101,23 @@ USING SYSFS
|
||||
e4.7 eth1 up
|
||||
e4.8 eth1 up
|
||||
e4.9 eth1 up
|
||||
|
||||
Use /sys/module/aoe/parameters/aoe_iflist (or better, the driver
|
||||
option discussed below) instead of /dev/etherd/interfaces to limit
|
||||
AoE traffic to the network interfaces in the given
|
||||
whitespace-separated list. Unlike the old character device, the
|
||||
sysfs entry can be read from as well as written to.
|
||||
|
||||
It's helpful to trigger discovery after setting the list of allowed
|
||||
interfaces. The aoetools package provides an aoe-discover script
|
||||
for this purpose. You can also directly use the
|
||||
/dev/etherd/discover special file described above.
|
||||
|
||||
DRIVER OPTIONS
|
||||
|
||||
There is a boot option for the built-in aoe driver and a
|
||||
corresponding module parameter, aoe_iflist. Without this option,
|
||||
all network interfaces may be used for ATA over Ethernet. Here is a
|
||||
usage example for the module parameter.
|
||||
|
||||
modprobe aoe_iflist="eth1 eth3"
|
||||
|
@ -14,10 +14,6 @@ test ! -d "$sysd/block" && {
|
||||
echo "$me Error: sysfs is not mounted" 1>&2
|
||||
exit 1
|
||||
}
|
||||
test -z "`lsmod | grep '^aoe'`" && {
|
||||
echo "$me Error: aoe module is not loaded" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
|
||||
# maybe ls comes up empty, so we use "end"
|
||||
|
@ -279,6 +279,7 @@ pci_for_each_dev_reverse() Superseded by pci_find_device_reverse()
|
||||
pci_for_each_bus() Superseded by pci_find_next_bus()
|
||||
pci_find_device() Superseded by pci_get_device()
|
||||
pci_find_subsys() Superseded by pci_get_subsys()
|
||||
pci_find_slot() Superseded by pci_get_slot()
|
||||
pcibios_find_class() Superseded by pci_get_class()
|
||||
pci_find_class() Superseded by pci_get_class()
|
||||
pci_(read|write)_*_nodev() Superseded by pci_bus_(read|write)_*()
|
||||
|
@ -165,40 +165,9 @@ Description:
|
||||
These functions are intended for use by individual drivers, and are defined in
|
||||
struct pci_driver:
|
||||
|
||||
int (*save_state) (struct pci_dev *dev, u32 state);
|
||||
int (*suspend) (struct pci_dev *dev, u32 state);
|
||||
int (*suspend) (struct pci_dev *dev, pm_message_t state);
|
||||
int (*resume) (struct pci_dev *dev);
|
||||
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
|
||||
|
||||
|
||||
save_state
|
||||
----------
|
||||
|
||||
Usage:
|
||||
|
||||
if (dev->driver && dev->driver->save_state)
|
||||
dev->driver->save_state(dev,state);
|
||||
|
||||
The driver should use this callback to save device state. It should take into
|
||||
account the current state of the device and the requested state in order to
|
||||
avoid any unnecessary operations.
|
||||
|
||||
For example, a video card that supports all 4 states (D0-D3), all controller
|
||||
context is preserved when entering D1, but the screen is placed into a low power
|
||||
state (blanked).
|
||||
|
||||
The driver can also interpret this function as a notification that it may be
|
||||
entering a sleep state in the near future. If it knows that the device cannot
|
||||
enter the requested state, either because of lack of support for it, or because
|
||||
the device is middle of some critical operation, then it should fail.
|
||||
|
||||
This function should not be used to set any state in the device or the driver
|
||||
because the device may not actually enter the sleep state (e.g. another driver
|
||||
later causes causes a global state transition to fail).
|
||||
|
||||
Note that in intermediate low power states, a device's I/O and memory spaces may
|
||||
be disabled and may not be available in subsequent transitions to lower power
|
||||
states.
|
||||
int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable);
|
||||
|
||||
|
||||
suspend
|
||||
|
@ -280,6 +280,10 @@ config ISA
|
||||
(MCA) or VESA. ISA is an older system, now being displaced by PCI;
|
||||
newer boards don't support it. If you have ISA, say Y, otherwise N.
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
config PCI
|
||||
bool
|
||||
depends on !ALPHA_JENSEN
|
||||
|
@ -266,6 +266,10 @@ config ISA_DMA
|
||||
depends on FOOTBRIDGE_HOST || ARCH_SHARK
|
||||
default y
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
config PCI
|
||||
bool "PCI support" if ARCH_INTEGRATOR_AP
|
||||
default y if ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX || ARCH_IXP4XX || ARCH_IXP2000
|
||||
|
@ -501,15 +501,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
int
|
||||
pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
if (mask >= SZ_64M - 1 )
|
||||
return 0;
|
||||
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
int
|
||||
pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
@ -520,7 +511,6 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(pci_set_dma_mask);
|
||||
EXPORT_SYMBOL(pci_dac_set_dma_mask);
|
||||
EXPORT_SYMBOL(pci_set_consistent_dma_mask);
|
||||
EXPORT_SYMBOL(ixp4xx_pci_read);
|
||||
EXPORT_SYMBOL(ixp4xx_pci_write);
|
||||
|
@ -89,6 +89,10 @@ config PAGESIZE_16
|
||||
machine with 4MB of memory.
|
||||
endmenu
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
menu "General setup"
|
||||
|
||||
# Compressed boot loader in ROM. Yes, we really want to ask about
|
||||
|
@ -1173,6 +1173,10 @@ source "drivers/pci/pcie/Kconfig"
|
||||
|
||||
source "drivers/pci/Kconfig"
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
config ISA
|
||||
bool "ISA support"
|
||||
depends on !(X86_VOYAGER || X86_VISWS)
|
||||
|
@ -534,6 +534,11 @@ endchoice
|
||||
|
||||
endmenu
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
depends on !M5272
|
||||
default y
|
||||
|
||||
menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
|
||||
|
||||
config PCI
|
||||
|
@ -1656,3 +1656,7 @@ config GENERIC_HARDIRQS
|
||||
config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
@ -45,6 +45,10 @@ config GENERIC_IRQ_PROBE
|
||||
config PM
|
||||
bool
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
source "init/Kconfig"
|
||||
|
||||
|
||||
|
@ -1079,6 +1079,10 @@ source kernel/power/Kconfig
|
||||
|
||||
endmenu
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
menu "Bus options"
|
||||
|
||||
config ISA
|
||||
|
@ -293,6 +293,9 @@ config SECCOMP
|
||||
|
||||
endmenu
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
menu "General setup"
|
||||
|
||||
|
@ -693,6 +693,10 @@ config RTC_9701JE
|
||||
|
||||
endmenu
|
||||
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
depends on MPC1211
|
||||
default y
|
||||
|
||||
menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
|
||||
|
||||
|
@ -47,9 +47,9 @@ prom_sortmemlist(struct linux_mlist_v0 *thislist)
|
||||
char *tmpaddr;
|
||||
char *lowest;
|
||||
|
||||
for(i=0; thislist[i].theres_more != 0; i++) {
|
||||
for(i=0; thislist[i].theres_more; i++) {
|
||||
lowest = thislist[i].start_adr;
|
||||
for(mitr = i+1; thislist[mitr-1].theres_more != 0; mitr++)
|
||||
for(mitr = i+1; thislist[mitr-1].theres_more; mitr++)
|
||||
if(thislist[mitr].start_adr < lowest) {
|
||||
lowest = thislist[mitr].start_adr;
|
||||
swapi = mitr;
|
||||
@ -85,7 +85,7 @@ void __init prom_meminit(void)
|
||||
prom_phys_total[iter].num_bytes = mptr->num_bytes;
|
||||
prom_phys_total[iter].theres_more = &prom_phys_total[iter+1];
|
||||
}
|
||||
prom_phys_total[iter-1].theres_more = 0x0;
|
||||
prom_phys_total[iter-1].theres_more = NULL;
|
||||
/* Second, the total prom taken descriptors. */
|
||||
for(mptr = (*(romvec->pv_v0mem.v0_prommap)), iter=0;
|
||||
mptr; mptr=mptr->theres_more, iter++) {
|
||||
@ -93,7 +93,7 @@ void __init prom_meminit(void)
|
||||
prom_prom_taken[iter].num_bytes = mptr->num_bytes;
|
||||
prom_prom_taken[iter].theres_more = &prom_prom_taken[iter+1];
|
||||
}
|
||||
prom_prom_taken[iter-1].theres_more = 0x0;
|
||||
prom_prom_taken[iter-1].theres_more = NULL;
|
||||
/* Last, the available physical descriptors. */
|
||||
for(mptr = (*(romvec->pv_v0mem.v0_available)), iter=0;
|
||||
mptr; mptr=mptr->theres_more, iter++) {
|
||||
@ -101,7 +101,7 @@ void __init prom_meminit(void)
|
||||
prom_phys_avail[iter].num_bytes = mptr->num_bytes;
|
||||
prom_phys_avail[iter].theres_more = &prom_phys_avail[iter+1];
|
||||
}
|
||||
prom_phys_avail[iter-1].theres_more = 0x0;
|
||||
prom_phys_avail[iter-1].theres_more = NULL;
|
||||
/* Sort all the lists. */
|
||||
prom_sortmemlist(prom_phys_total);
|
||||
prom_sortmemlist(prom_prom_taken);
|
||||
@ -124,7 +124,7 @@ void __init prom_meminit(void)
|
||||
prom_phys_avail[iter].theres_more =
|
||||
&prom_phys_avail[iter+1];
|
||||
}
|
||||
prom_phys_avail[iter-1].theres_more = 0x0;
|
||||
prom_phys_avail[iter-1].theres_more = NULL;
|
||||
|
||||
num_regs = prom_getproperty(node, "reg",
|
||||
(char *) prom_reg_memlist,
|
||||
@ -138,7 +138,7 @@ void __init prom_meminit(void)
|
||||
prom_phys_total[iter].theres_more =
|
||||
&prom_phys_total[iter+1];
|
||||
}
|
||||
prom_phys_total[iter-1].theres_more = 0x0;
|
||||
prom_phys_total[iter-1].theres_more = NULL;
|
||||
|
||||
node = prom_getchild(prom_root_node);
|
||||
node = prom_searchsiblings(node, "virtual-memory");
|
||||
@ -158,7 +158,7 @@ void __init prom_meminit(void)
|
||||
prom_prom_taken[iter].theres_more =
|
||||
&prom_prom_taken[iter+1];
|
||||
}
|
||||
prom_prom_taken[iter-1].theres_more = 0x0;
|
||||
prom_prom_taken[iter-1].theres_more = NULL;
|
||||
|
||||
prom_sortmemlist(prom_prom_taken);
|
||||
|
||||
@ -182,15 +182,15 @@ void __init prom_meminit(void)
|
||||
case PROM_SUN4:
|
||||
#ifdef CONFIG_SUN4
|
||||
/* how simple :) */
|
||||
prom_phys_total[0].start_adr = 0x0;
|
||||
prom_phys_total[0].start_adr = NULL;
|
||||
prom_phys_total[0].num_bytes = *(sun4_romvec->memorysize);
|
||||
prom_phys_total[0].theres_more = 0x0;
|
||||
prom_prom_taken[0].start_adr = 0x0;
|
||||
prom_phys_total[0].theres_more = NULL;
|
||||
prom_prom_taken[0].start_adr = NULL;
|
||||
prom_prom_taken[0].num_bytes = 0x0;
|
||||
prom_prom_taken[0].theres_more = 0x0;
|
||||
prom_phys_avail[0].start_adr = 0x0;
|
||||
prom_prom_taken[0].theres_more = NULL;
|
||||
prom_phys_avail[0].start_adr = NULL;
|
||||
prom_phys_avail[0].num_bytes = *(sun4_romvec->memoryavail);
|
||||
prom_phys_avail[0].theres_more = 0x0;
|
||||
prom_phys_avail[0].theres_more = NULL;
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
@ -151,7 +151,7 @@ struct linux_romvec * __init sun4_prom_init(void)
|
||||
* have more time, we can teach the penguin to say "By your
|
||||
* command" or "Activating turbo boost, Michael". :-)
|
||||
*/
|
||||
sun4_romvec->setLEDs(0x0);
|
||||
sun4_romvec->setLEDs(NULL);
|
||||
|
||||
printk("PROMLIB: Old Sun4 boot PROM monitor %s, romvec version %d\n",
|
||||
sun4_romvec->monid,
|
||||
|
@ -756,7 +756,7 @@ void handler_irq(int irq, struct pt_regs *regs)
|
||||
clear_softint(clr_mask);
|
||||
}
|
||||
#else
|
||||
int should_forward = 1;
|
||||
int should_forward = 0;
|
||||
|
||||
clear_softint(1 << irq);
|
||||
#endif
|
||||
@ -1007,10 +1007,10 @@ static int retarget_one_irq(struct irqaction *p, int goal_cpu)
|
||||
}
|
||||
upa_writel(tid | IMAP_VALID, imap);
|
||||
|
||||
while (!cpu_online(goal_cpu)) {
|
||||
do {
|
||||
if (++goal_cpu >= NR_CPUS)
|
||||
goal_cpu = 0;
|
||||
}
|
||||
} while (!cpu_online(goal_cpu));
|
||||
|
||||
return goal_cpu;
|
||||
}
|
||||
|
@ -379,6 +379,11 @@ config GENERIC_IRQ_PROBE
|
||||
bool
|
||||
default y
|
||||
|
||||
# we have no ISA slots, but we do have ISA-style DMA.
|
||||
config ISA_DMA_API
|
||||
bool
|
||||
default y
|
||||
|
||||
menu "Power management options"
|
||||
|
||||
source kernel/power/Kconfig
|
||||
|
@ -105,7 +105,7 @@ config ATARI_SLM
|
||||
|
||||
config BLK_DEV_XD
|
||||
tristate "XT hard disk support"
|
||||
depends on ISA
|
||||
depends on ISA && ISA_DMA_API
|
||||
help
|
||||
Very old 8 bit hard disk controllers used in the IBM XT computer
|
||||
will be supported if you say Y here.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Copyright (c) 2004 Coraid, Inc. See COPYING for GPL terms. */
|
||||
#define VERSION "6"
|
||||
#define VERSION "10"
|
||||
#define AOE_MAJOR 152
|
||||
#define DEVICE_NAME "aoe"
|
||||
|
||||
|
@ -37,6 +37,13 @@ static ssize_t aoedisk_show_netif(struct gendisk * disk, char *page)
|
||||
|
||||
return snprintf(page, PAGE_SIZE, "%s\n", d->ifp->name);
|
||||
}
|
||||
/* firmware version */
|
||||
static ssize_t aoedisk_show_fwver(struct gendisk * disk, char *page)
|
||||
{
|
||||
struct aoedev *d = disk->private_data;
|
||||
|
||||
return snprintf(page, PAGE_SIZE, "0x%04x\n", (unsigned int) d->fw_ver);
|
||||
}
|
||||
|
||||
static struct disk_attribute disk_attr_state = {
|
||||
.attr = {.name = "state", .mode = S_IRUGO },
|
||||
@ -50,6 +57,10 @@ static struct disk_attribute disk_attr_netif = {
|
||||
.attr = {.name = "netif", .mode = S_IRUGO },
|
||||
.show = aoedisk_show_netif
|
||||
};
|
||||
static struct disk_attribute disk_attr_fwver = {
|
||||
.attr = {.name = "firmware-version", .mode = S_IRUGO },
|
||||
.show = aoedisk_show_fwver
|
||||
};
|
||||
|
||||
static void
|
||||
aoedisk_add_sysfs(struct aoedev *d)
|
||||
@ -57,6 +68,7 @@ aoedisk_add_sysfs(struct aoedev *d)
|
||||
sysfs_create_file(&d->gd->kobj, &disk_attr_state.attr);
|
||||
sysfs_create_file(&d->gd->kobj, &disk_attr_mac.attr);
|
||||
sysfs_create_file(&d->gd->kobj, &disk_attr_netif.attr);
|
||||
sysfs_create_file(&d->gd->kobj, &disk_attr_fwver.attr);
|
||||
}
|
||||
void
|
||||
aoedisk_rm_sysfs(struct aoedev *d)
|
||||
@ -64,6 +76,7 @@ aoedisk_rm_sysfs(struct aoedev *d)
|
||||
sysfs_remove_link(&d->gd->kobj, "state");
|
||||
sysfs_remove_link(&d->gd->kobj, "mac");
|
||||
sysfs_remove_link(&d->gd->kobj, "netif");
|
||||
sysfs_remove_link(&d->gd->kobj, "firmware-version");
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -109,25 +109,22 @@ aoedev_set(ulong sysminor, unsigned char *addr, struct net_device *ifp, ulong bu
|
||||
spin_lock_irqsave(&devlist_lock, flags);
|
||||
|
||||
for (d=devlist; d; d=d->next)
|
||||
if (d->sysminor == sysminor
|
||||
|| memcmp(d->addr, addr, sizeof d->addr) == 0)
|
||||
if (d->sysminor == sysminor)
|
||||
break;
|
||||
|
||||
if (d == NULL && (d = aoedev_newdev(bufcnt)) == NULL) {
|
||||
spin_unlock_irqrestore(&devlist_lock, flags);
|
||||
printk(KERN_INFO "aoe: aoedev_set: aoedev_newdev failure.\n");
|
||||
return NULL;
|
||||
}
|
||||
} /* if newdev, (d->flags & DEVFL_UP) == 0 for below */
|
||||
|
||||
spin_unlock_irqrestore(&devlist_lock, flags);
|
||||
spin_lock_irqsave(&d->lock, flags);
|
||||
|
||||
d->ifp = ifp;
|
||||
|
||||
if (d->sysminor != sysminor
|
||||
|| (d->flags & DEVFL_UP) == 0) {
|
||||
memcpy(d->addr, addr, sizeof d->addr);
|
||||
if ((d->flags & DEVFL_UP) == 0) {
|
||||
aoedev_downdev(d); /* flushes outstanding frames */
|
||||
memcpy(d->addr, addr, sizeof d->addr);
|
||||
d->sysminor = sysminor;
|
||||
d->aoemajor = AOEMAJOR(sysminor);
|
||||
d->aoeminor = AOEMINOR(sysminor);
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include <linux/hdreg.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include "aoe.h"
|
||||
|
||||
#define NECODES 5
|
||||
@ -26,6 +27,19 @@ enum {
|
||||
};
|
||||
|
||||
static char aoe_iflist[IFLISTSZ];
|
||||
module_param_string(aoe_iflist, aoe_iflist, IFLISTSZ, 0600);
|
||||
MODULE_PARM_DESC(aoe_iflist, "aoe_iflist=\"dev1 [dev2 ...]\"\n");
|
||||
|
||||
#ifndef MODULE
|
||||
static int __init aoe_iflist_setup(char *str)
|
||||
{
|
||||
strncpy(aoe_iflist, str, IFLISTSZ);
|
||||
aoe_iflist[IFLISTSZ - 1] = '\0';
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("aoe_iflist=", aoe_iflist_setup);
|
||||
#endif
|
||||
|
||||
int
|
||||
is_aoe_netif(struct net_device *ifp)
|
||||
@ -36,7 +50,8 @@ is_aoe_netif(struct net_device *ifp)
|
||||
if (aoe_iflist[0] == '\0')
|
||||
return 1;
|
||||
|
||||
for (p = aoe_iflist; *p; p = q + strspn(q, WHITESPACE)) {
|
||||
p = aoe_iflist + strspn(aoe_iflist, WHITESPACE);
|
||||
for (; *p; p = q + strspn(q, WHITESPACE)) {
|
||||
q = p + strcspn(p, WHITESPACE);
|
||||
if (q != p)
|
||||
len = q - p;
|
||||
|
@ -153,7 +153,7 @@ config DIGIEPCA
|
||||
|
||||
config ESPSERIAL
|
||||
tristate "Hayes ESP serial port support"
|
||||
depends on SERIAL_NONSTANDARD && ISA && BROKEN_ON_SMP
|
||||
depends on SERIAL_NONSTANDARD && ISA && BROKEN_ON_SMP && ISA_DMA_API
|
||||
help
|
||||
This is a driver which supports Hayes ESP serial ports. Both single
|
||||
port cards and multiport cards are supported. Make sure to read
|
||||
@ -195,7 +195,7 @@ config ISI
|
||||
|
||||
config SYNCLINK
|
||||
tristate "Microgate SyncLink card support"
|
||||
depends on SERIAL_NONSTANDARD && PCI
|
||||
depends on SERIAL_NONSTANDARD && PCI && ISA_DMA_API
|
||||
help
|
||||
Provides support for the SyncLink ISA and PCI multiprotocol serial
|
||||
adapters. These adapters support asynchronous and HDLC bit
|
||||
|
@ -1617,15 +1617,15 @@ typedef struct dmi_header
|
||||
u16 handle;
|
||||
} dmi_header_t;
|
||||
|
||||
static int decode_dmi(dmi_header_t *dm, int intf_num)
|
||||
static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
|
||||
{
|
||||
u8 *data = (u8 *)dm;
|
||||
u8 __iomem *data = (u8 __iomem *)dm;
|
||||
unsigned long base_addr;
|
||||
u8 reg_spacing;
|
||||
u8 len = dm->length;
|
||||
u8 len = readb(&dm->length);
|
||||
dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num;
|
||||
|
||||
ipmi_data->type = data[4];
|
||||
ipmi_data->type = readb(&data[4]);
|
||||
|
||||
memcpy(&base_addr, data+8, sizeof(unsigned long));
|
||||
if (len >= 0x11) {
|
||||
@ -1640,12 +1640,12 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
|
||||
}
|
||||
/* If bit 4 of byte 0x10 is set, then the lsb for the address
|
||||
is odd. */
|
||||
ipmi_data->base_addr = base_addr | ((data[0x10] & 0x10) >> 4);
|
||||
ipmi_data->base_addr = base_addr | ((readb(&data[0x10]) & 0x10) >> 4);
|
||||
|
||||
ipmi_data->irq = data[0x11];
|
||||
ipmi_data->irq = readb(&data[0x11]);
|
||||
|
||||
/* The top two bits of byte 0x10 hold the register spacing. */
|
||||
reg_spacing = (data[0x10] & 0xC0) >> 6;
|
||||
reg_spacing = (readb(&data[0x10]) & 0xC0) >> 6;
|
||||
switch(reg_spacing){
|
||||
case 0x00: /* Byte boundaries */
|
||||
ipmi_data->offset = 1;
|
||||
@ -1673,7 +1673,7 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
|
||||
ipmi_data->offset = 1;
|
||||
}
|
||||
|
||||
ipmi_data->slave_addr = data[6];
|
||||
ipmi_data->slave_addr = readb(&data[6]);
|
||||
|
||||
if (is_new_interface(-1, ipmi_data->addr_space,ipmi_data->base_addr)) {
|
||||
dmi_data_entries++;
|
||||
@ -1687,9 +1687,9 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
|
||||
|
||||
static int dmi_table(u32 base, int len, int num)
|
||||
{
|
||||
u8 *buf;
|
||||
struct dmi_header *dm;
|
||||
u8 *data;
|
||||
u8 __iomem *buf;
|
||||
struct dmi_header __iomem *dm;
|
||||
u8 __iomem *data;
|
||||
int i=1;
|
||||
int status=-1;
|
||||
int intf_num = 0;
|
||||
@ -1702,12 +1702,12 @@ static int dmi_table(u32 base, int len, int num)
|
||||
|
||||
while(i<num && (data - buf) < len)
|
||||
{
|
||||
dm=(dmi_header_t *)data;
|
||||
dm=(dmi_header_t __iomem *)data;
|
||||
|
||||
if((data-buf+dm->length) >= len)
|
||||
if((data-buf+readb(&dm->length)) >= len)
|
||||
break;
|
||||
|
||||
if (dm->type == 38) {
|
||||
if (readb(&dm->type) == 38) {
|
||||
if (decode_dmi(dm, intf_num) == 0) {
|
||||
intf_num++;
|
||||
if (intf_num >= SI_MAX_DRIVERS)
|
||||
@ -1715,8 +1715,8 @@ static int dmi_table(u32 base, int len, int num)
|
||||
}
|
||||
}
|
||||
|
||||
data+=dm->length;
|
||||
while((data-buf) < len && (*data || data[1]))
|
||||
data+=readb(&dm->length);
|
||||
while((data-buf) < len && (readb(data)||readb(data+1)))
|
||||
data++;
|
||||
data+=2;
|
||||
i++;
|
||||
|
@ -51,7 +51,7 @@ struct si_sm_io
|
||||
/* Generic info used by the actual handling routines, the
|
||||
state machine shouldn't touch these. */
|
||||
void *info;
|
||||
void *addr;
|
||||
void __iomem *addr;
|
||||
int regspacing;
|
||||
int regsize;
|
||||
int regshift;
|
||||
|
@ -394,7 +394,7 @@ int mbcs_open(struct inode *ip, struct file *fp)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ssize_t mbcs_sram_read(struct file * fp, char *buf, size_t len, loff_t * off)
|
||||
ssize_t mbcs_sram_read(struct file * fp, char __user *buf, size_t len, loff_t * off)
|
||||
{
|
||||
struct cx_dev *cx_dev = fp->private_data;
|
||||
struct mbcs_soft *soft = cx_dev->soft;
|
||||
@ -419,7 +419,7 @@ ssize_t mbcs_sram_read(struct file * fp, char *buf, size_t len, loff_t * off)
|
||||
}
|
||||
|
||||
ssize_t
|
||||
mbcs_sram_write(struct file * fp, const char *buf, size_t len, loff_t * off)
|
||||
mbcs_sram_write(struct file * fp, const char __user *buf, size_t len, loff_t * off)
|
||||
{
|
||||
struct cx_dev *cx_dev = fp->private_data;
|
||||
struct mbcs_soft *soft = cx_dev->soft;
|
||||
|
@ -543,9 +543,9 @@ struct mbcs_soft {
|
||||
};
|
||||
|
||||
extern int mbcs_open(struct inode *ip, struct file *fp);
|
||||
extern ssize_t mbcs_sram_read(struct file *fp, char *buf, size_t len,
|
||||
extern ssize_t mbcs_sram_read(struct file *fp, char __user *buf, size_t len,
|
||||
loff_t * off);
|
||||
extern ssize_t mbcs_sram_write(struct file *fp, const char *buf, size_t len,
|
||||
extern ssize_t mbcs_sram_write(struct file *fp, const char __user *buf, size_t len,
|
||||
loff_t * off);
|
||||
extern loff_t mbcs_sram_llseek(struct file *filp, loff_t off, int whence);
|
||||
extern int mbcs_gscr_mmap(struct file *fp, struct vm_area_struct *vma);
|
||||
|
@ -1021,11 +1021,11 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp,
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
if (copy_to_user((u8 *)arg, &val8, sizeof(val8)))
|
||||
if (copy_to_user(argp, &val8, sizeof(val8)))
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
case SONYPI_IOCSFAN:
|
||||
if (copy_from_user(&val8, (u8 *)arg, sizeof(val8))) {
|
||||
if (copy_from_user(&val8, argp, sizeof(val8))) {
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
}
|
||||
@ -1038,7 +1038,7 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp,
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
if (copy_to_user((u8 *)arg, &val8, sizeof(val8)))
|
||||
if (copy_to_user(argp, &val8, sizeof(val8)))
|
||||
ret = -EFAULT;
|
||||
break;
|
||||
default:
|
||||
|
@ -51,7 +51,7 @@ config MMC_PXA
|
||||
|
||||
config MMC_WBSD
|
||||
tristate "Winbond W83L51xD SD/MMC Card Interface support"
|
||||
depends on MMC && ISA
|
||||
depends on MMC && ISA && ISA_DMA_API
|
||||
help
|
||||
This selects the Winbond(R) W83L51xD Secure digital and
|
||||
Multimedia card Interface.
|
||||
|
@ -589,7 +589,7 @@ config EL2
|
||||
|
||||
config ELPLUS
|
||||
tristate "3c505 \"EtherLink Plus\" support"
|
||||
depends on NET_VENDOR_3COM && ISA
|
||||
depends on NET_VENDOR_3COM && ISA && ISA_DMA_API
|
||||
---help---
|
||||
Information about this network (Ethernet) card can be found in
|
||||
<file:Documentation/networking/3c505.txt>. If you have a card of
|
||||
@ -630,7 +630,7 @@ config EL3
|
||||
|
||||
config 3C515
|
||||
tristate "3c515 ISA \"Fast EtherLink\""
|
||||
depends on NET_VENDOR_3COM && (ISA || EISA)
|
||||
depends on NET_VENDOR_3COM && (ISA || EISA) && ISA_DMA_API
|
||||
help
|
||||
If you have a 3Com ISA EtherLink XL "Corkscrew" 3c515 Fast Ethernet
|
||||
network card, say Y and read the Ethernet-HOWTO, available from
|
||||
@ -708,7 +708,7 @@ config TYPHOON
|
||||
|
||||
config LANCE
|
||||
tristate "AMD LANCE and PCnet (AT1500 and NE2100) support"
|
||||
depends on NET_ETHERNET && ISA
|
||||
depends on NET_ETHERNET && ISA && ISA_DMA_API
|
||||
help
|
||||
If you have a network (Ethernet) card of this type, say Y and read
|
||||
the Ethernet-HOWTO, available from
|
||||
@ -864,7 +864,7 @@ config NI52
|
||||
|
||||
config NI65
|
||||
tristate "NI6510 support"
|
||||
depends on NET_VENDOR_RACAL && ISA
|
||||
depends on NET_VENDOR_RACAL && ISA && ISA_DMA_API
|
||||
help
|
||||
If you have a network (Ethernet) card of this type, say Y and read
|
||||
the Ethernet-HOWTO, available from
|
||||
@ -1072,7 +1072,7 @@ config NE2000
|
||||
|
||||
config ZNET
|
||||
tristate "Zenith Z-Note support (EXPERIMENTAL)"
|
||||
depends on NET_ISA && EXPERIMENTAL
|
||||
depends on NET_ISA && EXPERIMENTAL && ISA_DMA_API
|
||||
help
|
||||
The Zenith Z-Note notebook computer has a built-in network
|
||||
(Ethernet) card, and this is the Linux driver for it. Note that the
|
||||
|
@ -13,7 +13,7 @@ config DEV_APPLETALK
|
||||
|
||||
config LTPC
|
||||
tristate "Apple/Farallon LocalTalk PC support"
|
||||
depends on DEV_APPLETALK && (ISA || EISA)
|
||||
depends on DEV_APPLETALK && (ISA || EISA) && ISA_DMA_API
|
||||
help
|
||||
This allows you to use the AppleTalk PC card to connect to LocalTalk
|
||||
networks. The card is also known as the Farallon PhoneNet PC card.
|
||||
|
@ -45,7 +45,7 @@ config BPQETHER
|
||||
|
||||
config DMASCC
|
||||
tristate "High-speed (DMA) SCC driver for AX.25"
|
||||
depends on ISA && AX25 && BROKEN_ON_SMP
|
||||
depends on ISA && AX25 && BROKEN_ON_SMP && ISA_DMA_API
|
||||
---help---
|
||||
This is a driver for high-speed SCC boards, i.e. those supporting
|
||||
DMA on one port. You usually use those boards to connect your
|
||||
@ -78,7 +78,7 @@ config DMASCC
|
||||
|
||||
config SCC
|
||||
tristate "Z8530 SCC driver"
|
||||
depends on ISA && AX25
|
||||
depends on ISA && AX25 && ISA_DMA_API
|
||||
---help---
|
||||
These cards are used to connect your Linux box to an amateur radio
|
||||
in order to communicate with other computers. If you want to use
|
||||
|
@ -310,7 +310,7 @@ config SIGMATEL_FIR
|
||||
|
||||
config NSC_FIR
|
||||
tristate "NSC PC87108/PC87338"
|
||||
depends on IRDA
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the NSC PC87108 and
|
||||
PC87338 IrDA chipsets. This driver supports SIR,
|
||||
@ -321,7 +321,7 @@ config NSC_FIR
|
||||
|
||||
config WINBOND_FIR
|
||||
tristate "Winbond W83977AF (IR)"
|
||||
depends on IRDA
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build IrDA support for the Winbond
|
||||
W83977AF super-io chipset. This driver should be used for the IrDA
|
||||
@ -347,7 +347,7 @@ config AU1000_FIR
|
||||
|
||||
config SMC_IRCC_FIR
|
||||
tristate "SMSC IrCC (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && IRDA
|
||||
depends on EXPERIMENTAL && IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the SMC Infrared
|
||||
Communications Controller. It is used in a wide variety of
|
||||
@ -357,7 +357,7 @@ config SMC_IRCC_FIR
|
||||
|
||||
config ALI_FIR
|
||||
tristate "ALi M5123 FIR (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && IRDA
|
||||
depends on EXPERIMENTAL && IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the ALi M5123 FIR
|
||||
Controller. The ALi M5123 FIR Controller is embedded in ALi M1543C,
|
||||
@ -385,7 +385,7 @@ config SA1100_FIR
|
||||
|
||||
config VIA_FIR
|
||||
tristate "VIA VT8231/VT1211 SIR/MIR/FIR"
|
||||
depends on IRDA
|
||||
depends on IRDA && ISA_DMA_API
|
||||
help
|
||||
Say Y here if you want to build support for the VIA VT8231
|
||||
and VIA VT1211 IrDA controllers, found on the motherboards using
|
||||
|
@ -26,7 +26,7 @@ config WAN
|
||||
# There is no way to detect a comtrol sv11 - force it modular for now.
|
||||
config HOSTESS_SV11
|
||||
tristate "Comtrol Hostess SV-11 support"
|
||||
depends on WAN && ISA && m
|
||||
depends on WAN && ISA && m && ISA_DMA_API
|
||||
help
|
||||
Driver for Comtrol Hostess SV-11 network card which
|
||||
operates on low speed synchronous serial links at up to
|
||||
@ -38,7 +38,7 @@ config HOSTESS_SV11
|
||||
# The COSA/SRP driver has not been tested as non-modular yet.
|
||||
config COSA
|
||||
tristate "COSA/SRP sync serial boards support"
|
||||
depends on WAN && ISA && m
|
||||
depends on WAN && ISA && m && ISA_DMA_API
|
||||
---help---
|
||||
Driver for COSA and SRP synchronous serial boards.
|
||||
|
||||
@ -127,7 +127,7 @@ config LANMEDIA
|
||||
# There is no way to detect a Sealevel board. Force it modular
|
||||
config SEALEVEL_4021
|
||||
tristate "Sealevel Systems 4021 support"
|
||||
depends on WAN && ISA && m
|
||||
depends on WAN && ISA && m && ISA_DMA_API
|
||||
help
|
||||
This is a driver for the Sealevel Systems ACB 56 serial I/O adapter.
|
||||
|
||||
|
@ -34,7 +34,7 @@ config PARPORT
|
||||
|
||||
config PARPORT_PC
|
||||
tristate "PC-style hardware"
|
||||
depends on PARPORT && (!SPARC64 || PCI) && (!SPARC32 || BROKEN)
|
||||
depends on PARPORT && (!SPARC64 || PCI) && !SPARC32
|
||||
---help---
|
||||
You should say Y here if you have a PC-style parallel port. All
|
||||
IBM PC compatible computers and some Alphas have PC-style
|
||||
|
@ -67,6 +67,10 @@
|
||||
|
||||
#define PARPORT_PC_MAX_PORTS PARPORT_MAX
|
||||
|
||||
#ifdef CONFIG_ISA_DMA_API
|
||||
#define HAS_DMA
|
||||
#endif
|
||||
|
||||
/* ECR modes */
|
||||
#define ECR_SPP 00
|
||||
#define ECR_PS2 01
|
||||
@ -610,6 +614,7 @@ dump_parport_state ("leave fifo_write_block_pio", port);
|
||||
return length - left;
|
||||
}
|
||||
|
||||
#ifdef HAS_DMA
|
||||
static size_t parport_pc_fifo_write_block_dma (struct parport *port,
|
||||
const void *buf, size_t length)
|
||||
{
|
||||
@ -732,6 +737,17 @@ dump_parport_state ("enter fifo_write_block_dma", port);
|
||||
dump_parport_state ("leave fifo_write_block_dma", port);
|
||||
return length - left;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline size_t parport_pc_fifo_write_block(struct parport *port,
|
||||
const void *buf, size_t length)
|
||||
{
|
||||
#ifdef HAS_DMA
|
||||
if (port->dma != PARPORT_DMA_NONE)
|
||||
return parport_pc_fifo_write_block_dma (port, buf, length);
|
||||
#endif
|
||||
return parport_pc_fifo_write_block_pio (port, buf, length);
|
||||
}
|
||||
|
||||
/* Parallel Port FIFO mode (ECP chipsets) */
|
||||
static size_t parport_pc_compat_write_block_pio (struct parport *port,
|
||||
@ -758,10 +774,7 @@ static size_t parport_pc_compat_write_block_pio (struct parport *port,
|
||||
port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
|
||||
|
||||
/* Write the data to the FIFO. */
|
||||
if (port->dma != PARPORT_DMA_NONE)
|
||||
written = parport_pc_fifo_write_block_dma (port, buf, length);
|
||||
else
|
||||
written = parport_pc_fifo_write_block_pio (port, buf, length);
|
||||
written = parport_pc_fifo_write_block(port, buf, length);
|
||||
|
||||
/* Finish up. */
|
||||
/* For some hardware we don't want to touch the mode until
|
||||
@ -856,10 +869,7 @@ static size_t parport_pc_ecp_write_block_pio (struct parport *port,
|
||||
port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
|
||||
|
||||
/* Write the data to the FIFO. */
|
||||
if (port->dma != PARPORT_DMA_NONE)
|
||||
written = parport_pc_fifo_write_block_dma (port, buf, length);
|
||||
else
|
||||
written = parport_pc_fifo_write_block_pio (port, buf, length);
|
||||
written = parport_pc_fifo_write_block(port, buf, length);
|
||||
|
||||
/* Finish up. */
|
||||
/* For some hardware we don't want to touch the mode until
|
||||
@ -2285,6 +2295,7 @@ struct parport *parport_pc_probe_port (unsigned long int base,
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PARPORT_PC_FIFO
|
||||
#ifdef HAS_DMA
|
||||
if (p->dma != PARPORT_DMA_NONE) {
|
||||
if (request_dma (p->dma, p->name)) {
|
||||
printk (KERN_WARNING "%s: dma %d in use, "
|
||||
@ -2306,7 +2317,8 @@ struct parport *parport_pc_probe_port (unsigned long int base,
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_PARPORT_PC_FIFO */
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Done probing. Now put the port into a sensible start-up state. */
|
||||
@ -2367,11 +2379,13 @@ void parport_pc_unregister_port (struct parport *p)
|
||||
if (p->modes & PARPORT_MODE_ECP)
|
||||
release_region(p->base_hi, 3);
|
||||
#ifdef CONFIG_PARPORT_PC_FIFO
|
||||
#ifdef HAS_DMA
|
||||
if (priv->dma_buf)
|
||||
pci_free_consistent(priv->dev, PAGE_SIZE,
|
||||
priv->dma_buf,
|
||||
priv->dma_handle);
|
||||
#endif /* CONFIG_PARPORT_PC_FIFO */
|
||||
#endif
|
||||
#endif
|
||||
kfree (p->private_data);
|
||||
parport_put_port(p);
|
||||
kfree (ops); /* hope no-one cached it */
|
||||
|
@ -196,7 +196,7 @@ struct ebda_hpc_bus {
|
||||
|
||||
|
||||
/********************************************************************
|
||||
* THREE TYPE OF HOT PLUG CONTROLER *
|
||||
* THREE TYPE OF HOT PLUG CONTROLLER *
|
||||
********************************************************************/
|
||||
|
||||
struct isa_ctlr_access {
|
||||
|
@ -64,7 +64,7 @@ static int to_debug = FALSE;
|
||||
#define WPG_I2C_OR 0x2000 // I2C OR operation
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Command set for I2C Master Operation Setup Regisetr
|
||||
// Command set for I2C Master Operation Setup Register
|
||||
//----------------------------------------------------------------------------
|
||||
#define WPG_READATADDR_MASK 0x00010000 // read,bytes,I2C shifted,index
|
||||
#define WPG_WRITEATADDR_MASK 0x40010000 // write,bytes,I2C shifted,index
|
||||
@ -835,7 +835,7 @@ static void poll_hpc (void)
|
||||
if (ibmphp_shutdown)
|
||||
break;
|
||||
|
||||
/* try to get the lock to do some kind of harware access */
|
||||
/* try to get the lock to do some kind of hardware access */
|
||||
down (&semOperations);
|
||||
|
||||
switch (poll_state) {
|
||||
@ -906,7 +906,7 @@ static void poll_hpc (void)
|
||||
poll_state = POLL_LATCH_REGISTER;
|
||||
break;
|
||||
}
|
||||
/* give up the harware semaphore */
|
||||
/* give up the hardware semaphore */
|
||||
up (&semOperations);
|
||||
/* sleep for a short time just for good measure */
|
||||
msleep(100);
|
||||
|
@ -1308,10 +1308,10 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
|
||||
/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
|
||||
} else {
|
||||
/* This is Memory */
|
||||
start_address &= PCI_BASE_ADDRESS_MEM_MASK;
|
||||
if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
|
||||
/* pfmem */
|
||||
debug ("start address of pfmem is %x\n", start_address);
|
||||
start_address &= PCI_BASE_ADDRESS_MEM_MASK;
|
||||
|
||||
if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
|
||||
err ("cannot find corresponding PFMEM resource to remove\n");
|
||||
@ -1325,6 +1325,8 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
|
||||
} else {
|
||||
/* regular memory */
|
||||
debug ("start address of mem is %x\n", start_address);
|
||||
start_address &= PCI_BASE_ADDRESS_MEM_MASK;
|
||||
|
||||
if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
|
||||
err ("cannot find corresponding MEM resource to remove\n");
|
||||
return -EIO;
|
||||
@ -1422,9 +1424,9 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
|
||||
/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
|
||||
} else {
|
||||
/* This is Memory */
|
||||
start_address &= PCI_BASE_ADDRESS_MEM_MASK;
|
||||
if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
|
||||
/* pfmem */
|
||||
start_address &= PCI_BASE_ADDRESS_MEM_MASK;
|
||||
if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
|
||||
err ("cannot find corresponding PFMEM resource to remove\n");
|
||||
return -EINVAL;
|
||||
@ -1436,6 +1438,7 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
|
||||
}
|
||||
} else {
|
||||
/* regular memory */
|
||||
start_address &= PCI_BASE_ADDRESS_MEM_MASK;
|
||||
if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
|
||||
err ("cannot find corresponding MEM resource to remove\n");
|
||||
return -EINVAL;
|
||||
|
@ -150,7 +150,7 @@ struct hotplug_slot_info {
|
||||
* @name: the name of the slot being registered. This string must
|
||||
* be unique amoung slots registered on this system.
|
||||
* @ops: pointer to the &struct hotplug_slot_ops to be used for this slot
|
||||
* @info: pointer to the &struct hotplug_slot_info for the inital values for
|
||||
* @info: pointer to the &struct hotplug_slot_info for the initial values for
|
||||
* this slot.
|
||||
* @release: called during pci_hp_deregister to free memory allocated in a
|
||||
* hotplug_slot structure.
|
||||
|
@ -90,6 +90,22 @@ static struct hotplug_slot_ops pciehp_hotplug_slot_ops = {
|
||||
.get_cur_bus_speed = get_cur_bus_speed,
|
||||
};
|
||||
|
||||
/**
|
||||
* release_slot - free up the memory used by a slot
|
||||
* @hotplug_slot: slot to free
|
||||
*/
|
||||
static void release_slot(struct hotplug_slot *hotplug_slot)
|
||||
{
|
||||
struct slot *slot = hotplug_slot->private;
|
||||
|
||||
dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
|
||||
|
||||
kfree(slot->hotplug_slot->info);
|
||||
kfree(slot->hotplug_slot->name);
|
||||
kfree(slot->hotplug_slot);
|
||||
kfree(slot);
|
||||
}
|
||||
|
||||
static int init_slots(struct controller *ctrl)
|
||||
{
|
||||
struct slot *new_slot;
|
||||
@ -139,7 +155,8 @@ static int init_slots(struct controller *ctrl)
|
||||
|
||||
/* register this slot with the hotplug pci core */
|
||||
new_slot->hotplug_slot->private = new_slot;
|
||||
make_slot_name (new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot);
|
||||
new_slot->hotplug_slot->release = &release_slot;
|
||||
make_slot_name(new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot);
|
||||
new_slot->hotplug_slot->ops = &pciehp_hotplug_slot_ops;
|
||||
|
||||
new_slot->hpc_ops->get_power_status(new_slot, &(new_slot->hotplug_slot->info->power_status));
|
||||
@ -188,10 +205,6 @@ static int cleanup_slots (struct controller * ctrl)
|
||||
while (old_slot) {
|
||||
next_slot = old_slot->next;
|
||||
pci_hp_deregister (old_slot->hotplug_slot);
|
||||
kfree(old_slot->hotplug_slot->info);
|
||||
kfree(old_slot->hotplug_slot->name);
|
||||
kfree(old_slot->hotplug_slot);
|
||||
kfree(old_slot);
|
||||
old_slot = next_slot;
|
||||
}
|
||||
|
||||
|
@ -297,7 +297,7 @@ static int __init init_slots(void)
|
||||
hotplug_slot->ops = &skel_hotplug_slot_ops;
|
||||
|
||||
/*
|
||||
* Initilize the slot info structure with some known
|
||||
* Initialize the slot info structure with some known
|
||||
* good values.
|
||||
*/
|
||||
info->power_status = get_power_status(slot);
|
||||
|
@ -522,7 +522,7 @@ void pci_scan_msi_device(struct pci_dev *dev)
|
||||
* msi_capability_init - configure device's MSI capability structure
|
||||
* @dev: pointer to the pci_dev data structure of MSI device function
|
||||
*
|
||||
* Setup the MSI capability structure of device funtion with a single
|
||||
* Setup the MSI capability structure of device function with a single
|
||||
* MSI vector, regardless of device function is capable of handling
|
||||
* multiple messages. A return of zero indicates the successful setup
|
||||
* of an entry zero with the new MSI vector or non-zero for otherwise.
|
||||
@ -599,7 +599,7 @@ static int msi_capability_init(struct pci_dev *dev)
|
||||
* msix_capability_init - configure device's MSI-X capability
|
||||
* @dev: pointer to the pci_dev data structure of MSI-X device function
|
||||
*
|
||||
* Setup the MSI-X capability structure of device funtion with a
|
||||
* Setup the MSI-X capability structure of device function with a
|
||||
* single MSI-X vector. A return of zero indicates the successful setup of
|
||||
* requested MSI-X entries with allocated vectors or non-zero for otherwise.
|
||||
**/
|
||||
@ -1074,7 +1074,7 @@ void pci_disable_msix(struct pci_dev* dev)
|
||||
* msi_remove_pci_irq_vectors - reclaim MSI(X) vectors to unused state
|
||||
* @dev: pointer to the pci_dev data structure of MSI(X) device function
|
||||
*
|
||||
* Being called during hotplug remove, from which the device funciton
|
||||
* Being called during hotplug remove, from which the device function
|
||||
* is hot-removed. All previous assigned MSI/MSI-X vectors, if
|
||||
* allocated for this device function, are reclaimed to unused state,
|
||||
* which may be used later on.
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
static u32 ctrlset_buf[3] = {0, 0, 0};
|
||||
static u32 global_ctrlsets = 0;
|
||||
u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40, 0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66};
|
||||
static u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40, 0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66};
|
||||
|
||||
static acpi_status
|
||||
acpi_query_osc (
|
||||
|
@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void pci_device_shutdown(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pci_dev = to_pci_dev(dev);
|
||||
struct pci_driver *drv = pci_dev->driver;
|
||||
|
||||
if (drv && drv->shutdown)
|
||||
drv->shutdown(pci_dev);
|
||||
}
|
||||
|
||||
#define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
|
||||
#define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
|
||||
@ -373,7 +381,7 @@ pci_populate_driver_dir(struct pci_driver *drv)
|
||||
*
|
||||
* Adds the driver structure to the list of registered drivers.
|
||||
* Returns a negative value on error, otherwise 0.
|
||||
* If no error occured, the driver remains registered even if
|
||||
* If no error occurred, the driver remains registered even if
|
||||
* no device was claimed during registration.
|
||||
*/
|
||||
int pci_register_driver(struct pci_driver *drv)
|
||||
@ -385,6 +393,7 @@ int pci_register_driver(struct pci_driver *drv)
|
||||
drv->driver.bus = &pci_bus_type;
|
||||
drv->driver.probe = pci_device_probe;
|
||||
drv->driver.remove = pci_device_remove;
|
||||
drv->driver.shutdown = pci_device_shutdown,
|
||||
drv->driver.owner = drv->owner;
|
||||
drv->driver.kobj.ktype = &pci_driver_kobj_type;
|
||||
pci_init_dynids(&drv->dynids);
|
||||
|
@ -91,6 +91,7 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
||||
struct pci_dev *dev = to_pci_dev(container_of(kobj,struct device,kobj));
|
||||
unsigned int size = 64;
|
||||
loff_t init_off = off;
|
||||
u8 *data = (u8*) buf;
|
||||
|
||||
/* Several chips lock up trying to read undefined config space */
|
||||
if (capable(CAP_SYS_ADMIN)) {
|
||||
@ -108,30 +109,47 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
||||
size = count;
|
||||
}
|
||||
|
||||
while (off & 3) {
|
||||
unsigned char val;
|
||||
if ((off & 1) && size) {
|
||||
u8 val;
|
||||
pci_read_config_byte(dev, off, &val);
|
||||
buf[off - init_off] = val;
|
||||
data[off - init_off] = val;
|
||||
off++;
|
||||
if (--size == 0)
|
||||
break;
|
||||
size--;
|
||||
}
|
||||
|
||||
if ((off & 3) && size > 2) {
|
||||
u16 val;
|
||||
pci_read_config_word(dev, off, &val);
|
||||
data[off - init_off] = val & 0xff;
|
||||
data[off - init_off + 1] = (val >> 8) & 0xff;
|
||||
off += 2;
|
||||
size -= 2;
|
||||
}
|
||||
|
||||
while (size > 3) {
|
||||
unsigned int val;
|
||||
u32 val;
|
||||
pci_read_config_dword(dev, off, &val);
|
||||
buf[off - init_off] = val & 0xff;
|
||||
buf[off - init_off + 1] = (val >> 8) & 0xff;
|
||||
buf[off - init_off + 2] = (val >> 16) & 0xff;
|
||||
buf[off - init_off + 3] = (val >> 24) & 0xff;
|
||||
data[off - init_off] = val & 0xff;
|
||||
data[off - init_off + 1] = (val >> 8) & 0xff;
|
||||
data[off - init_off + 2] = (val >> 16) & 0xff;
|
||||
data[off - init_off + 3] = (val >> 24) & 0xff;
|
||||
off += 4;
|
||||
size -= 4;
|
||||
}
|
||||
|
||||
while (size > 0) {
|
||||
unsigned char val;
|
||||
if (size >= 2) {
|
||||
u16 val;
|
||||
pci_read_config_word(dev, off, &val);
|
||||
data[off - init_off] = val & 0xff;
|
||||
data[off - init_off + 1] = (val >> 8) & 0xff;
|
||||
off += 2;
|
||||
size -= 2;
|
||||
}
|
||||
|
||||
if (size > 0) {
|
||||
u8 val;
|
||||
pci_read_config_byte(dev, off, &val);
|
||||
buf[off - init_off] = val;
|
||||
data[off - init_off] = val;
|
||||
off++;
|
||||
--size;
|
||||
}
|
||||
@ -145,6 +163,7 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
||||
struct pci_dev *dev = to_pci_dev(container_of(kobj,struct device,kobj));
|
||||
unsigned int size = count;
|
||||
loff_t init_off = off;
|
||||
u8 *data = (u8*) buf;
|
||||
|
||||
if (off > dev->cfg_size)
|
||||
return 0;
|
||||
@ -152,26 +171,41 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
|
||||
size = dev->cfg_size - off;
|
||||
count = size;
|
||||
}
|
||||
|
||||
while (off & 3) {
|
||||
pci_write_config_byte(dev, off, buf[off - init_off]);
|
||||
|
||||
if ((off & 1) && size) {
|
||||
pci_write_config_byte(dev, off, data[off - init_off]);
|
||||
off++;
|
||||
if (--size == 0)
|
||||
break;
|
||||
size--;
|
||||
}
|
||||
|
||||
if ((off & 3) && size > 2) {
|
||||
u16 val = data[off - init_off];
|
||||
val |= (u16) data[off - init_off + 1] << 8;
|
||||
pci_write_config_word(dev, off, val);
|
||||
off += 2;
|
||||
size -= 2;
|
||||
}
|
||||
|
||||
while (size > 3) {
|
||||
unsigned int val = buf[off - init_off];
|
||||
val |= (unsigned int) buf[off - init_off + 1] << 8;
|
||||
val |= (unsigned int) buf[off - init_off + 2] << 16;
|
||||
val |= (unsigned int) buf[off - init_off + 3] << 24;
|
||||
u32 val = data[off - init_off];
|
||||
val |= (u32) data[off - init_off + 1] << 8;
|
||||
val |= (u32) data[off - init_off + 2] << 16;
|
||||
val |= (u32) data[off - init_off + 3] << 24;
|
||||
pci_write_config_dword(dev, off, val);
|
||||
off += 4;
|
||||
size -= 4;
|
||||
}
|
||||
|
||||
if (size >= 2) {
|
||||
u16 val = data[off - init_off];
|
||||
val |= (u16) data[off - init_off + 1] << 8;
|
||||
pci_write_config_word(dev, off, val);
|
||||
off += 2;
|
||||
size -= 2;
|
||||
}
|
||||
|
||||
while (size > 0) {
|
||||
pci_write_config_byte(dev, off, buf[off - init_off]);
|
||||
if (size) {
|
||||
pci_write_config_byte(dev, off, data[off - init_off]);
|
||||
off++;
|
||||
--size;
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/dma.h> /* isa_dma_bridge_buggy */
|
||||
#include "pci.h"
|
||||
|
||||
|
||||
/**
|
||||
@ -398,10 +399,10 @@ pci_enable_device(struct pci_dev *dev)
|
||||
{
|
||||
int err;
|
||||
|
||||
dev->is_enabled = 1;
|
||||
if ((err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1)))
|
||||
return err;
|
||||
pci_fixup_device(pci_fixup_enable, dev);
|
||||
dev->is_enabled = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -427,16 +428,15 @@ pci_disable_device(struct pci_dev *dev)
|
||||
{
|
||||
u16 pci_command;
|
||||
|
||||
dev->is_enabled = 0;
|
||||
dev->is_busmaster = 0;
|
||||
|
||||
pci_read_config_word(dev, PCI_COMMAND, &pci_command);
|
||||
if (pci_command & PCI_COMMAND_MASTER) {
|
||||
pci_command &= ~PCI_COMMAND_MASTER;
|
||||
pci_write_config_word(dev, PCI_COMMAND, pci_command);
|
||||
}
|
||||
dev->is_busmaster = 0;
|
||||
|
||||
pcibios_disable_device(dev);
|
||||
dev->is_enabled = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -748,17 +748,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
if (!pci_dac_dma_supported(dev, mask))
|
||||
return -EIO;
|
||||
|
||||
dev->dma_mask = mask;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
|
||||
{
|
||||
@ -821,7 +810,6 @@ EXPORT_SYMBOL(pci_set_master);
|
||||
EXPORT_SYMBOL(pci_set_mwi);
|
||||
EXPORT_SYMBOL(pci_clear_mwi);
|
||||
EXPORT_SYMBOL(pci_set_dma_mask);
|
||||
EXPORT_SYMBOL(pci_dac_set_dma_mask);
|
||||
EXPORT_SYMBOL(pci_set_consistent_dma_mask);
|
||||
EXPORT_SYMBOL(pci_assign_resource);
|
||||
EXPORT_SYMBOL(pci_find_parent_resource);
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include "pci.h"
|
||||
|
||||
#define CARDBUS_LATENCY_TIMER 176 /* secondary latency timer */
|
||||
#define CARDBUS_RESERVE_BUSNR 3
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include "pci.h"
|
||||
|
||||
static int proc_initialized; /* = 0 */
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include "pci.h"
|
||||
|
||||
/* Deal with broken BIOS'es that neglect to enable passive release,
|
||||
which can cause problems in combination with the 82441FX/PPro MTRRs */
|
||||
@ -328,6 +329,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12,
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, quirk_ich4_lpc_acpi );
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, quirk_ich4_lpc_acpi );
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, quirk_ich4_lpc_acpi );
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, quirk_ich4_lpc_acpi );
|
||||
|
||||
/*
|
||||
* VIA ACPI: One IO region pointed to by longword at
|
||||
|
@ -260,7 +260,7 @@ config SCSI_3W_9XXX
|
||||
|
||||
config SCSI_7000FASST
|
||||
tristate "7000FASST SCSI support"
|
||||
depends on ISA && SCSI
|
||||
depends on ISA && SCSI && ISA_DMA_API
|
||||
help
|
||||
This driver supports the Western Digital 7000 SCSI host adapter
|
||||
family. Some information is in the source:
|
||||
@ -295,7 +295,7 @@ config SCSI_AHA152X
|
||||
|
||||
config SCSI_AHA1542
|
||||
tristate "Adaptec AHA1542 support"
|
||||
depends on ISA && SCSI
|
||||
depends on ISA && SCSI && ISA_DMA_API
|
||||
---help---
|
||||
This is support for a SCSI host adapter. It is explained in section
|
||||
3.4 of the SCSI-HOWTO, available from
|
||||
@ -515,7 +515,7 @@ config SCSI_SATA_VITESSE
|
||||
|
||||
config SCSI_BUSLOGIC
|
||||
tristate "BusLogic SCSI support"
|
||||
depends on (PCI || ISA || MCA) && SCSI && (BROKEN || !SPARC64)
|
||||
depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API
|
||||
---help---
|
||||
This is support for BusLogic MultiMaster and FlashPoint SCSI Host
|
||||
Adapters. Consult the SCSI-HOWTO, available from
|
||||
@ -571,7 +571,7 @@ config SCSI_DTC3280
|
||||
|
||||
config SCSI_EATA
|
||||
tristate "EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support"
|
||||
depends on (ISA || EISA || PCI) && SCSI && (BROKEN || !SPARC64)
|
||||
depends on (ISA || EISA || PCI) && SCSI && ISA_DMA_API
|
||||
---help---
|
||||
This driver supports all EATA/DMA-compliant SCSI host adapters. DPT
|
||||
ISA and all EISA I/O addresses are probed looking for the "EATA"
|
||||
@ -665,7 +665,7 @@ config SCSI_FD_MCS
|
||||
|
||||
config SCSI_GDTH
|
||||
tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
|
||||
depends on (ISA || EISA || PCI) && SCSI && (BROKEN || !SPARC64)
|
||||
depends on (ISA || EISA || PCI) && SCSI && ISA_DMA_API
|
||||
---help---
|
||||
Formerly called GDT SCSI Disk Array Controller Support.
|
||||
|
||||
@ -1416,7 +1416,7 @@ config SCSI_T128
|
||||
|
||||
config SCSI_U14_34F
|
||||
tristate "UltraStor 14F/34F support"
|
||||
depends on ISA && SCSI
|
||||
depends on ISA && SCSI && ISA_DMA_API
|
||||
---help---
|
||||
This is support for the UltraStor 14F and 34F SCSI-2 host adapters.
|
||||
The source at <file:drivers/scsi/u14-34f.c> contains some
|
||||
|
@ -431,7 +431,7 @@ nomem:
|
||||
* (2) error, where io->status is a negative errno value. The number
|
||||
* of io->bytes transferred before the error is usually less
|
||||
* than requested, and can be nonzero.
|
||||
* (3) cancelation, a type of error with status -ECONNRESET that
|
||||
* (3) cancellation, a type of error with status -ECONNRESET that
|
||||
* is initiated by usb_sg_cancel().
|
||||
*
|
||||
* When this function returns, all memory allocated through usb_sg_init() or
|
||||
@ -1282,7 +1282,7 @@ static void release_interface(struct device *dev)
|
||||
* bus rwsem; usb device driver probe() methods cannot use this routine.
|
||||
*
|
||||
* Returns zero on success, or else the status code returned by the
|
||||
* underlying call that failed. On succesful completion, each interface
|
||||
* underlying call that failed. On successful completion, each interface
|
||||
* in the original device configuration has been destroyed, and each one
|
||||
* in the new configuration has been probed by all relevant usb device
|
||||
* drivers currently known to the kernel.
|
||||
|
@ -121,7 +121,7 @@ struct urb * usb_get_urb(struct urb *urb)
|
||||
* describing that request to the USB subsystem. Request completion will
|
||||
* be indicated later, asynchronously, by calling the completion handler.
|
||||
* The three types of completion are success, error, and unlink
|
||||
* (a software-induced fault, also called "request cancelation").
|
||||
* (a software-induced fault, also called "request cancellation").
|
||||
*
|
||||
* URBs may be submitted in interrupt context.
|
||||
*
|
||||
@ -170,7 +170,7 @@ struct urb * usb_get_urb(struct urb *urb)
|
||||
* As of Linux 2.6, all USB endpoint transfer queues support depths greater
|
||||
* than one. This was previously a HCD-specific behavior, except for ISO
|
||||
* transfers. Non-isochronous endpoint queues are inactive during cleanup
|
||||
* after faults (transfer errors or cancelation).
|
||||
* after faults (transfer errors or cancellation).
|
||||
*
|
||||
* Reserved Bandwidth Transfers:
|
||||
*
|
||||
@ -395,7 +395,7 @@ int usb_submit_urb(struct urb *urb, int mem_flags)
|
||||
*
|
||||
* This routine cancels an in-progress request. URBs complete only
|
||||
* once per submission, and may be canceled only once per submission.
|
||||
* Successful cancelation means the requests's completion handler will
|
||||
* Successful cancellation means the requests's completion handler will
|
||||
* be called with a status code indicating that the request has been
|
||||
* canceled (rather than any other code) and will quickly be removed
|
||||
* from host controller data structures.
|
||||
|
@ -569,7 +569,7 @@ static const struct usb_cdc_ether_desc ether_desc = {
|
||||
|
||||
/* include the status endpoint if we can, even where it's optional.
|
||||
* use wMaxPacketSize big enough to fit CDC_NOTIFY_SPEED_CHANGE in one
|
||||
* packet, to simplify cancelation; and a big transfer interval, to
|
||||
* packet, to simplify cancellation; and a big transfer interval, to
|
||||
* waste less bandwidth.
|
||||
*
|
||||
* some drivers (like Linux 2.4 cdc-ether!) "need" it to exist even
|
||||
|
@ -275,7 +275,7 @@ static const char *CHIP;
|
||||
*
|
||||
* After opening, configure non-control endpoints. Then use normal
|
||||
* stream read() and write() requests; and maybe ioctl() to get more
|
||||
* precise FIFO status when recovering from cancelation.
|
||||
* precise FIFO status when recovering from cancellation.
|
||||
*/
|
||||
|
||||
static void epio_complete (struct usb_ep *ep, struct usb_request *req)
|
||||
|
@ -705,7 +705,7 @@ void nuke(struct lh7a40x_ep *ep, int status)
|
||||
done(ep, req, status);
|
||||
}
|
||||
|
||||
/* Disable IRQ if EP is enabled (has decriptor) */
|
||||
/* Disable IRQ if EP is enabled (has descriptor) */
|
||||
if (ep->desc)
|
||||
pio_irq_disable(ep_index(ep));
|
||||
}
|
||||
|
@ -240,7 +240,7 @@ struct gs_dev {
|
||||
struct usb_ep *dev_notify_ep; /* address of notify endpoint */
|
||||
struct usb_ep *dev_in_ep; /* address of in endpoint */
|
||||
struct usb_ep *dev_out_ep; /* address of out endpoint */
|
||||
struct usb_endpoint_descriptor /* desciptor of notify ep */
|
||||
struct usb_endpoint_descriptor /* descriptor of notify ep */
|
||||
*dev_notify_ep_desc;
|
||||
struct usb_endpoint_descriptor /* descriptor of in endpoint */
|
||||
*dev_in_ep_desc;
|
||||
|
@ -346,6 +346,22 @@ ehci_reboot (struct notifier_block *self, unsigned long code, void *null)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
|
||||
{
|
||||
unsigned port;
|
||||
|
||||
if (!HCS_PPC (ehci->hcs_params))
|
||||
return;
|
||||
|
||||
ehci_dbg (ehci, "...power%s ports...\n", is_on ? "up" : "down");
|
||||
for (port = HCS_N_PORTS (ehci->hcs_params); port > 0; )
|
||||
(void) ehci_hub_control(ehci_to_hcd(ehci),
|
||||
is_on ? SetPortFeature : ClearPortFeature,
|
||||
USB_PORT_FEAT_POWER,
|
||||
port--, NULL, 0);
|
||||
msleep(20);
|
||||
}
|
||||
|
||||
|
||||
/* called by khubd or root hub init threads */
|
||||
|
||||
@ -362,8 +378,10 @@ static int ehci_hc_reset (struct usb_hcd *hcd)
|
||||
dbg_hcs_params (ehci, "reset");
|
||||
dbg_hcc_params (ehci, "reset");
|
||||
|
||||
/* cache this readonly data; minimize chip reads */
|
||||
ehci->hcs_params = readl (&ehci->caps->hcs_params);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
/* EHCI 0.96 and later may have "extended capabilities" */
|
||||
if (hcd->self.controller->bus == &pci_bus_type) {
|
||||
struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
|
||||
|
||||
@ -383,9 +401,30 @@ static int ehci_hc_reset (struct usb_hcd *hcd)
|
||||
break;
|
||||
}
|
||||
|
||||
/* optional debug port, normally in the first BAR */
|
||||
temp = pci_find_capability (pdev, 0x0a);
|
||||
if (temp) {
|
||||
pci_read_config_dword(pdev, temp, &temp);
|
||||
temp >>= 16;
|
||||
if ((temp & (3 << 13)) == (1 << 13)) {
|
||||
temp &= 0x1fff;
|
||||
ehci->debug = hcd->regs + temp;
|
||||
temp = readl (&ehci->debug->control);
|
||||
ehci_info (ehci, "debug port %d%s\n",
|
||||
HCS_DEBUG_PORT(ehci->hcs_params),
|
||||
(temp & DBGP_ENABLED)
|
||||
? " IN USE"
|
||||
: "");
|
||||
if (!(temp & DBGP_ENABLED))
|
||||
ehci->debug = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
temp = HCC_EXT_CAPS (readl (&ehci->caps->hcc_params));
|
||||
} else
|
||||
temp = 0;
|
||||
|
||||
/* EHCI 0.96 and later may have "extended capabilities" */
|
||||
while (temp && count--) {
|
||||
u32 cap;
|
||||
|
||||
@ -414,8 +453,7 @@ static int ehci_hc_reset (struct usb_hcd *hcd)
|
||||
ehci_reset (ehci);
|
||||
#endif
|
||||
|
||||
/* cache this readonly data; minimize PCI reads */
|
||||
ehci->hcs_params = readl (&ehci->caps->hcs_params);
|
||||
ehci_port_power (ehci, 0);
|
||||
|
||||
/* at least the Genesys GL880S needs fixup here */
|
||||
temp = HCS_N_CC(ehci->hcs_params) * HCS_N_PCC(ehci->hcs_params);
|
||||
@ -657,16 +695,11 @@ done2:
|
||||
static void ehci_stop (struct usb_hcd *hcd)
|
||||
{
|
||||
struct ehci_hcd *ehci = hcd_to_ehci (hcd);
|
||||
u8 rh_ports, port;
|
||||
|
||||
ehci_dbg (ehci, "stop\n");
|
||||
|
||||
/* Turn off port power on all root hub ports. */
|
||||
rh_ports = HCS_N_PORTS (ehci->hcs_params);
|
||||
for (port = 1; port <= rh_ports; port++)
|
||||
(void) ehci_hub_control(hcd,
|
||||
ClearPortFeature, USB_PORT_FEAT_POWER,
|
||||
port, NULL, 0);
|
||||
ehci_port_power (ehci, 0);
|
||||
|
||||
/* no more interrupts ... */
|
||||
del_timer_sync (&ehci->watchdog);
|
||||
@ -748,7 +781,6 @@ static int ehci_resume (struct usb_hcd *hcd)
|
||||
unsigned port;
|
||||
struct usb_device *root = hcd->self.root_hub;
|
||||
int retval = -EINVAL;
|
||||
int powerup = 0;
|
||||
|
||||
// maybe restore (PCI) FLADJ
|
||||
|
||||
@ -766,8 +798,6 @@ static int ehci_resume (struct usb_hcd *hcd)
|
||||
up (&hcd->self.root_hub->serialize);
|
||||
break;
|
||||
}
|
||||
if ((status & PORT_POWER) == 0)
|
||||
powerup = 1;
|
||||
if (!root->children [port])
|
||||
continue;
|
||||
dbg_port (ehci, __FUNCTION__, port + 1, status);
|
||||
@ -794,16 +824,9 @@ static int ehci_resume (struct usb_hcd *hcd)
|
||||
retval = ehci_start (hcd);
|
||||
|
||||
/* here we "know" root ports should always stay powered;
|
||||
* but some controllers may lost all power.
|
||||
* but some controllers may lose all power.
|
||||
*/
|
||||
if (powerup) {
|
||||
ehci_dbg (ehci, "...powerup ports...\n");
|
||||
for (port = HCS_N_PORTS (ehci->hcs_params); port > 0; )
|
||||
(void) ehci_hub_control(hcd,
|
||||
SetPortFeature, USB_PORT_FEAT_POWER,
|
||||
port--, NULL, 0);
|
||||
msleep(20);
|
||||
}
|
||||
ehci_port_power (ehci, 1);
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
@ -281,6 +281,8 @@ ehci_hub_descriptor (
|
||||
temp = 0x0008; /* per-port overcurrent reporting */
|
||||
if (HCS_PPC (ehci->hcs_params))
|
||||
temp |= 0x0001; /* per-port power control */
|
||||
else
|
||||
temp |= 0x0002; /* no power switching */
|
||||
#if 0
|
||||
// re-enable when we support USB_PORT_FEAT_INDICATOR below.
|
||||
if (HCS_INDICATOR (ehci->hcs_params))
|
||||
|
@ -47,6 +47,12 @@ struct ehci_stats {
|
||||
#define EHCI_MAX_ROOT_PORTS 15 /* see HCS_N_PORTS */
|
||||
|
||||
struct ehci_hcd { /* one per controller */
|
||||
/* glue to PCI and HCD framework */
|
||||
struct ehci_caps __iomem *caps;
|
||||
struct ehci_regs __iomem *regs;
|
||||
struct ehci_dbg_port __iomem *debug;
|
||||
|
||||
__u32 hcs_params; /* cached register copy */
|
||||
spinlock_t lock;
|
||||
|
||||
/* async schedule support */
|
||||
@ -84,11 +90,6 @@ struct ehci_hcd { /* one per controller */
|
||||
|
||||
unsigned is_tdi_rh_tt:1; /* TDI roothub with TT */
|
||||
|
||||
/* glue to PCI and HCD framework */
|
||||
struct ehci_caps __iomem *caps;
|
||||
struct ehci_regs __iomem *regs;
|
||||
__u32 hcs_params; /* cached register copy */
|
||||
|
||||
/* irq statistics */
|
||||
#ifdef EHCI_STATS
|
||||
struct ehci_stats stats;
|
||||
@ -165,7 +166,7 @@ struct ehci_caps {
|
||||
/* these fields are specified as 8 and 16 bit registers,
|
||||
* but some hosts can't perform 8 or 16 bit PCI accesses.
|
||||
*/
|
||||
u32 hc_capbase;
|
||||
u32 hc_capbase;
|
||||
#define HC_LENGTH(p) (((p)>>00)&0x00ff) /* bits 7:0 */
|
||||
#define HC_VERSION(p) (((p)>>16)&0xffff) /* bits 31:16 */
|
||||
u32 hcs_params; /* HCSPARAMS - offset 0x4 */
|
||||
@ -273,7 +274,7 @@ struct ehci_dbg_port {
|
||||
#define DBGP_ENABLED (1<<28)
|
||||
#define DBGP_DONE (1<<16)
|
||||
#define DBGP_INUSE (1<<10)
|
||||
#define DBGP_ERRCODE(x) (((x)>>7)&0x0f)
|
||||
#define DBGP_ERRCODE(x) (((x)>>7)&0x07)
|
||||
# define DBGP_ERR_BAD 1
|
||||
# define DBGP_ERR_SIGNAL 2
|
||||
#define DBGP_ERROR (1<<6)
|
||||
@ -282,11 +283,11 @@ struct ehci_dbg_port {
|
||||
#define DBGP_LEN(x) (((x)>>0)&0x0f)
|
||||
u32 pids;
|
||||
#define DBGP_PID_GET(x) (((x)>>16)&0xff)
|
||||
#define DBGP_PID_SET(data,tok) (((data)<<8)|(tok));
|
||||
#define DBGP_PID_SET(data,tok) (((data)<<8)|(tok))
|
||||
u32 data03;
|
||||
u32 data47;
|
||||
u32 address;
|
||||
#define DBGP_EPADDR(dev,ep) (((dev)<<8)|(ep));
|
||||
#define DBGP_EPADDR(dev,ep) (((dev)<<8)|(ep))
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
@ -4329,7 +4329,7 @@ static int __init etrax_usb_hc_init(void)
|
||||
bus->bus_name="ETRAX 100LX";
|
||||
bus->hcpriv = hc;
|
||||
|
||||
/* Initalize RH to the default address.
|
||||
/* Initialize RH to the default address.
|
||||
And make sure that we have no status change indication */
|
||||
hc->rh.numports = 2; /* The RH has two ports */
|
||||
hc->rh.devnum = 1;
|
||||
|
@ -134,7 +134,7 @@ static void port_power(struct sl811 *sl811, int is_on)
|
||||
|
||||
/* This is a PIO-only HCD. Queueing appends URBs to the endpoint's queue,
|
||||
* and may start I/O. Endpoint queues are scanned during completion irq
|
||||
* handlers (one per packet: ACK, NAK, faults, etc) and urb cancelation.
|
||||
* handlers (one per packet: ACK, NAK, faults, etc) and urb cancellation.
|
||||
*
|
||||
* Using an external DMA engine to copy a packet at a time could work,
|
||||
* though setup/teardown costs may be too big to make it worthwhile.
|
||||
@ -738,7 +738,7 @@ retry:
|
||||
}
|
||||
#endif
|
||||
|
||||
/* port status seems wierd until after reset, so
|
||||
/* port status seems weird until after reset, so
|
||||
* force the reset and make khubd clean up later.
|
||||
*/
|
||||
sl811->port1 |= (1 << USB_PORT_FEAT_C_CONNECTION)
|
||||
|
@ -23,7 +23,7 @@
|
||||
*
|
||||
*
|
||||
* The driver brings the USB functions of the MDC800 to Linux.
|
||||
* To use the Camera you must support the USB Protocoll of the camera
|
||||
* To use the Camera you must support the USB Protocol of the camera
|
||||
* to the Kernel Node.
|
||||
* The Driver uses a misc device Node. Create it with :
|
||||
* mknod /dev/mustek c 180 32
|
||||
|
@ -386,7 +386,7 @@ static int aiptek_convert_from_2s_complement(unsigned char c)
|
||||
* convention above.) I therefore have taken over REL_MISC and ABS_MISC
|
||||
* (for relative and absolute reports, respectively) for communicating
|
||||
* Proximity. Why two events? I thought it interesting to know if the
|
||||
* Proximity event occured while the tablet was in absolute or relative
|
||||
* Proximity event occurred while the tablet was in absolute or relative
|
||||
* mode.
|
||||
*
|
||||
* Other tablets use the notion of a certain minimum stylus pressure
|
||||
|
@ -32,7 +32,7 @@
|
||||
* Changed reset from standard USB dev reset to vendor reset
|
||||
* Changed data sent to host from compensated to raw coordinates
|
||||
* Eliminated vendor/product module params
|
||||
* Performed multiple successfull tests with an EXII-5010UC
|
||||
* Performed multiple successful tests with an EXII-5010UC
|
||||
*
|
||||
* 1.5 02/27/2005 ddstreet@ieee.org
|
||||
* Added module parameter to select raw or hw-calibrated coordinate reporting
|
||||
|
@ -5041,7 +5041,7 @@ ov6xx0_configure(struct usb_ov511 *ov)
|
||||
{ OV511_I2C_BUS, 0x2a, 0x04 }, /* Disable framerate adjust */
|
||||
// { OV511_I2C_BUS, 0x2b, 0xac }, /* Framerate; Set 2a[7] first */
|
||||
{ OV511_I2C_BUS, 0x2d, 0x99 },
|
||||
{ OV511_I2C_BUS, 0x33, 0xa0 }, /* Color Procesing Parameter */
|
||||
{ OV511_I2C_BUS, 0x33, 0xa0 }, /* Color Processing Parameter */
|
||||
{ OV511_I2C_BUS, 0x34, 0xd2 }, /* Max A/D range */
|
||||
{ OV511_I2C_BUS, 0x38, 0x8b },
|
||||
{ OV511_I2C_BUS, 0x39, 0x40 },
|
||||
|
@ -1100,7 +1100,7 @@ static inline int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt)
|
||||
unsigned char buf[4];
|
||||
|
||||
/* set new relative angle; angles are expressed in degrees * 100,
|
||||
but cam as .5 degree resolution, hence devide by 200. Also
|
||||
but cam as .5 degree resolution, hence divide by 200. Also
|
||||
the angle must be multiplied by 64 before it's send to
|
||||
the cam (??)
|
||||
*/
|
||||
|
@ -272,7 +272,7 @@ static int pwc_allocate_buffers(struct pwc_device *pdev)
|
||||
return -ENXIO;
|
||||
}
|
||||
#endif
|
||||
/* Allocate Isochronuous pipe buffers */
|
||||
/* Allocate Isochronous pipe buffers */
|
||||
for (i = 0; i < MAX_ISO_BUFS; i++) {
|
||||
if (pdev->sbuf[i].data == NULL) {
|
||||
kbuf = kmalloc(ISO_BUFFER_SIZE, GFP_KERNEL);
|
||||
@ -850,7 +850,7 @@ static int pwc_isoc_init(struct pwc_device *pdev)
|
||||
|
||||
if (pdev->vmax_packet_size < 0 || pdev->vmax_packet_size > ISO_MAX_FRAME_SIZE) {
|
||||
Err("Failed to find packet size for video endpoint in current alternate setting.\n");
|
||||
return -ENFILE; /* Odd error, that should be noticable */
|
||||
return -ENFILE; /* Odd error, that should be noticeable */
|
||||
}
|
||||
|
||||
/* Set alternate interface */
|
||||
@ -2128,7 +2128,7 @@ static int __init usb_pwc_init(void)
|
||||
if (leds[1] >= 0)
|
||||
led_off = leds[1];
|
||||
|
||||
/* Big device node whoopla. Basicly, it allows you to assign a
|
||||
/* Big device node whoopla. Basically, it allows you to assign a
|
||||
device node (/dev/videoX) to a camera, based on its type
|
||||
& serial number. The format is [type[.serialnumber]:]node.
|
||||
|
||||
|
@ -75,7 +75,7 @@
|
||||
#define PWC_FPS_SNAPSHOT 0x00400000
|
||||
|
||||
|
||||
/* structure for transfering x & y coordinates */
|
||||
/* structure for transferring x & y coordinates */
|
||||
struct pwc_coord
|
||||
{
|
||||
int x, y; /* guess what */
|
||||
|
@ -859,7 +859,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
|
||||
info ("udev is NULL.");
|
||||
}
|
||||
|
||||
/* allocate memory for our device state and intialize it */
|
||||
/* allocate memory for our device state and initialize it */
|
||||
|
||||
dev = kmalloc (sizeof(struct lego_usb_tower), GFP_KERNEL);
|
||||
|
||||
|
@ -4070,6 +4070,9 @@ static const struct usb_device_id products [] = {
|
||||
}, {
|
||||
USB_DEVICE (0x8086, 0x07d3), // "blob" bootloader
|
||||
.driver_info = (unsigned long) &blob_info,
|
||||
}, {
|
||||
USB_DEVICE (0x22b8, 0x600c), // USBNET Motorola E680
|
||||
.driver_info = (unsigned long) &linuxdev_info,
|
||||
}, {
|
||||
// Linux Ethernet/RNDIS gadget on pxa210/25x/26x
|
||||
// e.g. Gumstix, current OpenZaurus, ...
|
||||
|
@ -183,7 +183,7 @@ static void zd1201_usbtx(struct urb *urb, struct pt_regs *regs)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Incomming data */
|
||||
/* Incoming data */
|
||||
static void zd1201_usbrx(struct urb *urb, struct pt_regs *regs)
|
||||
{
|
||||
struct zd1201 *zd = urb->context;
|
||||
@ -772,7 +772,7 @@ static int zd1201_net_stop(struct net_device *dev)
|
||||
/*
|
||||
RFC 1042 encapsulates Ethernet frames in 802.11 frames
|
||||
by prefixing them with 0xaa, 0xaa, 0x03) followed by a SNAP OID of 0
|
||||
(0x00, 0x00, 0x00). Zd requires an additionnal padding, copy
|
||||
(0x00, 0x00, 0x00). Zd requires an additional padding, copy
|
||||
of ethernet addresses, length of the standard RFC 1042 packet
|
||||
and a command byte (which is nul for tx).
|
||||
|
||||
@ -1098,7 +1098,7 @@ static int zd1201_get_range(struct net_device *dev,
|
||||
|
||||
/* Little bit of magic here: we only get the quality if we poll
|
||||
* for it, and we never get an actual request to trigger such
|
||||
* a poll. Therefore we 'asume' that the user will soon ask for
|
||||
* a poll. Therefore we 'assume' that the user will soon ask for
|
||||
* the stats after asking the bssid.
|
||||
*/
|
||||
static int zd1201_get_wap(struct net_device *dev,
|
||||
@ -1108,7 +1108,7 @@ static int zd1201_get_wap(struct net_device *dev,
|
||||
unsigned char buffer[6];
|
||||
|
||||
if (!zd1201_getconfig(zd, ZD1201_RID_COMMSQUALITY, buffer, 6)) {
|
||||
/* Unfortunatly the quality and noise reported is useless.
|
||||
/* Unfortunately the quality and noise reported is useless.
|
||||
they seem to be accumulators that increase until you
|
||||
read them, unless we poll on a fixed interval we can't
|
||||
use them
|
||||
|
@ -53,6 +53,15 @@ config USB_SERIAL_GENERIC
|
||||
support" be compiled as a module for this driver to be used
|
||||
properly.
|
||||
|
||||
config USB_SERIAL_AIRPRIME
|
||||
tristate "USB AirPrime CDMA Wireless Driver"
|
||||
depends on USB_SERIAL
|
||||
help
|
||||
Say Y here if you want to use a AirPrime CDMA Wireless PC card.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called airprime.
|
||||
|
||||
config USB_SERIAL_BELKIN
|
||||
tristate "USB Belkin and Peracom Single Port Serial Driver"
|
||||
depends on USB_SERIAL
|
||||
|
@ -11,6 +11,7 @@ usbserial-obj-$(CONFIG_USB_EZUSB) += ezusb.o
|
||||
|
||||
usbserial-objs := usb-serial.o generic.o bus.o $(usbserial-obj-y)
|
||||
|
||||
obj-$(CONFIG_USB_SERIAL_AIRPRIME) += airprime.o
|
||||
obj-$(CONFIG_USB_SERIAL_BELKIN) += belkin_sa.o
|
||||
obj-$(CONFIG_USB_SERIAL_CP2101) += cp2101.o
|
||||
obj-$(CONFIG_USB_SERIAL_CYBERJACK) += cyberjack.o
|
||||
|
63
drivers/usb/serial/airprime.c
Normal file
63
drivers/usb/serial/airprime.c
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* AirPrime CDMA Wireless Serial USB driver
|
||||
*
|
||||
* Copyright (C) 2005 Greg Kroah-Hartman <gregkh@suse.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License version
|
||||
* 2 as published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/usb.h>
|
||||
#include "usb-serial.h"
|
||||
|
||||
static struct usb_device_id id_table [] = {
|
||||
{ USB_DEVICE(0xf3d, 0x0112) },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, id_table);
|
||||
|
||||
static struct usb_driver airprime_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "airprime",
|
||||
.probe = usb_serial_probe,
|
||||
.disconnect = usb_serial_disconnect,
|
||||
.id_table = id_table,
|
||||
};
|
||||
|
||||
static struct usb_serial_device_type airprime_device = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "airprime",
|
||||
.id_table = id_table,
|
||||
.num_interrupt_in = NUM_DONT_CARE,
|
||||
.num_bulk_in = NUM_DONT_CARE,
|
||||
.num_bulk_out = NUM_DONT_CARE,
|
||||
.num_ports = 1,
|
||||
};
|
||||
|
||||
static int __init airprime_init(void)
|
||||
{
|
||||
int retval;
|
||||
|
||||
retval = usb_serial_register(&airprime_device);
|
||||
if (retval)
|
||||
return retval;
|
||||
retval = usb_register(&airprime_driver);
|
||||
if (retval)
|
||||
usb_serial_deregister(&airprime_device);
|
||||
return retval;
|
||||
}
|
||||
|
||||
static void __exit airprime_exit(void)
|
||||
{
|
||||
usb_deregister(&airprime_driver);
|
||||
usb_serial_deregister(&airprime_device);
|
||||
}
|
||||
|
||||
module_init(airprime_init);
|
||||
module_exit(airprime_exit);
|
||||
MODULE_LICENSE("GPL");
|
@ -16,6 +16,14 @@
|
||||
* See http://geocities.com/i0xox0i for information on this driver and the
|
||||
* earthmate usb device.
|
||||
*
|
||||
* Lonnie Mendez <dignome@gmail.com>
|
||||
* 4-29-2005
|
||||
* Fixed problem where setting or retreiving the serial config would fail with
|
||||
* EPIPE. Removed CRTS toggling so the driver behaves more like other usbserial
|
||||
* adapters. Issued new interval of 1ms instead of the default 10ms. As a
|
||||
* result, transfer speed has been substantially increased. From avg. 850bps to
|
||||
* avg. 3300bps. initial termios has also been modified. Cleaned up code and
|
||||
* formatting issues so it is more readable. Replaced the C++ style comments.
|
||||
*
|
||||
* Lonnie Mendez <dignome@gmail.com>
|
||||
* 12-15-2004
|
||||
@ -32,12 +40,6 @@
|
||||
* 10-2003
|
||||
* Driver first released.
|
||||
*
|
||||
*
|
||||
* Long Term TODO:
|
||||
* Improve transfer speeds - both read/write are somewhat slow
|
||||
* at this point.
|
||||
* Improve debugging. Show modem line status with debug output and
|
||||
* implement filtering for certain data as a module parameter.
|
||||
*/
|
||||
|
||||
/* Thanks to Neil Whelchel for writing the first cypress m8 implementation for linux. */
|
||||
@ -72,11 +74,12 @@
|
||||
static int debug;
|
||||
#endif
|
||||
static int stats;
|
||||
static int interval;
|
||||
|
||||
/*
|
||||
* Version Information
|
||||
*/
|
||||
#define DRIVER_VERSION "v1.08"
|
||||
#define DRIVER_VERSION "v1.09"
|
||||
#define DRIVER_AUTHOR "Lonnie Mendez <dignome@gmail.com>, Neil Whelchel <koyama@firstlight.net>"
|
||||
#define DRIVER_DESC "Cypress USB to Serial Driver"
|
||||
|
||||
@ -130,7 +133,6 @@ struct cypress_private {
|
||||
char prev_status, diff_status; /* used for TIOCMIWAIT */
|
||||
/* we pass a pointer to this as the arguement sent to cypress_set_termios old_termios */
|
||||
struct termios tmp_termios; /* stores the old termios settings */
|
||||
char calledfromopen; /* used when issuing lines on open - fixes rts drop bug */
|
||||
};
|
||||
|
||||
/* write buffer structure */
|
||||
@ -168,10 +170,8 @@ static void cypress_buf_free(struct cypress_buf *cb);
|
||||
static void cypress_buf_clear(struct cypress_buf *cb);
|
||||
static unsigned int cypress_buf_data_avail(struct cypress_buf *cb);
|
||||
static unsigned int cypress_buf_space_avail(struct cypress_buf *cb);
|
||||
static unsigned int cypress_buf_put(struct cypress_buf *cb, const char *buf,
|
||||
unsigned int count);
|
||||
static unsigned int cypress_buf_get(struct cypress_buf *cb, char *buf,
|
||||
unsigned int count);
|
||||
static unsigned int cypress_buf_put(struct cypress_buf *cb, const char *buf, unsigned int count);
|
||||
static unsigned int cypress_buf_get(struct cypress_buf *cb, char *buf, unsigned int count);
|
||||
|
||||
|
||||
static struct usb_serial_device_type cypress_earthmate_device = {
|
||||
@ -234,14 +234,13 @@ static struct usb_serial_device_type cypress_hidcom_device = {
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
/* This function can either set or retreive the current serial line settings */
|
||||
/* This function can either set or retrieve the current serial line settings */
|
||||
static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_mask, int data_bits, int stop_bits,
|
||||
int parity_enable, int parity_type, int reset, int cypress_request_type)
|
||||
{
|
||||
int i, n_baud_rate = 0, retval = 0;
|
||||
int new_baudrate = 0, retval = 0, tries = 0;
|
||||
struct cypress_private *priv;
|
||||
__u8 feature_buffer[5];
|
||||
__u8 config;
|
||||
__u8 feature_buffer[8];
|
||||
unsigned long flags;
|
||||
|
||||
dbg("%s", __FUNCTION__);
|
||||
@ -256,7 +255,8 @@ static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_m
|
||||
* of 57600bps (I have no idea whether DeLorme chose to use the general purpose
|
||||
* firmware or not), if you need to modify this speed setting for your own
|
||||
* project please add your own chiptype and modify the code likewise. The
|
||||
* Cypress HID->COM device will work successfully up to 115200bps.
|
||||
* Cypress HID->COM device will work successfully up to 115200bps (but the
|
||||
* actual throughput is around 3kBps).
|
||||
*/
|
||||
if (baud_mask != priv->cbr_mask) {
|
||||
dbg("%s - baud rate is changing", __FUNCTION__);
|
||||
@ -265,109 +265,114 @@ static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_m
|
||||
* but are not used with NMEA and SiRF protocols */
|
||||
|
||||
if ( (baud_mask == B300) || (baud_mask == B600) ) {
|
||||
err("%s - failed setting baud rate, unsupported speed (default to 4800)",
|
||||
err("%s - failed setting baud rate, unsupported speed",
|
||||
__FUNCTION__);
|
||||
n_baud_rate = 4800;
|
||||
} else if ( (n_baud_rate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed (default to 4800)",
|
||||
new_baudrate = priv->baud_rate;
|
||||
} else if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed",
|
||||
__FUNCTION__);
|
||||
n_baud_rate = 4800;
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
} else if (priv->chiptype == CT_CYPHIDCOM) {
|
||||
if ( (n_baud_rate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed (default to 4800)",
|
||||
if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed",
|
||||
__FUNCTION__);
|
||||
n_baud_rate = 4800;
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
} else if (priv->chiptype == CT_GENERIC) {
|
||||
if ( (n_baud_rate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed (default to 4800)",
|
||||
if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
|
||||
err("%s - failed setting baud rate, unsupported speed",
|
||||
__FUNCTION__);
|
||||
n_baud_rate = 4800;
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
} else {
|
||||
info("%s - please define your chiptype, using 4800bps default", __FUNCTION__);
|
||||
n_baud_rate = 4800;
|
||||
info("%s - please define your chiptype", __FUNCTION__);
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
} else { /* baud rate not changing, keep the old */
|
||||
n_baud_rate = priv->baud_rate;
|
||||
new_baudrate = priv->baud_rate;
|
||||
}
|
||||
dbg("%s - baud rate is being sent as %d", __FUNCTION__, n_baud_rate);
|
||||
|
||||
dbg("%s - baud rate is being sent as %d", __FUNCTION__, new_baudrate);
|
||||
|
||||
/*
|
||||
* This algorithm accredited to Jiang Jay Zhang... thanks for all the help!
|
||||
*/
|
||||
for (i = 0; i < 4; ++i) {
|
||||
feature_buffer[i] = ( n_baud_rate >> (i*8) & 0xFF );
|
||||
}
|
||||
memset(feature_buffer, 0, 8);
|
||||
/* fill the feature_buffer with new configuration */
|
||||
*((u_int32_t *)feature_buffer) = new_baudrate;
|
||||
|
||||
config = 0; // reset config byte
|
||||
config |= data_bits; // assign data bits in 2 bit space ( max 3 )
|
||||
feature_buffer[4] |= data_bits; /* assign data bits in 2 bit space ( max 3 ) */
|
||||
/* 1 bit gap */
|
||||
config |= (stop_bits << 3); // assign stop bits in 1 bit space
|
||||
config |= (parity_enable << 4); // assign parity flag in 1 bit space
|
||||
config |= (parity_type << 5); // assign parity type in 1 bit space
|
||||
feature_buffer[4] |= (stop_bits << 3); /* assign stop bits in 1 bit space */
|
||||
feature_buffer[4] |= (parity_enable << 4); /* assign parity flag in 1 bit space */
|
||||
feature_buffer[4] |= (parity_type << 5); /* assign parity type in 1 bit space */
|
||||
/* 1 bit gap */
|
||||
config |= (reset << 7); // assign reset at end of byte, 1 bit space
|
||||
|
||||
feature_buffer[4] = config;
|
||||
feature_buffer[4] |= (reset << 7); /* assign reset at end of byte, 1 bit space */
|
||||
|
||||
dbg("%s - device is being sent this feature report:", __FUNCTION__);
|
||||
dbg("%s - %02X - %02X - %02X - %02X - %02X", __FUNCTION__, feature_buffer[0], feature_buffer[1],
|
||||
feature_buffer[2], feature_buffer[3], feature_buffer[4]);
|
||||
|
||||
do {
|
||||
retval = usb_control_msg (port->serial->dev, usb_sndctrlpipe(port->serial->dev, 0),
|
||||
HID_REQ_SET_REPORT, USB_DIR_OUT | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
|
||||
0x0300, 0, feature_buffer, 5, 500);
|
||||
0x0300, 0, feature_buffer, 8, 500);
|
||||
|
||||
if (retval != 5)
|
||||
if (tries++ >= 3)
|
||||
break;
|
||||
|
||||
if (retval == EPIPE)
|
||||
usb_clear_halt(port->serial->dev, 0x00);
|
||||
} while (retval != 8 && retval != ENODEV);
|
||||
|
||||
if (retval != 8)
|
||||
err("%s - failed sending serial line settings - %d", __FUNCTION__, retval);
|
||||
else {
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
priv->baud_rate = n_baud_rate;
|
||||
priv->baud_rate = new_baudrate;
|
||||
priv->cbr_mask = baud_mask;
|
||||
priv->current_config = config;
|
||||
++priv->cmd_count;
|
||||
priv->current_config = feature_buffer[4];
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
break;
|
||||
case CYPRESS_GET_CONFIG:
|
||||
dbg("%s - retreiving serial line settings", __FUNCTION__);
|
||||
/* reset values in feature buffer */
|
||||
memset(feature_buffer, 0, 5);
|
||||
/* set initial values in feature buffer */
|
||||
memset(feature_buffer, 0, 8);
|
||||
|
||||
do {
|
||||
retval = usb_control_msg (port->serial->dev, usb_rcvctrlpipe(port->serial->dev, 0),
|
||||
HID_REQ_GET_REPORT, USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
|
||||
0x0300, 0, feature_buffer, 5, 500);
|
||||
0x0300, 0, feature_buffer, 8, 500);
|
||||
|
||||
if (tries++ >= 3)
|
||||
break;
|
||||
|
||||
if (retval == EPIPE)
|
||||
usb_clear_halt(port->serial->dev, 0x00);
|
||||
} while (retval != 5 && retval != ENODEV);
|
||||
|
||||
if (retval != 5) {
|
||||
err("%s - failed to retreive serial line settings - %d", __FUNCTION__, retval);
|
||||
return retval;
|
||||
} else {
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
|
||||
/* store the config in one byte, and later use bit masks to check values */
|
||||
priv->current_config = feature_buffer[4];
|
||||
/* reverse the process above to get the baud_mask value */
|
||||
n_baud_rate = 0; // reset bits
|
||||
for (i = 0; i < 4; ++i) {
|
||||
n_baud_rate |= ( feature_buffer[i] << (i*8) );
|
||||
}
|
||||
priv->baud_rate = *((u_int32_t *)feature_buffer);
|
||||
|
||||
priv->baud_rate = n_baud_rate;
|
||||
if ( (priv->cbr_mask = rate_to_mask(n_baud_rate)) == 0x40)
|
||||
if ( (priv->cbr_mask = rate_to_mask(priv->baud_rate)) == 0x40)
|
||||
dbg("%s - failed setting the baud mask (not defined)", __FUNCTION__);
|
||||
++priv->cmd_count;
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
err("%s - unsupported serial control command issued", __FUNCTION__);
|
||||
}
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
++priv->cmd_count;
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
return retval;
|
||||
} /* cypress_serial_control */
|
||||
|
||||
|
||||
/* given a baud mask, it will return speed on success */
|
||||
/* given a baud mask, it will return integer baud on success */
|
||||
static int mask_to_rate (unsigned mask)
|
||||
{
|
||||
int rate;
|
||||
@ -438,11 +443,12 @@ static int generic_startup (struct usb_serial *serial)
|
||||
|
||||
usb_reset_configuration (serial->dev);
|
||||
|
||||
interval = 1;
|
||||
priv->cmd_ctrl = 0;
|
||||
priv->line_control = 0;
|
||||
priv->termios_initialized = 0;
|
||||
priv->calledfromopen = 0;
|
||||
priv->rx_flags = 0;
|
||||
priv->cbr_mask = B300;
|
||||
usb_set_serial_port_data(serial->port[0], priv);
|
||||
|
||||
return (0);
|
||||
@ -513,7 +519,6 @@ static int cypress_open (struct usb_serial_port *port, struct file *filp)
|
||||
dbg("%s - port %d", __FUNCTION__, port->number);
|
||||
|
||||
/* clear halts before open */
|
||||
usb_clear_halt(serial->dev, 0x00);
|
||||
usb_clear_halt(serial->dev, 0x81);
|
||||
usb_clear_halt(serial->dev, 0x02);
|
||||
|
||||
@ -531,7 +536,6 @@ static int cypress_open (struct usb_serial_port *port, struct file *filp)
|
||||
/* raise both lines and set termios */
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
priv->line_control = CONTROL_DTR | CONTROL_RTS;
|
||||
priv->calledfromopen = 1;
|
||||
priv->cmd_ctrl = 1;
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
result = cypress_write(port, NULL, 0);
|
||||
@ -553,7 +557,7 @@ static int cypress_open (struct usb_serial_port *port, struct file *filp)
|
||||
usb_fill_int_urb(port->interrupt_in_urb, serial->dev,
|
||||
usb_rcvintpipe(serial->dev, port->interrupt_in_endpointAddress),
|
||||
port->interrupt_in_urb->transfer_buffer, port->interrupt_in_urb->transfer_buffer_length,
|
||||
cypress_read_int_callback, port, port->interrupt_in_urb->interval);
|
||||
cypress_read_int_callback, port, interval);
|
||||
result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
|
||||
|
||||
if (result){
|
||||
@ -680,12 +684,12 @@ static void cypress_send(struct usb_serial_port *port)
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
switch (port->interrupt_out_size) {
|
||||
case 32:
|
||||
// this is for the CY7C64013...
|
||||
/* this is for the CY7C64013... */
|
||||
offset = 2;
|
||||
port->interrupt_out_buffer[0] = priv->line_control;
|
||||
break;
|
||||
case 8:
|
||||
// this is for the CY7C63743...
|
||||
/* this is for the CY7C63743... */
|
||||
offset = 1;
|
||||
port->interrupt_out_buffer[0] = priv->line_control;
|
||||
break;
|
||||
@ -738,6 +742,7 @@ send:
|
||||
|
||||
port->interrupt_out_urb->transfer_buffer_length = actual_size;
|
||||
port->interrupt_out_urb->dev = port->serial->dev;
|
||||
port->interrupt_out_urb->interval = interval;
|
||||
result = usb_submit_urb (port->interrupt_out_urb, GFP_ATOMIC);
|
||||
if (result) {
|
||||
dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __FUNCTION__,
|
||||
@ -910,7 +915,7 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
|
||||
unsigned cflag, iflag, baud_mask;
|
||||
unsigned long flags;
|
||||
__u8 oldlines;
|
||||
int linechange;
|
||||
int linechange = 0;
|
||||
|
||||
dbg("%s - port %d", __FUNCTION__, port->number);
|
||||
|
||||
@ -996,15 +1001,7 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
|
||||
case B115200: dbg("%s - setting baud 115200bps", __FUNCTION__); break;
|
||||
default: dbg("%s - unknown masked baud rate", __FUNCTION__);
|
||||
}
|
||||
priv->line_control |= CONTROL_DTR;
|
||||
|
||||
/* toggle CRTSCTS? - don't do this if being called from cypress_open */
|
||||
if (!priv->calledfromopen) {
|
||||
if (cflag & CRTSCTS)
|
||||
priv->line_control |= CONTROL_RTS;
|
||||
else
|
||||
priv->line_control &= ~CONTROL_RTS;
|
||||
}
|
||||
priv->line_control = (CONTROL_DTR | CONTROL_RTS);
|
||||
}
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
@ -1014,8 +1011,6 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
|
||||
cypress_serial_control(port, baud_mask, data_bits, stop_bits, parity_enable,
|
||||
parity_type, 0, CYPRESS_SET_CONFIG);
|
||||
|
||||
msleep(50); /* give some time between change and read (50ms) */
|
||||
|
||||
/* we perform a CYPRESS_GET_CONFIG so that the current settings are filled into the private structure
|
||||
* this should confirm that all is working if it returns what we just set */
|
||||
cypress_serial_control(port, 0, 0, 0, 0, 0, 0, CYPRESS_GET_CONFIG);
|
||||
@ -1031,7 +1026,6 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
|
||||
dbg("Using custom termios settings for a baud rate of 4800bps.");
|
||||
/* define custom termios settings for NMEA protocol */
|
||||
|
||||
|
||||
tty->termios->c_iflag /* input modes - */
|
||||
&= ~(IGNBRK /* disable ignore break */
|
||||
| BRKINT /* disable break causes interrupt */
|
||||
@ -1052,23 +1046,16 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
|
||||
| ISIG /* disable interrupt, quit, and suspend special characters */
|
||||
| IEXTEN); /* disable non-POSIX special characters */
|
||||
|
||||
} else if (priv->chiptype == CT_CYPHIDCOM) {
|
||||
} /* CT_CYPHIDCOM: Application should handle this for device */
|
||||
|
||||
// Software app handling it for device...
|
||||
|
||||
}
|
||||
linechange = (priv->line_control != oldlines);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
/* if necessary, set lines */
|
||||
if (!priv->calledfromopen && linechange) {
|
||||
if (linechange) {
|
||||
priv->cmd_ctrl = 1;
|
||||
cypress_write(port, NULL, 0);
|
||||
}
|
||||
|
||||
if (priv->calledfromopen)
|
||||
priv->calledfromopen = 0;
|
||||
|
||||
} /* cypress_set_termios */
|
||||
|
||||
|
||||
@ -1164,7 +1151,7 @@ static void cypress_read_int_callback(struct urb *urb, struct pt_regs *regs)
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
switch(urb->actual_length) {
|
||||
case 32:
|
||||
// This is for the CY7C64013...
|
||||
/* This is for the CY7C64013... */
|
||||
priv->current_status = data[0] & 0xF8;
|
||||
bytes = data[1]+2;
|
||||
i=2;
|
||||
@ -1172,7 +1159,7 @@ static void cypress_read_int_callback(struct urb *urb, struct pt_regs *regs)
|
||||
havedata = 1;
|
||||
break;
|
||||
case 8:
|
||||
// This is for the CY7C63743...
|
||||
/* This is for the CY7C63743... */
|
||||
priv->current_status = data[0] & 0xF8;
|
||||
bytes = (data[0] & 0x07)+1;
|
||||
i=1;
|
||||
@ -1245,7 +1232,7 @@ continue_read:
|
||||
port->interrupt_in_urb->transfer_buffer,
|
||||
port->interrupt_in_urb->transfer_buffer_length,
|
||||
cypress_read_int_callback, port,
|
||||
port->interrupt_in_urb->interval);
|
||||
interval);
|
||||
result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
|
||||
if (result)
|
||||
dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
|
||||
@ -1274,6 +1261,8 @@ static void cypress_write_int_callback(struct urb *urb, struct pt_regs *regs)
|
||||
dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status);
|
||||
priv->write_urb_in_use = 0;
|
||||
return;
|
||||
case -EPIPE: /* no break needed */
|
||||
usb_clear_halt(port->serial->dev, 0x02);
|
||||
default:
|
||||
/* error in the urb, so we have to resubmit it */
|
||||
dbg("%s - Overflow in write", __FUNCTION__);
|
||||
@ -1535,3 +1524,5 @@ module_param(debug, bool, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(debug, "Debug enabled or not");
|
||||
module_param(stats, bool, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(stats, "Enable statistics or not");
|
||||
module_param(interval, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(interval, "Overrides interrupt interval");
|
||||
|
@ -76,7 +76,7 @@
|
||||
* Defererence pointers after any paranoid checks, not before.
|
||||
*
|
||||
* (21/Jun/2003) Erik Nygren
|
||||
* Added support for Home Electronics Tira-1 IR tranceiver using FT232BM chip.
|
||||
* Added support for Home Electronics Tira-1 IR transceiver using FT232BM chip.
|
||||
* See <http://www.home-electro.com/tira1.htm>. Only operates properly
|
||||
* at 100000 and RTS-CTS, so set custom divisor mode on startup.
|
||||
* Also force the Tira-1 and USB-UIRT to only use their custom baud rates.
|
||||
@ -91,7 +91,7 @@
|
||||
* Minor whitespace and comment changes.
|
||||
*
|
||||
* (12/Jun/2003) David Norwood
|
||||
* Added support for USB-UIRT IR tranceiver using 8U232AM chip.
|
||||
* Added support for USB-UIRT IR transceiver using 8U232AM chip.
|
||||
* See <http://home.earthlink.net/~jrhees/USBUIRT/index.htm>. Only
|
||||
* operates properly at 312500, so set custom divisor mode on startup.
|
||||
*
|
||||
@ -272,6 +272,7 @@ static int debug;
|
||||
|
||||
static struct usb_device_id id_table_sio [] = {
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
|
||||
{ USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@ -296,7 +297,6 @@ static struct usb_device_id id_table_8U232AM [] = {
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_IRTRANS_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_ALT_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_RELAIS_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
|
||||
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
|
||||
@ -369,11 +369,14 @@ static struct usb_device_id id_table_8U232AM [] = {
|
||||
{ USB_DEVICE_VER(INTREPID_VID, INTREPID_NEOVI_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FALCOM_VID, FALCOM_TWIST_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_SUUNTO_SPORTS_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_RM_VID, FTDI_RMCANVIEW_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_RM_CANVIEW_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(BANDB_VID, BANDB_USOTL4_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(BANDB_VID, BANDB_USTL4_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(BANDB_VID, BANDB_USO9ML2_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, EVER_ECO_PRO_CDS, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID, 0, 0x3ff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID, 0, 0x3ff) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@ -382,7 +385,6 @@ static struct usb_device_id id_table_FT232BM [] = {
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_IRTRANS_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_ALT_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_RELAIS_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0x400, 0xffff) },
|
||||
@ -485,11 +487,15 @@ static struct usb_device_id id_table_FT232BM [] = {
|
||||
{ USB_DEVICE_VER(INTREPID_VID, INTREPID_NEOVI_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FALCOM_VID, FALCOM_TWIST_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_SUUNTO_SPORTS_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_RM_VID, FTDI_RMCANVIEW_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_RM_CANVIEW_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(BANDB_VID, BANDB_USOTL4_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(BANDB_VID, BANDB_USTL4_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(BANDB_VID, BANDB_USO9ML2_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, EVER_ECO_PRO_CDS, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID, 0x400, 0xffff) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@ -517,7 +523,6 @@ static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_ALT_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
|
||||
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
|
||||
@ -596,6 +601,22 @@ static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(FTDI_VID, PROTEGO_R2X0) },
|
||||
{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_3) },
|
||||
{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_4) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E808_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E809_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80A_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80B_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80C_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80D_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80E_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80F_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E888_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E889_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88A_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88B_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88C_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88D_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88E_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88F_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_ELV_UO100_PID) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, LINX_SDMUSBQSS_PID, 0x400, 0xffff) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, LINX_MASTERDEVEL2_PID, 0x400, 0xffff) },
|
||||
@ -609,11 +630,16 @@ static struct usb_device_id id_table_combined [] = {
|
||||
{ USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
|
||||
{ USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) },
|
||||
{ USB_DEVICE(FTDI_RM_VID, FTDI_RMCANVIEW_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
|
||||
{ USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
|
||||
{ USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
|
||||
{ USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) },
|
||||
{ USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
|
||||
{ USB_DEVICE_VER(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID, 0x400, 0xffff) },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
@ -1457,10 +1483,10 @@ static int ftdi_FT2232C_startup (struct usb_serial *serial)
|
||||
inter = serial->interface->altsetting->desc.bInterfaceNumber;
|
||||
|
||||
if (inter) {
|
||||
priv->interface = INTERFACE_B;
|
||||
priv->interface = PIT_SIOB;
|
||||
}
|
||||
else {
|
||||
priv->interface = INTERFACE_A;
|
||||
priv->interface = PIT_SIOA;
|
||||
}
|
||||
priv->baud_base = 48000000 / 2; /* Would be / 16, but FT2232C supports multiple of 0.125 divisor fractions! */
|
||||
|
||||
|
@ -26,7 +26,6 @@
|
||||
#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */
|
||||
#define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */
|
||||
#define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
|
||||
#define FTDI_8U232AM_ALT_ALT_PID 0xf3c0 /* FTDI's second alternate PID for above */
|
||||
#define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
|
||||
#define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */
|
||||
#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */
|
||||
@ -137,7 +136,7 @@
|
||||
/*
|
||||
* Home Electronics (www.home-electro.com) USB gadgets
|
||||
*/
|
||||
#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR tranceiver */
|
||||
#define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR transceiver */
|
||||
|
||||
/* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
|
||||
/* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
|
||||
@ -157,7 +156,8 @@
|
||||
*/
|
||||
#define OCT_VID 0x0B39 /* OCT vendor ID */
|
||||
/* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
|
||||
/* Also rebadged as SIIG Inc. model US2308 */
|
||||
/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */
|
||||
/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */
|
||||
#define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
|
||||
|
||||
/* an infrared receiver for user access control with IR tags */
|
||||
@ -236,10 +236,10 @@
|
||||
|
||||
/*
|
||||
* RM Michaelides CANview USB (http://www.rmcan.com)
|
||||
* CAN filedbus interface adapter, addad by port GmbH www.port.de)
|
||||
* CAN fieldbus interface adapter, added by port GmbH www.port.de)
|
||||
* Ian Abbott changed the macro names for consistency.
|
||||
*/
|
||||
#define FTDI_RM_VID 0x0403 /* Vendor Id */
|
||||
#define FTDI_RMCANVIEW_PID 0xfd60 /* Product Id */
|
||||
#define FTDI_RM_CANVIEW_PID 0xfd60 /* Product Id */
|
||||
|
||||
/*
|
||||
* EVER Eco Pro UPS (http://www.ever.com.pl/)
|
||||
@ -247,6 +247,26 @@
|
||||
|
||||
#define EVER_ECO_PRO_CDS 0xe520 /* RS-232 converter */
|
||||
|
||||
/*
|
||||
* 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485,
|
||||
* USB-TTY activ, USB-TTY passiv. Some PIDs are used by several devices
|
||||
* and I'm not entirely sure which are used by which.
|
||||
*/
|
||||
#define FTDI_4N_GALAXY_DE_0_PID 0x8372
|
||||
#define FTDI_4N_GALAXY_DE_1_PID 0xF3C0
|
||||
#define FTDI_4N_GALAXY_DE_2_PID 0xF3C1
|
||||
|
||||
/*
|
||||
* Mobility Electronics products.
|
||||
*/
|
||||
#define MOBILITY_VID 0x1342
|
||||
#define MOBILITY_USB_SERIAL_PID 0x0202 /* EasiDock USB 200 serial */
|
||||
|
||||
/*
|
||||
* Active Robots product ids.
|
||||
*/
|
||||
#define FTDI_ACTIVE_ROBOTS_PID 0xE548 /* USB comms board */
|
||||
|
||||
/* Commands */
|
||||
#define FTDI_SIO_RESET 0 /* Reset the port */
|
||||
#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */
|
||||
@ -259,10 +279,6 @@
|
||||
#define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */
|
||||
#define FTDI_SIO_GET_LATENCY_TIMER 10 /* Get the latency timer */
|
||||
|
||||
/* Port interface code for FT2232C */
|
||||
#define INTERFACE_A 1
|
||||
#define INTERFACE_B 2
|
||||
|
||||
|
||||
/*
|
||||
* BmRequestType: 1100 0000b
|
||||
|
@ -289,7 +289,7 @@
|
||||
//
|
||||
|
||||
//
|
||||
// Edgeport Compatiblity Descriptor
|
||||
// Edgeport Compatibility Descriptor
|
||||
//
|
||||
// This descriptor is only returned by Edgeport-compatible devices
|
||||
// supporting the EPiC spec. True ION devices do not return this
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
This file is available under a BSD-style copyright
|
||||
|
||||
2. The name of InnoSys Incorprated may not be used to endorse or promote
|
||||
2. The name of InnoSys Incorporated may not be used to endorse or promote
|
||||
products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include <linux/cdrom.h>
|
||||
#include <scsi/scsi.h>
|
||||
#include <scsi/scsi_cmnd.h>
|
||||
#include <scsi/scsi_dbg.h>
|
||||
|
||||
#include "debug.h"
|
||||
#include "scsi.h"
|
||||
|
@ -786,7 +786,7 @@ static int usbat_flash_check_media(struct us_data *us,
|
||||
if (rc != USB_STOR_XFER_GOOD)
|
||||
return USB_STOR_TRANSPORT_ERROR;
|
||||
|
||||
// Check for media existance
|
||||
// Check for media existence
|
||||
rc = usbat_flash_check_media_present(uio);
|
||||
if (rc == USBAT_FLASH_MEDIA_NONE) {
|
||||
info->sense_key = 0x02;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Driver for USB Mass Storage compliant devices
|
||||
* Ununsual Devices File
|
||||
* Unusual Devices File
|
||||
*
|
||||
* $Id: unusual_devs.h,v 1.32 2002/02/25 02:41:24 mdharm Exp $
|
||||
*
|
||||
@ -48,6 +48,14 @@
|
||||
* USB development list <linux-usb-devel@lists.sourceforge.net>.
|
||||
*/
|
||||
|
||||
/* patch submitted by Vivian Bregier <Vivian.Bregier@imag.fr>
|
||||
*/
|
||||
UNUSUAL_DEV( 0x03eb, 0x2002, 0x0100, 0x0100,
|
||||
"ATMEL",
|
||||
"SND1 Storage",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_RESIDUE),
|
||||
|
||||
UNUSUAL_DEV( 0x03ee, 0x6901, 0x0000, 0x0100,
|
||||
"Mitsumi",
|
||||
"USB FDD",
|
||||
@ -994,6 +1002,13 @@ UNUSUAL_DEV( 0x1019, 0x0c55, 0x0000, 0x9999,
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init,
|
||||
0 ),
|
||||
|
||||
/* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
|
||||
UNUSUAL_DEV( 0x132b, 0x000b, 0x0001, 0x0001,
|
||||
"Minolta",
|
||||
"Dimage Z10",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
0 ),
|
||||
|
||||
/* Reported by Kotrla Vitezslav <kotrla@ceb.cz> */
|
||||
UNUSUAL_DEV( 0x1370, 0x6828, 0x0110, 0x0110,
|
||||
"SWISSBIT",
|
||||
|
@ -1000,8 +1000,10 @@ static int i810_check_params(struct fb_var_screeninfo *var,
|
||||
|
||||
if (fb_validate_mode(var, info)) {
|
||||
if (fb_get_mode(FB_MAXTIMINGS, 0, var, info)) {
|
||||
int default_sync = (hsync1-HFMIN)|(hsync2-HFMAX)
|
||||
|(vsync1-VFMIN)|(vsync2-VFMAX);
|
||||
int default_sync = (info->monspecs.hfmin-HFMIN)
|
||||
|(info->monspecs.hfmax-HFMAX)
|
||||
|(info->monspecs.vfmin-VFMIN)
|
||||
|(info->monspecs.vfmax-VFMAX);
|
||||
printk("i810fb: invalid video mode%s\n",
|
||||
default_sync ? "" :
|
||||
". Specifying vsyncN/hsyncN parameters may help");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) International Business Machines Corp., 2000-2004
|
||||
* Copyright (C) International Business Machines Corp., 2000-2005
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -688,7 +688,7 @@ static int xtSearch(struct inode *ip, s64 xoff, s64 *nextp,
|
||||
/* search hit - internal page:
|
||||
* descend/search its child page
|
||||
*/
|
||||
if (index < p->header.nextindex - 1)
|
||||
if (index < le16_to_cpu(p->header.nextindex)-1)
|
||||
next = offsetXAD(&p->xad[index + 1]);
|
||||
goto next;
|
||||
}
|
||||
@ -705,7 +705,7 @@ static int xtSearch(struct inode *ip, s64 xoff, s64 *nextp,
|
||||
* base is the smallest index with key (Kj) greater than
|
||||
* search key (K) and may be zero or maxentry index.
|
||||
*/
|
||||
if (base < p->header.nextindex)
|
||||
if (base < le16_to_cpu(p->header.nextindex))
|
||||
next = offsetXAD(&p->xad[base]);
|
||||
/*
|
||||
* search miss - leaf page:
|
||||
|
@ -113,16 +113,7 @@ typedef unsigned long sigset_t;
|
||||
#define SIG_UNBLOCK 2 /* for unblocking signals */
|
||||
#define SIG_SETMASK 3 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void __signalfn_t(int);
|
||||
typedef __signalfn_t __user *__sighandler_t;
|
||||
|
||||
typedef void __restorefn_t(void);
|
||||
typedef __restorefn_t __user *__sigrestore_t;
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct osf_sigaction {
|
||||
|
@ -117,20 +117,7 @@ typedef unsigned long sigset_t;
|
||||
#define SA_IRQNOMASK 0x08000000
|
||||
#endif
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void __signalfn_t(int);
|
||||
typedef __signalfn_t __user *__sighandler_t;
|
||||
|
||||
typedef void __restorefn_t(void);
|
||||
typedef __restorefn_t __user *__sigrestore_t;
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -117,16 +117,7 @@ typedef unsigned long sigset_t;
|
||||
#define SA_IRQNOMASK 0x08000000
|
||||
#endif
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -108,16 +108,7 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -107,16 +107,7 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
21
include/asm-generic/signal.h
Normal file
21
include/asm-generic/signal.h
Normal file
@ -0,0 +1,21 @@
|
||||
#ifndef SIG_BLOCK
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#endif
|
||||
#ifndef SIG_UNBLOCK
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#endif
|
||||
#ifndef SIG_SETMASK
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
#endif
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
typedef void __signalfn_t(int);
|
||||
typedef __signalfn_t __user *__sighandler_t;
|
||||
|
||||
typedef void __restorefn_t(void);
|
||||
typedef __restorefn_t __user *__sigrestore_t;
|
||||
|
||||
#define SIG_DFL ((__force __sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__force __sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__force __sighandler_t)-1) /* error return from signal */
|
||||
#endif
|
@ -107,16 +107,7 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -110,20 +110,7 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void __signalfn_t(int);
|
||||
typedef __signalfn_t __user *__sighandler_t;
|
||||
|
||||
typedef void __restorefn_t(void);
|
||||
typedef __restorefn_t __user *__sigrestore_t;
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -118,13 +118,7 @@
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
# ifndef __ASSEMBLY__
|
||||
|
||||
@ -133,9 +127,6 @@
|
||||
/* Avoid too many header ordering problems. */
|
||||
struct siginfo;
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void __user (*__sighandler_t)(int);
|
||||
|
||||
typedef struct sigaltstack {
|
||||
void __user *ss_sp;
|
||||
int ss_flags;
|
||||
|
@ -114,20 +114,7 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void __signalfn_t(int);
|
||||
typedef __signalfn_t __user *__sighandler_t;
|
||||
|
||||
typedef void __restorefn_t(void);
|
||||
typedef __restorefn_t __user *__sigrestore_t;
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -105,29 +105,20 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
old_sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
__sigrestore_t sa_restorer;
|
||||
};
|
||||
|
||||
struct sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
unsigned long sa_flags;
|
||||
void (*sa_restorer)(void);
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
|
||||
|
@ -105,16 +105,7 @@ typedef unsigned long sigset_t;
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct old_sigaction {
|
||||
|
@ -103,14 +103,7 @@ typedef unsigned long old_sigset_t; /* at least 32 bits */
|
||||
#define SIG_SETMASK 3 /* for setting the signal mask */
|
||||
#define SIG_SETMASK32 256 /* Goodie from SGI for BSD compatibility:
|
||||
set only the low 32 bit of the sigset. */
|
||||
|
||||
/* Type of a signal handler. */
|
||||
typedef void (*__sighandler_t)(int);
|
||||
|
||||
/* Fake signal functions */
|
||||
#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
|
||||
#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
|
||||
#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
|
||||
#include <asm-generic/signal.h>
|
||||
|
||||
struct sigaction {
|
||||
unsigned int sa_flags;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user