Commit 8ca3b9de authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.99pre3-1

parent aa0faa45
......@@ -1327,6 +1327,13 @@ N: Andreas S. Krebs
E: akrebs@altavista.net
D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards
N: Greg Kroah-Hartman
E: greg@kroah.com
W: http://www.kroah.com/linux-usb/
D: USB Serial Converter driver framework, USB Handspring Visor driver
D: ConnectTech WHITEHeat USB driver, Generic USB Serial driver
D: bits and pieces of USB core code.
N: Russell Kroll
E: rkroll@exploits.org
W: http://www.exploits.org/
......@@ -1360,10 +1367,13 @@ S: D-91080 Uttenreuth
S: Germany
N: Jaroslav Kysela
E: perex@jcu.cz
W: http://www.pf.jcu.cz/~perex
E: perex@suse.cz
W: http://www.perex.cz
D: Original Author and Maintainer for HP 10/100 Mbit Network Adapters
S: Unix Centre of Pedagogical Faculty, University of South Bohemia
D: ISA PnP
S: Sindlovy Dvory 117
S: 370 01 Ceske Budejovice
S: Czech Republic
N: Bas Laarhoven
E: bas@vimec.nl
......
......@@ -64,10 +64,10 @@ extern struct pci_bus *isapnp_find_card(unsigned short vendor,
unsigned short device,
struct pci_bus *from);
The above function finds a ISA PnP card. For the vendor device should
This function finds a ISA PnP card. For the vendor device should
be used ISAPNP_VENDOR(a,b,c) where a,b,c are characters or integers.
For the device number should be used ISAPNP_DEVICE(x) macro where x is
integer value. Both vendor and device numbers can be get from contents
integer value. Both vendor and device numbers can be taken from contents
of the /proc/isapnp file.
extern struct pci_dev *isapnp_find_dev(struct pci_bus *card,
......@@ -75,12 +75,37 @@ extern struct pci_dev *isapnp_find_dev(struct pci_bus *card,
unsigned short function,
struct pci_dev *from);
The above function finds the ISA PnP device. If card is NULL, then
This function finds the ISA PnP device. If card is NULL, then
the global search mode is used (all devices are used for the searching).
Otherwise only devices which belongs to the specified card are verified.
For the function number can be used ISAPNP_FUNCTION(x) macro which works
similarly as the ISAPNP_DEVICE(x) macro.
extern int isapnp_probe_cards(const struct isapnp_card_id *ids,
int (*probe)(struct pci_bus *card,
const struct isapnp_card_id *id));
This function is a helper for drivers which requires to use more than
one device from an ISA PnP card. For each cards is called the probe
callback with appropriate information.
Example for ids parameter initialization:
static struct isapnp_card_id ids[] __devinitdata = {
{
ISAPNP_CARD_ID('A','D','V', 0x550a),
devs: {
ISAPNP_DEVICE_ID('A', 'D', 'V', 0x0010),
ISAPNP_DEVICE_ID('A', 'D', 'V', 0x0011)
},
driver_data: 0x1234,
},
{
ISAPNP_CARD_END,
}
};
ISA PnP configuration
=====================
......@@ -99,19 +124,25 @@ otherwise the access to the ISA PnP configuration functions will be blocked.
Second way is auto-configuration
--------------------------------
These two functions gives to the driver the real power of the ISA PnP
feature. First function dev->prepare() only initialize the resource
members in the device structure. This structure contains all resources
set to auto configuration values after the initialization. The driver for
ISA PnP device may modify (or not) some resources to skip auto configuration
for the given resource.
This feature gives to the driver the real power of the ISA PnP code.
Function dev->prepare() initializes the resource members in the device
structure. This structure contains all resources set to auto configuration
values after the initialization. The device driver may modify some resources
to skip the auto configuration for a given resource.
The function isapnp_configure does:
- resources which have the auto configuration value are configured
Once the device structure contains all requested resource values, the function
dev->activate() must be called to assign free resources to resource members
with the auto configuration value.
Function dev->activate() does:
- resources with the auto configuration value are configured
- the auto configuration is created using ISA PnP resource map
- the function writes configuration to ISA PnP configuration registers
- the function returns to the caller actual used resources
When the device driver is removing, function dev->deactivate() has to be
called to free all assigned resources.
Example (game port initialization)
==================================
......
......@@ -84,6 +84,13 @@ trouble with some specific TV card, try to ask there instead of
mailing me directly. The chance that someone with the same card
listens there is much higher...
For problems with sound: There are alot of different systems used
for TV sound all over the world. And there are also different chips
which decode the audio signal. Reports about sound problems ("stereo
does'nt work") are pretty useless unless you include some details
about your hardware and the TV sound scheme used in your country (or
at least the country you are living in).
Finally: If you mail some patches for bttv around the world (to
linux-kernel/Alan/Linus/...), please Cc: me.
......
VERSION = 2
PATCHLEVEL = 3
SUBLEVEL = 99
EXTRAVERSION = -pre2
EXTRAVERSION = -pre3
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......@@ -179,8 +179,7 @@ DRIVERS += $(DRIVERS-y)
include arch/$(ARCH)/Makefile
export CORE_FILES NETWORKS DRIVERS LIBS HEAD LDFLAGS LIBS LINKFLAGS \
MAKEBOOT ASFLAGS
export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS
# use '-fno-strict-aliasing', but only if the compiler can take it
CFLAGS += $(shell if $(CC) -fno-strict-aliasing -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-fno-strict-aliasing"; fi)
......
This diff is collapsed.
......@@ -21,7 +21,7 @@
#ifndef _BTTV_H_
#define _BTTV_H_
#define BTTV_VERSION_CODE KERNEL_VERSION(0,7,22)
#define BTTV_VERSION_CODE KERNEL_VERSION(0,7,24)
#include <linux/types.h>
#include <linux/wait.h>
......@@ -112,7 +112,8 @@ struct bttv_gbuf {
#define GBUFFER_GRABBING 1
#define GBUFFER_DONE 2
#define GBUFFER_ERROR 3
struct timeval tv;
u16 width;
u16 height;
u16 fmt;
......@@ -122,8 +123,7 @@ struct bttv_gbuf {
unsigned long re;
};
struct bttv
{
struct bttv {
struct video_device video_dev;
struct video_device radio_dev;
struct video_device vbi_dev;
......@@ -193,6 +193,9 @@ struct bttv
int i2c_command;
int triton1;
int errors;
int needs_restart;
WAIT_QUEUE gpioq;
int shutdown;
};
......
......@@ -4306,6 +4306,9 @@ static void __init probe_serial_pci(void)
#ifdef ENABLE_SERIAL_PNP
static struct pci_board pnp_devices[] __initdata = {
/* Motorola VoiceSURFR 56K Modem */
{ ISAPNP_VENDOR('M', 'O', 'T'), ISAPNP_DEVICE(0x15F0), 0, 0,
SPCI_FL_BASE0 | SPCI_FL_PNPDEFAULT, 1, 115200 },
/* Rockwell 56K ACF II Fax+Data+Voice Modem */
{ ISAPNP_VENDOR('A', 'K', 'Y'), ISAPNP_DEVICE(0x1021), 0, 0,
SPCI_FL_BASE0 | SPCI_FL_PNPDEFAULT, 1, 115200 },
......
......@@ -1208,6 +1208,50 @@ struct pci_dev *isapnp_find_dev(struct pci_bus *card,
return NULL;
}
static const struct isapnp_card_id *
isapnp_match_card(const struct isapnp_card_id *ids, struct pci_bus *card)
{
int idx;
while (ids->vendor || ids->device) {
if ((ids->vendor == ISAPNP_ANY_ID || ids->vendor == card->vendor) &&
(ids->device == ISAPNP_ANY_ID || ids->device == card->device)) {
for (idx = 0; idx < ISAPNP_CARD_DEVS; idx++) {
if (ids->devs[idx].vendor == 0 &&
ids->devs[idx].function == 0)
return ids;
if (isapnp_find_dev(card,
ids->devs[idx].vendor,
ids->devs[idx].function,
NULL) == NULL)
goto __next;
}
return ids;
}
__next:
ids++;
}
return NULL;
}
int isapnp_probe_cards(const struct isapnp_card_id *ids,
int (*probe)(struct pci_bus *_card,
const struct isapnp_card_id *_id))
{
struct pci_bus *card;
const struct isapnp_card_id *id;
int count = 0;
if (ids == NULL || probe == NULL)
return -EINVAL;
isapnp_for_each_card(card) {
id = isapnp_match_card(ids, card);
if (id != NULL && probe(card, id) >= 0)
count++;
}
return count;
}
static unsigned int isapnp_dma_resource_flags(struct isapnp_dma *dma)
{
return dma->flags | IORESOURCE_DMA | IORESOURCE_AUTO;
......@@ -2065,6 +2109,8 @@ static void __init isapnp_pci_init(void)
#endif /* CONFIG_PCI */
EXPORT_SYMBOL(isapnp_cards);
EXPORT_SYMBOL(isapnp_devices);
EXPORT_SYMBOL(isapnp_present);
EXPORT_SYMBOL(isapnp_cfg_begin);
EXPORT_SYMBOL(isapnp_cfg_end);
......@@ -2080,6 +2126,7 @@ EXPORT_SYMBOL(isapnp_activate);
EXPORT_SYMBOL(isapnp_deactivate);
EXPORT_SYMBOL(isapnp_find_card);
EXPORT_SYMBOL(isapnp_find_dev);
EXPORT_SYMBOL(isapnp_probe_cards);
EXPORT_SYMBOL(isapnp_resource_change);
int __init isapnp_init(void)
......
......@@ -4186,7 +4186,7 @@ STATIC void asc_prt_hex(char *f, uchar *, int);
#endif /* ADVANSYS_DEBUG */
#ifdef ADVANSYS_ASSERT
STATIC int interrupts_enabled(void);
STATIC int advansys_interrupts_enabled(void);
#endif /* ADVANSYS_ASSERT */
......@@ -7053,7 +7053,7 @@ asc_execute_scsi_cmnd(Scsi_Cmnd *scp)
Scsi_Device *device;
int ret;
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_DBG2(1, "asc_execute_scsi_cmnd: scp %lx, done %lx\n",
(ulong) scp, (ulong) scp->scsi_done);
......@@ -7182,7 +7182,7 @@ asc_execute_scsi_cmnd(Scsi_Cmnd *scp)
}
ASC_DBG(1, "asc_execute_scsi_cmnd: end\n");
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
return ret;
}
......@@ -7602,7 +7602,7 @@ asc_isr_callback(ASC_DVC_VAR *asc_dvc_varp, ASC_QDONE_INFO *qdonep)
struct Scsi_Host *shp;
int i;
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_DBG2(1, "asc_isr_callback: asc_dvc_varp %lx, qdonep %lx\n",
(ulong) asc_dvc_varp, (ulong) qdonep);
ASC_DBG_PRT_ASC_QDONE_INFO(2, qdonep);
......@@ -7773,7 +7773,7 @@ adv_isr_callback(ADV_DVC_VAR *adv_dvc_varp, ADV_SCSI_REQ_Q *scsiqp)
struct Scsi_Host *shp;
int i;
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_DBG2(1, "adv_isr_callback: adv_dvc_varp %lx, scsiqp %lx\n",
(ulong) adv_dvc_varp, (ulong) scsiqp);
ASC_DBG_PRT_ADV_SCSI_REQ_Q(2, scsiqp);
......@@ -8422,7 +8422,7 @@ asc_enqueue(asc_queue_t *ascq, REQP reqp, int flag)
ASC_DBG3(3, "asc_enqueue: ascq %lx, reqp %lx, flag %d\n",
(ulong) ascq, (ulong) reqp, flag);
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(reqp != NULL);
ASC_ASSERT(flag == ASC_FRONT || flag == ASC_BACK);
tid = REQPTID(reqp);
......@@ -8475,7 +8475,7 @@ asc_dequeue(asc_queue_t *ascq, int tid)
REQP reqp;
ASC_DBG2(3, "asc_dequeue: ascq %lx, tid %d\n", (ulong) ascq, tid);
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(tid >= 0 && tid <= ADV_MAX_TID);
if ((reqp = ascq->q_first[tid]) != NULL) {
ASC_ASSERT(ascq->q_tidmask & ADV_TID_TO_TIDMASK(tid));
......@@ -8524,7 +8524,7 @@ asc_dequeue_list(asc_queue_t *ascq, REQP *lastpp, int tid)
int i;
ASC_DBG2(3, "asc_dequeue_list: ascq %lx, tid %d\n", (ulong) ascq, tid);
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT((tid == ASC_TID_ALL) || (tid >= 0 && tid <= ADV_MAX_TID));
/*
......@@ -8607,7 +8607,7 @@ asc_rmqueue(asc_queue_t *ascq, REQP reqp)
ASC_DBG2(3, "asc_rmqueue: ascq %lx, reqp %lx\n",
(ulong) ascq, (ulong) reqp);
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(reqp != NULL);
tid = REQPTID(reqp);
......@@ -8675,7 +8675,7 @@ asc_isqueued(asc_queue_t *ascq, REQP reqp)
ASC_DBG2(3, "asc_isqueued: ascq %lx, reqp %lx\n",
(ulong) ascq, (ulong) reqp);
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(reqp != NULL);
tid = REQPTID(reqp);
......@@ -8705,7 +8705,7 @@ asc_execute_queue(asc_queue_t *ascq)
int i;
ASC_DBG1(1, "asc_execute_queue: ascq %lx\n", (ulong) ascq);
ASC_ASSERT(interrupts_enabled() == ASC_FALSE);
ASC_ASSERT(advansys_interrupts_enabled() == ASC_FALSE);
/*
* Execute queued commands for devices attached to
* the current board in round-robin fashion.
......@@ -10919,12 +10919,12 @@ asc_prt_hex(char *f, uchar *s, int l)
#ifdef ADVANSYS_ASSERT
/*
* interrupts_enabled()
* advansys_interrupts_enabled()
*
* Return 1 if interrupts are enabled, otherwise return 0.
*/
STATIC int
interrupts_enabled(void)
advansys_interrupts_enabled(void)
{
int flags;
......
......@@ -105,6 +105,7 @@ static struct hid_usage_entry hid_usage_table[] = {
{0, 0x35, "Tap"},
{0, 0x39, "TabletFunctionKey"},
{0, 0x3a, "ProgramChangeKey"},
{0, 0x3c, "Invert"},
{0, 0x42, "TipSwitch"},
{0, 0x43, "SecondaryTipSwitch"},
{0, 0x44, "BarrelSwitch"},
......
......@@ -802,6 +802,11 @@ static void hid_configure_usage(struct hid_device *device, struct hid_field *fie
case 0x30: /* TipPressure */
if (!test_bit(BTN_TOUCH, input->keybit)) {
device->quirks |= HID_QUIRK_NOTOUCH;
set_bit(EV_KEY, input->evbit);
set_bit(BTN_TOUCH, input->keybit);
}
usage->type = EV_ABS; bit = input->absbit; max = ABS_MAX;
usage->code = ABS_PRESSURE;
clear_bit(usage->code, bit);
......@@ -817,10 +822,18 @@ static void hid_configure_usage(struct hid_device *device, struct hid_field *fie
}
break;
case 0x3c: /* Invert */
usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX;
usage->code = BTN_TOOL_RUBBER;
clear_bit(usage->code, bit);
break;
case 0x33: /* Touch */
case 0x42: /* TipSwitch */
case 0x43: /* TipSwitch2 */
device->quirks &= ~HID_QUIRK_NOTOUCH;
usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX;
usage->code = BTN_TOUCH;
clear_bit(usage->code, bit);
......@@ -930,7 +943,7 @@ static void hid_configure_usage(struct hid_device *device, struct hid_field *fie
}
}
static void hid_process_event(struct input_dev *input, int flags, struct hid_usage *usage, __s32 value)
static void hid_process_event(struct input_dev *input, int *quirks, struct hid_field *field, struct hid_usage *usage, __s32 value)
{
hid_dump_input(usage, value);
......@@ -941,9 +954,30 @@ static void hid_process_event(struct input_dev *input, int flags, struct hid_usa
return;
}
if (usage->hid == (HID_UP_DIGITIZER | 0x003c)) { /* Invert */
*quirks = value ? (*quirks | HID_QUIRK_INVERT) : (*quirks & ~HID_QUIRK_INVERT);
return;
}
if (usage->hid == (HID_UP_DIGITIZER | 0x0032)) { /* InRange */
if (value) {
input_event(input, usage->type, (*quirks & HID_QUIRK_INVERT) ? BTN_TOOL_RUBBER : usage->code, 1);
return;
}
input_event(input, usage->type, usage->code, 0);
input_event(input, usage->type, BTN_TOOL_RUBBER, 0);
return;
}
if (usage->hid == (HID_UP_DIGITIZER | 0x0030) && (*quirks & HID_QUIRK_NOTOUCH)) { /* Pressure */
int a = field->logical_minimum;
int b = field->logical_maximum;
input_event(input, EV_KEY, BTN_TOUCH, value > a + ((b - a) >> 3));
}
input_event(input, usage->type, usage->code, value);
if ((flags & HID_MAIN_ITEM_RELATIVE) && (usage->type == EV_KEY))
if ((field->flags & HID_MAIN_ITEM_RELATIVE) && (usage->type == EV_KEY))
input_event(input, usage->type, usage->code, 0);
}
......@@ -986,19 +1020,21 @@ static void hid_input_field(struct hid_device *dev, struct hid_field *field, __u
} else {
if (value[n] == field->value[n]) continue;
}
hid_process_event(&dev->input, field->flags, &field->usage[n], value[n]);
hid_process_event(&dev->input, &dev->quirks, field, &field->usage[n], value[n]);
} else {
if (field->value[n] >= min && field->value[n] <= max /* non-NULL value */
&& field->usage[field->value[n] - min].hid /* nonzero usage */
&& search(value, field->value[n], count))
hid_process_event(&dev->input, field->flags, &field->usage[field->value[n] - min], 0);
hid_process_event(&dev->input, &dev->quirks, field,
&field->usage[field->value[n] - min], 0);
if (value[n] >= min && value[n] <= max /* non-NULL value */
&& field->usage[value[n] - min].hid /* nonzero usage */
&& search(field->value, value[n], count))
hid_process_event(&dev->input, field->flags, &field->usage[value[n] - min], 1);
hid_process_event(&dev->input, &dev->quirks,
field, &field->usage[value[n] - min], 1);
}
}
......@@ -1261,14 +1297,18 @@ static void hid_init_input(struct hid_device *hid)
#define USB_VENDOR_ID_WACOM 0x056a
#define USB_DEVICE_ID_WACOM_GRAPHIRE 0x0010
#define USB_DEVICE_ID_WACOM_INTUOS 0x0021
#define USB_DEVICE_ID_WACOM_INTUOS 0x0020
struct hid_blacklist {
__u16 idVendor;
__u16 idProduct;
} hid_blacklist[] = {
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS },
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 1},
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 2},
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 3},
{ USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS + 4},
{ 0, 0 }
};
......
......@@ -178,6 +178,13 @@ struct hid_item {
#define HID_OUTPUT_REPORT 1
#define HID_FEATURE_REPORT 2
/*
* HID device quirks.
*/
#define HID_QUIRK_INVERT 0x01
#define HID_QUIRK_NOTOUCH 0x02
/*
* This is the global enviroment of the parser. This information is
* persistent for main-items. The global enviroment can be saved and
......@@ -285,6 +292,7 @@ struct hid_device { /* device report descriptor */
struct urb urb; /* USB URB structure */
struct urb urbout; /* Output URB */
struct input_dev input; /* input device structure */
int quirks; /* Various nasty tricks the device can pull on us */
};
#define HID_GLOBAL_STACK_SIZE 4
......
......@@ -58,7 +58,8 @@ static unsigned char keybdev_mac_codes[256] =
#endif
struct input_handler keybdev_handler;
static struct input_handler keybdev_handler;
static int keybdev_alt = 0;
void keybdev_ledfunc(unsigned int led)
{
......@@ -93,14 +94,22 @@ void keybdev_event(struct input_handle *handle, unsigned int type, unsigned int
handle_scancode(0x1d, down);
handle_scancode(0x45, down);
} else if (code >= 96) {
handle_scancode(0xe0, 1);
handle_scancode(keybdev_x86_e0s[code - 96], down);
if (code == 99) {
if (code == 99 && keybdev_alt) {
handle_scancode(84, down);
} else {
handle_scancode(0xe0, 1);
handle_scancode(0x37, down);
handle_scancode(keybdev_x86_e0s[code - 96], down);
if (code == 99) {
handle_scancode(0xe0, 1);
handle_scancode(0x37, down);
}
}
} else if (code == 84) {
handle_scancode(43, down);
} else handle_scancode(code, down);
if (code == 56 || code == 100) keybdev_alt = down;
#elif CONFIG_ADB_KEYBOARD
if (code < 128 && keybdev_mac_codes[code])
......@@ -152,7 +161,7 @@ static void keybdev_disconnect(struct input_handle *handle)
kfree(handle);
}
struct input_handler keybdev_handler = {
static struct input_handler keybdev_handler = {
event: keybdev_event,
connect: keybdev_connect,
disconnect: keybdev_disconnect,
......
......@@ -95,8 +95,8 @@ static void mousedev_event(struct input_handle *handle, unsigned int type, unsig
break;
case ABS_Y:
size = handle->dev->absmax[ABS_Y] - handle->dev->absmin[ABS_Y];
list->dy += (value * CONFIG_MOUSEDEV_SCREEN_Y - list->oldy) / size;
list->oldy += list->dy * size;
list->dy -= (value * CONFIG_MOUSEDEV_SCREEN_Y - list->oldy) / size;
list->oldy -= list->dy * size;
break;
}
break;
......
This diff is collapsed.
This diff is collapsed.
......@@ -1985,6 +1985,15 @@ static int setup_uhci(struct pci_dev *dev, int irq, unsigned int io_addr, unsign
{
int retval;
struct uhci *uhci;
char buf[8], *bufp = buf;
#ifndef __sparc__
sprintf(buf, "%d", irq);
#else
bufp = __irq_itoa(irq);
#endif
printk(KERN_INFO __FILE__ ": USB UHCI at I/O 0x%x, IRQ %s\n",
io_addr, bufp);
uhci = alloc_uhci(io_addr, io_size);
if (!uhci)
......
......@@ -1650,16 +1650,24 @@ static void hc_release_ohci (ohci_t * ohci)
static int hc_found_ohci (struct pci_dev *dev, int irq, void * mem_base)
{
ohci_t * ohci;
dbg("USB HC found: irq= %d membase= %lx", irq, (unsigned long) mem_base);
char buf[8], *bufp = buf;
#ifndef __sparc__
sprintf(buf, "%d", irq);
#else
bufp = __irq_itoa(irq);
#endif
printk(KERN_INFO __FILE__ ": USB OHCI at membase 0x%lx, IRQ %s\n",
(unsigned long) mem_base, bufp);
ohci = hc_alloc_ohci (mem_base);
if (!ohci) {
return -ENOMEM;
}
INIT_LIST_HEAD (&ohci->ohci_hcd_list);
list_add (&ohci->ohci_hcd_list, &ohci_hcd_list);
hc_reset (ohci);
writel (ohci->hc_control = OHCI_USB_RESET, &ohci->regs->control);
wait_ms (10);
......
......@@ -2597,6 +2597,15 @@ _static int __init alloc_uhci (struct pci_dev *dev, int irq, unsigned int io_add
uhci_t *s;
struct usb_bus *bus;
struct pm_dev *pmdev;
char buf[8], *bufp = buf;
#ifndef __sparc__
sprintf(buf, "%d", irq);
#else
bufp = __irq_itoa(irq);
#endif
printk(KERN_INFO __FILE__ ": USB UHCI at I/O 0x%x, IRQ %s\n",
io_addr, bufp);
s = kmalloc (sizeof (uhci_t), GFP_KERNEL);
if (!s)
......
This diff is collapsed.
......@@ -258,7 +258,7 @@ static void ntfs_load_attributes(ntfs_inode* ino)
if( !buf )
return;
delta=0;
for(offset=0;datasize;datasize-=len)
for(offset=0;datasize;datasize-=len,offset+=len)
{
ntfs_io io;
io.fn_put=ntfs_put;
......@@ -268,7 +268,7 @@ static void ntfs_load_attributes(ntfs_inode* ino)
if(ntfs_read_attr(ino,vol->at_attribute_list,0,offset,&io)){
ntfs_error("error in load_attributes\n");
}
delta=len;
delta+=len;
parse_attributes(ino,buf,&delta);
if(delta)
/* move remaining bytes to buffer start */
......
......@@ -302,9 +302,10 @@ struct input_event {
#define BTN_TOOL_AIRBRUSH 0x144
#define BTN_TOOL_FINGER 0x145
#define BTN_TOOL_MOUSE 0x146
#define BTN_TOUCH 0x147
#define BTN_STYLUS 0x148
#define BTN_STYLUS2 0x149
#define BTN_TOOL_LENS 0x147
#define BTN_TOUCH 0x14a
#define BTN_STYLUS 0x14b
#define BTN_STYLUS2 0x14c
#define KEY_MAX 0x1ff
......
......@@ -128,6 +128,24 @@ struct isapnp_resources {
struct isapnp_resources *next; /* next resource */
};
#define ISAPNP_ANY_ID 0xffff
#define ISAPNP_CARD_DEVS 8
#define ISAPNP_CARD_ID(_va, _vb, _vc, _device) \
vendor: ISAPNP_VENDOR(_va, _vb, _vc), device: ISAPNP_DEVICE(_device)
#define ISAPNP_CARD_END \
vendor: 0, device: 0
#define ISAPNP_DEVICE_ID(_va, _vb, _vc, _function) \
{ vendor: ISAPNP_VENDOR(_va, _vb, _vc), function: ISAPNP_FUNCTION(_function) }
struct isapnp_card_id {
unsigned short vendor, device;
struct {
unsigned short vendor, function;
} devs[ISAPNP_CARD_DEVS]; /* logical devices */
unsigned long driver_data; /* data private to the driver */
};
#if defined(CONFIG_ISAPNP) || (defined(CONFIG_ISAPNP_MODULE) && defined(MODULE))
#define __ISAPNP__
......@@ -158,6 +176,9 @@ struct pci_dev *isapnp_find_dev(struct pci_bus *card,
unsigned short vendor,
unsigned short function,
struct pci_dev *from);
int isapnp_probe_cards(const struct isapnp_card_id *ids,
int (*probe)(struct pci_bus *card,
const struct isapnp_card_id *id));
/* misc */
void isapnp_resource_change(struct resource *resource,
unsigned long start,
......@@ -196,7 +217,10 @@ extern inline struct pci_bus *isapnp_find_card(unsigned short vendor,
extern inline struct pci_dev *isapnp_find_dev(struct pci_bus *card,
unsigned short vendor,
unsigned short function,
struct pci_dev *from) { return NULL; }
struct pci_dev *from) { return NULL; }
extern inline int isapnp_probe_cards(const struct isapnp_card_id *ids,
int (*probe)(struct pci_bus *card,
const struct isapnp_card_id *id)) { return -ENODEV; }
extern inline void isapnp_resource_change(struct resource *resource,
unsigned long start,
unsigned long size) { ; }
......
......@@ -30,6 +30,7 @@
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/malloc.h>
#include <linux/shm.h>
#include <linux/swap.h>
......
......@@ -21,6 +21,8 @@ OX_OBJS += ip_conntrack_standalone.o
O_OBJS += $(IP_NF_CONNTRACK_OBJ)
else
ifeq ($(CONFIG_IP_NF_CONNTRACK),m)
MI_OBJS += $(IP_NF_CONNTRACK_OBJ)
MIX_OBJS += ip_conntrack_standalone.o
M_OBJS += ip_conntrack.o
endif
endif
......@@ -37,7 +39,7 @@ ifeq ($(CONFIG_IP_NF_FTP),y)
OX_OBJS += ip_conntrack_ftp.o
else
ifeq ($(CONFIG_IP_NF_FTP),m)
M_OBJS += ip_conntrack_ftp.o
MX_OBJS += ip_conntrack_ftp.o
endif
endif
......@@ -129,6 +131,8 @@ O_OBJS += ip_nat_rule.o $(IP_NF_NAT_OBJ)
endif
else
ifeq ($(CONFIG_IP_NF_NAT),m)
MI_OBJS += ip_nat_rule.o $(IP_NF_NAT_OBJ)
MIX_OBJS += ip_nat_standalone.o
M_OBJS += iptable_nat.o
ifeq ($(CONFIG_IP_NF_FTP),m)
M_OBJS += ip_nat_ftp.o
......
/* FTP extension for IP connection tracking. */
#ifdef MODULE
#define EXPORT_SYMTAB
#endif
#include <linux/module.h>
#include <linux/netfilter.h>
#include <linux/ip.h>
......
......@@ -7,9 +7,6 @@
/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General
Public Licence. */
#ifdef MODULE
#define EXPORT_SYMTAB
#endif
#include <linux/types.h>
#include <linux/ip.h>
#include <linux/netfilter.h>
......
......@@ -7,9 +7,6 @@
/* (c) 1999 Paul `Rusty' Russell. Licenced under the GNU General
Public Licence. */
#ifdef MODULE
#define EXPORT_SYMTAB
#endif
#include <linux/types.h>
#include <linux/ip.h>
#include <linux/netfilter.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment