mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge commit 'v2.6.26' into bkl-removal
This commit is contained in:
commit
2fceef397f
1975 changed files with 41802 additions and 19667 deletions
|
|
@ -948,17 +948,17 @@ int __init cdebug_init(void)
|
|||
{
|
||||
g_cmsg= kmalloc(sizeof(_cmsg), GFP_KERNEL);
|
||||
if (!g_cmsg)
|
||||
return ENOMEM;
|
||||
return -ENOMEM;
|
||||
g_debbuf = kmalloc(sizeof(_cdebbuf), GFP_KERNEL);
|
||||
if (!g_debbuf) {
|
||||
kfree(g_cmsg);
|
||||
return ENOMEM;
|
||||
return -ENOMEM;
|
||||
}
|
||||
g_debbuf->buf = kmalloc(CDEBUG_GSIZE, GFP_KERNEL);
|
||||
if (!g_debbuf->buf) {
|
||||
kfree(g_cmsg);
|
||||
kfree(g_debbuf);
|
||||
return ENOMEM;;
|
||||
return -ENOMEM;;
|
||||
}
|
||||
g_debbuf->size = CDEBUG_GSIZE;
|
||||
g_debbuf->buf[0] = 0;
|
||||
|
|
|
|||
|
|
@ -808,7 +808,6 @@ static int DIVA_INIT_FUNCTION divas_init(void)
|
|||
|
||||
if (!create_divas_proc()) {
|
||||
#ifdef MODULE
|
||||
remove_divas_proc();
|
||||
divas_unregister_chrdev();
|
||||
divasfunc_exit();
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ static const struct file_operations divas_fops = {
|
|||
|
||||
int create_divas_proc(void)
|
||||
{
|
||||
proc_create(divas_proc_name, S_IFREG | S_IRUGO, proc_net_eicon,
|
||||
&divas_fops);
|
||||
divas_proc_entry = proc_create(divas_proc_name, S_IFREG | S_IRUGO,
|
||||
proc_net_eicon, &divas_fops);
|
||||
if (!divas_proc_entry)
|
||||
return (0);
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
config HYSDN
|
||||
tristate "Hypercope HYSDN cards (Champ, Ergo, Metro) support (module only)"
|
||||
depends on m && PROC_FS && PCI && BROKEN_ON_SMP
|
||||
depends on m && PROC_FS && PCI
|
||||
help
|
||||
Say Y here if you have one of Hypercope's active PCI ISDN cards
|
||||
Champ, Ergo and Metro. You will then get a module called hysdn.
|
||||
|
|
|
|||
|
|
@ -64,10 +64,11 @@ ergo_interrupt(int intno, void *dev_id)
|
|||
} /* ergo_interrupt */
|
||||
|
||||
/******************************************************************************/
|
||||
/* ergo_irq_bh is the function called by the immediate kernel task list after */
|
||||
/* being activated with queue_task and no interrupts active. This task is the */
|
||||
/* only one handling data transfer from or to the card after booting. The task */
|
||||
/* may be queued from everywhere (interrupts included). */
|
||||
/* ergo_irq_bh will be called as part of the kernel clearing its shared work */
|
||||
/* queue sometime after a call to schedule_work has been made passing our */
|
||||
/* work_struct. This task is the only one handling data transfer from or to */
|
||||
/* the card after booting. The task may be queued from everywhere */
|
||||
/* (interrupts included). */
|
||||
/******************************************************************************/
|
||||
static void
|
||||
ergo_irq_bh(struct work_struct *ugli_api)
|
||||
|
|
@ -90,7 +91,6 @@ ergo_irq_bh(struct work_struct *ugli_api)
|
|||
card->hw_lock = 1; /* we now lock the hardware */
|
||||
|
||||
do {
|
||||
sti(); /* reenable other ints */
|
||||
again = 0; /* assume loop not to be repeated */
|
||||
|
||||
if (!dpr->ToHyFlag) {
|
||||
|
|
@ -110,7 +110,6 @@ ergo_irq_bh(struct work_struct *ugli_api)
|
|||
again = 1; /* restart loop */
|
||||
}
|
||||
} /* a message has arrived for us */
|
||||
cli(); /* no further ints */
|
||||
if (again) {
|
||||
dpr->ToHyInt = 1;
|
||||
dpr->ToPcInt = 1; /* interrupt to E1 for all cards */
|
||||
|
|
@ -242,7 +241,6 @@ ergo_writebootimg(struct HYSDN_CARD *card, unsigned char *buf,
|
|||
byteout(card->iobase + PCI9050_USER_IO, PCI9050_E1_RUN); /* start E1 processor */
|
||||
/* the interrupts are still masked */
|
||||
|
||||
sti();
|
||||
msleep_interruptible(20); /* Timeout 20ms */
|
||||
|
||||
if (((tDpramBootSpooler *) card->dpram)->Len != DPRAM_SPOOLER_DATA_SIZE) {
|
||||
|
|
@ -276,7 +274,6 @@ ergo_writebootseq(struct HYSDN_CARD *card, unsigned char *buf, int len)
|
|||
dst = sp->Data; /* point to data in spool structure */
|
||||
buflen = sp->Len; /* maximum len of spooled data */
|
||||
wr_mirror = sp->WrPtr; /* only once read */
|
||||
sti();
|
||||
|
||||
/* try until all bytes written or error */
|
||||
i = 0x1000; /* timeout value */
|
||||
|
|
@ -380,7 +377,6 @@ ergo_waitpofready(struct HYSDN_CARD *card)
|
|||
#endif /* CONFIG_HYSDN_CAPI */
|
||||
return (0); /* success */
|
||||
} /* data has arrived */
|
||||
sti();
|
||||
msleep_interruptible(50); /* Timeout 50ms */
|
||||
} /* wait until timeout */
|
||||
|
||||
|
|
|
|||
|
|
@ -462,11 +462,11 @@ static int hycapi_read_proc(char *page, char **start, off_t off,
|
|||
default: s = "???"; break;
|
||||
}
|
||||
len += sprintf(page+len, "%-16s %s\n", "type", s);
|
||||
if ((s = cinfo->version[VER_DRIVER]) != 0)
|
||||
if ((s = cinfo->version[VER_DRIVER]) != NULL)
|
||||
len += sprintf(page+len, "%-16s %s\n", "ver_driver", s);
|
||||
if ((s = cinfo->version[VER_CARDTYPE]) != 0)
|
||||
if ((s = cinfo->version[VER_CARDTYPE]) != NULL)
|
||||
len += sprintf(page+len, "%-16s %s\n", "ver_cardtype", s);
|
||||
if ((s = cinfo->version[VER_SERIAL]) != 0)
|
||||
if ((s = cinfo->version[VER_SERIAL]) != NULL)
|
||||
len += sprintf(page+len, "%-16s %s\n", "ver_serial", s);
|
||||
|
||||
len += sprintf(page+len, "%-16s %s\n", "cardname", cinfo->cardname);
|
||||
|
|
|
|||
|
|
@ -207,30 +207,17 @@ hysdn_conf_write(struct file *file, const char __user *buf, size_t count, loff_t
|
|||
/* read conf file -> output card info data */
|
||||
/*******************************************/
|
||||
static ssize_t
|
||||
hysdn_conf_read(struct file *file, char __user *buf, size_t count, loff_t * off)
|
||||
hysdn_conf_read(struct file *file, char __user *buf, size_t count, loff_t *off)
|
||||
{
|
||||
char *cp;
|
||||
int i;
|
||||
|
||||
if (file->f_mode & FMODE_READ) {
|
||||
if (!(cp = file->private_data))
|
||||
return (-EFAULT); /* should never happen */
|
||||
i = strlen(cp); /* get total string length */
|
||||
if (*off < i) {
|
||||
/* still bytes to transfer */
|
||||
cp += *off; /* point to desired data offset */
|
||||
i -= *off; /* remaining length */
|
||||
if (i > count)
|
||||
i = count; /* limit length to transfer */
|
||||
if (copy_to_user(buf, cp, i))
|
||||
return (-EFAULT); /* copy error */
|
||||
*off += i; /* adjust offset */
|
||||
} else
|
||||
return (0);
|
||||
} else
|
||||
return (-EPERM); /* no permission to read */
|
||||
if (!(file->f_mode & FMODE_READ))
|
||||
return -EPERM; /* no permission to read */
|
||||
|
||||
return (i);
|
||||
if (!(cp = file->private_data))
|
||||
return -EFAULT; /* should never happen */
|
||||
|
||||
return simple_read_from_buffer(buf, count, off, cp, strlen(cp));
|
||||
} /* hysdn_conf_read */
|
||||
|
||||
/******************/
|
||||
|
|
|
|||
|
|
@ -1978,8 +1978,10 @@ isdn_writebuf_stub(int drvidx, int chan, const u_char __user * buf, int len)
|
|||
if (!skb)
|
||||
return -ENOMEM;
|
||||
skb_reserve(skb, hl);
|
||||
if (copy_from_user(skb_put(skb, len), buf, len))
|
||||
if (copy_from_user(skb_put(skb, len), buf, len)) {
|
||||
dev_kfree_skb(skb);
|
||||
return -EFAULT;
|
||||
}
|
||||
ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx, chan, 1, skb);
|
||||
if (ret <= 0)
|
||||
dev_kfree_skb(skb);
|
||||
|
|
|
|||
|
|
@ -226,6 +226,7 @@ int sc_ioctl(int card, scs_ioctl *data)
|
|||
*/
|
||||
if (copy_from_user(spid, data->dataptr, SCIOC_SPIDSIZE)) {
|
||||
kfree(rcvmsg);
|
||||
kfree(spid);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue