diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-31 23:41:53 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-31 23:41:53 -0400 |
| commit | d6dd9e93c7531fa31370e27d053a3940d8d662fb (patch) | |
| tree | afab573031b3f0b9bbe5e417a890f7cae09a7224 /arch/mips/kernel/rtlx.c | |
| parent | dd9cd6d4351076c78bb8c0f9146d1904b481fdbb (diff) | |
| parent | b4b2917cc8babe8eaf4bc133bca31b11ed7dac13 (diff) | |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (50 commits)
[MIPS] Add smp_call_function_single()
[MIPS] thread_info.h: kmalloc + memset conversion to kzalloc
[MIPS] Kexec: Fix several 64-bit bugs.
[MIPS] Kexec: Fix several warnings.
[MIPS] DDB5477: Remove support
[MIPS] Fulong: Remove unneeded header file
[MIPS] Cobalt: Enable UART on RaQ1
[MIPS] Remove unused GROUP_TOSHIBA_NAMES
[MIPS] remove some duplicate includes
[MIPS] Oprofile: Fix rm9000 performance counter handler
[MIPS] Use -Werror on subdirectories which build cleanly.
[MIPS] Yosemite: Fix warning.
[MIPS] PMON: Fix cpustart declaration.
[MIPS] Yosemite: Only build ll_ht_smp_irq_handler() if HYPERTRANSPORT.
[MIPS] Yosemite: Fix build error due to undeclared titan_mailbox_irq().
[MIPS] Yosemite: Don't declare titan_mailbox_irq() as asmlinkage.
[MIPS] Yosemite: Fix warnings in i2c-yoesmite by deleting the unused code.
[MIPS] Delete unused arch/mips/gt64120/common/
[MIPS] Fix build warning in unaligned load/store emulator.
[MIPS] IP32: Don't ignore request_irq's return value.
...
Diffstat (limited to 'arch/mips/kernel/rtlx.c')
| -rw-r--r-- | arch/mips/kernel/rtlx.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/arch/mips/kernel/rtlx.c b/arch/mips/kernel/rtlx.c index 8cf24d716d41..aab89e97abb5 100644 --- a/arch/mips/kernel/rtlx.c +++ b/arch/mips/kernel/rtlx.c | |||
| @@ -40,12 +40,11 @@ | |||
| 40 | #include <asm/atomic.h> | 40 | #include <asm/atomic.h> |
| 41 | #include <asm/cpu.h> | 41 | #include <asm/cpu.h> |
| 42 | #include <asm/processor.h> | 42 | #include <asm/processor.h> |
| 43 | #include <asm/mips_mt.h> | ||
| 43 | #include <asm/system.h> | 44 | #include <asm/system.h> |
| 44 | #include <asm/vpe.h> | 45 | #include <asm/vpe.h> |
| 45 | #include <asm/rtlx.h> | 46 | #include <asm/rtlx.h> |
| 46 | 47 | ||
| 47 | #define RTLX_TARG_VPE 1 | ||
| 48 | |||
| 49 | static struct rtlx_info *rtlx; | 48 | static struct rtlx_info *rtlx; |
| 50 | static int major; | 49 | static int major; |
| 51 | static char module_name[] = "rtlx"; | 50 | static char module_name[] = "rtlx"; |
| @@ -165,10 +164,10 @@ int rtlx_open(int index, int can_sleep) | |||
| 165 | } | 164 | } |
| 166 | 165 | ||
| 167 | if (rtlx == NULL) { | 166 | if (rtlx == NULL) { |
| 168 | if( (p = vpe_get_shared(RTLX_TARG_VPE)) == NULL) { | 167 | if( (p = vpe_get_shared(tclimit)) == NULL) { |
| 169 | if (can_sleep) { | 168 | if (can_sleep) { |
| 170 | __wait_event_interruptible(channel_wqs[index].lx_queue, | 169 | __wait_event_interruptible(channel_wqs[index].lx_queue, |
| 171 | (p = vpe_get_shared(RTLX_TARG_VPE)), | 170 | (p = vpe_get_shared(tclimit)), |
| 172 | ret); | 171 | ret); |
| 173 | if (ret) | 172 | if (ret) |
| 174 | goto out_fail; | 173 | goto out_fail; |
| @@ -472,11 +471,24 @@ static int rtlx_irq_num = MIPS_CPU_IRQ_BASE + MIPS_CPU_RTLX_IRQ; | |||
| 472 | static char register_chrdev_failed[] __initdata = | 471 | static char register_chrdev_failed[] __initdata = |
| 473 | KERN_ERR "rtlx_module_init: unable to register device\n"; | 472 | KERN_ERR "rtlx_module_init: unable to register device\n"; |
| 474 | 473 | ||
| 475 | static int rtlx_module_init(void) | 474 | static int __init rtlx_module_init(void) |
| 476 | { | 475 | { |
| 477 | struct device *dev; | 476 | struct device *dev; |
| 478 | int i, err; | 477 | int i, err; |
| 479 | 478 | ||
| 479 | if (!cpu_has_mipsmt) { | ||
| 480 | printk("VPE loader: not a MIPS MT capable processor\n"); | ||
| 481 | return -ENODEV; | ||
| 482 | } | ||
| 483 | |||
| 484 | if (tclimit == 0) { | ||
| 485 | printk(KERN_WARNING "No TCs reserved for AP/SP, not " | ||
| 486 | "initializing RTLX.\nPass maxtcs=<n> argument as kernel " | ||
| 487 | "argument\n"); | ||
| 488 | |||
| 489 | return -ENODEV; | ||
| 490 | } | ||
| 491 | |||
| 480 | major = register_chrdev(0, module_name, &rtlx_fops); | 492 | major = register_chrdev(0, module_name, &rtlx_fops); |
| 481 | if (major < 0) { | 493 | if (major < 0) { |
| 482 | printk(register_chrdev_failed); | 494 | printk(register_chrdev_failed); |
| @@ -501,7 +513,7 @@ static int rtlx_module_init(void) | |||
| 501 | /* set up notifiers */ | 513 | /* set up notifiers */ |
| 502 | notify.start = starting; | 514 | notify.start = starting; |
| 503 | notify.stop = stopping; | 515 | notify.stop = stopping; |
| 504 | vpe_notify(RTLX_TARG_VPE, ¬ify); | 516 | vpe_notify(tclimit, ¬ify); |
| 505 | 517 | ||
| 506 | if (cpu_has_vint) | 518 | if (cpu_has_vint) |
| 507 | set_vi_handler(MIPS_CPU_RTLX_IRQ, rtlx_dispatch); | 519 | set_vi_handler(MIPS_CPU_RTLX_IRQ, rtlx_dispatch); |
