~ubuntu-branches/debian/wheezy/linux-2.6/wheezy

« back to all changes in this revision

Viewing changes to arch/mips/kernel/irq-rm9000.c

  • Committer: Bazaar Package Importer
  • Author(s): Ben Hutchings, Ben Hutchings, Aurelien Jarno
  • Date: 2011-06-07 12:14:05 UTC
  • mfrom: (43.1.9 sid)
  • Revision ID: james.westby@ubuntu.com-20110607121405-i3h1rd7nrnd2b73h
Tags: 2.6.39-2
[ Ben Hutchings ]
* [x86] Enable BACKLIGHT_APPLE, replacing BACKLIGHT_MBP_NVIDIA
  (Closes: #627492)
* cgroups: Disable memory resource controller by default. Allow it
  to be enabled using kernel parameter 'cgroup_enable=memory'.
* rt2800usb: Enable support for more USB devices including
  Linksys WUSB600N (Closes: #596626) (this change was accidentally
  omitted from 2.6.39-1)
* [x86] Remove Celeron from list of processors supporting PAE. Most
  'Celeron M' models do not.
* Update debconf template translations:
  - Swedish (Martin Bagge) (Closes: #628932)
  - French (David Prévot) (Closes: #628191)
* aufs: Update for 2.6.39 (Closes: #627837)
* Add stable 2.6.39.1, including:
  - ext4: dont set PageUptodate in ext4_end_bio()
  - pata_cmd64x: fix boot crash on parisc (Closes: #622997, #622745)
  - ext3: Fix fs corruption when make_indexed_dir() fails
  - netfilter: nf_ct_sip: validate Content-Length in TCP SIP messages
  - sctp: fix race between sctp_bind_addr_free() and
    sctp_bind_addr_conflict()
  - sctp: fix memory leak of the ASCONF queue when free asoc
  - md/bitmap: fix saving of events_cleared and other state
  - cdc_acm: Fix oops when Droids MuIn LCD is connected
  - cx88: Fix conversion from BKL to fine-grained locks (Closes: #619827)
  - keys: Set cred->user_ns in key_replace_session_keyring (CVE-2011-2184)
  - tmpfs: fix race between truncate and writepage
  - nfs41: Correct offset for LAYOUTCOMMIT
  - xen/mmu: fix a race window causing leave_mm BUG()
  - ext4: fix possible use-after-free in ext4_remove_li_request()
  For the complete list of changes, see:
   http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.39.1
* Bump ABI to 2
* netfilter: Enable IP_SET, IP_SET_BITMAP_IP, IP_SET_BITMAP_IPMAC,
  IP_SET_BITMAP_PORT, IP_SET_HASH_IP, IP_SET_HASH_IPPORT,
  IP_SET_HASH_IPPORTIP, IP_SET_HASH_IPPORTNET, IP_SET_HASH_NET,
  IP_SET_HASH_NETPORT, IP_SET_LIST_SET, NETFILTER_XT_SET as modules
  (Closes: #629401)

[ Aurelien Jarno ]
* [mipsel/loongson-2f] Disable_SCSI_LPFC to workaround GCC ICE.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#include <asm/mipsregs.h>
20
20
#include <asm/system.h>
21
21
 
22
 
static inline void unmask_rm9k_irq(unsigned int irq)
23
 
{
24
 
        set_c0_intcontrol(0x1000 << (irq - RM9K_CPU_IRQ_BASE));
25
 
}
26
 
 
27
 
static inline void mask_rm9k_irq(unsigned int irq)
28
 
{
29
 
        clear_c0_intcontrol(0x1000 << (irq - RM9K_CPU_IRQ_BASE));
30
 
}
31
 
 
32
 
static inline void rm9k_cpu_irq_enable(unsigned int irq)
 
22
static inline void unmask_rm9k_irq(struct irq_data *d)
 
23
{
 
24
        set_c0_intcontrol(0x1000 << (d->irq - RM9K_CPU_IRQ_BASE));
 
25
}
 
26
 
 
27
static inline void mask_rm9k_irq(struct irq_data *d)
 
28
{
 
29
        clear_c0_intcontrol(0x1000 << (d->irq - RM9K_CPU_IRQ_BASE));
 
30
}
 
31
 
 
32
static inline void rm9k_cpu_irq_enable(struct irq_data *d)
33
33
{
34
34
        unsigned long flags;
35
35
 
36
36
        local_irq_save(flags);
37
 
        unmask_rm9k_irq(irq);
 
37
        unmask_rm9k_irq(d);
38
38
        local_irq_restore(flags);
39
39
}
40
40
 
43
43
 */
44
44
static void local_rm9k_perfcounter_irq_startup(void *args)
45
45
{
46
 
        unsigned int irq = (unsigned int) args;
47
 
 
48
 
        rm9k_cpu_irq_enable(irq);
 
46
        rm9k_cpu_irq_enable(args);
49
47
}
50
48
 
51
 
static unsigned int rm9k_perfcounter_irq_startup(unsigned int irq)
 
49
static unsigned int rm9k_perfcounter_irq_startup(struct irq_data *d)
52
50
{
53
 
        on_each_cpu(local_rm9k_perfcounter_irq_startup, (void *) irq, 1);
 
51
        on_each_cpu(local_rm9k_perfcounter_irq_startup, d, 1);
54
52
 
55
53
        return 0;
56
54
}
57
55
 
58
56
static void local_rm9k_perfcounter_irq_shutdown(void *args)
59
57
{
60
 
        unsigned int irq = (unsigned int) args;
61
58
        unsigned long flags;
62
59
 
63
60
        local_irq_save(flags);
64
 
        mask_rm9k_irq(irq);
 
61
        mask_rm9k_irq(args);
65
62
        local_irq_restore(flags);
66
63
}
67
64
 
68
 
static void rm9k_perfcounter_irq_shutdown(unsigned int irq)
 
65
static void rm9k_perfcounter_irq_shutdown(struct irq_data *d)
69
66
{
70
 
        on_each_cpu(local_rm9k_perfcounter_irq_shutdown, (void *) irq, 1);
 
67
        on_each_cpu(local_rm9k_perfcounter_irq_shutdown, d, 1);
71
68
}
72
69
 
73
70
static struct irq_chip rm9k_irq_controller = {
74
71
        .name = "RM9000",
75
 
        .ack = mask_rm9k_irq,
76
 
        .mask = mask_rm9k_irq,
77
 
        .mask_ack = mask_rm9k_irq,
78
 
        .unmask = unmask_rm9k_irq,
79
 
        .eoi    = unmask_rm9k_irq
 
72
        .irq_ack = mask_rm9k_irq,
 
73
        .irq_mask = mask_rm9k_irq,
 
74
        .irq_mask_ack = mask_rm9k_irq,
 
75
        .irq_unmask = unmask_rm9k_irq,
 
76
        .irq_eoi = unmask_rm9k_irq
80
77
};
81
78
 
82
79
static struct irq_chip rm9k_perfcounter_irq = {
83
80
        .name = "RM9000",
84
 
        .startup = rm9k_perfcounter_irq_startup,
85
 
        .shutdown = rm9k_perfcounter_irq_shutdown,
86
 
        .ack = mask_rm9k_irq,
87
 
        .mask = mask_rm9k_irq,
88
 
        .mask_ack = mask_rm9k_irq,
89
 
        .unmask = unmask_rm9k_irq,
 
81
        .irq_startup = rm9k_perfcounter_irq_startup,
 
82
        .irq_shutdown = rm9k_perfcounter_irq_shutdown,
 
83
        .irq_ack = mask_rm9k_irq,
 
84
        .irq_mask = mask_rm9k_irq,
 
85
        .irq_mask_ack = mask_rm9k_irq,
 
86
        .irq_unmask = unmask_rm9k_irq,
90
87
};
91
88
 
92
89
unsigned int rm9000_perfcount_irq;
101
98
        clear_c0_intcontrol(0x0000f000);                /* Mask all */
102
99
 
103
100
        for (i = base; i < base + 4; i++)
104
 
                set_irq_chip_and_handler(i, &rm9k_irq_controller,
 
101
                irq_set_chip_and_handler(i, &rm9k_irq_controller,
105
102
                                         handle_level_irq);
106
103
 
107
104
        rm9000_perfcount_irq = base + 1;
108
 
        set_irq_chip_and_handler(rm9000_perfcount_irq, &rm9k_perfcounter_irq,
 
105
        irq_set_chip_and_handler(rm9000_perfcount_irq, &rm9k_perfcounter_irq,
109
106
                                 handle_percpu_irq);
110
107
}