diff options
author | James Bottomley <jejb@titanic.(none)> | 2005-08-09 17:20:49 -0400 |
---|---|---|
committer | James Bottomley <jejb@titanic.(none)> | 2005-08-09 17:20:49 -0400 |
commit | 471417c9cfb4c2574e2c03bf2273fe12f5388a8e (patch) | |
tree | ac026ba976bc253fc87a5cdec8f33d24d03e1c9c | |
parent | 20e007b8cc1266ff78810457d6e26c35c6b810ba (diff) | |
parent | db29e85a7ece62de1899917c1ec0ffe55cf1d3a0 (diff) |
Merge ../linux-2.6
80 files changed, 1988 insertions, 1160 deletions
@@ -2380,8 +2380,8 @@ E: tmolina@cablespeed.com | |||
2380 | D: bug fixes, documentation, minor hackery | 2380 | D: bug fixes, documentation, minor hackery |
2381 | 2381 | ||
2382 | N: James Morris | 2382 | N: James Morris |
2383 | E: jmorris@redhat.com | 2383 | E: jmorris@namei.org |
2384 | W: http://www.intercode.com.au/jmorris/ | 2384 | W: http://namei.org/ |
2385 | D: Netfilter, Linux Security Modules (LSM), SELinux, IPSec, | 2385 | D: Netfilter, Linux Security Modules (LSM), SELinux, IPSec, |
2386 | D: Crypto API, general networking, miscellaneous. | 2386 | D: Crypto API, general networking, miscellaneous. |
2387 | S: PO Box 707 | 2387 | S: PO Box 707 |
diff --git a/Documentation/x86_64/boot-options.txt b/Documentation/x86_64/boot-options.txt index 476c0c22fbb7..678e8f192db2 100644 --- a/Documentation/x86_64/boot-options.txt +++ b/Documentation/x86_64/boot-options.txt | |||
@@ -6,6 +6,11 @@ only the AMD64 specific ones are listed here. | |||
6 | Machine check | 6 | Machine check |
7 | 7 | ||
8 | mce=off disable machine check | 8 | mce=off disable machine check |
9 | mce=bootlog Enable logging of machine checks left over from booting. | ||
10 | Disabled by default because some BIOS leave bogus ones. | ||
11 | If your BIOS doesn't do that it's a good idea to enable though | ||
12 | to make sure you log even machine check events that result | ||
13 | in a reboot. | ||
9 | 14 | ||
10 | nomce (for compatibility with i386): same as mce=off | 15 | nomce (for compatibility with i386): same as mce=off |
11 | 16 | ||
diff --git a/MAINTAINERS b/MAINTAINERS index c31ddc4bcdd6..5fd00c075053 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -1658,7 +1658,7 @@ M: kuznet@ms2.inr.ac.ru | |||
1658 | P: Pekka Savola (ipv6) | 1658 | P: Pekka Savola (ipv6) |
1659 | M: pekkas@netcore.fi | 1659 | M: pekkas@netcore.fi |
1660 | P: James Morris | 1660 | P: James Morris |
1661 | M: jmorris@redhat.com | 1661 | M: jmorris@namei.org |
1662 | P: Hideaki YOSHIFUJI | 1662 | P: Hideaki YOSHIFUJI |
1663 | M: yoshfuji@linux-ipv6.org | 1663 | M: yoshfuji@linux-ipv6.org |
1664 | P: Patrick McHardy | 1664 | P: Patrick McHardy |
@@ -2047,7 +2047,7 @@ SELINUX SECURITY MODULE | |||
2047 | P: Stephen Smalley | 2047 | P: Stephen Smalley |
2048 | M: sds@epoch.ncsc.mil | 2048 | M: sds@epoch.ncsc.mil |
2049 | P: James Morris | 2049 | P: James Morris |
2050 | M: jmorris@redhat.com | 2050 | M: jmorris@namei.org |
2051 | L: linux-kernel@vger.kernel.org (kernel issues) | 2051 | L: linux-kernel@vger.kernel.org (kernel issues) |
2052 | L: selinux@tycho.nsa.gov (general discussion) | 2052 | L: selinux@tycho.nsa.gov (general discussion) |
2053 | W: http://www.nsa.gov/selinux | 2053 | W: http://www.nsa.gov/selinux |
@@ -1,7 +1,7 @@ | |||
1 | VERSION = 2 | 1 | VERSION = 2 |
2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
3 | SUBLEVEL = 13 | 3 | SUBLEVEL = 13 |
4 | EXTRAVERSION =-rc5 | 4 | EXTRAVERSION =-rc6 |
5 | NAME=Woozy Numbat | 5 | NAME=Woozy Numbat |
6 | 6 | ||
7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/i386/mach-visws/reboot.c b/arch/i386/mach-visws/reboot.c index 9e9296676f93..5d73e042ed0a 100644 --- a/arch/i386/mach-visws/reboot.c +++ b/arch/i386/mach-visws/reboot.c | |||
@@ -9,12 +9,15 @@ | |||
9 | void (*pm_power_off)(void); | 9 | void (*pm_power_off)(void); |
10 | EXPORT_SYMBOL(pm_power_off); | 10 | EXPORT_SYMBOL(pm_power_off); |
11 | 11 | ||
12 | void machine_restart(char * __unused) | 12 | void machine_shutdown(void) |
13 | { | 13 | { |
14 | #ifdef CONFIG_SMP | 14 | #ifdef CONFIG_SMP |
15 | smp_send_stop(); | 15 | smp_send_stop(); |
16 | #endif | 16 | #endif |
17 | } | ||
17 | 18 | ||
19 | void machine_emergency_restart(void) | ||
20 | { | ||
18 | /* | 21 | /* |
19 | * Visual Workstations restart after this | 22 | * Visual Workstations restart after this |
20 | * register is poked on the PIIX4 | 23 | * register is poked on the PIIX4 |
@@ -22,6 +25,12 @@ void machine_restart(char * __unused) | |||
22 | outb(PIIX4_RESET_VAL, PIIX4_RESET_PORT); | 25 | outb(PIIX4_RESET_VAL, PIIX4_RESET_PORT); |
23 | } | 26 | } |
24 | 27 | ||
28 | void machine_restart(char * __unused) | ||
29 | { | ||
30 | machine_shutdown(); | ||
31 | machine_emergency_restart(); | ||
32 | } | ||
33 | |||
25 | void machine_power_off(void) | 34 | void machine_power_off(void) |
26 | { | 35 | { |
27 | unsigned short pm_status; | 36 | unsigned short pm_status; |
diff --git a/arch/i386/mach-visws/setup.c b/arch/i386/mach-visws/setup.c index 9f6d2d9b1be7..26ada6fc0d77 100644 --- a/arch/i386/mach-visws/setup.c +++ b/arch/i386/mach-visws/setup.c | |||
@@ -14,6 +14,8 @@ | |||
14 | #include "cobalt.h" | 14 | #include "cobalt.h" |
15 | #include "piix4.h" | 15 | #include "piix4.h" |
16 | 16 | ||
17 | int no_broadcast; | ||
18 | |||
17 | char visws_board_type = -1; | 19 | char visws_board_type = -1; |
18 | char visws_board_rev = -1; | 20 | char visws_board_rev = -1; |
19 | 21 | ||
diff --git a/arch/i386/mach-voyager/voyager_basic.c b/arch/i386/mach-voyager/voyager_basic.c index 62d0d9bf3fc0..c6384061328a 100644 --- a/arch/i386/mach-voyager/voyager_basic.c +++ b/arch/i386/mach-voyager/voyager_basic.c | |||
@@ -252,6 +252,12 @@ kb_wait(void) | |||
252 | } | 252 | } |
253 | 253 | ||
254 | void | 254 | void |
255 | machine_shutdown(void) | ||
256 | { | ||
257 | /* Architecture specific shutdown needed before a kexec */ | ||
258 | } | ||
259 | |||
260 | void | ||
255 | machine_restart(char *cmd) | 261 | machine_restart(char *cmd) |
256 | { | 262 | { |
257 | printk("Voyager Warm Restart\n"); | 263 | printk("Voyager Warm Restart\n"); |
diff --git a/arch/i386/mm/discontig.c b/arch/i386/mm/discontig.c index c369a8bf7cbe..6711ce3f6916 100644 --- a/arch/i386/mm/discontig.c +++ b/arch/i386/mm/discontig.c | |||
@@ -243,14 +243,6 @@ static unsigned long calculate_numa_remap_pages(void) | |||
243 | /* now the roundup is correct, convert to PAGE_SIZE pages */ | 243 | /* now the roundup is correct, convert to PAGE_SIZE pages */ |
244 | size = size * PTRS_PER_PTE; | 244 | size = size * PTRS_PER_PTE; |
245 | 245 | ||
246 | if (node_end_pfn[nid] & (PTRS_PER_PTE-1)) { | ||
247 | /* | ||
248 | * Adjust size if node_end_pfn is not on a proper | ||
249 | * pmd boundary. remap_numa_kva will barf otherwise. | ||
250 | */ | ||
251 | size += node_end_pfn[nid] & (PTRS_PER_PTE-1); | ||
252 | } | ||
253 | |||
254 | /* | 246 | /* |
255 | * Validate the region we are allocating only contains valid | 247 | * Validate the region we are allocating only contains valid |
256 | * pages. | 248 | * pages. |
@@ -270,6 +262,17 @@ static unsigned long calculate_numa_remap_pages(void) | |||
270 | reserve_pages += size; | 262 | reserve_pages += size; |
271 | printk("Shrinking node %d from %ld pages to %ld pages\n", | 263 | printk("Shrinking node %d from %ld pages to %ld pages\n", |
272 | nid, node_end_pfn[nid], node_end_pfn[nid] - size); | 264 | nid, node_end_pfn[nid], node_end_pfn[nid] - size); |
265 | |||
266 | if (node_end_pfn[nid] & (PTRS_PER_PTE-1)) { | ||
267 | /* | ||
268 | * Align node_end_pfn[] and node_remap_start_pfn[] to | ||
269 | * pmd boundary. remap_numa_kva will barf otherwise. | ||
270 | */ | ||
271 | printk("Shrinking node %d further by %ld pages for proper alignment\n", | ||
272 | nid, node_end_pfn[nid] & (PTRS_PER_PTE-1)); | ||
273 | size += node_end_pfn[nid] & (PTRS_PER_PTE-1); | ||
274 | } | ||
275 | |||
273 | node_end_pfn[nid] -= size; | 276 | node_end_pfn[nid] -= size; |
274 | node_remap_start_pfn[nid] = node_end_pfn[nid]; | 277 | node_remap_start_pfn[nid] = node_end_pfn[nid]; |
275 | } | 278 | } |
diff --git a/arch/i386/pci/visws.c b/arch/i386/pci/visws.c index 314c933b6b8e..6c17433fdf7d 100644 --- a/arch/i386/pci/visws.c +++ b/arch/i386/pci/visws.c | |||
@@ -18,8 +18,10 @@ | |||
18 | extern struct pci_raw_ops pci_direct_conf1; | 18 | extern struct pci_raw_ops pci_direct_conf1; |
19 | 19 | ||
20 | static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; } | 20 | static int pci_visws_enable_irq(struct pci_dev *dev) { return 0; } |
21 | static void pci_visws_disable_irq(struct pci_dev *dev) { } | ||
21 | 22 | ||
22 | int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq; | 23 | int (*pcibios_enable_irq)(struct pci_dev *dev) = &pci_visws_enable_irq; |
24 | void (*pcibios_disable_irq)(struct pci_dev *dev) = &pci_visws_disable_irq; | ||
23 | 25 | ||
24 | void __init pcibios_penalize_isa_irq(int irq, int active) {} | 26 | void __init pcibios_penalize_isa_irq(int irq, int active) {} |
25 | 27 | ||
diff --git a/arch/ppc/8xx_io/Kconfig b/arch/ppc/8xx_io/Kconfig index 9e2227ec3b34..57dacf978532 100644 --- a/arch/ppc/8xx_io/Kconfig +++ b/arch/ppc/8xx_io/Kconfig | |||
@@ -69,9 +69,9 @@ config FEC_QS6612 | |||
69 | 69 | ||
70 | config ENET_BIG_BUFFERS | 70 | config ENET_BIG_BUFFERS |
71 | bool "Use Big CPM Ethernet Buffers" | 71 | bool "Use Big CPM Ethernet Buffers" |
72 | depends on NET_ETHERNET | 72 | depends on SCC_ENET || FEC_ENET |
73 | help | 73 | help |
74 | Allocate large buffers for MPC8xx Etherenet. Increases throughput | 74 | Allocate large buffers for MPC8xx Ethernet. Increases throughput |
75 | and decreases the likelihood of dropped packets, but costs memory. | 75 | and decreases the likelihood of dropped packets, but costs memory. |
76 | 76 | ||
77 | config HTDMSOUND | 77 | config HTDMSOUND |
diff --git a/arch/ppc/8xx_io/commproc.c b/arch/ppc/8xx_io/commproc.c index 0cc2e7a9cb11..11726e2a4ec8 100644 --- a/arch/ppc/8xx_io/commproc.c +++ b/arch/ppc/8xx_io/commproc.c | |||
@@ -39,8 +39,6 @@ | |||
39 | #include <asm/tlbflush.h> | 39 | #include <asm/tlbflush.h> |
40 | #include <asm/rheap.h> | 40 | #include <asm/rheap.h> |
41 | 41 | ||
42 | extern int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep); | ||
43 | |||
44 | static void m8xx_cpm_dpinit(void); | 42 | static void m8xx_cpm_dpinit(void); |
45 | static uint host_buffer; /* One page of host buffer */ | 43 | static uint host_buffer; /* One page of host buffer */ |
46 | static uint host_end; /* end + 1 */ | 44 | static uint host_end; /* end + 1 */ |
@@ -108,14 +106,11 @@ struct hw_interrupt_type cpm_pic = { | |||
108 | .end = cpm_eoi, | 106 | .end = cpm_eoi, |
109 | }; | 107 | }; |
110 | 108 | ||
111 | extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); | ||
112 | |||
113 | void | 109 | void |
114 | m8xx_cpm_reset(uint bootpage) | 110 | m8xx_cpm_reset(void) |
115 | { | 111 | { |
116 | volatile immap_t *imp; | 112 | volatile immap_t *imp; |
117 | volatile cpm8xx_t *commproc; | 113 | volatile cpm8xx_t *commproc; |
118 | pte_t *pte; | ||
119 | 114 | ||
120 | imp = (immap_t *)IMAP_ADDR; | 115 | imp = (immap_t *)IMAP_ADDR; |
121 | commproc = (cpm8xx_t *)&imp->im_cpm; | 116 | commproc = (cpm8xx_t *)&imp->im_cpm; |
@@ -143,17 +138,6 @@ m8xx_cpm_reset(uint bootpage) | |||
143 | /* Reclaim the DP memory for our use. */ | 138 | /* Reclaim the DP memory for our use. */ |
144 | m8xx_cpm_dpinit(); | 139 | m8xx_cpm_dpinit(); |
145 | 140 | ||
146 | /* get the PTE for the bootpage */ | ||
147 | if (!get_pteptr(&init_mm, bootpage, &pte)) | ||
148 | panic("get_pteptr failed\n"); | ||
149 | |||
150 | /* and make it uncachable */ | ||
151 | pte_val(*pte) |= _PAGE_NO_CACHE; | ||
152 | _tlbie(bootpage); | ||
153 | |||
154 | host_buffer = bootpage; | ||
155 | host_end = host_buffer + PAGE_SIZE; | ||
156 | |||
157 | /* Tell everyone where the comm processor resides. | 141 | /* Tell everyone where the comm processor resides. |
158 | */ | 142 | */ |
159 | cpmp = (cpm8xx_t *)commproc; | 143 | cpmp = (cpm8xx_t *)commproc; |
@@ -384,8 +368,6 @@ static rh_info_t cpm_dpmem_info; | |||
384 | 368 | ||
385 | void m8xx_cpm_dpinit(void) | 369 | void m8xx_cpm_dpinit(void) |
386 | { | 370 | { |
387 | cpm8xx_t *cp = &((immap_t *)IMAP_ADDR)->im_cpm; | ||
388 | |||
389 | spin_lock_init(&cpm_dpmem_lock); | 371 | spin_lock_init(&cpm_dpmem_lock); |
390 | 372 | ||
391 | /* Initialize the info header */ | 373 | /* Initialize the info header */ |
diff --git a/arch/ppc/8xx_io/fec.c b/arch/ppc/8xx_io/fec.c index 0730392dcc20..62f68d6181c6 100644 --- a/arch/ppc/8xx_io/fec.c +++ b/arch/ppc/8xx_io/fec.c | |||
@@ -173,7 +173,7 @@ struct fec_enet_private { | |||
173 | uint phy_status; | 173 | uint phy_status; |
174 | uint phy_speed; | 174 | uint phy_speed; |
175 | phy_info_t *phy; | 175 | phy_info_t *phy; |
176 | struct tq_struct phy_task; | 176 | struct work_struct phy_task; |
177 | 177 | ||
178 | uint sequence_done; | 178 | uint sequence_done; |
179 | 179 | ||
@@ -199,7 +199,8 @@ static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev); | |||
199 | #ifdef CONFIG_USE_MDIO | 199 | #ifdef CONFIG_USE_MDIO |
200 | static void fec_enet_mii(struct net_device *dev); | 200 | static void fec_enet_mii(struct net_device *dev); |
201 | #endif /* CONFIG_USE_MDIO */ | 201 | #endif /* CONFIG_USE_MDIO */ |
202 | static void fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs); | 202 | static irqreturn_t fec_enet_interrupt(int irq, void * dev_id, |
203 | struct pt_regs * regs); | ||
203 | #ifdef CONFIG_FEC_PACKETHOOK | 204 | #ifdef CONFIG_FEC_PACKETHOOK |
204 | static void fec_enet_tx(struct net_device *dev, __u32 regval); | 205 | static void fec_enet_tx(struct net_device *dev, __u32 regval); |
205 | static void fec_enet_rx(struct net_device *dev, __u32 regval); | 206 | static void fec_enet_rx(struct net_device *dev, __u32 regval); |
@@ -471,7 +472,7 @@ fec_timeout(struct net_device *dev) | |||
471 | /* The interrupt handler. | 472 | /* The interrupt handler. |
472 | * This is called from the MPC core interrupt. | 473 | * This is called from the MPC core interrupt. |
473 | */ | 474 | */ |
474 | static void | 475 | static irqreturn_t |
475 | fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 476 | fec_enet_interrupt(int irq, void * dev_id, struct pt_regs * regs) |
476 | { | 477 | { |
477 | struct net_device *dev = dev_id; | 478 | struct net_device *dev = dev_id; |
@@ -525,6 +526,7 @@ printk("%s[%d] %s: unexpected FEC_ENET_MII event\n", __FILE__,__LINE__,__FUNCTIO | |||
525 | } | 526 | } |
526 | 527 | ||
527 | } | 528 | } |
529 | return IRQ_RETVAL(IRQ_HANDLED); | ||
528 | } | 530 | } |
529 | 531 | ||
530 | 532 | ||
@@ -1263,8 +1265,9 @@ static void mii_display_status(struct net_device *dev) | |||
1263 | printk(".\n"); | 1265 | printk(".\n"); |
1264 | } | 1266 | } |
1265 | 1267 | ||
1266 | static void mii_display_config(struct net_device *dev) | 1268 | static void mii_display_config(void *priv) |
1267 | { | 1269 | { |
1270 | struct net_device *dev = (struct net_device *)priv; | ||
1268 | struct fec_enet_private *fep = dev->priv; | 1271 | struct fec_enet_private *fep = dev->priv; |
1269 | volatile uint *s = &(fep->phy_status); | 1272 | volatile uint *s = &(fep->phy_status); |
1270 | 1273 | ||
@@ -1294,8 +1297,9 @@ static void mii_display_config(struct net_device *dev) | |||
1294 | fep->sequence_done = 1; | 1297 | fep->sequence_done = 1; |
1295 | } | 1298 | } |
1296 | 1299 | ||
1297 | static void mii_relink(struct net_device *dev) | 1300 | static void mii_relink(void *priv) |
1298 | { | 1301 | { |
1302 | struct net_device *dev = (struct net_device *)priv; | ||
1299 | struct fec_enet_private *fep = dev->priv; | 1303 | struct fec_enet_private *fep = dev->priv; |
1300 | int duplex; | 1304 | int duplex; |
1301 | 1305 | ||
@@ -1323,18 +1327,16 @@ static void mii_queue_relink(uint mii_reg, struct net_device *dev) | |||
1323 | { | 1327 | { |
1324 | struct fec_enet_private *fep = dev->priv; | 1328 | struct fec_enet_private *fep = dev->priv; |
1325 | 1329 | ||
1326 | fep->phy_task.routine = (void *)mii_relink; | 1330 | INIT_WORK(&fep->phy_task, mii_relink, (void *)dev); |
1327 | fep->phy_task.data = dev; | 1331 | schedule_work(&fep->phy_task); |
1328 | schedule_task(&fep->phy_task); | ||
1329 | } | 1332 | } |
1330 | 1333 | ||
1331 | static void mii_queue_config(uint mii_reg, struct net_device *dev) | 1334 | static void mii_queue_config(uint mii_reg, struct net_device *dev) |
1332 | { | 1335 | { |
1333 | struct fec_enet_private *fep = dev->priv; | 1336 | struct fec_enet_private *fep = dev->priv; |
1334 | 1337 | ||
1335 | fep->phy_task.routine = (void *)mii_display_config; | 1338 | INIT_WORK(&fep->phy_task, mii_display_config, (void *)dev); |
1336 | fep->phy_task.data = dev; | 1339 | schedule_work(&fep->phy_task); |
1337 | schedule_task(&fep->phy_task); | ||
1338 | } | 1340 | } |
1339 | 1341 | ||
1340 | 1342 | ||
@@ -1403,11 +1405,11 @@ mii_discover_phy(uint mii_reg, struct net_device *dev) | |||
1403 | 1405 | ||
1404 | /* This interrupt occurs when the PHY detects a link change. | 1406 | /* This interrupt occurs when the PHY detects a link change. |
1405 | */ | 1407 | */ |
1406 | static void | 1408 | static |
1407 | #ifdef CONFIG_RPXCLASSIC | 1409 | #ifdef CONFIG_RPXCLASSIC |
1408 | mii_link_interrupt(void *dev_id) | 1410 | void mii_link_interrupt(void *dev_id) |
1409 | #else | 1411 | #else |
1410 | mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs) | 1412 | irqreturn_t mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs) |
1411 | #endif | 1413 | #endif |
1412 | { | 1414 | { |
1413 | #ifdef CONFIG_USE_MDIO | 1415 | #ifdef CONFIG_USE_MDIO |
@@ -1440,6 +1442,9 @@ mii_link_interrupt(int irq, void * dev_id, struct pt_regs * regs) | |||
1440 | printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__,__LINE__,__FUNCTION__); | 1442 | printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__,__LINE__,__FUNCTION__); |
1441 | #endif /* CONFIG_USE_MDIO */ | 1443 | #endif /* CONFIG_USE_MDIO */ |
1442 | 1444 | ||
1445 | #ifndef CONFIG_RPXCLASSIC | ||
1446 | return IRQ_RETVAL(IRQ_HANDLED); | ||
1447 | #endif /* CONFIG_RPXCLASSIC */ | ||
1443 | } | 1448 | } |
1444 | 1449 | ||
1445 | static int | 1450 | static int |
@@ -1575,7 +1580,7 @@ static int __init fec_enet_init(void) | |||
1575 | struct fec_enet_private *fep; | 1580 | struct fec_enet_private *fep; |
1576 | int i, j, k, err; | 1581 | int i, j, k, err; |
1577 | unsigned char *eap, *iap, *ba; | 1582 | unsigned char *eap, *iap, *ba; |
1578 | unsigned long mem_addr; | 1583 | dma_addr_t mem_addr; |
1579 | volatile cbd_t *bdp; | 1584 | volatile cbd_t *bdp; |
1580 | cbd_t *cbd_base; | 1585 | cbd_t *cbd_base; |
1581 | volatile immap_t *immap; | 1586 | volatile immap_t *immap; |
@@ -1640,7 +1645,8 @@ static int __init fec_enet_init(void) | |||
1640 | printk("FEC initialization failed.\n"); | 1645 | printk("FEC initialization failed.\n"); |
1641 | return 1; | 1646 | return 1; |
1642 | } | 1647 | } |
1643 | cbd_base = (cbd_t *)consistent_alloc(GFP_KERNEL, PAGE_SIZE, &mem_addr); | 1648 | cbd_base = (cbd_t *)dma_alloc_coherent(dev->class_dev.dev, PAGE_SIZE, |
1649 | &mem_addr, GFP_KERNEL); | ||
1644 | 1650 | ||
1645 | /* Set receive and transmit descriptor base. | 1651 | /* Set receive and transmit descriptor base. |
1646 | */ | 1652 | */ |
@@ -1657,7 +1663,10 @@ static int __init fec_enet_init(void) | |||
1657 | 1663 | ||
1658 | /* Allocate a page. | 1664 | /* Allocate a page. |
1659 | */ | 1665 | */ |
1660 | ba = (unsigned char *)consistent_alloc(GFP_KERNEL, PAGE_SIZE, &mem_addr); | 1666 | ba = (unsigned char *)dma_alloc_coherent(dev->class_dev.dev, |
1667 | PAGE_SIZE, | ||
1668 | &mem_addr, | ||
1669 | GFP_KERNEL); | ||
1661 | /* BUG: no check for failure */ | 1670 | /* BUG: no check for failure */ |
1662 | 1671 | ||
1663 | /* Initialize the BD for every fragment in the page. | 1672 | /* Initialize the BD for every fragment in the page. |
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c index d59ad07de8e7..e7d40cc6c1b6 100644 --- a/arch/ppc/kernel/ppc_ksyms.c +++ b/arch/ppc/kernel/ppc_ksyms.c | |||
@@ -324,7 +324,7 @@ EXPORT_SYMBOL(__res); | |||
324 | 324 | ||
325 | EXPORT_SYMBOL(next_mmu_context); | 325 | EXPORT_SYMBOL(next_mmu_context); |
326 | EXPORT_SYMBOL(set_context); | 326 | EXPORT_SYMBOL(set_context); |
327 | EXPORT_SYMBOL(handle_mm_fault); /* For MOL */ | 327 | EXPORT_SYMBOL_GPL(__handle_mm_fault); /* For MOL */ |
328 | EXPORT_SYMBOL(disarm_decr); | 328 | EXPORT_SYMBOL(disarm_decr); |
329 | #ifdef CONFIG_PPC_STD_MMU | 329 | #ifdef CONFIG_PPC_STD_MMU |
330 | extern long mol_trampoline; | 330 | extern long mol_trampoline; |
diff --git a/arch/ppc/syslib/m8xx_setup.c b/arch/ppc/syslib/m8xx_setup.c index c1db2ab1d154..55a381af4e37 100644 --- a/arch/ppc/syslib/m8xx_setup.c +++ b/arch/ppc/syslib/m8xx_setup.c | |||
@@ -57,7 +57,7 @@ unsigned char __res[sizeof(bd_t)]; | |||
57 | extern void m8xx_ide_init(void); | 57 | extern void m8xx_ide_init(void); |
58 | 58 | ||
59 | extern unsigned long find_available_memory(void); | 59 | extern unsigned long find_available_memory(void); |
60 | extern void m8xx_cpm_reset(uint cpm_page); | 60 | extern void m8xx_cpm_reset(); |
61 | extern void m8xx_wdt_handler_install(bd_t *bp); | 61 | extern void m8xx_wdt_handler_install(bd_t *bp); |
62 | extern void rpxfb_alloc_pages(void); | 62 | extern void rpxfb_alloc_pages(void); |
63 | extern void cpm_interrupt_init(void); | 63 | extern void cpm_interrupt_init(void); |
@@ -70,13 +70,9 @@ board_init(void) | |||
70 | void __init | 70 | void __init |
71 | m8xx_setup_arch(void) | 71 | m8xx_setup_arch(void) |
72 | { | 72 | { |
73 | int cpm_page; | ||
74 | |||
75 | cpm_page = (int) alloc_bootmem_pages(PAGE_SIZE); | ||
76 | |||
77 | /* Reset the Communication Processor Module. | 73 | /* Reset the Communication Processor Module. |
78 | */ | 74 | */ |
79 | m8xx_cpm_reset(cpm_page); | 75 | m8xx_cpm_reset(); |
80 | 76 | ||
81 | #ifdef CONFIG_FB_RPX | 77 | #ifdef CONFIG_FB_RPX |
82 | rpxfb_alloc_pages(); | 78 | rpxfb_alloc_pages(); |
diff --git a/arch/ppc/syslib/mpc83xx_devices.c b/arch/ppc/syslib/mpc83xx_devices.c index 75c8e9834ae7..5aaf0e58e1f9 100644 --- a/arch/ppc/syslib/mpc83xx_devices.c +++ b/arch/ppc/syslib/mpc83xx_devices.c | |||
@@ -191,8 +191,8 @@ struct platform_device ppc_sys_platform_devices[] = { | |||
191 | .num_resources = 2, | 191 | .num_resources = 2, |
192 | .resource = (struct resource[]) { | 192 | .resource = (struct resource[]) { |
193 | { | 193 | { |
194 | .start = 0x22000, | 194 | .start = 0x23000, |
195 | .end = 0x22fff, | 195 | .end = 0x23fff, |
196 | .flags = IORESOURCE_MEM, | 196 | .flags = IORESOURCE_MEM, |
197 | }, | 197 | }, |
198 | { | 198 | { |
@@ -208,8 +208,8 @@ struct platform_device ppc_sys_platform_devices[] = { | |||
208 | .num_resources = 2, | 208 | .num_resources = 2, |
209 | .resource = (struct resource[]) { | 209 | .resource = (struct resource[]) { |
210 | { | 210 | { |
211 | .start = 0x23000, | 211 | .start = 0x22000, |
212 | .end = 0x23fff, | 212 | .end = 0x22fff, |
213 | .flags = IORESOURCE_MEM, | 213 | .flags = IORESOURCE_MEM, |
214 | }, | 214 | }, |
215 | { | 215 | { |
diff --git a/arch/ppc64/configs/bpa_defconfig b/arch/ppc64/configs/bpa_defconfig new file mode 100644 index 000000000000..46c5da41c3ae --- /dev/null +++ b/arch/ppc64/configs/bpa_defconfig | |||
@@ -0,0 +1,987 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.13-rc6 | ||
4 | # Mon Aug 8 14:12:19 2005 | ||
5 | # | ||
6 | CONFIG_64BIT=y | ||
7 | CONFIG_MMU=y | ||
8 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
9 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
10 | CONFIG_GENERIC_ISA_DMA=y | ||
11 | CONFIG_HAVE_DEC_LOCK=y | ||
12 | CONFIG_EARLY_PRINTK=y | ||
13 | CONFIG_COMPAT=y | ||
14 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | ||
15 | CONFIG_FORCE_MAX_ZONEORDER=13 | ||
16 | |||
17 | # | ||
18 | # Code maturity level options | ||
19 | # | ||
20 | CONFIG_EXPERIMENTAL=y | ||
21 | CONFIG_CLEAN_COMPILE=y | ||
22 | CONFIG_LOCK_KERNEL=y | ||
23 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
24 | |||
25 | # | ||
26 | # General setup | ||
27 | # | ||
28 | CONFIG_LOCALVERSION="" | ||
29 | CONFIG_SWAP=y | ||
30 | CONFIG_SYSVIPC=y | ||
31 | # CONFIG_POSIX_MQUEUE is not set | ||
32 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
33 | CONFIG_SYSCTL=y | ||
34 | # CONFIG_AUDIT is not set | ||
35 | CONFIG_HOTPLUG=y | ||
36 | CONFIG_KOBJECT_UEVENT=y | ||
37 | # CONFIG_IKCONFIG is not set | ||
38 | # CONFIG_CPUSETS is not set | ||
39 | # CONFIG_EMBEDDED is not set | ||
40 | CONFIG_KALLSYMS=y | ||
41 | # CONFIG_KALLSYMS_ALL is not set | ||
42 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
43 | CONFIG_PRINTK=y | ||
44 | CONFIG_BUG=y | ||
45 | CONFIG_BASE_FULL=y | ||
46 | CONFIG_FUTEX=y | ||
47 | CONFIG_EPOLL=y | ||
48 | CONFIG_SHMEM=y | ||
49 | CONFIG_CC_ALIGN_FUNCTIONS=0 | ||
50 | CONFIG_CC_ALIGN_LABELS=0 | ||
51 | CONFIG_CC_ALIGN_LOOPS=0 | ||
52 | CONFIG_CC_ALIGN_JUMPS=0 | ||
53 | # CONFIG_TINY_SHMEM is not set | ||
54 | CONFIG_BASE_SMALL=0 | ||
55 | |||
56 | # | ||
57 | # Loadable module support | ||
58 | # | ||
59 | CONFIG_MODULES=y | ||
60 | CONFIG_MODULE_UNLOAD=y | ||
61 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
62 | CONFIG_OBSOLETE_MODPARM=y | ||
63 | # CONFIG_MODVERSIONS is not set | ||
64 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
65 | # CONFIG_KMOD is not set | ||
66 | CONFIG_STOP_MACHINE=y | ||
67 | CONFIG_SYSVIPC_COMPAT=y | ||
68 | |||
69 | # | ||
70 | # Platform support | ||
71 | # | ||
72 | # CONFIG_PPC_ISERIES is not set | ||
73 | CONFIG_PPC_MULTIPLATFORM=y | ||
74 | # CONFIG_PPC_PSERIES is not set | ||
75 | CONFIG_PPC_BPA=y | ||
76 | # CONFIG_PPC_PMAC is not set | ||
77 | # CONFIG_PPC_MAPLE is not set | ||
78 | CONFIG_PPC=y | ||
79 | CONFIG_PPC64=y | ||
80 | CONFIG_PPC_OF=y | ||
81 | CONFIG_BPA_IIC=y | ||
82 | CONFIG_ALTIVEC=y | ||
83 | CONFIG_KEXEC=y | ||
84 | # CONFIG_U3_DART is not set | ||
85 | # CONFIG_BOOTX_TEXT is not set | ||
86 | # CONFIG_POWER4_ONLY is not set | ||
87 | # CONFIG_IOMMU_VMERGE is not set | ||
88 | CONFIG_SMP=y | ||
89 | CONFIG_NR_CPUS=4 | ||
90 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
91 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
92 | CONFIG_SELECT_MEMORY_MODEL=y | ||
93 | CONFIG_FLATMEM_MANUAL=y | ||
94 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
95 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
96 | CONFIG_FLATMEM=y | ||
97 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
98 | # CONFIG_NUMA is not set | ||
99 | CONFIG_SCHED_SMT=y | ||
100 | CONFIG_PREEMPT_NONE=y | ||
101 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
102 | # CONFIG_PREEMPT is not set | ||
103 | CONFIG_PREEMPT_BKL=y | ||
104 | # CONFIG_HZ_100 is not set | ||
105 | CONFIG_HZ_250=y | ||
106 | # CONFIG_HZ_1000 is not set | ||
107 | CONFIG_HZ=250 | ||
108 | CONFIG_GENERIC_HARDIRQS=y | ||
109 | CONFIG_PPC_RTAS=y | ||
110 | CONFIG_RTAS_PROC=y | ||
111 | CONFIG_RTAS_FLASH=y | ||
112 | CONFIG_SECCOMP=y | ||
113 | CONFIG_ISA_DMA_API=y | ||
114 | |||
115 | # | ||
116 | # General setup | ||
117 | # | ||
118 | CONFIG_PCI=y | ||
119 | CONFIG_PCI_DOMAINS=y | ||
120 | CONFIG_BINFMT_ELF=y | ||
121 | # CONFIG_BINFMT_MISC is not set | ||
122 | CONFIG_PCI_LEGACY_PROC=y | ||
123 | CONFIG_PCI_NAMES=y | ||
124 | # CONFIG_PCI_DEBUG is not set | ||
125 | |||
126 | # | ||
127 | # PCCARD (PCMCIA/CardBus) support | ||
128 | # | ||
129 | # CONFIG_PCCARD is not set | ||
130 | |||
131 | # | ||
132 | # PCI Hotplug Support | ||
133 | # | ||
134 | # CONFIG_HOTPLUG_PCI is not set | ||
135 | CONFIG_PROC_DEVICETREE=y | ||
136 | # CONFIG_CMDLINE_BOOL is not set | ||
137 | |||
138 | # | ||
139 | # Networking | ||
140 | # | ||
141 | CONFIG_NET=y | ||
142 | |||
143 | # | ||
144 | # Networking options | ||
145 | # | ||
146 | CONFIG_PACKET=y | ||
147 | # CONFIG_PACKET_MMAP is not set | ||
148 | CONFIG_UNIX=y | ||
149 | CONFIG_XFRM=y | ||
150 | # CONFIG_XFRM_USER is not set | ||
151 | # CONFIG_NET_KEY is not set | ||
152 | CONFIG_INET=y | ||
153 | CONFIG_IP_MULTICAST=y | ||
154 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
155 | CONFIG_IP_FIB_HASH=y | ||
156 | # CONFIG_IP_PNP is not set | ||
157 | CONFIG_NET_IPIP=y | ||
158 | # CONFIG_NET_IPGRE is not set | ||
159 | # CONFIG_IP_MROUTE is not set | ||
160 | # CONFIG_ARPD is not set | ||
161 | CONFIG_SYN_COOKIES=y | ||
162 | # CONFIG_INET_AH is not set | ||
163 | # CONFIG_INET_ESP is not set | ||
164 | # CONFIG_INET_IPCOMP is not set | ||
165 | CONFIG_INET_TUNNEL=y | ||
166 | CONFIG_IP_TCPDIAG=y | ||
167 | CONFIG_IP_TCPDIAG_IPV6=y | ||
168 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
169 | CONFIG_TCP_CONG_BIC=y | ||
170 | |||
171 | # | ||
172 | # IP: Virtual Server Configuration | ||
173 | # | ||
174 | # CONFIG_IP_VS is not set | ||
175 | CONFIG_IPV6=y | ||
176 | # CONFIG_IPV6_PRIVACY is not set | ||
177 | CONFIG_INET6_AH=m | ||
178 | CONFIG_INET6_ESP=m | ||
179 | CONFIG_INET6_IPCOMP=m | ||
180 | CONFIG_INET6_TUNNEL=m | ||
181 | CONFIG_IPV6_TUNNEL=m | ||
182 | CONFIG_NETFILTER=y | ||
183 | # CONFIG_NETFILTER_DEBUG is not set | ||
184 | |||
185 | # | ||
186 | # IP: Netfilter Configuration | ||
187 | # | ||
188 | CONFIG_IP_NF_CONNTRACK=y | ||
189 | # CONFIG_IP_NF_CT_ACCT is not set | ||
190 | # CONFIG_IP_NF_CONNTRACK_MARK is not set | ||
191 | CONFIG_IP_NF_CT_PROTO_SCTP=y | ||
192 | CONFIG_IP_NF_FTP=m | ||
193 | CONFIG_IP_NF_IRC=m | ||
194 | CONFIG_IP_NF_TFTP=m | ||
195 | CONFIG_IP_NF_AMANDA=m | ||
196 | CONFIG_IP_NF_QUEUE=m | ||
197 | CONFIG_IP_NF_IPTABLES=m | ||
198 | CONFIG_IP_NF_MATCH_LIMIT=m | ||
199 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
200 | CONFIG_IP_NF_MATCH_MAC=m | ||
201 | CONFIG_IP_NF_MATCH_PKTTYPE=m | ||
202 | CONFIG_IP_NF_MATCH_MARK=m | ||
203 | CONFIG_IP_NF_MATCH_MULTIPORT=m | ||
204 | CONFIG_IP_NF_MATCH_TOS=m | ||
205 | CONFIG_IP_NF_MATCH_RECENT=m | ||
206 | CONFIG_IP_NF_MATCH_ECN=m | ||
207 | CONFIG_IP_NF_MATCH_DSCP=m | ||
208 | CONFIG_IP_NF_MATCH_AH_ESP=m | ||
209 | CONFIG_IP_NF_MATCH_LENGTH=m | ||
210 | CONFIG_IP_NF_MATCH_TTL=m | ||
211 | CONFIG_IP_NF_MATCH_TCPMSS=m | ||
212 | CONFIG_IP_NF_MATCH_HELPER=m | ||
213 | CONFIG_IP_NF_MATCH_STATE=m | ||
214 | CONFIG_IP_NF_MATCH_CONNTRACK=m | ||
215 | CONFIG_IP_NF_MATCH_OWNER=m | ||
216 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
217 | CONFIG_IP_NF_MATCH_REALM=m | ||
218 | CONFIG_IP_NF_MATCH_SCTP=m | ||
219 | CONFIG_IP_NF_MATCH_COMMENT=m | ||
220 | CONFIG_IP_NF_MATCH_HASHLIMIT=m | ||
221 | CONFIG_IP_NF_FILTER=m | ||
222 | CONFIG_IP_NF_TARGET_REJECT=m | ||
223 | CONFIG_IP_NF_TARGET_LOG=m | ||
224 | CONFIG_IP_NF_TARGET_ULOG=m | ||
225 | CONFIG_IP_NF_TARGET_TCPMSS=m | ||
226 | CONFIG_IP_NF_NAT=m | ||
227 | CONFIG_IP_NF_NAT_NEEDED=y | ||
228 | CONFIG_IP_NF_TARGET_MASQUERADE=m | ||
229 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
230 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
231 | CONFIG_IP_NF_TARGET_SAME=m | ||
232 | CONFIG_IP_NF_NAT_SNMP_BASIC=m | ||
233 | CONFIG_IP_NF_NAT_IRC=m | ||
234 | CONFIG_IP_NF_NAT_FTP=m | ||
235 | CONFIG_IP_NF_NAT_TFTP=m | ||
236 | CONFIG_IP_NF_NAT_AMANDA=m | ||
237 | CONFIG_IP_NF_MANGLE=m | ||
238 | CONFIG_IP_NF_TARGET_TOS=m | ||
239 | CONFIG_IP_NF_TARGET_ECN=m | ||
240 | CONFIG_IP_NF_TARGET_DSCP=m | ||
241 | CONFIG_IP_NF_TARGET_MARK=m | ||
242 | CONFIG_IP_NF_TARGET_CLASSIFY=m | ||
243 | CONFIG_IP_NF_RAW=m | ||
244 | CONFIG_IP_NF_TARGET_NOTRACK=m | ||
245 | CONFIG_IP_NF_ARPTABLES=m | ||
246 | CONFIG_IP_NF_ARPFILTER=m | ||
247 | CONFIG_IP_NF_ARP_MANGLE=m | ||
248 | |||
249 | # | ||
250 | # IPv6: Netfilter Configuration (EXPERIMENTAL) | ||
251 | # | ||
252 | # CONFIG_IP6_NF_QUEUE is not set | ||
253 | # CONFIG_IP6_NF_IPTABLES is not set | ||
254 | |||
255 | # | ||
256 | # SCTP Configuration (EXPERIMENTAL) | ||
257 | # | ||
258 | # CONFIG_IP_SCTP is not set | ||
259 | # CONFIG_ATM is not set | ||
260 | # CONFIG_BRIDGE is not set | ||
261 | # CONFIG_VLAN_8021Q is not set | ||
262 | # CONFIG_DECNET is not set | ||
263 | # CONFIG_LLC2 is not set | ||
264 | # CONFIG_IPX is not set | ||
265 | # CONFIG_ATALK is not set | ||
266 | # CONFIG_X25 is not set | ||
267 | # CONFIG_LAPB is not set | ||
268 | # CONFIG_NET_DIVERT is not set | ||
269 | # CONFIG_ECONET is not set | ||
270 | # CONFIG_WAN_ROUTER is not set | ||
271 | # CONFIG_NET_SCHED is not set | ||
272 | CONFIG_NET_CLS_ROUTE=y | ||
273 | |||
274 | # | ||
275 | # Network testing | ||
276 | # | ||
277 | # CONFIG_NET_PKTGEN is not set | ||
278 | # CONFIG_HAMRADIO is not set | ||
279 | # CONFIG_IRDA is not set | ||
280 | # CONFIG_BT is not set | ||
281 | |||
282 | # | ||
283 | # Device Drivers | ||
284 | # | ||
285 | |||
286 | # | ||
287 | # Generic Driver Options | ||
288 | # | ||
289 | CONFIG_STANDALONE=y | ||
290 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
291 | CONFIG_FW_LOADER=y | ||
292 | # CONFIG_DEBUG_DRIVER is not set | ||
293 | |||
294 | # | ||
295 | # Memory Technology Devices (MTD) | ||
296 | # | ||
297 | # CONFIG_MTD is not set | ||
298 | |||
299 | # | ||
300 | # Parallel port support | ||
301 | # | ||
302 | # CONFIG_PARPORT is not set | ||
303 | |||
304 | # | ||
305 | # Plug and Play support | ||
306 | # | ||
307 | |||
308 | # | ||
309 | # Block devices | ||
310 | # | ||
311 | # CONFIG_BLK_DEV_FD is not set | ||
312 | # CONFIG_BLK_CPQ_DA is not set | ||
313 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
314 | # CONFIG_BLK_DEV_DAC960 is not set | ||
315 | # CONFIG_BLK_DEV_UMEM is not set | ||
316 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
317 | CONFIG_BLK_DEV_LOOP=y | ||
318 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
319 | CONFIG_BLK_DEV_NBD=y | ||
320 | # CONFIG_BLK_DEV_SX8 is not set | ||
321 | CONFIG_BLK_DEV_RAM=y | ||
322 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
323 | CONFIG_BLK_DEV_RAM_SIZE=131072 | ||
324 | CONFIG_BLK_DEV_INITRD=y | ||
325 | CONFIG_INITRAMFS_SOURCE="" | ||
326 | # CONFIG_CDROM_PKTCDVD is not set | ||
327 | |||
328 | # | ||
329 | # IO Schedulers | ||
330 | # | ||
331 | CONFIG_IOSCHED_NOOP=y | ||
332 | CONFIG_IOSCHED_AS=y | ||
333 | CONFIG_IOSCHED_DEADLINE=y | ||
334 | CONFIG_IOSCHED_CFQ=y | ||
335 | # CONFIG_ATA_OVER_ETH is not set | ||
336 | |||
337 | # | ||
338 | # ATA/ATAPI/MFM/RLL support | ||
339 | # | ||
340 | CONFIG_IDE=y | ||
341 | CONFIG_BLK_DEV_IDE=y | ||
342 | |||
343 | # | ||
344 | # Please see Documentation/ide.txt for help/info on IDE drives | ||
345 | # | ||
346 | # CONFIG_BLK_DEV_IDE_SATA is not set | ||
347 | CONFIG_BLK_DEV_IDEDISK=y | ||
348 | CONFIG_IDEDISK_MULTI_MODE=y | ||
349 | # CONFIG_BLK_DEV_IDECD is not set | ||
350 | # CONFIG_BLK_DEV_IDETAPE is not set | ||
351 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | ||
352 | # CONFIG_IDE_TASK_IOCTL is not set | ||
353 | |||
354 | # | ||
355 | # IDE chipset support/bugfixes | ||
356 | # | ||
357 | CONFIG_IDE_GENERIC=y | ||
358 | CONFIG_BLK_DEV_IDEPCI=y | ||
359 | CONFIG_IDEPCI_SHARE_IRQ=y | ||
360 | # CONFIG_BLK_DEV_OFFBOARD is not set | ||
361 | CONFIG_BLK_DEV_GENERIC=y | ||
362 | # CONFIG_BLK_DEV_OPTI621 is not set | ||
363 | # CONFIG_BLK_DEV_SL82C105 is not set | ||
364 | CONFIG_BLK_DEV_IDEDMA_PCI=y | ||
365 | # CONFIG_BLK_DEV_IDEDMA_FORCED is not set | ||
366 | CONFIG_IDEDMA_PCI_AUTO=y | ||
367 | # CONFIG_IDEDMA_ONLYDISK is not set | ||
368 | CONFIG_BLK_DEV_AEC62XX=y | ||
369 | # CONFIG_BLK_DEV_ALI15X3 is not set | ||
370 | # CONFIG_BLK_DEV_AMD74XX is not set | ||
371 | # CONFIG_BLK_DEV_CMD64X is not set | ||
372 | # CONFIG_BLK_DEV_TRIFLEX is not set | ||
373 | # CONFIG_BLK_DEV_CY82C693 is not set | ||
374 | # CONFIG_BLK_DEV_CS5520 is not set | ||
375 | # CONFIG_BLK_DEV_CS5530 is not set | ||
376 | # CONFIG_BLK_DEV_HPT34X is not set | ||
377 | # CONFIG_BLK_DEV_HPT366 is not set | ||
378 | # CONFIG_BLK_DEV_SC1200 is not set | ||
379 | # CONFIG_BLK_DEV_PIIX is not set | ||
380 | # CONFIG_BLK_DEV_IT821X is not set | ||
381 | # CONFIG_BLK_DEV_NS87415 is not set | ||
382 | # CONFIG_BLK_DEV_PDC202XX_OLD is not set | ||
383 | # CONFIG_BLK_DEV_PDC202XX_NEW is not set | ||
384 | # CONFIG_BLK_DEV_SVWKS is not set | ||
385 | CONFIG_BLK_DEV_SIIMAGE=y | ||
386 | # CONFIG_BLK_DEV_SLC90E66 is not set | ||
387 | # CONFIG_BLK_DEV_TRM290 is not set | ||
388 | # CONFIG_BLK_DEV_VIA82CXXX is not set | ||
389 | # CONFIG_IDE_ARM is not set | ||
390 | CONFIG_BLK_DEV_IDEDMA=y | ||
391 | # CONFIG_IDEDMA_IVB is not set | ||
392 | CONFIG_IDEDMA_AUTO=y | ||
393 | # CONFIG_BLK_DEV_HD is not set | ||
394 | |||
395 | # | ||
396 | # SCSI device support | ||
397 | # | ||
398 | # CONFIG_SCSI is not set | ||
399 | |||
400 | # | ||
401 | # Multi-device support (RAID and LVM) | ||
402 | # | ||
403 | # CONFIG_MD is not set | ||
404 | |||
405 | # | ||
406 | # Fusion MPT device support | ||
407 | # | ||
408 | # CONFIG_FUSION is not set | ||
409 | |||
410 | # | ||
411 | # IEEE 1394 (FireWire) support | ||
412 | # | ||
413 | # CONFIG_IEEE1394 is not set | ||
414 | |||
415 | # | ||
416 | # I2O device support | ||
417 | # | ||
418 | # CONFIG_I2O is not set | ||
419 | |||
420 | # | ||
421 | # Macintosh device drivers | ||
422 | # | ||
423 | |||
424 | # | ||
425 | # Network device support | ||
426 | # | ||
427 | CONFIG_NETDEVICES=y | ||
428 | # CONFIG_DUMMY is not set | ||
429 | # CONFIG_BONDING is not set | ||
430 | # CONFIG_EQUALIZER is not set | ||
431 | # CONFIG_TUN is not set | ||
432 | |||
433 | # | ||
434 | # ARCnet devices | ||
435 | # | ||
436 | # CONFIG_ARCNET is not set | ||
437 | |||
438 | # | ||
439 | # Ethernet (10 or 100Mbit) | ||
440 | # | ||
441 | CONFIG_NET_ETHERNET=y | ||
442 | CONFIG_MII=y | ||
443 | # CONFIG_HAPPYMEAL is not set | ||
444 | # CONFIG_SUNGEM is not set | ||
445 | # CONFIG_NET_VENDOR_3COM is not set | ||
446 | |||
447 | # | ||
448 | # Tulip family network device support | ||
449 | # | ||
450 | # CONFIG_NET_TULIP is not set | ||
451 | # CONFIG_HP100 is not set | ||
452 | # CONFIG_NET_PCI is not set | ||
453 | |||
454 | # | ||
455 | # Ethernet (1000 Mbit) | ||
456 | # | ||
457 | # CONFIG_ACENIC is not set | ||
458 | # CONFIG_DL2K is not set | ||
459 | CONFIG_E1000=m | ||
460 | # CONFIG_E1000_NAPI is not set | ||
461 | # CONFIG_NS83820 is not set | ||
462 | # CONFIG_HAMACHI is not set | ||
463 | # CONFIG_YELLOWFIN is not set | ||
464 | # CONFIG_R8169 is not set | ||
465 | CONFIG_SKGE=m | ||
466 | # CONFIG_SK98LIN is not set | ||
467 | # CONFIG_TIGON3 is not set | ||
468 | # CONFIG_BNX2 is not set | ||
469 | # CONFIG_MV643XX_ETH is not set | ||
470 | |||
471 | # | ||
472 | # Ethernet (10000 Mbit) | ||
473 | # | ||
474 | # CONFIG_IXGB is not set | ||
475 | # CONFIG_S2IO is not set | ||
476 | |||
477 | # | ||
478 | # Token Ring devices | ||
479 | # | ||
480 | # CONFIG_TR is not set | ||
481 | |||
482 | # | ||
483 | # Wireless LAN (non-hamradio) | ||
484 | # | ||
485 | # CONFIG_NET_RADIO is not set | ||
486 | |||
487 | # | ||
488 | # Wan interfaces | ||
489 | # | ||
490 | # CONFIG_WAN is not set | ||
491 | # CONFIG_FDDI is not set | ||
492 | # CONFIG_HIPPI is not set | ||
493 | # CONFIG_PPP is not set | ||
494 | # CONFIG_SLIP is not set | ||
495 | # CONFIG_SHAPER is not set | ||
496 | # CONFIG_NETCONSOLE is not set | ||
497 | # CONFIG_NETPOLL is not set | ||
498 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
499 | |||
500 | # | ||
501 | # ISDN subsystem | ||
502 | # | ||
503 | # CONFIG_ISDN is not set | ||
504 | |||
505 | # | ||
506 | # Telephony Support | ||
507 | # | ||
508 | # CONFIG_PHONE is not set | ||
509 | |||
510 | # | ||
511 | # Input device support | ||
512 | # | ||
513 | CONFIG_INPUT=y | ||
514 | |||
515 | # | ||
516 | # Userland interfaces | ||
517 | # | ||
518 | CONFIG_INPUT_MOUSEDEV=y | ||
519 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
520 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
521 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
522 | # CONFIG_INPUT_JOYDEV is not set | ||
523 | # CONFIG_INPUT_TSDEV is not set | ||
524 | # CONFIG_INPUT_EVDEV is not set | ||
525 | # CONFIG_INPUT_EVBUG is not set | ||
526 | |||
527 | # | ||
528 | # Input Device Drivers | ||
529 | # | ||
530 | # CONFIG_INPUT_KEYBOARD is not set | ||
531 | # CONFIG_INPUT_MOUSE is not set | ||
532 | # CONFIG_INPUT_JOYSTICK is not set | ||
533 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
534 | # CONFIG_INPUT_MISC is not set | ||
535 | |||
536 | # | ||
537 | # Hardware I/O ports | ||
538 | # | ||
539 | CONFIG_SERIO=y | ||
540 | # CONFIG_SERIO_I8042 is not set | ||
541 | CONFIG_SERIO_SERPORT=y | ||
542 | # CONFIG_SERIO_PCIPS2 is not set | ||
543 | # CONFIG_SERIO_RAW is not set | ||
544 | # CONFIG_GAMEPORT is not set | ||
545 | |||
546 | # | ||
547 | # Character devices | ||
548 | # | ||
549 | CONFIG_VT=y | ||
550 | CONFIG_VT_CONSOLE=y | ||
551 | CONFIG_HW_CONSOLE=y | ||
552 | CONFIG_SERIAL_NONSTANDARD=y | ||
553 | # CONFIG_ROCKETPORT is not set | ||
554 | # CONFIG_CYCLADES is not set | ||
555 | # CONFIG_MOXA_SMARTIO is not set | ||
556 | # CONFIG_ISI is not set | ||
557 | # CONFIG_SYNCLINK is not set | ||
558 | # CONFIG_SYNCLINKMP is not set | ||
559 | # CONFIG_N_HDLC is not set | ||
560 | # CONFIG_SPECIALIX is not set | ||
561 | # CONFIG_SX is not set | ||
562 | # CONFIG_STALDRV is not set | ||
563 | |||
564 | # | ||
565 | # Serial drivers | ||
566 | # | ||
567 | CONFIG_SERIAL_8250=y | ||
568 | CONFIG_SERIAL_8250_CONSOLE=y | ||
569 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
570 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
571 | |||
572 | # | ||
573 | # Non-8250 serial port support | ||
574 | # | ||
575 | CONFIG_SERIAL_CORE=y | ||
576 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
577 | # CONFIG_SERIAL_JSM is not set | ||
578 | CONFIG_UNIX98_PTYS=y | ||
579 | # CONFIG_LEGACY_PTYS is not set | ||
580 | |||
581 | # | ||
582 | # IPMI | ||
583 | # | ||
584 | # CONFIG_IPMI_HANDLER is not set | ||
585 | |||
586 | # | ||
587 | # Watchdog Cards | ||
588 | # | ||
589 | CONFIG_WATCHDOG=y | ||
590 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
591 | |||
592 | # | ||
593 | # Watchdog Device Drivers | ||
594 | # | ||
595 | # CONFIG_SOFT_WATCHDOG is not set | ||
596 | CONFIG_WATCHDOG_RTAS=y | ||
597 | |||
598 | # | ||
599 | # PCI-based Watchdog Cards | ||
600 | # | ||
601 | # CONFIG_PCIPCWATCHDOG is not set | ||
602 | # CONFIG_WDTPCI is not set | ||
603 | # CONFIG_RTC is not set | ||
604 | # CONFIG_DTLK is not set | ||
605 | # CONFIG_R3964 is not set | ||
606 | # CONFIG_APPLICOM is not set | ||
607 | |||
608 | # | ||
609 | # Ftape, the floppy tape device driver | ||
610 | # | ||
611 | # CONFIG_AGP is not set | ||
612 | # CONFIG_DRM is not set | ||
613 | # CONFIG_RAW_DRIVER is not set | ||
614 | # CONFIG_HANGCHECK_TIMER is not set | ||
615 | |||
616 | # | ||
617 | # TPM devices | ||
618 | # | ||
619 | # CONFIG_TCG_TPM is not set | ||
620 | |||
621 | # | ||
622 | # I2C support | ||
623 | # | ||
624 | CONFIG_I2C=y | ||
625 | # CONFIG_I2C_CHARDEV is not set | ||
626 | |||
627 | # | ||
628 | # I2C Algorithms | ||
629 | # | ||
630 | CONFIG_I2C_ALGOBIT=y | ||
631 | # CONFIG_I2C_ALGOPCF is not set | ||
632 | # CONFIG_I2C_ALGOPCA is not set | ||
633 | |||
634 | # | ||
635 | # I2C Hardware Bus support | ||
636 | # | ||
637 | # CONFIG_I2C_ALI1535 is not set | ||
638 | # CONFIG_I2C_ALI1563 is not set | ||
639 | # CONFIG_I2C_ALI15X3 is not set | ||
640 | # CONFIG_I2C_AMD756 is not set | ||
641 | # CONFIG_I2C_AMD8111 is not set | ||
642 | # CONFIG_I2C_I801 is not set | ||
643 | # CONFIG_I2C_I810 is not set | ||
644 | # CONFIG_I2C_PIIX4 is not set | ||
645 | # CONFIG_I2C_ISA is not set | ||
646 | # CONFIG_I2C_NFORCE2 is not set | ||
647 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
648 | # CONFIG_I2C_PROSAVAGE is not set | ||
649 | # CONFIG_I2C_SAVAGE4 is not set | ||
650 | # CONFIG_SCx200_ACB is not set | ||
651 | # CONFIG_I2C_SIS5595 is not set | ||
652 | # CONFIG_I2C_SIS630 is not set | ||
653 | # CONFIG_I2C_SIS96X is not set | ||
654 | # CONFIG_I2C_STUB is not set | ||
655 | # CONFIG_I2C_VIA is not set | ||
656 | # CONFIG_I2C_VIAPRO is not set | ||
657 | # CONFIG_I2C_VOODOO3 is not set | ||
658 | # CONFIG_I2C_PCA_ISA is not set | ||
659 | # CONFIG_I2C_SENSOR is not set | ||
660 | |||
661 | # | ||
662 | # Miscellaneous I2C Chip support | ||
663 | # | ||
664 | # CONFIG_SENSORS_DS1337 is not set | ||
665 | # CONFIG_SENSORS_DS1374 is not set | ||
666 | # CONFIG_SENSORS_EEPROM is not set | ||
667 | # CONFIG_SENSORS_PCF8574 is not set | ||
668 | # CONFIG_SENSORS_PCA9539 is not set | ||
669 | # CONFIG_SENSORS_PCF8591 is not set | ||
670 | # CONFIG_SENSORS_RTC8564 is not set | ||
671 | # CONFIG_SENSORS_MAX6875 is not set | ||
672 | # CONFIG_I2C_DEBUG_CORE is not set | ||
673 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
674 | # CONFIG_I2C_DEBUG_BUS is not set | ||
675 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
676 | |||
677 | # | ||
678 | # Dallas's 1-wire bus | ||
679 | # | ||
680 | # CONFIG_W1 is not set | ||
681 | |||
682 | # | ||
683 | # Hardware Monitoring support | ||
684 | # | ||
685 | # CONFIG_HWMON is not set | ||
686 | |||
687 | # | ||
688 | # Misc devices | ||
689 | # | ||
690 | |||
691 | # | ||
692 | # Multimedia devices | ||
693 | # | ||
694 | # CONFIG_VIDEO_DEV is not set | ||
695 | |||
696 | # | ||
697 | # Digital Video Broadcasting Devices | ||
698 | # | ||
699 | # CONFIG_DVB is not set | ||
700 | |||
701 | # | ||
702 | # Graphics support | ||
703 | # | ||
704 | # CONFIG_FB is not set | ||
705 | |||
706 | # | ||
707 | # Console display driver support | ||
708 | # | ||
709 | # CONFIG_VGA_CONSOLE is not set | ||
710 | CONFIG_DUMMY_CONSOLE=y | ||
711 | |||
712 | # | ||
713 | # Sound | ||
714 | # | ||
715 | # CONFIG_SOUND is not set | ||
716 | |||
717 | # | ||
718 | # USB support | ||
719 | # | ||
720 | CONFIG_USB_ARCH_HAS_HCD=y | ||
721 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
722 | # CONFIG_USB is not set | ||
723 | |||
724 | # | ||
725 | # USB Gadget Support | ||
726 | # | ||
727 | # CONFIG_USB_GADGET is not set | ||
728 | |||
729 | # | ||
730 | # MMC/SD Card support | ||
731 | # | ||
732 | # CONFIG_MMC is not set | ||
733 | |||
734 | # | ||
735 | # InfiniBand support | ||
736 | # | ||
737 | # CONFIG_INFINIBAND is not set | ||
738 | |||
739 | # | ||
740 | # SN Devices | ||
741 | # | ||
742 | |||
743 | # | ||
744 | # File systems | ||
745 | # | ||
746 | CONFIG_EXT2_FS=y | ||
747 | # CONFIG_EXT2_FS_XATTR is not set | ||
748 | # CONFIG_EXT2_FS_XIP is not set | ||
749 | CONFIG_EXT3_FS=y | ||
750 | CONFIG_EXT3_FS_XATTR=y | ||
751 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
752 | # CONFIG_EXT3_FS_SECURITY is not set | ||
753 | CONFIG_JBD=y | ||
754 | # CONFIG_JBD_DEBUG is not set | ||
755 | CONFIG_FS_MBCACHE=y | ||
756 | # CONFIG_REISERFS_FS is not set | ||
757 | # CONFIG_JFS_FS is not set | ||
758 | CONFIG_FS_POSIX_ACL=y | ||
759 | |||
760 | # | ||
761 | # XFS support | ||
762 | # | ||
763 | # CONFIG_XFS_FS is not set | ||
764 | # CONFIG_MINIX_FS is not set | ||
765 | # CONFIG_ROMFS_FS is not set | ||
766 | CONFIG_INOTIFY=y | ||
767 | # CONFIG_QUOTA is not set | ||
768 | CONFIG_DNOTIFY=y | ||
769 | # CONFIG_AUTOFS_FS is not set | ||
770 | # CONFIG_AUTOFS4_FS is not set | ||
771 | |||
772 | # | ||
773 | # CD-ROM/DVD Filesystems | ||
774 | # | ||
775 | CONFIG_ISO9660_FS=m | ||
776 | CONFIG_JOLIET=y | ||
777 | # CONFIG_ZISOFS is not set | ||
778 | CONFIG_UDF_FS=m | ||
779 | CONFIG_UDF_NLS=y | ||
780 | |||
781 | # | ||
782 | # DOS/FAT/NT Filesystems | ||
783 | # | ||
784 | CONFIG_FAT_FS=m | ||
785 | CONFIG_MSDOS_FS=m | ||
786 | CONFIG_VFAT_FS=m | ||
787 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
788 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
789 | # CONFIG_NTFS_FS is not set | ||
790 | |||
791 | # | ||
792 | # Pseudo filesystems | ||
793 | # | ||
794 | CONFIG_PROC_FS=y | ||
795 | CONFIG_PROC_KCORE=y | ||
796 | CONFIG_SYSFS=y | ||
797 | # CONFIG_DEVPTS_FS_XATTR is not set | ||
798 | CONFIG_TMPFS=y | ||
799 | CONFIG_TMPFS_XATTR=y | ||
800 | # CONFIG_TMPFS_SECURITY is not set | ||
801 | CONFIG_HUGETLBFS=y | ||
802 | CONFIG_HUGETLB_PAGE=y | ||
803 | CONFIG_RAMFS=y | ||
804 | |||
805 | # | ||
806 | # Miscellaneous filesystems | ||
807 | # | ||
808 | # CONFIG_ADFS_FS is not set | ||
809 | # CONFIG_AFFS_FS is not set | ||
810 | # CONFIG_HFS_FS is not set | ||
811 | # CONFIG_HFSPLUS_FS is not set | ||
812 | # CONFIG_BEFS_FS is not set | ||
813 | # CONFIG_BFS_FS is not set | ||
814 | # CONFIG_EFS_FS is not set | ||
815 | # CONFIG_CRAMFS is not set | ||
816 | # CONFIG_VXFS_FS is not set | ||
817 | # CONFIG_HPFS_FS is not set | ||
818 | # CONFIG_QNX4FS_FS is not set | ||
819 | # CONFIG_SYSV_FS is not set | ||
820 | # CONFIG_UFS_FS is not set | ||
821 | |||
822 | # | ||
823 | # Network File Systems | ||
824 | # | ||
825 | CONFIG_NFS_FS=m | ||
826 | CONFIG_NFS_V3=y | ||
827 | CONFIG_NFS_V3_ACL=y | ||
828 | # CONFIG_NFS_V4 is not set | ||
829 | # CONFIG_NFS_DIRECTIO is not set | ||
830 | CONFIG_NFSD=m | ||
831 | CONFIG_NFSD_V2_ACL=y | ||
832 | CONFIG_NFSD_V3=y | ||
833 | CONFIG_NFSD_V3_ACL=y | ||
834 | # CONFIG_NFSD_V4 is not set | ||
835 | CONFIG_NFSD_TCP=y | ||
836 | CONFIG_LOCKD=m | ||
837 | CONFIG_LOCKD_V4=y | ||
838 | CONFIG_EXPORTFS=m | ||
839 | CONFIG_NFS_ACL_SUPPORT=m | ||
840 | CONFIG_NFS_COMMON=y | ||
841 | CONFIG_SUNRPC=m | ||
842 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
843 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
844 | # CONFIG_SMB_FS is not set | ||
845 | # CONFIG_CIFS is not set | ||
846 | # CONFIG_NCP_FS is not set | ||
847 | # CONFIG_CODA_FS is not set | ||
848 | # CONFIG_AFS_FS is not set | ||
849 | |||
850 | # | ||
851 | # Partition Types | ||
852 | # | ||
853 | CONFIG_PARTITION_ADVANCED=y | ||
854 | # CONFIG_ACORN_PARTITION is not set | ||
855 | # CONFIG_OSF_PARTITION is not set | ||
856 | # CONFIG_AMIGA_PARTITION is not set | ||
857 | # CONFIG_ATARI_PARTITION is not set | ||
858 | # CONFIG_MAC_PARTITION is not set | ||
859 | CONFIG_MSDOS_PARTITION=y | ||
860 | # CONFIG_BSD_DISKLABEL is not set | ||
861 | # CONFIG_MINIX_SUBPARTITION is not set | ||
862 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
863 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
864 | # CONFIG_LDM_PARTITION is not set | ||
865 | # CONFIG_SGI_PARTITION is not set | ||
866 | # CONFIG_ULTRIX_PARTITION is not set | ||
867 | # CONFIG_SUN_PARTITION is not set | ||
868 | CONFIG_EFI_PARTITION=y | ||
869 | |||
870 | # | ||
871 | # Native Language Support | ||
872 | # | ||
873 | CONFIG_NLS=m | ||
874 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
875 | # CONFIG_NLS_CODEPAGE_437 is not set | ||
876 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
877 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
878 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
879 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
880 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
881 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
882 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
883 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
884 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
885 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
886 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
887 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
888 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
889 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
890 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
891 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
892 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
893 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
894 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
895 | # CONFIG_NLS_ISO8859_8 is not set | ||
896 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
897 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
898 | # CONFIG_NLS_ASCII is not set | ||
899 | CONFIG_NLS_ISO8859_1=m | ||
900 | CONFIG_NLS_ISO8859_2=m | ||
901 | CONFIG_NLS_ISO8859_3=m | ||
902 | CONFIG_NLS_ISO8859_4=m | ||
903 | CONFIG_NLS_ISO8859_5=m | ||
904 | CONFIG_NLS_ISO8859_6=m | ||
905 | CONFIG_NLS_ISO8859_7=m | ||
906 | CONFIG_NLS_ISO8859_9=m | ||
907 | CONFIG_NLS_ISO8859_13=m | ||
908 | CONFIG_NLS_ISO8859_14=m | ||
909 | CONFIG_NLS_ISO8859_15=m | ||
910 | # CONFIG_NLS_KOI8_R is not set | ||
911 | # CONFIG_NLS_KOI8_U is not set | ||
912 | # CONFIG_NLS_UTF8 is not set | ||
913 | |||
914 | # | ||
915 | # Profiling support | ||
916 | # | ||
917 | # CONFIG_PROFILING is not set | ||
918 | |||
919 | # | ||
920 | # Kernel hacking | ||
921 | # | ||
922 | # CONFIG_PRINTK_TIME is not set | ||
923 | CONFIG_DEBUG_KERNEL=y | ||
924 | CONFIG_MAGIC_SYSRQ=y | ||
925 | CONFIG_LOG_BUF_SHIFT=15 | ||
926 | # CONFIG_SCHEDSTATS is not set | ||
927 | # CONFIG_DEBUG_SLAB is not set | ||
928 | # CONFIG_DEBUG_SPINLOCK is not set | ||
929 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
930 | # CONFIG_DEBUG_KOBJECT is not set | ||
931 | # CONFIG_DEBUG_INFO is not set | ||
932 | CONFIG_DEBUG_FS=y | ||
933 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
934 | # CONFIG_KPROBES is not set | ||
935 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
936 | CONFIG_DEBUGGER=y | ||
937 | # CONFIG_XMON is not set | ||
938 | # CONFIG_PPCDBG is not set | ||
939 | CONFIG_IRQSTACKS=y | ||
940 | |||
941 | # | ||
942 | # Security options | ||
943 | # | ||
944 | # CONFIG_KEYS is not set | ||
945 | # CONFIG_SECURITY is not set | ||
946 | |||
947 | # | ||
948 | # Cryptographic options | ||
949 | # | ||
950 | CONFIG_CRYPTO=y | ||
951 | CONFIG_CRYPTO_HMAC=y | ||
952 | # CONFIG_CRYPTO_NULL is not set | ||
953 | # CONFIG_CRYPTO_MD4 is not set | ||
954 | CONFIG_CRYPTO_MD5=m | ||
955 | CONFIG_CRYPTO_SHA1=m | ||
956 | # CONFIG_CRYPTO_SHA256 is not set | ||
957 | # CONFIG_CRYPTO_SHA512 is not set | ||
958 | # CONFIG_CRYPTO_WP512 is not set | ||
959 | # CONFIG_CRYPTO_TGR192 is not set | ||
960 | CONFIG_CRYPTO_DES=m | ||
961 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
962 | # CONFIG_CRYPTO_TWOFISH is not set | ||
963 | # CONFIG_CRYPTO_SERPENT is not set | ||
964 | # CONFIG_CRYPTO_AES is not set | ||
965 | # CONFIG_CRYPTO_CAST5 is not set | ||
966 | # CONFIG_CRYPTO_CAST6 is not set | ||
967 | # CONFIG_CRYPTO_TEA is not set | ||
968 | # CONFIG_CRYPTO_ARC4 is not set | ||
969 | # CONFIG_CRYPTO_KHAZAD is not set | ||
970 | # CONFIG_CRYPTO_ANUBIS is not set | ||
971 | CONFIG_CRYPTO_DEFLATE=m | ||
972 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
973 | # CONFIG_CRYPTO_CRC32C is not set | ||
974 | # CONFIG_CRYPTO_TEST is not set | ||
975 | |||
976 | # | ||
977 | # Hardware crypto devices | ||
978 | # | ||
979 | |||
980 | # | ||
981 | # Library routines | ||
982 | # | ||
983 | # CONFIG_CRC_CCITT is not set | ||
984 | CONFIG_CRC32=y | ||
985 | # CONFIG_LIBCRC32C is not set | ||
986 | CONFIG_ZLIB_INFLATE=m | ||
987 | CONFIG_ZLIB_DEFLATE=m | ||
diff --git a/arch/ppc64/configs/g5_defconfig b/arch/ppc64/configs/g5_defconfig index 9e0abe8392fc..ab567741e80e 100644 --- a/arch/ppc64/configs/g5_defconfig +++ b/arch/ppc64/configs/g5_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc3 | 3 | # Linux kernel version: 2.6.13-rc6 |
4 | # Wed Jul 13 14:40:34 2005 | 4 | # Mon Aug 8 14:16:59 2005 |
5 | # | 5 | # |
6 | CONFIG_64BIT=y | 6 | CONFIG_64BIT=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -267,8 +267,6 @@ CONFIG_NET_CLS_ROUTE=y | |||
267 | # Network testing | 267 | # Network testing |
268 | # | 268 | # |
269 | # CONFIG_NET_PKTGEN is not set | 269 | # CONFIG_NET_PKTGEN is not set |
270 | # CONFIG_NETPOLL is not set | ||
271 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
272 | # CONFIG_HAMRADIO is not set | 270 | # CONFIG_HAMRADIO is not set |
273 | # CONFIG_IRDA is not set | 271 | # CONFIG_IRDA is not set |
274 | # CONFIG_BT is not set | 272 | # CONFIG_BT is not set |
@@ -468,6 +466,7 @@ CONFIG_SCSI_QLA2XXX=y | |||
468 | # CONFIG_SCSI_QLA2300 is not set | 466 | # CONFIG_SCSI_QLA2300 is not set |
469 | # CONFIG_SCSI_QLA2322 is not set | 467 | # CONFIG_SCSI_QLA2322 is not set |
470 | # CONFIG_SCSI_QLA6312 is not set | 468 | # CONFIG_SCSI_QLA6312 is not set |
469 | # CONFIG_SCSI_QLA24XX is not set | ||
471 | # CONFIG_SCSI_LPFC is not set | 470 | # CONFIG_SCSI_LPFC is not set |
472 | # CONFIG_SCSI_DC395x is not set | 471 | # CONFIG_SCSI_DC395x is not set |
473 | # CONFIG_SCSI_DC390T is not set | 472 | # CONFIG_SCSI_DC390T is not set |
@@ -539,11 +538,9 @@ CONFIG_IEEE1394_RAWIO=y | |||
539 | # | 538 | # |
540 | # Macintosh device drivers | 539 | # Macintosh device drivers |
541 | # | 540 | # |
542 | CONFIG_ADB=y | ||
543 | CONFIG_ADB_PMU=y | 541 | CONFIG_ADB_PMU=y |
544 | CONFIG_PMAC_SMU=y | 542 | CONFIG_PMAC_SMU=y |
545 | # CONFIG_PMAC_BACKLIGHT is not set | 543 | # CONFIG_PMAC_BACKLIGHT is not set |
546 | # CONFIG_INPUT_ADBHID is not set | ||
547 | CONFIG_THERM_PM72=y | 544 | CONFIG_THERM_PM72=y |
548 | 545 | ||
549 | # | 546 | # |
@@ -631,6 +628,8 @@ CONFIG_PPPOE=m | |||
631 | # CONFIG_NET_FC is not set | 628 | # CONFIG_NET_FC is not set |
632 | # CONFIG_SHAPER is not set | 629 | # CONFIG_SHAPER is not set |
633 | # CONFIG_NETCONSOLE is not set | 630 | # CONFIG_NETCONSOLE is not set |
631 | # CONFIG_NETPOLL is not set | ||
632 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
634 | 633 | ||
635 | # | 634 | # |
636 | # ISDN subsystem | 635 | # ISDN subsystem |
@@ -718,7 +717,6 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
718 | # | 717 | # |
719 | # CONFIG_WATCHDOG is not set | 718 | # CONFIG_WATCHDOG is not set |
720 | # CONFIG_RTC is not set | 719 | # CONFIG_RTC is not set |
721 | # CONFIG_GEN_RTC is not set | ||
722 | # CONFIG_DTLK is not set | 720 | # CONFIG_DTLK is not set |
723 | # CONFIG_R3964 is not set | 721 | # CONFIG_R3964 is not set |
724 | # CONFIG_APPLICOM is not set | 722 | # CONFIG_APPLICOM is not set |
diff --git a/arch/ppc64/configs/iSeries_defconfig b/arch/ppc64/configs/iSeries_defconfig index dbd54d188c2b..394ba18b58c7 100644 --- a/arch/ppc64/configs/iSeries_defconfig +++ b/arch/ppc64/configs/iSeries_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc3 | 3 | # Linux kernel version: 2.6.13-rc6 |
4 | # Wed Jul 13 14:43:39 2005 | 4 | # Mon Aug 8 14:17:02 2005 |
5 | # | 5 | # |
6 | CONFIG_64BIT=y | 6 | CONFIG_64BIT=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -257,10 +257,6 @@ CONFIG_NET_CLS_ROUTE=y | |||
257 | # Network testing | 257 | # Network testing |
258 | # | 258 | # |
259 | # CONFIG_NET_PKTGEN is not set | 259 | # CONFIG_NET_PKTGEN is not set |
260 | CONFIG_NETPOLL=y | ||
261 | CONFIG_NETPOLL_RX=y | ||
262 | CONFIG_NETPOLL_TRAP=y | ||
263 | CONFIG_NET_POLL_CONTROLLER=y | ||
264 | # CONFIG_HAMRADIO is not set | 260 | # CONFIG_HAMRADIO is not set |
265 | # CONFIG_IRDA is not set | 261 | # CONFIG_IRDA is not set |
266 | # CONFIG_BT is not set | 262 | # CONFIG_BT is not set |
@@ -388,6 +384,7 @@ CONFIG_SCSI_QLA2XXX=y | |||
388 | # CONFIG_SCSI_QLA2300 is not set | 384 | # CONFIG_SCSI_QLA2300 is not set |
389 | # CONFIG_SCSI_QLA2322 is not set | 385 | # CONFIG_SCSI_QLA2322 is not set |
390 | # CONFIG_SCSI_QLA6312 is not set | 386 | # CONFIG_SCSI_QLA6312 is not set |
387 | # CONFIG_SCSI_QLA24XX is not set | ||
391 | # CONFIG_SCSI_LPFC is not set | 388 | # CONFIG_SCSI_LPFC is not set |
392 | # CONFIG_SCSI_DC395x is not set | 389 | # CONFIG_SCSI_DC395x is not set |
393 | # CONFIG_SCSI_DC390T is not set | 390 | # CONFIG_SCSI_DC390T is not set |
@@ -537,6 +534,10 @@ CONFIG_PPPOE=m | |||
537 | # CONFIG_NET_FC is not set | 534 | # CONFIG_NET_FC is not set |
538 | # CONFIG_SHAPER is not set | 535 | # CONFIG_SHAPER is not set |
539 | CONFIG_NETCONSOLE=y | 536 | CONFIG_NETCONSOLE=y |
537 | CONFIG_NETPOLL=y | ||
538 | CONFIG_NETPOLL_RX=y | ||
539 | CONFIG_NETPOLL_TRAP=y | ||
540 | CONFIG_NET_POLL_CONTROLLER=y | ||
540 | 541 | ||
541 | # | 542 | # |
542 | # ISDN subsystem | 543 | # ISDN subsystem |
@@ -610,7 +611,6 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
610 | # | 611 | # |
611 | # CONFIG_WATCHDOG is not set | 612 | # CONFIG_WATCHDOG is not set |
612 | # CONFIG_RTC is not set | 613 | # CONFIG_RTC is not set |
613 | # CONFIG_GEN_RTC is not set | ||
614 | # CONFIG_DTLK is not set | 614 | # CONFIG_DTLK is not set |
615 | # CONFIG_R3964 is not set | 615 | # CONFIG_R3964 is not set |
616 | # CONFIG_APPLICOM is not set | 616 | # CONFIG_APPLICOM is not set |
diff --git a/arch/ppc64/configs/maple_defconfig b/arch/ppc64/configs/maple_defconfig index cda8e8cb6d1d..2033fe663dbe 100644 --- a/arch/ppc64/configs/maple_defconfig +++ b/arch/ppc64/configs/maple_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc3 | 3 | # Linux kernel version: 2.6.13-rc6 |
4 | # Wed Jul 13 14:46:18 2005 | 4 | # Mon Aug 8 14:17:04 2005 |
5 | # | 5 | # |
6 | CONFIG_64BIT=y | 6 | CONFIG_64BIT=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -193,8 +193,6 @@ CONFIG_TCP_CONG_BIC=y | |||
193 | # Network testing | 193 | # Network testing |
194 | # | 194 | # |
195 | # CONFIG_NET_PKTGEN is not set | 195 | # CONFIG_NET_PKTGEN is not set |
196 | # CONFIG_NETPOLL is not set | ||
197 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
198 | # CONFIG_HAMRADIO is not set | 196 | # CONFIG_HAMRADIO is not set |
199 | # CONFIG_IRDA is not set | 197 | # CONFIG_IRDA is not set |
200 | # CONFIG_BT is not set | 198 | # CONFIG_BT is not set |
@@ -433,6 +431,8 @@ CONFIG_E1000=y | |||
433 | # CONFIG_SLIP is not set | 431 | # CONFIG_SLIP is not set |
434 | # CONFIG_SHAPER is not set | 432 | # CONFIG_SHAPER is not set |
435 | # CONFIG_NETCONSOLE is not set | 433 | # CONFIG_NETCONSOLE is not set |
434 | # CONFIG_NETPOLL is not set | ||
435 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
436 | 436 | ||
437 | # | 437 | # |
438 | # ISDN subsystem | 438 | # ISDN subsystem |
@@ -512,7 +512,6 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
512 | # | 512 | # |
513 | # CONFIG_WATCHDOG is not set | 513 | # CONFIG_WATCHDOG is not set |
514 | # CONFIG_RTC is not set | 514 | # CONFIG_RTC is not set |
515 | # CONFIG_GEN_RTC is not set | ||
516 | # CONFIG_DTLK is not set | 515 | # CONFIG_DTLK is not set |
517 | # CONFIG_R3964 is not set | 516 | # CONFIG_R3964 is not set |
518 | # CONFIG_APPLICOM is not set | 517 | # CONFIG_APPLICOM is not set |
diff --git a/arch/ppc64/configs/pSeries_defconfig b/arch/ppc64/configs/pSeries_defconfig index 5112edf18181..297fd5229487 100644 --- a/arch/ppc64/configs/pSeries_defconfig +++ b/arch/ppc64/configs/pSeries_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc3 | 3 | # Linux kernel version: 2.6.13-rc6 |
4 | # Wed Jul 13 14:47:54 2005 | 4 | # Mon Aug 8 14:17:07 2005 |
5 | # | 5 | # |
6 | CONFIG_64BIT=y | 6 | CONFIG_64BIT=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -287,10 +287,6 @@ CONFIG_NET_CLS_ROUTE=y | |||
287 | # Network testing | 287 | # Network testing |
288 | # | 288 | # |
289 | # CONFIG_NET_PKTGEN is not set | 289 | # CONFIG_NET_PKTGEN is not set |
290 | CONFIG_NETPOLL=y | ||
291 | CONFIG_NETPOLL_RX=y | ||
292 | CONFIG_NETPOLL_TRAP=y | ||
293 | CONFIG_NET_POLL_CONTROLLER=y | ||
294 | # CONFIG_HAMRADIO is not set | 290 | # CONFIG_HAMRADIO is not set |
295 | # CONFIG_IRDA is not set | 291 | # CONFIG_IRDA is not set |
296 | # CONFIG_BT is not set | 292 | # CONFIG_BT is not set |
@@ -488,6 +484,7 @@ CONFIG_SCSI_QLA22XX=m | |||
488 | CONFIG_SCSI_QLA2300=m | 484 | CONFIG_SCSI_QLA2300=m |
489 | CONFIG_SCSI_QLA2322=m | 485 | CONFIG_SCSI_QLA2322=m |
490 | CONFIG_SCSI_QLA6312=m | 486 | CONFIG_SCSI_QLA6312=m |
487 | CONFIG_SCSI_QLA24XX=m | ||
491 | CONFIG_SCSI_LPFC=m | 488 | CONFIG_SCSI_LPFC=m |
492 | # CONFIG_SCSI_DC395x is not set | 489 | # CONFIG_SCSI_DC395x is not set |
493 | # CONFIG_SCSI_DC390T is not set | 490 | # CONFIG_SCSI_DC390T is not set |
@@ -645,6 +642,10 @@ CONFIG_PPPOE=m | |||
645 | # CONFIG_NET_FC is not set | 642 | # CONFIG_NET_FC is not set |
646 | # CONFIG_SHAPER is not set | 643 | # CONFIG_SHAPER is not set |
647 | CONFIG_NETCONSOLE=y | 644 | CONFIG_NETCONSOLE=y |
645 | CONFIG_NETPOLL=y | ||
646 | CONFIG_NETPOLL_RX=y | ||
647 | CONFIG_NETPOLL_TRAP=y | ||
648 | CONFIG_NET_POLL_CONTROLLER=y | ||
648 | 649 | ||
649 | # | 650 | # |
650 | # ISDN subsystem | 651 | # ISDN subsystem |
@@ -746,7 +747,6 @@ CONFIG_HVCS=m | |||
746 | # | 747 | # |
747 | # CONFIG_WATCHDOG is not set | 748 | # CONFIG_WATCHDOG is not set |
748 | # CONFIG_RTC is not set | 749 | # CONFIG_RTC is not set |
749 | # CONFIG_GEN_RTC is not set | ||
750 | # CONFIG_DTLK is not set | 750 | # CONFIG_DTLK is not set |
751 | # CONFIG_R3964 is not set | 751 | # CONFIG_R3964 is not set |
752 | # CONFIG_APPLICOM is not set | 752 | # CONFIG_APPLICOM is not set |
diff --git a/arch/ppc64/defconfig b/arch/ppc64/defconfig index fbf1f427ad35..c361e7727b7a 100644 --- a/arch/ppc64/defconfig +++ b/arch/ppc64/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.13-rc3 | 3 | # Linux kernel version: 2.6.13-rc6 |
4 | # Wed Jul 13 14:37:07 2005 | 4 | # Mon Aug 8 14:16:54 2005 |
5 | # | 5 | # |
6 | CONFIG_64BIT=y | 6 | CONFIG_64BIT=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -289,10 +289,6 @@ CONFIG_NET_CLS_ROUTE=y | |||
289 | # Network testing | 289 | # Network testing |
290 | # | 290 | # |
291 | # CONFIG_NET_PKTGEN is not set | 291 | # CONFIG_NET_PKTGEN is not set |
292 | CONFIG_NETPOLL=y | ||
293 | CONFIG_NETPOLL_RX=y | ||
294 | CONFIG_NETPOLL_TRAP=y | ||
295 | CONFIG_NET_POLL_CONTROLLER=y | ||
296 | # CONFIG_HAMRADIO is not set | 292 | # CONFIG_HAMRADIO is not set |
297 | # CONFIG_IRDA is not set | 293 | # CONFIG_IRDA is not set |
298 | # CONFIG_BT is not set | 294 | # CONFIG_BT is not set |
@@ -506,6 +502,7 @@ CONFIG_SCSI_QLA22XX=m | |||
506 | CONFIG_SCSI_QLA2300=m | 502 | CONFIG_SCSI_QLA2300=m |
507 | CONFIG_SCSI_QLA2322=m | 503 | CONFIG_SCSI_QLA2322=m |
508 | CONFIG_SCSI_QLA6312=m | 504 | CONFIG_SCSI_QLA6312=m |
505 | CONFIG_SCSI_QLA24XX=m | ||
509 | CONFIG_SCSI_LPFC=m | 506 | CONFIG_SCSI_LPFC=m |
510 | # CONFIG_SCSI_DC395x is not set | 507 | # CONFIG_SCSI_DC395x is not set |
511 | # CONFIG_SCSI_DC390T is not set | 508 | # CONFIG_SCSI_DC390T is not set |
@@ -579,11 +576,9 @@ CONFIG_IEEE1394_AMDTP=m | |||
579 | # | 576 | # |
580 | # Macintosh device drivers | 577 | # Macintosh device drivers |
581 | # | 578 | # |
582 | CONFIG_ADB=y | ||
583 | CONFIG_ADB_PMU=y | 579 | CONFIG_ADB_PMU=y |
584 | CONFIG_PMAC_SMU=y | 580 | CONFIG_PMAC_SMU=y |
585 | # CONFIG_PMAC_BACKLIGHT is not set | 581 | # CONFIG_PMAC_BACKLIGHT is not set |
586 | # CONFIG_INPUT_ADBHID is not set | ||
587 | CONFIG_THERM_PM72=y | 582 | CONFIG_THERM_PM72=y |
588 | 583 | ||
589 | # | 584 | # |
@@ -694,6 +689,10 @@ CONFIG_PPPOE=m | |||
694 | # CONFIG_NET_FC is not set | 689 | # CONFIG_NET_FC is not set |
695 | # CONFIG_SHAPER is not set | 690 | # CONFIG_SHAPER is not set |
696 | CONFIG_NETCONSOLE=y | 691 | CONFIG_NETCONSOLE=y |
692 | CONFIG_NETPOLL=y | ||
693 | CONFIG_NETPOLL_RX=y | ||
694 | CONFIG_NETPOLL_TRAP=y | ||
695 | CONFIG_NET_POLL_CONTROLLER=y | ||
697 | 696 | ||
698 | # | 697 | # |
699 | # ISDN subsystem | 698 | # ISDN subsystem |
@@ -797,7 +796,6 @@ CONFIG_HVCS=m | |||
797 | # | 796 | # |
798 | # CONFIG_WATCHDOG is not set | 797 | # CONFIG_WATCHDOG is not set |
799 | # CONFIG_RTC is not set | 798 | # CONFIG_RTC is not set |
800 | # CONFIG_GEN_RTC is not set | ||
801 | # CONFIG_DTLK is not set | 799 | # CONFIG_DTLK is not set |
802 | # CONFIG_R3964 is not set | 800 | # CONFIG_R3964 is not set |
803 | # CONFIG_APPLICOM is not set | 801 | # CONFIG_APPLICOM is not set |
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index 914e125d3971..bba140d98b1b 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c | |||
@@ -413,12 +413,6 @@ static int pci_assign_bus_resource(const struct pci_bus *bus, | |||
413 | return -EBUSY; | 413 | return -EBUSY; |
414 | } | 414 | } |
415 | 415 | ||
416 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno) | ||
417 | { | ||
418 | /* Not implemented for sparc64... */ | ||
419 | BUG(); | ||
420 | } | ||
421 | |||
422 | int pci_assign_resource(struct pci_dev *pdev, int resource) | 416 | int pci_assign_resource(struct pci_dev *pdev, int resource) |
423 | { | 417 | { |
424 | struct pcidev_cookie *pcp = pdev->sysdata; | 418 | struct pcidev_cookie *pcp = pdev->sysdata; |
diff --git a/arch/x86_64/crypto/aes.c b/arch/x86_64/crypto/aes.c index 2b5c4010ce38..acfdaa28791e 100644 --- a/arch/x86_64/crypto/aes.c +++ b/arch/x86_64/crypto/aes.c | |||
@@ -322,3 +322,4 @@ module_exit(aes_fini); | |||
322 | 322 | ||
323 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); | 323 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); |
324 | MODULE_LICENSE("GPL"); | 324 | MODULE_LICENSE("GPL"); |
325 | MODULE_ALIAS("aes"); | ||
diff --git a/arch/x86_64/kernel/mce.c b/arch/x86_64/kernel/mce.c index 3b267c91bb0c..8aa56736cde3 100644 --- a/arch/x86_64/kernel/mce.c +++ b/arch/x86_64/kernel/mce.c | |||
@@ -36,6 +36,7 @@ static unsigned long bank[NR_BANKS] = { [0 ... NR_BANKS-1] = ~0UL }; | |||
36 | static unsigned long console_logged; | 36 | static unsigned long console_logged; |
37 | static int notify_user; | 37 | static int notify_user; |
38 | static int rip_msr; | 38 | static int rip_msr; |
39 | static int mce_bootlog; | ||
39 | 40 | ||
40 | /* | 41 | /* |
41 | * Lockless MCE logging infrastructure. | 42 | * Lockless MCE logging infrastructure. |
@@ -197,10 +198,11 @@ void do_machine_check(struct pt_regs * regs, long error_code) | |||
197 | rdmsrl(MSR_IA32_MC0_ADDR + i*4, m.addr); | 198 | rdmsrl(MSR_IA32_MC0_ADDR + i*4, m.addr); |
198 | 199 | ||
199 | mce_get_rip(&m, regs); | 200 | mce_get_rip(&m, regs); |
200 | if (error_code != -1) | 201 | if (error_code >= 0) |
201 | rdtscll(m.tsc); | 202 | rdtscll(m.tsc); |
202 | wrmsrl(MSR_IA32_MC0_STATUS + i*4, 0); | 203 | wrmsrl(MSR_IA32_MC0_STATUS + i*4, 0); |
203 | mce_log(&m); | 204 | if (error_code != -2) |
205 | mce_log(&m); | ||
204 | 206 | ||
205 | /* Did this bank cause the exception? */ | 207 | /* Did this bank cause the exception? */ |
206 | /* Assume that the bank with uncorrectable errors did it, | 208 | /* Assume that the bank with uncorrectable errors did it, |
@@ -315,7 +317,7 @@ static void mce_init(void *dummy) | |||
315 | 317 | ||
316 | /* Log the machine checks left over from the previous reset. | 318 | /* Log the machine checks left over from the previous reset. |
317 | This also clears all registers */ | 319 | This also clears all registers */ |
318 | do_machine_check(NULL, -1); | 320 | do_machine_check(NULL, mce_bootlog ? -1 : -2); |
319 | 321 | ||
320 | set_in_cr4(X86_CR4_MCE); | 322 | set_in_cr4(X86_CR4_MCE); |
321 | 323 | ||
@@ -476,11 +478,17 @@ static int __init mcheck_disable(char *str) | |||
476 | } | 478 | } |
477 | 479 | ||
478 | /* mce=off disables machine check. Note you can reenable it later | 480 | /* mce=off disables machine check. Note you can reenable it later |
479 | using sysfs */ | 481 | using sysfs. |
482 | mce=bootlog Log MCEs from before booting. Disabled by default to work | ||
483 | around buggy BIOS that leave bogus MCEs. */ | ||
480 | static int __init mcheck_enable(char *str) | 484 | static int __init mcheck_enable(char *str) |
481 | { | 485 | { |
486 | if (*str == '=') | ||
487 | str++; | ||
482 | if (!strcmp(str, "off")) | 488 | if (!strcmp(str, "off")) |
483 | mce_dont_init = 1; | 489 | mce_dont_init = 1; |
490 | else if (!strcmp(str, "bootlog")) | ||
491 | mce_bootlog = 1; | ||
484 | else | 492 | else |
485 | printk("mce= argument %s ignored. Please use /sys", str); | 493 | printk("mce= argument %s ignored. Please use /sys", str); |
486 | return 0; | 494 | return 0; |
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c index 0aa526298e92..116a491e2961 100644 --- a/arch/x86_64/kernel/setup.c +++ b/arch/x86_64/kernel/setup.c | |||
@@ -645,15 +645,15 @@ void __init setup_arch(char **cmdline_p) | |||
645 | } | 645 | } |
646 | } | 646 | } |
647 | #endif | 647 | #endif |
648 | |||
649 | sparse_init(); | ||
650 | |||
651 | #ifdef CONFIG_KEXEC | 648 | #ifdef CONFIG_KEXEC |
652 | if (crashk_res.start != crashk_res.end) { | 649 | if (crashk_res.start != crashk_res.end) { |
653 | reserve_bootmem(crashk_res.start, | 650 | reserve_bootmem(crashk_res.start, |
654 | crashk_res.end - crashk_res.start + 1); | 651 | crashk_res.end - crashk_res.start + 1); |
655 | } | 652 | } |
656 | #endif | 653 | #endif |
654 | |||
655 | sparse_init(); | ||
656 | |||
657 | paging_init(); | 657 | paging_init(); |
658 | 658 | ||
659 | check_ioapic(); | 659 | check_ioapic(); |
diff --git a/drivers/acorn/block/fd1772.c b/drivers/acorn/block/fd1772.c index 3cd2e968e96c..c0a37d98b4f3 100644 --- a/drivers/acorn/block/fd1772.c +++ b/drivers/acorn/block/fd1772.c | |||
@@ -1283,8 +1283,7 @@ static void do_fd_request(request_queue_t* q) | |||
1283 | if (fdc_busy) return; | 1283 | if (fdc_busy) return; |
1284 | save_flags(flags); | 1284 | save_flags(flags); |
1285 | cli(); | 1285 | cli(); |
1286 | while (fdc_busy) | 1286 | wait_event(fdc_wait, !fdc_busy); |
1287 | sleep_on(&fdc_wait); | ||
1288 | fdc_busy = 1; | 1287 | fdc_busy = 1; |
1289 | ENABLE_IRQ(); | 1288 | ENABLE_IRQ(); |
1290 | restore_flags(flags); | 1289 | restore_flags(flags); |
diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c index 2771c861f185..f696da6f417b 100644 --- a/drivers/bluetooth/bpa10x.c +++ b/drivers/bluetooth/bpa10x.c | |||
@@ -367,11 +367,8 @@ static inline void bpa10x_free_urb(struct urb *urb) | |||
367 | if (!urb) | 367 | if (!urb) |
368 | return; | 368 | return; |
369 | 369 | ||
370 | if (urb->setup_packet) | 370 | kfree(urb->setup_packet); |
371 | kfree(urb->setup_packet); | 371 | kfree(urb->transfer_buffer); |
372 | |||
373 | if (urb->transfer_buffer) | ||
374 | kfree(urb->transfer_buffer); | ||
375 | 372 | ||
376 | usb_free_urb(urb); | 373 | usb_free_urb(urb); |
377 | } | 374 | } |
diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c index c0ed213fc857..858fddb046de 100644 --- a/drivers/bluetooth/hci_bcsp.c +++ b/drivers/bluetooth/hci_bcsp.c | |||
@@ -58,8 +58,6 @@ | |||
58 | #ifndef CONFIG_BT_HCIUART_DEBUG | 58 | #ifndef CONFIG_BT_HCIUART_DEBUG |
59 | #undef BT_DBG | 59 | #undef BT_DBG |
60 | #define BT_DBG( A... ) | 60 | #define BT_DBG( A... ) |
61 | #undef BT_DMP | ||
62 | #define BT_DMP( A... ) | ||
63 | #endif | 61 | #endif |
64 | 62 | ||
65 | static int hciextn = 1; | 63 | static int hciextn = 1; |
diff --git a/drivers/bluetooth/hci_h4.c b/drivers/bluetooth/hci_h4.c index ade94a57bb11..533323b60e63 100644 --- a/drivers/bluetooth/hci_h4.c +++ b/drivers/bluetooth/hci_h4.c | |||
@@ -57,8 +57,6 @@ | |||
57 | #ifndef CONFIG_BT_HCIUART_DEBUG | 57 | #ifndef CONFIG_BT_HCIUART_DEBUG |
58 | #undef BT_DBG | 58 | #undef BT_DBG |
59 | #define BT_DBG( A... ) | 59 | #define BT_DBG( A... ) |
60 | #undef BT_DMP | ||
61 | #define BT_DMP( A... ) | ||
62 | #endif | 60 | #endif |
63 | 61 | ||
64 | /* Initialize protocol */ | 62 | /* Initialize protocol */ |
@@ -125,7 +123,6 @@ static inline int h4_check_data_len(struct h4_struct *h4, int len) | |||
125 | 123 | ||
126 | BT_DBG("len %d room %d", len, room); | 124 | BT_DBG("len %d room %d", len, room); |
127 | if (!len) { | 125 | if (!len) { |
128 | BT_DMP(h4->rx_skb->data, h4->rx_skb->len); | ||
129 | hci_recv_frame(h4->rx_skb); | 126 | hci_recv_frame(h4->rx_skb); |
130 | } else if (len > room) { | 127 | } else if (len > room) { |
131 | BT_ERR("Data length is too large"); | 128 | BT_ERR("Data length is too large"); |
@@ -169,8 +166,6 @@ static int h4_recv(struct hci_uart *hu, void *data, int count) | |||
169 | case H4_W4_DATA: | 166 | case H4_W4_DATA: |
170 | BT_DBG("Complete data"); | 167 | BT_DBG("Complete data"); |
171 | 168 | ||
172 | BT_DMP(h4->rx_skb->data, h4->rx_skb->len); | ||
173 | |||
174 | hci_recv_frame(h4->rx_skb); | 169 | hci_recv_frame(h4->rx_skb); |
175 | 170 | ||
176 | h4->rx_state = H4_W4_PACKET_TYPE; | 171 | h4->rx_state = H4_W4_PACKET_TYPE; |
diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c index f766bc22c6bb..90be2eae52e0 100644 --- a/drivers/bluetooth/hci_ldisc.c +++ b/drivers/bluetooth/hci_ldisc.c | |||
@@ -57,8 +57,6 @@ | |||
57 | #ifndef CONFIG_BT_HCIUART_DEBUG | 57 | #ifndef CONFIG_BT_HCIUART_DEBUG |
58 | #undef BT_DBG | 58 | #undef BT_DBG |
59 | #define BT_DBG( A... ) | 59 | #define BT_DBG( A... ) |
60 | #undef BT_DMP | ||
61 | #define BT_DMP( A... ) | ||
62 | #endif | 60 | #endif |
63 | 61 | ||
64 | static int reset = 0; | 62 | static int reset = 0; |
diff --git a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c index b120ecf7b8c9..657719b8254f 100644 --- a/drivers/bluetooth/hci_usb.c +++ b/drivers/bluetooth/hci_usb.c | |||
@@ -57,8 +57,6 @@ | |||
57 | #ifndef CONFIG_BT_HCIUSB_DEBUG | 57 | #ifndef CONFIG_BT_HCIUSB_DEBUG |
58 | #undef BT_DBG | 58 | #undef BT_DBG |
59 | #define BT_DBG(D...) | 59 | #define BT_DBG(D...) |
60 | #undef BT_DMP | ||
61 | #define BT_DMP(D...) | ||
62 | #endif | 60 | #endif |
63 | 61 | ||
64 | #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET | 62 | #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET |
@@ -110,6 +108,9 @@ static struct usb_device_id blacklist_ids[] = { | |||
110 | /* Microsoft Wireless Transceiver for Bluetooth 2.0 */ | 108 | /* Microsoft Wireless Transceiver for Bluetooth 2.0 */ |
111 | { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET }, | 109 | { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET }, |
112 | 110 | ||
111 | /* Kensington Bluetooth USB adapter */ | ||
112 | { USB_DEVICE(0x047d, 0x105d), .driver_info = HCI_RESET }, | ||
113 | |||
113 | /* ISSC Bluetooth Adapter v3.1 */ | 114 | /* ISSC Bluetooth Adapter v3.1 */ |
114 | { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET }, | 115 | { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET }, |
115 | 116 | ||
@@ -387,10 +388,8 @@ static void hci_usb_unlink_urbs(struct hci_usb *husb) | |||
387 | urb = &_urb->urb; | 388 | urb = &_urb->urb; |
388 | BT_DBG("%s freeing _urb %p type %d urb %p", | 389 | BT_DBG("%s freeing _urb %p type %d urb %p", |
389 | husb->hdev->name, _urb, _urb->type, urb); | 390 | husb->hdev->name, _urb, _urb->type, urb); |
390 | if (urb->setup_packet) | 391 | kfree(urb->setup_packet); |
391 | kfree(urb->setup_packet); | 392 | kfree(urb->transfer_buffer); |
392 | if (urb->transfer_buffer) | ||
393 | kfree(urb->transfer_buffer); | ||
394 | _urb_free(_urb); | 393 | _urb_free(_urb); |
395 | } | 394 | } |
396 | 395 | ||
diff --git a/drivers/char/watchdog/i8xx_tco.c b/drivers/char/watchdog/i8xx_tco.c index f975dab1ddf9..a13395e2c372 100644 --- a/drivers/char/watchdog/i8xx_tco.c +++ b/drivers/char/watchdog/i8xx_tco.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * i8xx_tco 0.07: TCO timer driver for i8xx chipsets | 2 | * i8xx_tco: TCO timer driver for i8xx chipsets |
3 | * | 3 | * |
4 | * (c) Copyright 2000 kernel concepts <nils@kernelconcepts.de>, All Rights Reserved. | 4 | * (c) Copyright 2000 kernel concepts <nils@kernelconcepts.de>, All Rights Reserved. |
5 | * http://www.kernelconcepts.de | 5 | * http://www.kernelconcepts.de |
@@ -63,6 +63,9 @@ | |||
63 | * 20050128 Wim Van Sebroeck <wim@iguana.be> | 63 | * 20050128 Wim Van Sebroeck <wim@iguana.be> |
64 | * 0.07 Added support for the ICH4-M, ICH6, ICH6R, ICH6-M, ICH6W and ICH6RW | 64 | * 0.07 Added support for the ICH4-M, ICH6, ICH6R, ICH6-M, ICH6W and ICH6RW |
65 | * chipsets. Also added support for the "undocumented" ICH7 chipset. | 65 | * chipsets. Also added support for the "undocumented" ICH7 chipset. |
66 | * 20050807 Wim Van Sebroeck <wim@iguana.be> | ||
67 | * 0.08 Make sure that the watchdog is only "armed" when started. | ||
68 | * (Kernel Bug 4251) | ||
66 | */ | 69 | */ |
67 | 70 | ||
68 | /* | 71 | /* |
@@ -87,7 +90,7 @@ | |||
87 | #include "i8xx_tco.h" | 90 | #include "i8xx_tco.h" |
88 | 91 | ||
89 | /* Module and version information */ | 92 | /* Module and version information */ |
90 | #define TCO_VERSION "0.07" | 93 | #define TCO_VERSION "0.08" |
91 | #define TCO_MODULE_NAME "i8xx TCO timer" | 94 | #define TCO_MODULE_NAME "i8xx TCO timer" |
92 | #define TCO_DRIVER_NAME TCO_MODULE_NAME ", v" TCO_VERSION | 95 | #define TCO_DRIVER_NAME TCO_MODULE_NAME ", v" TCO_VERSION |
93 | #define PFX TCO_MODULE_NAME ": " | 96 | #define PFX TCO_MODULE_NAME ": " |
@@ -125,10 +128,18 @@ static int tco_timer_start (void) | |||
125 | unsigned char val; | 128 | unsigned char val; |
126 | 129 | ||
127 | spin_lock(&tco_lock); | 130 | spin_lock(&tco_lock); |
131 | |||
132 | /* disable chipset's NO_REBOOT bit */ | ||
133 | pci_read_config_byte (i8xx_tco_pci, 0xd4, &val); | ||
134 | val &= 0xfd; | ||
135 | pci_write_config_byte (i8xx_tco_pci, 0xd4, val); | ||
136 | |||
137 | /* Bit 11: TCO Timer Halt -> 0 = The TCO timer is enabled to count */ | ||
128 | val = inb (TCO1_CNT + 1); | 138 | val = inb (TCO1_CNT + 1); |
129 | val &= 0xf7; | 139 | val &= 0xf7; |
130 | outb (val, TCO1_CNT + 1); | 140 | outb (val, TCO1_CNT + 1); |
131 | val = inb (TCO1_CNT + 1); | 141 | val = inb (TCO1_CNT + 1); |
142 | |||
132 | spin_unlock(&tco_lock); | 143 | spin_unlock(&tco_lock); |
133 | 144 | ||
134 | if (val & 0x08) | 145 | if (val & 0x08) |
@@ -138,13 +149,20 @@ static int tco_timer_start (void) | |||
138 | 149 | ||
139 | static int tco_timer_stop (void) | 150 | static int tco_timer_stop (void) |
140 | { | 151 | { |
141 | unsigned char val; | 152 | unsigned char val, val1; |
142 | 153 | ||
143 | spin_lock(&tco_lock); | 154 | spin_lock(&tco_lock); |
155 | /* Bit 11: TCO Timer Halt -> 1 = The TCO timer is disabled */ | ||
144 | val = inb (TCO1_CNT + 1); | 156 | val = inb (TCO1_CNT + 1); |
145 | val |= 0x08; | 157 | val |= 0x08; |
146 | outb (val, TCO1_CNT + 1); | 158 | outb (val, TCO1_CNT + 1); |
147 | val = inb (TCO1_CNT + 1); | 159 | val = inb (TCO1_CNT + 1); |
160 | |||
161 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ | ||
162 | pci_read_config_byte (i8xx_tco_pci, 0xd4, &val1); | ||
163 | val1 |= 0x02; | ||
164 | pci_write_config_byte (i8xx_tco_pci, 0xd4, val1); | ||
165 | |||
148 | spin_unlock(&tco_lock); | 166 | spin_unlock(&tco_lock); |
149 | 167 | ||
150 | if ((val & 0x08) == 0) | 168 | if ((val & 0x08) == 0) |
@@ -155,6 +173,7 @@ static int tco_timer_stop (void) | |||
155 | static int tco_timer_keepalive (void) | 173 | static int tco_timer_keepalive (void) |
156 | { | 174 | { |
157 | spin_lock(&tco_lock); | 175 | spin_lock(&tco_lock); |
176 | /* Reload the timer by writing to the TCO Timer Reload register */ | ||
158 | outb (0x01, TCO1_RLD); | 177 | outb (0x01, TCO1_RLD); |
159 | spin_unlock(&tco_lock); | 178 | spin_unlock(&tco_lock); |
160 | return 0; | 179 | return 0; |
@@ -417,9 +436,8 @@ static unsigned char __init i8xx_tco_getdevice (void) | |||
417 | printk (KERN_ERR PFX "failed to get TCOBASE address\n"); | 436 | printk (KERN_ERR PFX "failed to get TCOBASE address\n"); |
418 | return 0; | 437 | return 0; |
419 | } | 438 | } |
420 | /* | 439 | |
421 | * Check chipset's NO_REBOOT bit | 440 | /* Check chipset's NO_REBOOT bit */ |
422 | */ | ||
423 | pci_read_config_byte (i8xx_tco_pci, 0xd4, &val1); | 441 | pci_read_config_byte (i8xx_tco_pci, 0xd4, &val1); |
424 | if (val1 & 0x02) { | 442 | if (val1 & 0x02) { |
425 | val1 &= 0xfd; | 443 | val1 &= 0xfd; |
@@ -430,6 +448,10 @@ static unsigned char __init i8xx_tco_getdevice (void) | |||
430 | return 0; /* Cannot reset NO_REBOOT bit */ | 448 | return 0; /* Cannot reset NO_REBOOT bit */ |
431 | } | 449 | } |
432 | } | 450 | } |
451 | /* Disable reboots untill the watchdog starts */ | ||
452 | val1 |= 0x02; | ||
453 | pci_write_config_byte (i8xx_tco_pci, 0xd4, val1); | ||
454 | |||
433 | /* Set the TCO_EN bit in SMI_EN register */ | 455 | /* Set the TCO_EN bit in SMI_EN register */ |
434 | if (!request_region (SMI_EN + 1, 1, "i8xx TCO")) { | 456 | if (!request_region (SMI_EN + 1, 1, "i8xx TCO")) { |
435 | printk (KERN_ERR PFX "I/O address 0x%04x already in use\n", | 457 | printk (KERN_ERR PFX "I/O address 0x%04x already in use\n", |
@@ -505,17 +527,10 @@ out: | |||
505 | 527 | ||
506 | static void __exit watchdog_cleanup (void) | 528 | static void __exit watchdog_cleanup (void) |
507 | { | 529 | { |
508 | u8 val; | ||
509 | |||
510 | /* Stop the timer before we leave */ | 530 | /* Stop the timer before we leave */ |
511 | if (!nowayout) | 531 | if (!nowayout) |
512 | tco_timer_stop (); | 532 | tco_timer_stop (); |
513 | 533 | ||
514 | /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ | ||
515 | pci_read_config_byte (i8xx_tco_pci, 0xd4, &val); | ||
516 | val |= 0x02; | ||
517 | pci_write_config_byte (i8xx_tco_pci, 0xd4, val); | ||
518 | |||
519 | /* Deregister */ | 534 | /* Deregister */ |
520 | misc_deregister (&i8xx_tco_miscdev); | 535 | misc_deregister (&i8xx_tco_miscdev); |
521 | unregister_reboot_notifier(&i8xx_tco_notifier); | 536 | unregister_reboot_notifier(&i8xx_tco_notifier); |
diff --git a/drivers/i2c/busses/i2c-sibyte.c b/drivers/i2c/busses/i2c-sibyte.c index 1c99536b673b..fa503ed9f86d 100644 --- a/drivers/i2c/busses/i2c-sibyte.c +++ b/drivers/i2c/busses/i2c-sibyte.c | |||
@@ -23,8 +23,8 @@ | |||
23 | #include <asm/sibyte/sb1250_smbus.h> | 23 | #include <asm/sibyte/sb1250_smbus.h> |
24 | 24 | ||
25 | static struct i2c_algo_sibyte_data sibyte_board_data[2] = { | 25 | static struct i2c_algo_sibyte_data sibyte_board_data[2] = { |
26 | { NULL, 0, (void *) (KSEG1+A_SMB_BASE(0)) }, | 26 | { NULL, 0, (void *) (CKSEG1+A_SMB_BASE(0)) }, |
27 | { NULL, 1, (void *) (KSEG1+A_SMB_BASE(1)) } | 27 | { NULL, 1, (void *) (CKSEG1+A_SMB_BASE(1)) } |
28 | }; | 28 | }; |
29 | 29 | ||
30 | static struct i2c_adapter sibyte_board_adapter[2] = { | 30 | static struct i2c_adapter sibyte_board_adapter[2] = { |
diff --git a/drivers/isdn/icn/icn.c b/drivers/isdn/icn/icn.c index e0d1b01cc74c..386df71eee74 100644 --- a/drivers/isdn/icn/icn.c +++ b/drivers/isdn/icn/icn.c | |||
@@ -1650,7 +1650,7 @@ static void __exit icn_exit(void) | |||
1650 | { | 1650 | { |
1651 | isdn_ctrl cmd; | 1651 | isdn_ctrl cmd; |
1652 | icn_card *card = cards; | 1652 | icn_card *card = cards; |
1653 | icn_card *last; | 1653 | icn_card *last, *tmpcard; |
1654 | int i; | 1654 | int i; |
1655 | unsigned long flags; | 1655 | unsigned long flags; |
1656 | 1656 | ||
@@ -1670,8 +1670,9 @@ static void __exit icn_exit(void) | |||
1670 | for (i = 0; i < ICN_BCH; i++) | 1670 | for (i = 0; i < ICN_BCH; i++) |
1671 | icn_free_queue(card, i); | 1671 | icn_free_queue(card, i); |
1672 | } | 1672 | } |
1673 | card = card->next; | 1673 | tmpcard = card->next; |
1674 | spin_unlock_irqrestore(&card->lock, flags); | 1674 | spin_unlock_irqrestore(&card->lock, flags); |
1675 | card = tmpcard; | ||
1675 | } | 1676 | } |
1676 | card = cards; | 1677 | card = cards; |
1677 | cards = NULL; | 1678 | cards = NULL; |
diff --git a/drivers/media/dvb/frontends/dvb-pll.c b/drivers/media/dvb/frontends/dvb-pll.c index 5264310c070e..536c35d969b7 100644 --- a/drivers/media/dvb/frontends/dvb-pll.c +++ b/drivers/media/dvb/frontends/dvb-pll.c | |||
@@ -225,6 +225,22 @@ struct dvb_pll_desc dvb_pll_tua6034 = { | |||
225 | }; | 225 | }; |
226 | EXPORT_SYMBOL(dvb_pll_tua6034); | 226 | EXPORT_SYMBOL(dvb_pll_tua6034); |
227 | 227 | ||
228 | /* Infineon TUA6034 | ||
229 | * used in LG Innotek TDVS-H062F | ||
230 | */ | ||
231 | struct dvb_pll_desc dvb_pll_tdvs_tua6034 = { | ||
232 | .name = "LG/Infineon TUA6034", | ||
233 | .min = 54000000, | ||
234 | .max = 863000000, | ||
235 | .count = 3, | ||
236 | .entries = { | ||
237 | { 160000000, 44000000, 62500, 0xce, 0x01 }, | ||
238 | { 455000000, 44000000, 62500, 0xce, 0x02 }, | ||
239 | { 999999999, 44000000, 62500, 0xce, 0x04 }, | ||
240 | }, | ||
241 | }; | ||
242 | EXPORT_SYMBOL(dvb_pll_tdvs_tua6034); | ||
243 | |||
228 | /* Philips FMD1216ME | 244 | /* Philips FMD1216ME |
229 | * used in Medion Hybrid PCMCIA card and USB Box | 245 | * used in Medion Hybrid PCMCIA card and USB Box |
230 | */ | 246 | */ |
diff --git a/drivers/media/dvb/frontends/dvb-pll.h b/drivers/media/dvb/frontends/dvb-pll.h index cb794759d89e..205b2d1a8852 100644 --- a/drivers/media/dvb/frontends/dvb-pll.h +++ b/drivers/media/dvb/frontends/dvb-pll.h | |||
@@ -31,6 +31,7 @@ extern struct dvb_pll_desc dvb_pll_unknown_1; | |||
31 | extern struct dvb_pll_desc dvb_pll_tua6010xs; | 31 | extern struct dvb_pll_desc dvb_pll_tua6010xs; |
32 | extern struct dvb_pll_desc dvb_pll_env57h1xd5; | 32 | extern struct dvb_pll_desc dvb_pll_env57h1xd5; |
33 | extern struct dvb_pll_desc dvb_pll_tua6034; | 33 | extern struct dvb_pll_desc dvb_pll_tua6034; |
34 | extern struct dvb_pll_desc dvb_pll_tdvs_tua6034; | ||
34 | extern struct dvb_pll_desc dvb_pll_tda665x; | 35 | extern struct dvb_pll_desc dvb_pll_tda665x; |
35 | extern struct dvb_pll_desc dvb_pll_fmd1216me; | 36 | extern struct dvb_pll_desc dvb_pll_fmd1216me; |
36 | extern struct dvb_pll_desc dvb_pll_tded4; | 37 | extern struct dvb_pll_desc dvb_pll_tded4; |
diff --git a/drivers/media/dvb/frontends/lgdt330x.c b/drivers/media/dvb/frontends/lgdt330x.c index e94dee50eecd..c48e7c11d708 100644 --- a/drivers/media/dvb/frontends/lgdt330x.c +++ b/drivers/media/dvb/frontends/lgdt330x.c | |||
@@ -1,11 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * Support for LGDT3302 & LGDT3303 (DViCO FusionHDTV Gold) - VSB/QAM | 2 | * Support for LGDT3302 and LGDT3303 - VSB/QAM |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Wilson Michaels <wilsonmichaels@earthlink.net> | 4 | * Copyright (C) 2005 Wilson Michaels <wilsonmichaels@earthlink.net> |
5 | * | 5 | * |
6 | * Based on code from Kirk Lapray <kirk_lapray@bigfoot.com> | ||
7 | * Copyright (C) 2005 | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
11 | * the Free Software Foundation; either version 2 of the License, or | 8 | * the Free Software Foundation; either version 2 of the License, or |
@@ -25,11 +22,13 @@ | |||
25 | /* | 22 | /* |
26 | * NOTES ABOUT THIS DRIVER | 23 | * NOTES ABOUT THIS DRIVER |
27 | * | 24 | * |
28 | * This driver supports DViCO FusionHDTV Gold under Linux. | 25 | * This Linux driver supports: |
26 | * DViCO FusionHDTV 3 Gold-Q | ||
27 | * DViCO FusionHDTV 3 Gold-T | ||
28 | * DViCO FusionHDTV 5 Gold | ||
29 | * | 29 | * |
30 | * TODO: | 30 | * TODO: |
31 | * BER and signal strength always return 0. | 31 | * signal strength always returns 0. |
32 | * Include support for LGDT3303 | ||
33 | * | 32 | * |
34 | */ | 33 | */ |
35 | 34 | ||
@@ -41,7 +40,6 @@ | |||
41 | #include <asm/byteorder.h> | 40 | #include <asm/byteorder.h> |
42 | 41 | ||
43 | #include "dvb_frontend.h" | 42 | #include "dvb_frontend.h" |
44 | #include "dvb-pll.h" | ||
45 | #include "lgdt330x_priv.h" | 43 | #include "lgdt330x_priv.h" |
46 | #include "lgdt330x.h" | 44 | #include "lgdt330x.h" |
47 | 45 | ||
@@ -70,55 +68,37 @@ struct lgdt330x_state | |||
70 | u32 current_frequency; | 68 | u32 current_frequency; |
71 | }; | 69 | }; |
72 | 70 | ||
73 | static int i2c_writebytes (struct lgdt330x_state* state, | 71 | static int i2c_write_demod_bytes (struct lgdt330x_state* state, |
74 | u8 addr, /* demod_address or pll_address */ | ||
75 | u8 *buf, /* data bytes to send */ | 72 | u8 *buf, /* data bytes to send */ |
76 | int len /* number of bytes to send */ ) | 73 | int len /* number of bytes to send */ ) |
77 | { | 74 | { |
78 | u8 tmp[] = { buf[0], buf[1] }; | ||
79 | struct i2c_msg msg = | 75 | struct i2c_msg msg = |
80 | { .addr = addr, .flags = 0, .buf = tmp, .len = 2 }; | 76 | { .addr = state->config->demod_address, |
81 | int err; | 77 | .flags = 0, |
78 | .buf = buf, | ||
79 | .len = 2 }; | ||
82 | int i; | 80 | int i; |
81 | int err; | ||
83 | 82 | ||
84 | for (i=1; i<len; i++) { | 83 | for (i=0; i<len-1; i+=2){ |
85 | tmp[1] = buf[i]; | ||
86 | if ((err = i2c_transfer(state->i2c, &msg, 1)) != 1) { | 84 | if ((err = i2c_transfer(state->i2c, &msg, 1)) != 1) { |
87 | printk(KERN_WARNING "lgdt330x: %s error (addr %02x <- %02x, err == %i)\n", __FUNCTION__, addr, buf[0], err); | 85 | printk(KERN_WARNING "lgdt330x: %s error (addr %02x <- %02x, err = %i)\n", __FUNCTION__, msg.buf[0], msg.buf[1], err); |
88 | if (err < 0) | 86 | if (err < 0) |
89 | return err; | 87 | return err; |
90 | else | 88 | else |
91 | return -EREMOTEIO; | 89 | return -EREMOTEIO; |
92 | } | 90 | } |
93 | tmp[0]++; | 91 | msg.buf += 2; |
94 | } | ||
95 | return 0; | ||
96 | } | ||
97 | |||
98 | #if 0 | ||
99 | static int i2c_readbytes (struct lgdt330x_state* state, | ||
100 | u8 addr, /* demod_address or pll_address */ | ||
101 | u8 *buf, /* holds data bytes read */ | ||
102 | int len /* number of bytes to read */ ) | ||
103 | { | ||
104 | struct i2c_msg msg = | ||
105 | { .addr = addr, .flags = I2C_M_RD, .buf = buf, .len = len }; | ||
106 | int err; | ||
107 | |||
108 | if ((err = i2c_transfer(state->i2c, &msg, 1)) != 1) { | ||
109 | printk(KERN_WARNING "lgdt330x: %s error (addr %02x, err == %i)\n", __FUNCTION__, addr, err); | ||
110 | return -EREMOTEIO; | ||
111 | } | 92 | } |
112 | return 0; | 93 | return 0; |
113 | } | 94 | } |
114 | #endif | ||
115 | 95 | ||
116 | /* | 96 | /* |
117 | * This routine writes the register (reg) to the demod bus | 97 | * This routine writes the register (reg) to the demod bus |
118 | * then reads the data returned for (len) bytes. | 98 | * then reads the data returned for (len) bytes. |
119 | */ | 99 | */ |
120 | 100 | ||
121 | static u8 i2c_selectreadbytes (struct lgdt330x_state* state, | 101 | static u8 i2c_read_demod_bytes (struct lgdt330x_state* state, |
122 | enum I2C_REG reg, u8* buf, int len) | 102 | enum I2C_REG reg, u8* buf, int len) |
123 | { | 103 | { |
124 | u8 wr [] = { reg }; | 104 | u8 wr [] = { reg }; |
@@ -139,7 +119,7 @@ static u8 i2c_selectreadbytes (struct lgdt330x_state* state, | |||
139 | } | 119 | } |
140 | 120 | ||
141 | /* Software reset */ | 121 | /* Software reset */ |
142 | int lgdt330x_SwReset(struct lgdt330x_state* state) | 122 | static int lgdt3302_SwReset(struct lgdt330x_state* state) |
143 | { | 123 | { |
144 | u8 ret; | 124 | u8 ret; |
145 | u8 reset[] = { | 125 | u8 reset[] = { |
@@ -148,23 +128,83 @@ int lgdt330x_SwReset(struct lgdt330x_state* state) | |||
148 | * bits 5-0 are 1 to mask interrupts */ | 128 | * bits 5-0 are 1 to mask interrupts */ |
149 | }; | 129 | }; |
150 | 130 | ||
151 | ret = i2c_writebytes(state, | 131 | ret = i2c_write_demod_bytes(state, |
152 | state->config->demod_address, | ||
153 | reset, sizeof(reset)); | 132 | reset, sizeof(reset)); |
154 | if (ret == 0) { | 133 | if (ret == 0) { |
155 | /* spec says reset takes 100 ns why wait */ | 134 | |
156 | /* mdelay(100); */ /* keep low for 100mS */ | 135 | /* force reset high (inactive) and unmask interrupts */ |
157 | reset[1] = 0x7f; /* force reset high (inactive) | 136 | reset[1] = 0x7f; |
158 | * and unmask interrupts */ | 137 | ret = i2c_write_demod_bytes(state, |
159 | ret = i2c_writebytes(state, | ||
160 | state->config->demod_address, | ||
161 | reset, sizeof(reset)); | 138 | reset, sizeof(reset)); |
162 | } | 139 | } |
163 | /* Spec does not indicate a need for this either */ | ||
164 | /*mdelay(5); */ /* wait 5 msec before doing more */ | ||
165 | return ret; | 140 | return ret; |
166 | } | 141 | } |
167 | 142 | ||
143 | static int lgdt3303_SwReset(struct lgdt330x_state* state) | ||
144 | { | ||
145 | u8 ret; | ||
146 | u8 reset[] = { | ||
147 | 0x02, | ||
148 | 0x00 /* bit 0 is active low software reset */ | ||
149 | }; | ||
150 | |||
151 | ret = i2c_write_demod_bytes(state, | ||
152 | reset, sizeof(reset)); | ||
153 | if (ret == 0) { | ||
154 | |||
155 | /* force reset high (inactive) */ | ||
156 | reset[1] = 0x01; | ||
157 | ret = i2c_write_demod_bytes(state, | ||
158 | reset, sizeof(reset)); | ||
159 | } | ||
160 | return ret; | ||
161 | } | ||
162 | |||
163 | static int lgdt330x_SwReset(struct lgdt330x_state* state) | ||
164 | { | ||
165 | switch (state->config->demod_chip) { | ||
166 | case LGDT3302: | ||
167 | return lgdt3302_SwReset(state); | ||
168 | case LGDT3303: | ||
169 | return lgdt3303_SwReset(state); | ||
170 | default: | ||
171 | return -ENODEV; | ||
172 | } | ||
173 | } | ||
174 | |||
175 | #ifdef MUTE_TDA9887 | ||
176 | static int i2c_write_ntsc_demod (struct lgdt330x_state* state, u8 buf[2]) | ||
177 | { | ||
178 | struct i2c_msg msg = | ||
179 | { .addr = 0x43, | ||
180 | .flags = 0, | ||
181 | .buf = buf, | ||
182 | .len = 2 }; | ||
183 | int err; | ||
184 | |||
185 | if ((err = i2c_transfer(state->i2c, &msg, 1)) != 1) { | ||
186 | printk(KERN_WARNING "lgdt330x: %s error (addr %02x <- %02x, err = %i)\n", __FUNCTION__, msg.buf[0], msg.buf[1], err); | ||
187 | if (err < 0) | ||
188 | return err; | ||
189 | else | ||
190 | return -EREMOTEIO; | ||
191 | } | ||
192 | return 0; | ||
193 | } | ||
194 | |||
195 | static void fiddle_with_ntsc_if_demod(struct lgdt330x_state* state) | ||
196 | { | ||
197 | // Experimental code | ||
198 | u8 buf0[] = {0x00, 0x20}; | ||
199 | u8 buf1[] = {0x01, 0x00}; | ||
200 | u8 buf2[] = {0x02, 0x00}; | ||
201 | |||
202 | i2c_write_ntsc_demod(state, buf0); | ||
203 | i2c_write_ntsc_demod(state, buf1); | ||
204 | i2c_write_ntsc_demod(state, buf2); | ||
205 | } | ||
206 | #endif | ||
207 | |||
168 | static int lgdt330x_init(struct dvb_frontend* fe) | 208 | static int lgdt330x_init(struct dvb_frontend* fe) |
169 | { | 209 | { |
170 | /* Hardware reset is done using gpio[0] of cx23880x chip. | 210 | /* Hardware reset is done using gpio[0] of cx23880x chip. |
@@ -173,22 +213,101 @@ static int lgdt330x_init(struct dvb_frontend* fe) | |||
173 | * Maybe there needs to be a callable function in cx88-core or | 213 | * Maybe there needs to be a callable function in cx88-core or |
174 | * the caller of this function needs to do it. */ | 214 | * the caller of this function needs to do it. */ |
175 | 215 | ||
176 | dprintk("%s entered\n", __FUNCTION__); | 216 | /* |
177 | return lgdt330x_SwReset((struct lgdt330x_state*) fe->demodulator_priv); | 217 | * Array of byte pairs <address, value> |
218 | * to initialize each different chip | ||
219 | */ | ||
220 | static u8 lgdt3302_init_data[] = { | ||
221 | /* Use 50MHz parameter values from spec sheet since xtal is 50 */ | ||
222 | /* Change the value of NCOCTFV[25:0] of carrier | ||
223 | recovery center frequency register */ | ||
224 | VSB_CARRIER_FREQ0, 0x00, | ||
225 | VSB_CARRIER_FREQ1, 0x87, | ||
226 | VSB_CARRIER_FREQ2, 0x8e, | ||
227 | VSB_CARRIER_FREQ3, 0x01, | ||
228 | /* Change the TPCLK pin polarity | ||
229 | data is valid on falling clock */ | ||
230 | DEMUX_CONTROL, 0xfb, | ||
231 | /* Change the value of IFBW[11:0] of | ||
232 | AGC IF/RF loop filter bandwidth register */ | ||
233 | AGC_RF_BANDWIDTH0, 0x40, | ||
234 | AGC_RF_BANDWIDTH1, 0x93, | ||
235 | AGC_RF_BANDWIDTH2, 0x00, | ||
236 | /* Change the value of bit 6, 'nINAGCBY' and | ||
237 | 'NSSEL[1:0] of ACG function control register 2 */ | ||
238 | AGC_FUNC_CTRL2, 0xc6, | ||
239 | /* Change the value of bit 6 'RFFIX' | ||
240 | of AGC function control register 3 */ | ||
241 | AGC_FUNC_CTRL3, 0x40, | ||
242 | /* Set the value of 'INLVTHD' register 0x2a/0x2c | ||
243 | to 0x7fe */ | ||
244 | AGC_DELAY0, 0x07, | ||
245 | AGC_DELAY2, 0xfe, | ||
246 | /* Change the value of IAGCBW[15:8] | ||
247 | of inner AGC loop filter bandwith */ | ||
248 | AGC_LOOP_BANDWIDTH0, 0x08, | ||
249 | AGC_LOOP_BANDWIDTH1, 0x9a | ||
250 | }; | ||
251 | |||
252 | static u8 lgdt3303_init_data[] = { | ||
253 | 0x4c, 0x14 | ||
254 | }; | ||
255 | |||
256 | struct lgdt330x_state* state = fe->demodulator_priv; | ||
257 | char *chip_name; | ||
258 | int err; | ||
259 | |||
260 | switch (state->config->demod_chip) { | ||
261 | case LGDT3302: | ||
262 | chip_name = "LGDT3302"; | ||
263 | err = i2c_write_demod_bytes(state, lgdt3302_init_data, | ||
264 | sizeof(lgdt3302_init_data)); | ||
265 | break; | ||
266 | case LGDT3303: | ||
267 | chip_name = "LGDT3303"; | ||
268 | err = i2c_write_demod_bytes(state, lgdt3303_init_data, | ||
269 | sizeof(lgdt3303_init_data)); | ||
270 | #ifdef MUTE_TDA9887 | ||
271 | fiddle_with_ntsc_if_demod(state); | ||
272 | #endif | ||
273 | break; | ||
274 | default: | ||
275 | chip_name = "undefined"; | ||
276 | printk (KERN_WARNING "Only LGDT3302 and LGDT3303 are supported chips.\n"); | ||
277 | err = -ENODEV; | ||
278 | } | ||
279 | dprintk("%s entered as %s\n", __FUNCTION__, chip_name); | ||
280 | if (err < 0) | ||
281 | return err; | ||
282 | return lgdt330x_SwReset(state); | ||
178 | } | 283 | } |
179 | 284 | ||
180 | static int lgdt330x_read_ber(struct dvb_frontend* fe, u32* ber) | 285 | static int lgdt330x_read_ber(struct dvb_frontend* fe, u32* ber) |
181 | { | 286 | { |
182 | *ber = 0; /* Dummy out for now */ | 287 | *ber = 0; /* Not supplied by the demod chips */ |
183 | return 0; | 288 | return 0; |
184 | } | 289 | } |
185 | 290 | ||
186 | static int lgdt330x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) | 291 | static int lgdt330x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) |
187 | { | 292 | { |
188 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; | 293 | struct lgdt330x_state* state = fe->demodulator_priv; |
294 | int err; | ||
189 | u8 buf[2]; | 295 | u8 buf[2]; |
190 | 296 | ||
191 | i2c_selectreadbytes(state, PACKET_ERR_COUNTER1, buf, sizeof(buf)); | 297 | switch (state->config->demod_chip) { |
298 | case LGDT3302: | ||
299 | err = i2c_read_demod_bytes(state, LGDT3302_PACKET_ERR_COUNTER1, | ||
300 | buf, sizeof(buf)); | ||
301 | break; | ||
302 | case LGDT3303: | ||
303 | err = i2c_read_demod_bytes(state, LGDT3303_PACKET_ERR_COUNTER1, | ||
304 | buf, sizeof(buf)); | ||
305 | break; | ||
306 | default: | ||
307 | printk(KERN_WARNING | ||
308 | "Only LGDT3302 and LGDT3303 are supported chips.\n"); | ||
309 | err = -ENODEV; | ||
310 | } | ||
192 | 311 | ||
193 | *ucblocks = (buf[0] << 8) | buf[1]; | 312 | *ucblocks = (buf[0] << 8) | buf[1]; |
194 | return 0; | 313 | return 0; |
@@ -197,123 +316,113 @@ static int lgdt330x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) | |||
197 | static int lgdt330x_set_parameters(struct dvb_frontend* fe, | 316 | static int lgdt330x_set_parameters(struct dvb_frontend* fe, |
198 | struct dvb_frontend_parameters *param) | 317 | struct dvb_frontend_parameters *param) |
199 | { | 318 | { |
200 | struct lgdt330x_state* state = | 319 | /* |
201 | (struct lgdt330x_state*) fe->demodulator_priv; | 320 | * Array of byte pairs <address, value> |
321 | * to initialize 8VSB for lgdt3303 chip 50 MHz IF | ||
322 | */ | ||
323 | static u8 lgdt3303_8vsb_44_data[] = { | ||
324 | 0x04, 0x00, | ||
325 | 0x0d, 0x40, | ||
326 | 0x0e, 0x87, | ||
327 | 0x0f, 0x8e, | ||
328 | 0x10, 0x01, | ||
329 | 0x47, 0x8b }; | ||
330 | |||
331 | /* | ||
332 | * Array of byte pairs <address, value> | ||
333 | * to initialize QAM for lgdt3303 chip | ||
334 | */ | ||
335 | static u8 lgdt3303_qam_data[] = { | ||
336 | 0x04, 0x00, | ||
337 | 0x0d, 0x00, | ||
338 | 0x0e, 0x00, | ||
339 | 0x0f, 0x00, | ||
340 | 0x10, 0x00, | ||
341 | 0x51, 0x63, | ||
342 | 0x47, 0x66, | ||
343 | 0x48, 0x66, | ||
344 | 0x4d, 0x1a, | ||
345 | 0x49, 0x08, | ||
346 | 0x4a, 0x9b }; | ||
347 | |||
348 | struct lgdt330x_state* state = fe->demodulator_priv; | ||
202 | 349 | ||
203 | /* Use 50MHz parameter values from spec sheet since xtal is 50 */ | ||
204 | static u8 top_ctrl_cfg[] = { TOP_CONTROL, 0x03 }; | 350 | static u8 top_ctrl_cfg[] = { TOP_CONTROL, 0x03 }; |
205 | static u8 vsb_freq_cfg[] = { VSB_CARRIER_FREQ0, 0x00, 0x87, 0x8e, 0x01 }; | ||
206 | static u8 demux_ctrl_cfg[] = { DEMUX_CONTROL, 0xfb }; | ||
207 | static u8 agc_rf_cfg[] = { AGC_RF_BANDWIDTH0, 0x40, 0x93, 0x00 }; | ||
208 | static u8 agc_ctrl_cfg[] = { AGC_FUNC_CTRL2, 0xc6, 0x40 }; | ||
209 | static u8 agc_delay_cfg[] = { AGC_DELAY0, 0x07, 0x00, 0xfe }; | ||
210 | static u8 agc_loop_cfg[] = { AGC_LOOP_BANDWIDTH0, 0x08, 0x9a }; | ||
211 | 351 | ||
352 | int err; | ||
212 | /* Change only if we are actually changing the modulation */ | 353 | /* Change only if we are actually changing the modulation */ |
213 | if (state->current_modulation != param->u.vsb.modulation) { | 354 | if (state->current_modulation != param->u.vsb.modulation) { |
214 | switch(param->u.vsb.modulation) { | 355 | switch(param->u.vsb.modulation) { |
215 | case VSB_8: | 356 | case VSB_8: |
216 | dprintk("%s: VSB_8 MODE\n", __FUNCTION__); | 357 | dprintk("%s: VSB_8 MODE\n", __FUNCTION__); |
217 | 358 | ||
218 | /* Select VSB mode and serial MPEG interface */ | 359 | /* Select VSB mode */ |
219 | top_ctrl_cfg[1] = 0x07; | 360 | top_ctrl_cfg[1] = 0x03; |
220 | 361 | ||
221 | /* Select ANT connector if supported by card */ | 362 | /* Select ANT connector if supported by card */ |
222 | if (state->config->pll_rf_set) | 363 | if (state->config->pll_rf_set) |
223 | state->config->pll_rf_set(fe, 1); | 364 | state->config->pll_rf_set(fe, 1); |
365 | |||
366 | if (state->config->demod_chip == LGDT3303) { | ||
367 | err = i2c_write_demod_bytes(state, lgdt3303_8vsb_44_data, | ||
368 | sizeof(lgdt3303_8vsb_44_data)); | ||
369 | } | ||
224 | break; | 370 | break; |
225 | 371 | ||
226 | case QAM_64: | 372 | case QAM_64: |
227 | dprintk("%s: QAM_64 MODE\n", __FUNCTION__); | 373 | dprintk("%s: QAM_64 MODE\n", __FUNCTION__); |
228 | 374 | ||
229 | /* Select QAM_64 mode and serial MPEG interface */ | 375 | /* Select QAM_64 mode */ |
230 | top_ctrl_cfg[1] = 0x04; | 376 | top_ctrl_cfg[1] = 0x00; |
231 | 377 | ||
232 | /* Select CABLE connector if supported by card */ | 378 | /* Select CABLE connector if supported by card */ |
233 | if (state->config->pll_rf_set) | 379 | if (state->config->pll_rf_set) |
234 | state->config->pll_rf_set(fe, 0); | 380 | state->config->pll_rf_set(fe, 0); |
381 | |||
382 | if (state->config->demod_chip == LGDT3303) { | ||
383 | err = i2c_write_demod_bytes(state, lgdt3303_qam_data, | ||
384 | sizeof(lgdt3303_qam_data)); | ||
385 | } | ||
235 | break; | 386 | break; |
236 | 387 | ||
237 | case QAM_256: | 388 | case QAM_256: |
238 | dprintk("%s: QAM_256 MODE\n", __FUNCTION__); | 389 | dprintk("%s: QAM_256 MODE\n", __FUNCTION__); |
239 | 390 | ||
240 | /* Select QAM_256 mode and serial MPEG interface */ | 391 | /* Select QAM_256 mode */ |
241 | top_ctrl_cfg[1] = 0x05; | 392 | top_ctrl_cfg[1] = 0x01; |
242 | 393 | ||
243 | /* Select CABLE connector if supported by card */ | 394 | /* Select CABLE connector if supported by card */ |
244 | if (state->config->pll_rf_set) | 395 | if (state->config->pll_rf_set) |
245 | state->config->pll_rf_set(fe, 0); | 396 | state->config->pll_rf_set(fe, 0); |
397 | |||
398 | if (state->config->demod_chip == LGDT3303) { | ||
399 | err = i2c_write_demod_bytes(state, lgdt3303_qam_data, | ||
400 | sizeof(lgdt3303_qam_data)); | ||
401 | } | ||
246 | break; | 402 | break; |
247 | default: | 403 | default: |
248 | printk(KERN_WARNING "lgdt330x: %s: Modulation type(%d) UNSUPPORTED\n", __FUNCTION__, param->u.vsb.modulation); | 404 | printk(KERN_WARNING "lgdt330x: %s: Modulation type(%d) UNSUPPORTED\n", __FUNCTION__, param->u.vsb.modulation); |
249 | return -1; | 405 | return -1; |
250 | } | 406 | } |
251 | /* Initializations common to all modes */ | 407 | /* |
408 | * select serial or parallel MPEG harware interface | ||
409 | * Serial: 0x04 for LGDT3302 or 0x40 for LGDT3303 | ||
410 | * Parallel: 0x00 | ||
411 | */ | ||
412 | top_ctrl_cfg[1] |= state->config->serial_mpeg; | ||
252 | 413 | ||
253 | /* Select the requested mode */ | 414 | /* Select the requested mode */ |
254 | i2c_writebytes(state, state->config->demod_address, | 415 | i2c_write_demod_bytes(state, top_ctrl_cfg, |
255 | top_ctrl_cfg, sizeof(top_ctrl_cfg)); | 416 | sizeof(top_ctrl_cfg)); |
256 | |||
257 | /* Change the value of IFBW[11:0] | ||
258 | of AGC IF/RF loop filter bandwidth register */ | ||
259 | i2c_writebytes(state, state->config->demod_address, | ||
260 | agc_rf_cfg, sizeof(agc_rf_cfg)); | ||
261 | |||
262 | /* Change the value of bit 6, 'nINAGCBY' and | ||
263 | 'NSSEL[1:0] of ACG function control register 2 */ | ||
264 | /* Change the value of bit 6 'RFFIX' | ||
265 | of AGC function control register 3 */ | ||
266 | i2c_writebytes(state, state->config->demod_address, | ||
267 | agc_ctrl_cfg, sizeof(agc_ctrl_cfg)); | ||
268 | |||
269 | /* Change the TPCLK pin polarity | ||
270 | data is valid on falling clock */ | ||
271 | i2c_writebytes(state, state->config->demod_address, | ||
272 | demux_ctrl_cfg, sizeof(demux_ctrl_cfg)); | ||
273 | |||
274 | /* Change the value of NCOCTFV[25:0] of carrier | ||
275 | recovery center frequency register */ | ||
276 | i2c_writebytes(state, state->config->demod_address, | ||
277 | vsb_freq_cfg, sizeof(vsb_freq_cfg)); | ||
278 | |||
279 | /* Set the value of 'INLVTHD' register 0x2a/0x2c to 0x7fe */ | ||
280 | i2c_writebytes(state, state->config->demod_address, | ||
281 | agc_delay_cfg, sizeof(agc_delay_cfg)); | ||
282 | |||
283 | /* Change the value of IAGCBW[15:8] | ||
284 | of inner AGC loop filter bandwith */ | ||
285 | i2c_writebytes(state, state->config->demod_address, | ||
286 | agc_loop_cfg, sizeof(agc_loop_cfg)); | ||
287 | |||
288 | state->config->set_ts_params(fe, 0); | 417 | state->config->set_ts_params(fe, 0); |
289 | state->current_modulation = param->u.vsb.modulation; | 418 | state->current_modulation = param->u.vsb.modulation; |
290 | } | 419 | } |
291 | 420 | ||
292 | /* Change only if we are actually changing the channel */ | 421 | /* Change only if we are actually changing the channel */ |
293 | if (state->current_frequency != param->frequency) { | 422 | if (state->current_frequency != param->frequency) { |
294 | u8 buf[5]; | 423 | /* Tune to the new frequency */ |
295 | struct i2c_msg msg = { .flags = 0, .buf = &buf[1], .len = 4 }; | 424 | state->config->pll_set(fe, param); |
296 | int err; | 425 | /* Keep track of the new frequency */ |
297 | |||
298 | state->config->pll_set(fe, param, buf); | ||
299 | msg.addr = buf[0]; | ||
300 | |||
301 | dprintk("%s: tuner at 0x%02x bytes: 0x%02x 0x%02x " | ||
302 | "0x%02x 0x%02x\n", __FUNCTION__, | ||
303 | buf[0],buf[1],buf[2],buf[3],buf[4]); | ||
304 | if ((err = i2c_transfer(state->i2c, &msg, 1)) != 1) { | ||
305 | printk(KERN_WARNING "lgdt330x: %s error (addr %02x <- %02x, err = %i)\n", __FUNCTION__, buf[0], buf[1], err); | ||
306 | if (err < 0) | ||
307 | return err; | ||
308 | else | ||
309 | return -EREMOTEIO; | ||
310 | } | ||
311 | #if 0 | ||
312 | /* Check the status of the tuner pll */ | ||
313 | i2c_readbytes(state, buf[0], &buf[1], 1); | ||
314 | dprintk("%s: tuner status byte = 0x%02x\n", __FUNCTION__, buf[1]); | ||
315 | #endif | ||
316 | /* Update current frequency */ | ||
317 | state->current_frequency = param->frequency; | 426 | state->current_frequency = param->frequency; |
318 | } | 427 | } |
319 | lgdt330x_SwReset(state); | 428 | lgdt330x_SwReset(state); |
@@ -328,21 +437,15 @@ static int lgdt330x_get_frontend(struct dvb_frontend* fe, | |||
328 | return 0; | 437 | return 0; |
329 | } | 438 | } |
330 | 439 | ||
331 | static int lgdt330x_read_status(struct dvb_frontend* fe, fe_status_t* status) | 440 | static int lgdt3302_read_status(struct dvb_frontend* fe, fe_status_t* status) |
332 | { | 441 | { |
333 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; | 442 | struct lgdt330x_state* state = fe->demodulator_priv; |
334 | u8 buf[3]; | 443 | u8 buf[3]; |
335 | 444 | ||
336 | *status = 0; /* Reset status result */ | 445 | *status = 0; /* Reset status result */ |
337 | 446 | ||
338 | /* | ||
339 | * You must set the Mask bits to 1 in the IRQ_MASK in order | ||
340 | * to see that status bit in the IRQ_STATUS register. | ||
341 | * This is done in SwReset(); | ||
342 | */ | ||
343 | |||
344 | /* AGC status register */ | 447 | /* AGC status register */ |
345 | i2c_selectreadbytes(state, AGC_STATUS, buf, 1); | 448 | i2c_read_demod_bytes(state, AGC_STATUS, buf, 1); |
346 | dprintk("%s: AGC_STATUS = 0x%02x\n", __FUNCTION__, buf[0]); | 449 | dprintk("%s: AGC_STATUS = 0x%02x\n", __FUNCTION__, buf[0]); |
347 | if ((buf[0] & 0x0c) == 0x8){ | 450 | if ((buf[0] & 0x0c) == 0x8){ |
348 | /* Test signal does not exist flag */ | 451 | /* Test signal does not exist flag */ |
@@ -353,16 +456,15 @@ static int lgdt330x_read_status(struct dvb_frontend* fe, fe_status_t* status) | |||
353 | return 0; | 456 | return 0; |
354 | } | 457 | } |
355 | 458 | ||
459 | /* | ||
460 | * You must set the Mask bits to 1 in the IRQ_MASK in order | ||
461 | * to see that status bit in the IRQ_STATUS register. | ||
462 | * This is done in SwReset(); | ||
463 | */ | ||
356 | /* signal status */ | 464 | /* signal status */ |
357 | i2c_selectreadbytes(state, TOP_CONTROL, buf, sizeof(buf)); | 465 | i2c_read_demod_bytes(state, TOP_CONTROL, buf, sizeof(buf)); |
358 | dprintk("%s: TOP_CONTROL = 0x%02x, IRO_MASK = 0x%02x, IRQ_STATUS = 0x%02x\n", __FUNCTION__, buf[0], buf[1], buf[2]); | 466 | dprintk("%s: TOP_CONTROL = 0x%02x, IRO_MASK = 0x%02x, IRQ_STATUS = 0x%02x\n", __FUNCTION__, buf[0], buf[1], buf[2]); |
359 | 467 | ||
360 | #if 0 | ||
361 | /* Alternative method to check for a signal */ | ||
362 | /* using the SNR good/bad interrupts. */ | ||
363 | if ((buf[2] & 0x30) == 0x10) | ||
364 | *status |= FE_HAS_SIGNAL; | ||
365 | #endif | ||
366 | 468 | ||
367 | /* sync status */ | 469 | /* sync status */ |
368 | if ((buf[2] & 0x03) == 0x01) { | 470 | if ((buf[2] & 0x03) == 0x01) { |
@@ -376,7 +478,7 @@ static int lgdt330x_read_status(struct dvb_frontend* fe, fe_status_t* status) | |||
376 | } | 478 | } |
377 | 479 | ||
378 | /* Carrier Recovery Lock Status Register */ | 480 | /* Carrier Recovery Lock Status Register */ |
379 | i2c_selectreadbytes(state, CARRIER_LOCK, buf, 1); | 481 | i2c_read_demod_bytes(state, CARRIER_LOCK, buf, 1); |
380 | dprintk("%s: CARRIER_LOCK = 0x%02x\n", __FUNCTION__, buf[0]); | 482 | dprintk("%s: CARRIER_LOCK = 0x%02x\n", __FUNCTION__, buf[0]); |
381 | switch (state->current_modulation) { | 483 | switch (state->current_modulation) { |
382 | case QAM_256: | 484 | case QAM_256: |
@@ -396,13 +498,75 @@ static int lgdt330x_read_status(struct dvb_frontend* fe, fe_status_t* status) | |||
396 | return 0; | 498 | return 0; |
397 | } | 499 | } |
398 | 500 | ||
501 | static int lgdt3303_read_status(struct dvb_frontend* fe, fe_status_t* status) | ||
502 | { | ||
503 | struct lgdt330x_state* state = fe->demodulator_priv; | ||
504 | int err; | ||
505 | u8 buf[3]; | ||
506 | |||
507 | *status = 0; /* Reset status result */ | ||
508 | |||
509 | /* lgdt3303 AGC status register */ | ||
510 | err = i2c_read_demod_bytes(state, 0x58, buf, 1); | ||
511 | if (err < 0) | ||
512 | return err; | ||
513 | |||
514 | dprintk("%s: AGC_STATUS = 0x%02x\n", __FUNCTION__, buf[0]); | ||
515 | if ((buf[0] & 0x21) == 0x01){ | ||
516 | /* Test input signal does not exist flag */ | ||
517 | /* as well as the AGC lock flag. */ | ||
518 | *status |= FE_HAS_SIGNAL; | ||
519 | } else { | ||
520 | /* Without a signal all other status bits are meaningless */ | ||
521 | return 0; | ||
522 | } | ||
523 | |||
524 | /* Carrier Recovery Lock Status Register */ | ||
525 | i2c_read_demod_bytes(state, CARRIER_LOCK, buf, 1); | ||
526 | dprintk("%s: CARRIER_LOCK = 0x%02x\n", __FUNCTION__, buf[0]); | ||
527 | switch (state->current_modulation) { | ||
528 | case QAM_256: | ||
529 | case QAM_64: | ||
530 | /* Need to undestand why there are 3 lock levels here */ | ||
531 | if ((buf[0] & 0x07) == 0x07) | ||
532 | *status |= FE_HAS_CARRIER; | ||
533 | else | ||
534 | break; | ||
535 | i2c_read_demod_bytes(state, 0x8a, buf, 1); | ||
536 | if ((buf[0] & 0x04) == 0x04) | ||
537 | *status |= FE_HAS_SYNC; | ||
538 | if ((buf[0] & 0x01) == 0x01) | ||
539 | *status |= FE_HAS_LOCK; | ||
540 | if ((buf[0] & 0x08) == 0x08) | ||
541 | *status |= FE_HAS_VITERBI; | ||
542 | break; | ||
543 | case VSB_8: | ||
544 | if ((buf[0] & 0x80) == 0x80) | ||
545 | *status |= FE_HAS_CARRIER; | ||
546 | else | ||
547 | break; | ||
548 | i2c_read_demod_bytes(state, 0x38, buf, 1); | ||
549 | if ((buf[0] & 0x02) == 0x00) | ||
550 | *status |= FE_HAS_SYNC; | ||
551 | if ((buf[0] & 0x01) == 0x01) { | ||
552 | *status |= FE_HAS_LOCK; | ||
553 | *status |= FE_HAS_VITERBI; | ||
554 | } | ||
555 | break; | ||
556 | default: | ||
557 | printk("KERN_WARNING lgdt330x: %s: Modulation set to unsupported value\n", __FUNCTION__); | ||
558 | } | ||
559 | return 0; | ||
560 | } | ||
561 | |||
399 | static int lgdt330x_read_signal_strength(struct dvb_frontend* fe, u16* strength) | 562 | static int lgdt330x_read_signal_strength(struct dvb_frontend* fe, u16* strength) |
400 | { | 563 | { |
401 | /* not directly available. */ | 564 | /* not directly available. */ |
565 | *strength = 0; | ||
402 | return 0; | 566 | return 0; |
403 | } | 567 | } |
404 | 568 | ||
405 | static int lgdt330x_read_snr(struct dvb_frontend* fe, u16* snr) | 569 | static int lgdt3302_read_snr(struct dvb_frontend* fe, u16* snr) |
406 | { | 570 | { |
407 | #ifdef SNR_IN_DB | 571 | #ifdef SNR_IN_DB |
408 | /* | 572 | /* |
@@ -451,7 +615,7 @@ static int lgdt330x_read_snr(struct dvb_frontend* fe, u16* snr) | |||
451 | 91, 115, 144, 182, 229, 288, 362, 456, 574, 722, | 615 | 91, 115, 144, 182, 229, 288, 362, 456, 574, 722, |
452 | 909, 1144, 1440, 1813, 2282, 2873, 3617, 4553, 5732, 7216, | 616 | 909, 1144, 1440, 1813, 2282, 2873, 3617, 4553, 5732, 7216, |
453 | 9084, 11436, 14396, 18124, 22817, 28724, 36161, 45524, 57312, 72151, | 617 | 9084, 11436, 14396, 18124, 22817, 28724, 36161, 45524, 57312, 72151, |
454 | 90833, 114351, 143960, 181235, 228161, 0x040000 | 618 | 90833, 114351, 143960, 181235, 228161, 0x080000 |
455 | }; | 619 | }; |
456 | 620 | ||
457 | static u8 buf[5];/* read data buffer */ | 621 | static u8 buf[5];/* read data buffer */ |
@@ -459,8 +623,8 @@ static int lgdt330x_read_snr(struct dvb_frontend* fe, u16* snr) | |||
459 | static u32 snr_db; /* index into SNR_EQ[] */ | 623 | static u32 snr_db; /* index into SNR_EQ[] */ |
460 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; | 624 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; |
461 | 625 | ||
462 | /* read both equalizer and pase tracker noise data */ | 626 | /* read both equalizer and phase tracker noise data */ |
463 | i2c_selectreadbytes(state, EQPH_ERR0, buf, sizeof(buf)); | 627 | i2c_read_demod_bytes(state, EQPH_ERR0, buf, sizeof(buf)); |
464 | 628 | ||
465 | if (state->current_modulation == VSB_8) { | 629 | if (state->current_modulation == VSB_8) { |
466 | /* Equalizer Mean-Square Error Register for VSB */ | 630 | /* Equalizer Mean-Square Error Register for VSB */ |
@@ -496,19 +660,20 @@ static int lgdt330x_read_snr(struct dvb_frontend* fe, u16* snr) | |||
496 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; | 660 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; |
497 | 661 | ||
498 | /* read both equalizer and pase tracker noise data */ | 662 | /* read both equalizer and pase tracker noise data */ |
499 | i2c_selectreadbytes(state, EQPH_ERR0, buf, sizeof(buf)); | 663 | i2c_read_demod_bytes(state, EQPH_ERR0, buf, sizeof(buf)); |
500 | 664 | ||
501 | if (state->current_modulation == VSB_8) { | 665 | if (state->current_modulation == VSB_8) { |
502 | /* Equalizer Mean-Square Error Register for VSB */ | 666 | /* Phase Tracker Mean-Square Error Register for VSB */ |
503 | noise = ((buf[0] & 7) << 16) | (buf[1] << 8) | buf[2]; | ||
504 | } else { | ||
505 | /* Phase Tracker Mean-Square Error Register for QAM */ | ||
506 | noise = ((buf[0] & 7<<3) << 13) | (buf[3] << 8) | buf[4]; | 667 | noise = ((buf[0] & 7<<3) << 13) | (buf[3] << 8) | buf[4]; |
668 | } else { | ||
669 | |||
670 | /* Carrier Recovery Mean-Square Error for QAM */ | ||
671 | i2c_read_demod_bytes(state, 0x1a, buf, 2); | ||
672 | noise = ((buf[0] & 3) << 8) | buf[1]; | ||
507 | } | 673 | } |
508 | 674 | ||
509 | /* Small values for noise mean signal is better so invert noise */ | 675 | /* Small values for noise mean signal is better so invert noise */ |
510 | /* Noise is 19 bit value so discard 3 LSB*/ | 676 | *snr = ~noise; |
511 | *snr = ~noise>>3; | ||
512 | #endif | 677 | #endif |
513 | 678 | ||
514 | dprintk("%s: noise = 0x%05x, snr = %idb\n",__FUNCTION__, noise, *snr); | 679 | dprintk("%s: noise = 0x%05x, snr = %idb\n",__FUNCTION__, noise, *snr); |
@@ -516,6 +681,32 @@ static int lgdt330x_read_snr(struct dvb_frontend* fe, u16* snr) | |||
516 | return 0; | 681 | return 0; |
517 | } | 682 | } |
518 | 683 | ||
684 | static int lgdt3303_read_snr(struct dvb_frontend* fe, u16* snr) | ||
685 | { | ||
686 | /* Return the raw noise value */ | ||
687 | static u8 buf[5];/* read data buffer */ | ||
688 | static u32 noise; /* noise value */ | ||
689 | struct lgdt330x_state* state = (struct lgdt330x_state*) fe->demodulator_priv; | ||
690 | |||
691 | if (state->current_modulation == VSB_8) { | ||
692 | |||
693 | /* Phase Tracker Mean-Square Error Register for VSB */ | ||
694 | noise = ((buf[0] & 7) << 16) | (buf[3] << 8) | buf[4]; | ||
695 | } else { | ||
696 | |||
697 | /* Carrier Recovery Mean-Square Error for QAM */ | ||
698 | i2c_read_demod_bytes(state, 0x1a, buf, 2); | ||
699 | noise = (buf[0] << 8) | buf[1]; | ||
700 | } | ||
701 | |||
702 | /* Small values for noise mean signal is better so invert noise */ | ||
703 | *snr = ~noise; | ||
704 | |||
705 | dprintk("%s: noise = 0x%05x, snr = %idb\n",__FUNCTION__, noise, *snr); | ||
706 | |||
707 | return 0; | ||
708 | } | ||
709 | |||
519 | static int lgdt330x_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fe_tune_settings) | 710 | static int lgdt330x_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fe_tune_settings) |
520 | { | 711 | { |
521 | /* I have no idea about this - it may not be needed */ | 712 | /* I have no idea about this - it may not be needed */ |
@@ -531,7 +722,8 @@ static void lgdt330x_release(struct dvb_frontend* fe) | |||
531 | kfree(state); | 722 | kfree(state); |
532 | } | 723 | } |
533 | 724 | ||
534 | static struct dvb_frontend_ops lgdt330x_ops; | 725 | static struct dvb_frontend_ops lgdt3302_ops; |
726 | static struct dvb_frontend_ops lgdt3303_ops; | ||
535 | 727 | ||
536 | struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, | 728 | struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, |
537 | struct i2c_adapter* i2c) | 729 | struct i2c_adapter* i2c) |
@@ -548,9 +740,19 @@ struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, | |||
548 | /* Setup the state */ | 740 | /* Setup the state */ |
549 | state->config = config; | 741 | state->config = config; |
550 | state->i2c = i2c; | 742 | state->i2c = i2c; |
551 | memcpy(&state->ops, &lgdt330x_ops, sizeof(struct dvb_frontend_ops)); | 743 | switch (config->demod_chip) { |
744 | case LGDT3302: | ||
745 | memcpy(&state->ops, &lgdt3302_ops, sizeof(struct dvb_frontend_ops)); | ||
746 | break; | ||
747 | case LGDT3303: | ||
748 | memcpy(&state->ops, &lgdt3303_ops, sizeof(struct dvb_frontend_ops)); | ||
749 | break; | ||
750 | default: | ||
751 | goto error; | ||
752 | } | ||
753 | |||
552 | /* Verify communication with demod chip */ | 754 | /* Verify communication with demod chip */ |
553 | if (i2c_selectreadbytes(state, 2, buf, 1)) | 755 | if (i2c_read_demod_bytes(state, 2, buf, 1)) |
554 | goto error; | 756 | goto error; |
555 | 757 | ||
556 | state->current_frequency = -1; | 758 | state->current_frequency = -1; |
@@ -568,9 +770,33 @@ error: | |||
568 | return NULL; | 770 | return NULL; |
569 | } | 771 | } |
570 | 772 | ||
571 | static struct dvb_frontend_ops lgdt330x_ops = { | 773 | static struct dvb_frontend_ops lgdt3302_ops = { |
774 | .info = { | ||
775 | .name= "LG Electronics LGDT3302/LGDT3303 VSB/QAM Frontend", | ||
776 | .type = FE_ATSC, | ||
777 | .frequency_min= 54000000, | ||
778 | .frequency_max= 858000000, | ||
779 | .frequency_stepsize= 62500, | ||
780 | /* Symbol rate is for all VSB modes need to check QAM */ | ||
781 | .symbol_rate_min = 10762000, | ||
782 | .symbol_rate_max = 10762000, | ||
783 | .caps = FE_CAN_QAM_64 | FE_CAN_QAM_256 | FE_CAN_8VSB | ||
784 | }, | ||
785 | .init = lgdt330x_init, | ||
786 | .set_frontend = lgdt330x_set_parameters, | ||
787 | .get_frontend = lgdt330x_get_frontend, | ||
788 | .get_tune_settings = lgdt330x_get_tune_settings, | ||
789 | .read_status = lgdt3302_read_status, | ||
790 | .read_ber = lgdt330x_read_ber, | ||
791 | .read_signal_strength = lgdt330x_read_signal_strength, | ||
792 | .read_snr = lgdt3302_read_snr, | ||
793 | .read_ucblocks = lgdt330x_read_ucblocks, | ||
794 | .release = lgdt330x_release, | ||
795 | }; | ||
796 | |||
797 | static struct dvb_frontend_ops lgdt3303_ops = { | ||
572 | .info = { | 798 | .info = { |
573 | .name= "LG Electronics lgdt330x VSB/QAM Frontend", | 799 | .name= "LG Electronics LGDT3303 VSB/QAM Frontend", |
574 | .type = FE_ATSC, | 800 | .type = FE_ATSC, |
575 | .frequency_min= 54000000, | 801 | .frequency_min= 54000000, |
576 | .frequency_max= 858000000, | 802 | .frequency_max= 858000000, |
@@ -584,15 +810,15 @@ static struct dvb_frontend_ops lgdt330x_ops = { | |||
584 | .set_frontend = lgdt330x_set_parameters, | 810 | .set_frontend = lgdt330x_set_parameters, |
585 | .get_frontend = lgdt330x_get_frontend, | 811 | .get_frontend = lgdt330x_get_frontend, |
586 | .get_tune_settings = lgdt330x_get_tune_settings, | 812 | .get_tune_settings = lgdt330x_get_tune_settings, |
587 | .read_status = lgdt330x_read_status, | 813 | .read_status = lgdt3303_read_status, |
588 | .read_ber = lgdt330x_read_ber, | 814 | .read_ber = lgdt330x_read_ber, |
589 | .read_signal_strength = lgdt330x_read_signal_strength, | 815 | .read_signal_strength = lgdt330x_read_signal_strength, |
590 | .read_snr = lgdt330x_read_snr, | 816 | .read_snr = lgdt3303_read_snr, |
591 | .read_ucblocks = lgdt330x_read_ucblocks, | 817 | .read_ucblocks = lgdt330x_read_ucblocks, |
592 | .release = lgdt330x_release, | 818 | .release = lgdt330x_release, |
593 | }; | 819 | }; |
594 | 820 | ||
595 | MODULE_DESCRIPTION("lgdt330x [DViCO FusionHDTV 3 Gold] (ATSC 8VSB & ITU-T J.83 AnnexB 64/256 QAM) Demodulator Driver"); | 821 | MODULE_DESCRIPTION("LGDT330X (ATSC 8VSB & ITU-T J.83 AnnexB 64/256 QAM) Demodulator Driver"); |
596 | MODULE_AUTHOR("Wilson Michaels"); | 822 | MODULE_AUTHOR("Wilson Michaels"); |
597 | MODULE_LICENSE("GPL"); | 823 | MODULE_LICENSE("GPL"); |
598 | 824 | ||
@@ -601,6 +827,5 @@ EXPORT_SYMBOL(lgdt330x_attach); | |||
601 | /* | 827 | /* |
602 | * Local variables: | 828 | * Local variables: |
603 | * c-basic-offset: 8 | 829 | * c-basic-offset: 8 |
604 | * compile-command: "make DVB=1" | ||
605 | * End: | 830 | * End: |
606 | */ | 831 | */ |
diff --git a/drivers/media/dvb/frontends/lgdt330x.h b/drivers/media/dvb/frontends/lgdt330x.h index 04986f8e7565..e209ba1e47c5 100644 --- a/drivers/media/dvb/frontends/lgdt330x.h +++ b/drivers/media/dvb/frontends/lgdt330x.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Support for LGDT3302 & LGDT3303 (DViCO FustionHDTV Gold) - VSB/QAM | 2 | * Support for LGDT3302 and LGDT3303 - VSB/QAM |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Wilson Michaels <wilsonmichaels@earthlink.net> | 4 | * Copyright (C) 2005 Wilson Michaels <wilsonmichaels@earthlink.net> |
5 | * | 5 | * |
@@ -24,14 +24,26 @@ | |||
24 | 24 | ||
25 | #include <linux/dvb/frontend.h> | 25 | #include <linux/dvb/frontend.h> |
26 | 26 | ||
27 | typedef enum lg_chip_t { | ||
28 | UNDEFINED, | ||
29 | LGDT3302, | ||
30 | LGDT3303 | ||
31 | }lg_chip_type; | ||
32 | |||
27 | struct lgdt330x_config | 33 | struct lgdt330x_config |
28 | { | 34 | { |
29 | /* The demodulator's i2c address */ | 35 | /* The demodulator's i2c address */ |
30 | u8 demod_address; | 36 | u8 demod_address; |
31 | 37 | ||
38 | /* LG demodulator chip LGDT3302 or LGDT3303 */ | ||
39 | lg_chip_type demod_chip; | ||
40 | |||
41 | /* MPEG hardware interface - 0:parallel 1:serial */ | ||
42 | int serial_mpeg; | ||
43 | |||
32 | /* PLL interface */ | 44 | /* PLL interface */ |
33 | int (*pll_rf_set) (struct dvb_frontend* fe, int index); | 45 | int (*pll_rf_set) (struct dvb_frontend* fe, int index); |
34 | int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pll_address); | 46 | int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params); |
35 | 47 | ||
36 | /* Need to set device param for start_dma */ | 48 | /* Need to set device param for start_dma */ |
37 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); | 49 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); |
diff --git a/drivers/media/dvb/frontends/lgdt330x_priv.h b/drivers/media/dvb/frontends/lgdt330x_priv.h index 4143ce8f1a95..59b7c5b9012d 100644 --- a/drivers/media/dvb/frontends/lgdt330x_priv.h +++ b/drivers/media/dvb/frontends/lgdt330x_priv.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Support for LGDT3302 & LGDT3303 (DViCO FustionHDTV Gold) - VSB/QAM | 2 | * Support for LGDT3302 and LGDT3303 - VSB/QAM |
3 | * | 3 | * |
4 | * Copyright (C) 2005 Wilson Michaels <wilsonmichaels@earthlink.net> | 4 | * Copyright (C) 2005 Wilson Michaels <wilsonmichaels@earthlink.net> |
5 | * | 5 | * |
@@ -57,8 +57,10 @@ enum I2C_REG { | |||
57 | PH_ERR1= 0x4a, | 57 | PH_ERR1= 0x4a, |
58 | PH_ERR2= 0x4b, | 58 | PH_ERR2= 0x4b, |
59 | DEMUX_CONTROL= 0x66, | 59 | DEMUX_CONTROL= 0x66, |
60 | PACKET_ERR_COUNTER1= 0x6a, | 60 | LGDT3302_PACKET_ERR_COUNTER1= 0x6a, |
61 | PACKET_ERR_COUNTER2= 0x6b, | 61 | LGDT3302_PACKET_ERR_COUNTER2= 0x6b, |
62 | LGDT3303_PACKET_ERR_COUNTER1= 0x8b, | ||
63 | LGDT3303_PACKET_ERR_COUNTER2= 0x8c, | ||
62 | }; | 64 | }; |
63 | 65 | ||
64 | #endif /* _LGDT330X_PRIV_ */ | 66 | #endif /* _LGDT330X_PRIV_ */ |
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index ef0e9a85c359..78d223257a68 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: cx88-dvb.c,v 1.54 2005/07/25 05:13:50 mkrufky Exp $ | 2 | * $Id: cx88-dvb.c,v 1.58 2005/08/07 09:24:08 mkrufky Exp $ |
3 | * | 3 | * |
4 | * device driver for Conexant 2388x based TV cards | 4 | * device driver for Conexant 2388x based TV cards |
5 | * MPEG Transport Stream (DVB) routines | 5 | * MPEG Transport Stream (DVB) routines |
@@ -208,14 +208,26 @@ static struct or51132_config pchdtv_hd3000 = { | |||
208 | 208 | ||
209 | #ifdef HAVE_LGDT330X | 209 | #ifdef HAVE_LGDT330X |
210 | static int lgdt330x_pll_set(struct dvb_frontend* fe, | 210 | static int lgdt330x_pll_set(struct dvb_frontend* fe, |
211 | struct dvb_frontend_parameters* params, | 211 | struct dvb_frontend_parameters* params) |
212 | u8* pllbuf) | ||
213 | { | 212 | { |
214 | struct cx8802_dev *dev= fe->dvb->priv; | 213 | struct cx8802_dev *dev= fe->dvb->priv; |
214 | u8 buf[4]; | ||
215 | struct i2c_msg msg = | ||
216 | { .addr = dev->core->pll_addr, .flags = 0, .buf = buf, .len = 4 }; | ||
217 | int err; | ||
215 | 218 | ||
216 | pllbuf[0] = dev->core->pll_addr; | 219 | dvb_pll_configure(dev->core->pll_desc, buf, params->frequency, 0); |
217 | dvb_pll_configure(dev->core->pll_desc, &pllbuf[1], | 220 | dprintk(1, "%s: tuner at 0x%02x bytes: 0x%02x 0x%02x 0x%02x 0x%02x\n", |
218 | params->frequency, 0); | 221 | __FUNCTION__, msg.addr, buf[0],buf[1],buf[2],buf[3]); |
222 | if ((err = i2c_transfer(&dev->core->i2c_adap, &msg, 1)) != 1) { | ||
223 | printk(KERN_WARNING "cx88-dvb: %s error " | ||
224 | "(addr %02x <- %02x, err = %i)\n", | ||
225 | __FUNCTION__, buf[0], buf[1], err); | ||
226 | if (err < 0) | ||
227 | return err; | ||
228 | else | ||
229 | return -EREMOTEIO; | ||
230 | } | ||
219 | return 0; | 231 | return 0; |
220 | } | 232 | } |
221 | 233 | ||
@@ -244,6 +256,8 @@ static int lgdt330x_set_ts_param(struct dvb_frontend* fe, int is_punctured) | |||
244 | 256 | ||
245 | static struct lgdt330x_config fusionhdtv_3_gold = { | 257 | static struct lgdt330x_config fusionhdtv_3_gold = { |
246 | .demod_address = 0x0e, | 258 | .demod_address = 0x0e, |
259 | .demod_chip = LGDT3302, | ||
260 | .serial_mpeg = 0x04, /* TPSERIAL for 3302 in TOP_CONTROL */ | ||
247 | .pll_set = lgdt330x_pll_set, | 261 | .pll_set = lgdt330x_pll_set, |
248 | .set_ts_params = lgdt330x_set_ts_param, | 262 | .set_ts_params = lgdt330x_set_ts_param, |
249 | }; | 263 | }; |
diff --git a/drivers/message/i2o/Kconfig b/drivers/message/i2o/Kconfig index 06e8eb19a05c..43a942a29c2e 100644 --- a/drivers/message/i2o/Kconfig +++ b/drivers/message/i2o/Kconfig | |||
@@ -53,6 +53,9 @@ config I2O_CONFIG | |||
53 | To compile this support as a module, choose M here: the | 53 | To compile this support as a module, choose M here: the |
54 | module will be called i2o_config. | 54 | module will be called i2o_config. |
55 | 55 | ||
56 | Note: If you want to use the new API you have to download the | ||
57 | i2o_config patch from http://i2o.shadowconnect.com/ | ||
58 | |||
56 | config I2O_CONFIG_OLD_IOCTL | 59 | config I2O_CONFIG_OLD_IOCTL |
57 | bool "Enable ioctls (OBSOLETE)" | 60 | bool "Enable ioctls (OBSOLETE)" |
58 | depends on I2O_CONFIG | 61 | depends on I2O_CONFIG |
diff --git a/drivers/message/i2o/config-osm.c b/drivers/message/i2o/config-osm.c index fe2e7afc9eae..af32ab4e90cd 100644 --- a/drivers/message/i2o/config-osm.c +++ b/drivers/message/i2o/config-osm.c | |||
@@ -30,503 +30,9 @@ | |||
30 | 30 | ||
31 | static struct i2o_driver i2o_config_driver; | 31 | static struct i2o_driver i2o_config_driver; |
32 | 32 | ||
33 | /* Special file operations for sysfs */ | ||
34 | struct fops_attribute { | ||
35 | struct bin_attribute bin; | ||
36 | struct file_operations fops; | ||
37 | }; | ||
38 | |||
39 | /** | ||
40 | * sysfs_read_dummy | ||
41 | */ | ||
42 | static ssize_t sysfs_read_dummy(struct kobject *kobj, char *buf, loff_t offset, | ||
43 | size_t count) | ||
44 | { | ||
45 | return 0; | ||
46 | }; | ||
47 | |||
48 | /** | ||
49 | * sysfs_write_dummy | ||
50 | */ | ||
51 | static ssize_t sysfs_write_dummy(struct kobject *kobj, char *buf, loff_t offset, | ||
52 | size_t count) | ||
53 | { | ||
54 | return 0; | ||
55 | }; | ||
56 | |||
57 | /** | ||
58 | * sysfs_create_fops_file - Creates attribute with special file operations | ||
59 | * @kobj: kobject which should contains the attribute | ||
60 | * @attr: attributes which should be used to create file | ||
61 | * | ||
62 | * First creates attribute @attr in kobject @kobj. If it is the first time | ||
63 | * this function is called, merge old fops from sysfs with new one and | ||
64 | * write it back. Afterwords the new fops will be set for the created | ||
65 | * attribute. | ||
66 | * | ||
67 | * Returns 0 on success or negative error code on failure. | ||
68 | */ | ||
69 | static int sysfs_create_fops_file(struct kobject *kobj, | ||
70 | struct fops_attribute *attr) | ||
71 | { | ||
72 | struct file_operations tmp, *fops; | ||
73 | struct dentry *d; | ||
74 | struct qstr qstr; | ||
75 | int rc; | ||
76 | |||
77 | fops = &attr->fops; | ||
78 | |||
79 | if (fops->read) | ||
80 | attr->bin.read = sysfs_read_dummy; | ||
81 | |||
82 | if (fops->write) | ||
83 | attr->bin.write = sysfs_write_dummy; | ||
84 | |||
85 | if ((rc = sysfs_create_bin_file(kobj, &attr->bin))) | ||
86 | return rc; | ||
87 | |||
88 | qstr.name = attr->bin.attr.name; | ||
89 | qstr.len = strlen(qstr.name); | ||
90 | qstr.hash = full_name_hash(qstr.name, qstr.len); | ||
91 | |||
92 | if ((d = lookup_hash(&qstr, kobj->dentry))) { | ||
93 | if (!fops->owner) { | ||
94 | memcpy(&tmp, d->d_inode->i_fop, sizeof(tmp)); | ||
95 | if (fops->read) | ||
96 | tmp.read = fops->read; | ||
97 | if (fops->write) | ||
98 | tmp.write = fops->write; | ||
99 | memcpy(fops, &tmp, sizeof(tmp)); | ||
100 | } | ||
101 | |||
102 | d->d_inode->i_fop = fops; | ||
103 | } else | ||
104 | sysfs_remove_bin_file(kobj, &attr->bin); | ||
105 | |||
106 | return -ENOENT; | ||
107 | }; | ||
108 | |||
109 | /** | ||
110 | * sysfs_remove_fops_file - Remove attribute with special file operations | ||
111 | * @kobj: kobject which contains the attribute | ||
112 | * @attr: attributes which are used to create file | ||
113 | * | ||
114 | * Only wrapper arround sysfs_remove_bin_file() | ||
115 | * | ||
116 | * Returns 0 on success or negative error code on failure. | ||
117 | */ | ||
118 | static inline int sysfs_remove_fops_file(struct kobject *kobj, | ||
119 | struct fops_attribute *attr) | ||
120 | { | ||
121 | return sysfs_remove_bin_file(kobj, &attr->bin); | ||
122 | }; | ||
123 | |||
124 | /** | ||
125 | * i2o_config_read_hrt - Returns the HRT of the controller | ||
126 | * @kob: kernel object handle | ||
127 | * @buf: buffer into which the HRT should be copied | ||
128 | * @off: file offset | ||
129 | * @count: number of bytes to read | ||
130 | * | ||
131 | * Put @count bytes starting at @off into @buf from the HRT of the I2O | ||
132 | * controller corresponding to @kobj. | ||
133 | * | ||
134 | * Returns number of bytes copied into buffer. | ||
135 | */ | ||
136 | static ssize_t i2o_config_read_hrt(struct kobject *kobj, char *buf, | ||
137 | loff_t offset, size_t count) | ||
138 | { | ||
139 | struct i2o_controller *c = kobj_to_i2o_device(kobj)->iop; | ||
140 | i2o_hrt *hrt = c->hrt.virt; | ||
141 | |||
142 | u32 size = (hrt->num_entries * hrt->entry_len + 2) * 4; | ||
143 | |||
144 | if (offset > size) | ||
145 | return 0; | ||
146 | |||
147 | if (offset + count > size) | ||
148 | count = size - offset; | ||
149 | |||
150 | memcpy(buf, (u8 *) hrt + offset, count); | ||
151 | |||
152 | return count; | ||
153 | }; | ||
154 | |||
155 | /** | ||
156 | * i2o_config_read_lct - Returns the LCT of the controller | ||
157 | * @kob: kernel object handle | ||
158 | * @buf: buffer into which the LCT should be copied | ||
159 | * @off: file offset | ||
160 | * @count: number of bytes to read | ||
161 | * | ||
162 | * Put @count bytes starting at @off into @buf from the LCT of the I2O | ||
163 | * controller corresponding to @kobj. | ||
164 | * | ||
165 | * Returns number of bytes copied into buffer. | ||
166 | */ | ||
167 | static ssize_t i2o_config_read_lct(struct kobject *kobj, char *buf, | ||
168 | loff_t offset, size_t count) | ||
169 | { | ||
170 | struct i2o_controller *c = kobj_to_i2o_device(kobj)->iop; | ||
171 | u32 size = c->lct->table_size * 4; | ||
172 | |||
173 | if (offset > size) | ||
174 | return 0; | ||
175 | |||
176 | if (offset + count > size) | ||
177 | count = size - offset; | ||
178 | |||
179 | memcpy(buf, (u8 *) c->lct + offset, count); | ||
180 | |||
181 | return count; | ||
182 | }; | ||
183 | |||
184 | #define I2O_CONFIG_SW_ATTR(_name,_mode,_type,_swid) \ | ||
185 | static ssize_t i2o_config_##_name##_read(struct file *file, char __user *buf, size_t count, loff_t * offset) { \ | ||
186 | return i2o_config_sw_read(file, buf, count, offset, _type, _swid); \ | ||
187 | };\ | ||
188 | \ | ||
189 | static ssize_t i2o_config_##_name##_write(struct file *file, const char __user *buf, size_t count, loff_t * offset) { \ | ||
190 | return i2o_config_sw_write(file, buf, count, offset, _type, _swid); \ | ||
191 | }; \ | ||
192 | \ | ||
193 | static struct fops_attribute i2o_config_attr_##_name = { \ | ||
194 | .bin = { .attr = { .name = __stringify(_name), .mode = _mode, \ | ||
195 | .owner = THIS_MODULE }, \ | ||
196 | .size = 0, }, \ | ||
197 | .fops = { .write = i2o_config_##_name##_write, \ | ||
198 | .read = i2o_config_##_name##_read} \ | ||
199 | }; | ||
200 | |||
201 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
202 | |||
203 | /** | ||
204 | * i2o_config_dpt_reagion - Converts type and id to flash region | ||
205 | * @swtype: type of software module reading | ||
206 | * @swid: id of software which should be read | ||
207 | * | ||
208 | * Converts type and id from I2O spec to the matching region for DPT / | ||
209 | * Adaptec controllers. | ||
210 | * | ||
211 | * Returns region which match type and id or -1 on error. | ||
212 | */ | ||
213 | static u32 i2o_config_dpt_region(u8 swtype, u8 swid) | ||
214 | { | ||
215 | switch (swtype) { | ||
216 | case I2O_SOFTWARE_MODULE_IRTOS: | ||
217 | /* | ||
218 | * content: operation firmware | ||
219 | * region size: | ||
220 | * 0xbc000 for 2554, 3754, 2564, 3757 | ||
221 | * 0x170000 for 2865 | ||
222 | * 0x17c000 for 3966 | ||
223 | */ | ||
224 | if (!swid) | ||
225 | return 0; | ||
226 | |||
227 | break; | ||
228 | |||
229 | case I2O_SOFTWARE_MODULE_IOP_PRIVATE: | ||
230 | /* | ||
231 | * content: BIOS and SMOR | ||
232 | * BIOS size: first 0x8000 bytes | ||
233 | * region size: | ||
234 | * 0x40000 for 2554, 3754, 2564, 3757 | ||
235 | * 0x80000 for 2865, 3966 | ||
236 | */ | ||
237 | if (!swid) | ||
238 | return 1; | ||
239 | |||
240 | break; | ||
241 | |||
242 | case I2O_SOFTWARE_MODULE_IOP_CONFIG: | ||
243 | switch (swid) { | ||
244 | case 0: | ||
245 | /* | ||
246 | * content: NVRAM defaults | ||
247 | * region size: 0x2000 bytes | ||
248 | */ | ||
249 | return 2; | ||
250 | case 1: | ||
251 | /* | ||
252 | * content: serial number | ||
253 | * region size: 0x2000 bytes | ||
254 | */ | ||
255 | return 3; | ||
256 | } | ||
257 | break; | ||
258 | } | ||
259 | |||
260 | return -1; | ||
261 | }; | ||
262 | |||
263 | #endif | ||
264 | |||
265 | /** | ||
266 | * i2o_config_sw_read - Read a software module from controller | ||
267 | * @file: file pointer | ||
268 | * @buf: buffer into which the data should be copied | ||
269 | * @count: number of bytes to read | ||
270 | * @off: file offset | ||
271 | * @swtype: type of software module reading | ||
272 | * @swid: id of software which should be read | ||
273 | * | ||
274 | * Transfers @count bytes at offset @offset from IOP into buffer using | ||
275 | * type @swtype and id @swid as described in I2O spec. | ||
276 | * | ||
277 | * Returns number of bytes copied into buffer or error code on failure. | ||
278 | */ | ||
279 | static ssize_t i2o_config_sw_read(struct file *file, char __user * buf, | ||
280 | size_t count, loff_t * offset, u8 swtype, | ||
281 | u32 swid) | ||
282 | { | ||
283 | struct sysfs_dirent *sd = file->f_dentry->d_parent->d_fsdata; | ||
284 | struct kobject *kobj = sd->s_element; | ||
285 | struct i2o_controller *c = kobj_to_i2o_device(kobj)->iop; | ||
286 | u32 m, function = I2O_CMD_SW_UPLOAD; | ||
287 | struct i2o_dma buffer; | ||
288 | struct i2o_message __iomem *msg; | ||
289 | u32 __iomem *mptr; | ||
290 | int rc, status; | ||
291 | |||
292 | m = i2o_msg_get_wait(c, &msg, I2O_TIMEOUT_MESSAGE_GET); | ||
293 | if (m == I2O_QUEUE_EMPTY) | ||
294 | return -EBUSY; | ||
295 | |||
296 | mptr = &msg->body[3]; | ||
297 | |||
298 | if ((rc = i2o_dma_alloc(&c->pdev->dev, &buffer, count, GFP_KERNEL))) { | ||
299 | i2o_msg_nop(c, m); | ||
300 | return rc; | ||
301 | } | ||
302 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
303 | if (c->adaptec) { | ||
304 | mptr = &msg->body[4]; | ||
305 | function = I2O_CMD_PRIVATE; | ||
306 | |||
307 | writel(TEN_WORD_MSG_SIZE | SGL_OFFSET_8, &msg->u.head[0]); | ||
308 | |||
309 | writel(I2O_VENDOR_DPT << 16 | I2O_DPT_FLASH_READ, | ||
310 | &msg->body[0]); | ||
311 | writel(i2o_config_dpt_region(swtype, swid), &msg->body[1]); | ||
312 | writel(*offset, &msg->body[2]); | ||
313 | writel(count, &msg->body[3]); | ||
314 | } else | ||
315 | #endif | ||
316 | writel(NINE_WORD_MSG_SIZE | SGL_OFFSET_7, &msg->u.head[0]); | ||
317 | |||
318 | writel(0xD0000000 | count, mptr++); | ||
319 | writel(buffer.phys, mptr); | ||
320 | |||
321 | writel(function << 24 | HOST_TID << 12 | ADAPTER_TID, &msg->u.head[1]); | ||
322 | writel(i2o_config_driver.context, &msg->u.head[2]); | ||
323 | writel(0, &msg->u.head[3]); | ||
324 | |||
325 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
326 | if (!c->adaptec) | ||
327 | #endif | ||
328 | { | ||
329 | writel((u32) swtype << 16 | (u32) 1 << 8, &msg->body[0]); | ||
330 | writel(0, &msg->body[1]); | ||
331 | writel(swid, &msg->body[2]); | ||
332 | } | ||
333 | |||
334 | status = i2o_msg_post_wait_mem(c, m, 60, &buffer); | ||
335 | |||
336 | if (status == I2O_POST_WAIT_OK) { | ||
337 | if (!(rc = copy_to_user(buf, buffer.virt, count))) { | ||
338 | rc = count; | ||
339 | *offset += count; | ||
340 | } | ||
341 | } else | ||
342 | rc = -EIO; | ||
343 | |||
344 | if (status != -ETIMEDOUT) | ||
345 | i2o_dma_free(&c->pdev->dev, &buffer); | ||
346 | |||
347 | return rc; | ||
348 | }; | ||
349 | |||
350 | /** | ||
351 | * i2o_config_sw_write - Write a software module to controller | ||
352 | * @file: file pointer | ||
353 | * @buf: buffer into which the data should be copied | ||
354 | * @count: number of bytes to read | ||
355 | * @off: file offset | ||
356 | * @swtype: type of software module writing | ||
357 | * @swid: id of software which should be written | ||
358 | * | ||
359 | * Transfers @count bytes at offset @offset from buffer to IOP using | ||
360 | * type @swtype and id @swid as described in I2O spec. | ||
361 | * | ||
362 | * Returns number of bytes copied from buffer or error code on failure. | ||
363 | */ | ||
364 | static ssize_t i2o_config_sw_write(struct file *file, const char __user * buf, | ||
365 | size_t count, loff_t * offset, u8 swtype, | ||
366 | u32 swid) | ||
367 | { | ||
368 | struct sysfs_dirent *sd = file->f_dentry->d_parent->d_fsdata; | ||
369 | struct kobject *kobj = sd->s_element; | ||
370 | struct i2o_controller *c = kobj_to_i2o_device(kobj)->iop; | ||
371 | u32 m, function = I2O_CMD_SW_DOWNLOAD; | ||
372 | struct i2o_dma buffer; | ||
373 | struct i2o_message __iomem *msg; | ||
374 | u32 __iomem *mptr; | ||
375 | int rc, status; | ||
376 | |||
377 | m = i2o_msg_get_wait(c, &msg, I2O_TIMEOUT_MESSAGE_GET); | ||
378 | if (m == I2O_QUEUE_EMPTY) | ||
379 | return -EBUSY; | ||
380 | |||
381 | mptr = &msg->body[3]; | ||
382 | |||
383 | if ((rc = i2o_dma_alloc(&c->pdev->dev, &buffer, count, GFP_KERNEL))) | ||
384 | goto nop_msg; | ||
385 | |||
386 | if ((rc = copy_from_user(buffer.virt, buf, count))) | ||
387 | goto free_buffer; | ||
388 | |||
389 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
390 | if (c->adaptec) { | ||
391 | mptr = &msg->body[4]; | ||
392 | function = I2O_CMD_PRIVATE; | ||
393 | |||
394 | writel(TEN_WORD_MSG_SIZE | SGL_OFFSET_8, &msg->u.head[0]); | ||
395 | |||
396 | writel(I2O_VENDOR_DPT << 16 | I2O_DPT_FLASH_WRITE, | ||
397 | &msg->body[0]); | ||
398 | writel(i2o_config_dpt_region(swtype, swid), &msg->body[1]); | ||
399 | writel(*offset, &msg->body[2]); | ||
400 | writel(count, &msg->body[3]); | ||
401 | } else | ||
402 | #endif | ||
403 | writel(NINE_WORD_MSG_SIZE | SGL_OFFSET_7, &msg->u.head[0]); | ||
404 | |||
405 | writel(0xD4000000 | count, mptr++); | ||
406 | writel(buffer.phys, mptr); | ||
407 | |||
408 | writel(function << 24 | HOST_TID << 12 | ADAPTER_TID, &msg->u.head[1]); | ||
409 | writel(i2o_config_driver.context, &msg->u.head[2]); | ||
410 | writel(0, &msg->u.head[3]); | ||
411 | |||
412 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
413 | if (!c->adaptec) | ||
414 | #endif | ||
415 | { | ||
416 | writel((u32) swtype << 16 | (u32) 1 << 8, &msg->body[0]); | ||
417 | writel(0, &msg->body[1]); | ||
418 | writel(swid, &msg->body[2]); | ||
419 | } | ||
420 | |||
421 | status = i2o_msg_post_wait_mem(c, m, 60, &buffer); | ||
422 | |||
423 | if (status != -ETIMEDOUT) | ||
424 | i2o_dma_free(&c->pdev->dev, &buffer); | ||
425 | |||
426 | if (status != I2O_POST_WAIT_OK) | ||
427 | return -EIO; | ||
428 | |||
429 | *offset += count; | ||
430 | |||
431 | return count; | ||
432 | |||
433 | free_buffer: | ||
434 | i2o_dma_free(&c->pdev->dev, &buffer); | ||
435 | |||
436 | nop_msg: | ||
437 | i2o_msg_nop(c, m); | ||
438 | |||
439 | return rc; | ||
440 | }; | ||
441 | |||
442 | /* attribute for HRT in sysfs */ | ||
443 | static struct bin_attribute i2o_config_hrt_attr = { | ||
444 | .attr = { | ||
445 | .name = "hrt", | ||
446 | .mode = S_IRUGO, | ||
447 | .owner = THIS_MODULE}, | ||
448 | .size = 0, | ||
449 | .read = i2o_config_read_hrt | ||
450 | }; | ||
451 | |||
452 | /* attribute for LCT in sysfs */ | ||
453 | static struct bin_attribute i2o_config_lct_attr = { | ||
454 | .attr = { | ||
455 | .name = "lct", | ||
456 | .mode = S_IRUGO, | ||
457 | .owner = THIS_MODULE}, | ||
458 | .size = 0, | ||
459 | .read = i2o_config_read_lct | ||
460 | }; | ||
461 | |||
462 | /* IRTOS firmware access */ | ||
463 | I2O_CONFIG_SW_ATTR(irtos, S_IWRSR, I2O_SOFTWARE_MODULE_IRTOS, 0); | ||
464 | |||
465 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
466 | |||
467 | /* | ||
468 | * attribute for BIOS / SMOR, nvram and serial number access on DPT / Adaptec | ||
469 | * controllers | ||
470 | */ | ||
471 | I2O_CONFIG_SW_ATTR(bios, S_IWRSR, I2O_SOFTWARE_MODULE_IOP_PRIVATE, 0); | ||
472 | I2O_CONFIG_SW_ATTR(nvram, S_IWRSR, I2O_SOFTWARE_MODULE_IOP_CONFIG, 0); | ||
473 | I2O_CONFIG_SW_ATTR(serial, S_IWRSR, I2O_SOFTWARE_MODULE_IOP_CONFIG, 1); | ||
474 | |||
475 | #endif | ||
476 | |||
477 | /** | ||
478 | * i2o_config_notify_controller_add - Notify of added controller | ||
479 | * @c: the controller which was added | ||
480 | * | ||
481 | * If a I2O controller is added, we catch the notification to add sysfs | ||
482 | * entries. | ||
483 | */ | ||
484 | static void i2o_config_notify_controller_add(struct i2o_controller *c) | ||
485 | { | ||
486 | struct kobject *kobj = &c->exec->device.kobj; | ||
487 | |||
488 | sysfs_create_bin_file(kobj, &i2o_config_hrt_attr); | ||
489 | sysfs_create_bin_file(kobj, &i2o_config_lct_attr); | ||
490 | |||
491 | sysfs_create_fops_file(kobj, &i2o_config_attr_irtos); | ||
492 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
493 | if (c->adaptec) { | ||
494 | sysfs_create_fops_file(kobj, &i2o_config_attr_bios); | ||
495 | sysfs_create_fops_file(kobj, &i2o_config_attr_nvram); | ||
496 | sysfs_create_fops_file(kobj, &i2o_config_attr_serial); | ||
497 | } | ||
498 | #endif | ||
499 | }; | ||
500 | |||
501 | /** | ||
502 | * i2o_config_notify_controller_remove - Notify of removed controller | ||
503 | * @c: the controller which was removed | ||
504 | * | ||
505 | * If a I2O controller is removed, we catch the notification to remove the | ||
506 | * sysfs entries. | ||
507 | */ | ||
508 | static void i2o_config_notify_controller_remove(struct i2o_controller *c) | ||
509 | { | ||
510 | struct kobject *kobj = &c->exec->device.kobj; | ||
511 | |||
512 | #ifdef CONFIG_I2O_EXT_ADAPTEC | ||
513 | if (c->adaptec) { | ||
514 | sysfs_remove_fops_file(kobj, &i2o_config_attr_serial); | ||
515 | sysfs_remove_fops_file(kobj, &i2o_config_attr_nvram); | ||
516 | sysfs_remove_fops_file(kobj, &i2o_config_attr_bios); | ||
517 | } | ||
518 | #endif | ||
519 | sysfs_remove_fops_file(kobj, &i2o_config_attr_irtos); | ||
520 | |||
521 | sysfs_remove_bin_file(kobj, &i2o_config_lct_attr); | ||
522 | sysfs_remove_bin_file(kobj, &i2o_config_hrt_attr); | ||
523 | }; | ||
524 | |||
525 | /* Config OSM driver struct */ | 33 | /* Config OSM driver struct */ |
526 | static struct i2o_driver i2o_config_driver = { | 34 | static struct i2o_driver i2o_config_driver = { |
527 | .name = OSM_NAME, | 35 | .name = OSM_NAME, |
528 | .notify_controller_add = i2o_config_notify_controller_add, | ||
529 | .notify_controller_remove = i2o_config_notify_controller_remove | ||
530 | }; | 36 | }; |
531 | 37 | ||
532 | #ifdef CONFIG_I2O_CONFIG_OLD_IOCTL | 38 | #ifdef CONFIG_I2O_CONFIG_OLD_IOCTL |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 201a550f0bcc..368b8fb14023 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -66,8 +66,8 @@ | |||
66 | 66 | ||
67 | #define DRV_MODULE_NAME "tg3" | 67 | #define DRV_MODULE_NAME "tg3" |
68 | #define PFX DRV_MODULE_NAME ": " | 68 | #define PFX DRV_MODULE_NAME ": " |
69 | #define DRV_MODULE_VERSION "3.34" | 69 | #define DRV_MODULE_VERSION "3.35" |
70 | #define DRV_MODULE_RELDATE "July 25, 2005" | 70 | #define DRV_MODULE_RELDATE "August 6, 2005" |
71 | 71 | ||
72 | #define TG3_DEF_MAC_MODE 0 | 72 | #define TG3_DEF_MAC_MODE 0 |
73 | #define TG3_DEF_RX_MODE 0 | 73 | #define TG3_DEF_RX_MODE 0 |
@@ -10421,6 +10421,12 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10421 | 10421 | ||
10422 | tg3_init_coal(tp); | 10422 | tg3_init_coal(tp); |
10423 | 10423 | ||
10424 | /* Now that we have fully setup the chip, save away a snapshot | ||
10425 | * of the PCI config space. We need to restore this after | ||
10426 | * GRC_MISC_CFG core clock resets and some resume events. | ||
10427 | */ | ||
10428 | pci_save_state(tp->pdev); | ||
10429 | |||
10424 | err = register_netdev(dev); | 10430 | err = register_netdev(dev); |
10425 | if (err) { | 10431 | if (err) { |
10426 | printk(KERN_ERR PFX "Cannot register net device, " | 10432 | printk(KERN_ERR PFX "Cannot register net device, " |
@@ -10430,12 +10436,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10430 | 10436 | ||
10431 | pci_set_drvdata(pdev, dev); | 10437 | pci_set_drvdata(pdev, dev); |
10432 | 10438 | ||
10433 | /* Now that we have fully setup the chip, save away a snapshot | ||
10434 | * of the PCI config space. We need to restore this after | ||
10435 | * GRC_MISC_CFG core clock resets and some resume events. | ||
10436 | */ | ||
10437 | pci_save_state(tp->pdev); | ||
10438 | |||
10439 | printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (PCI%s:%s:%s) %sBaseT Ethernet ", | 10439 | printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (PCI%s:%s:%s) %sBaseT Ethernet ", |
10440 | dev->name, | 10440 | dev->name, |
10441 | tp->board_part_number, | 10441 | tp->board_part_number, |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 65ea7d25f691..1b34fc56067e 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -222,37 +222,6 @@ pci_find_parent_resource(const struct pci_dev *dev, struct resource *res) | |||
222 | } | 222 | } |
223 | 223 | ||
224 | /** | 224 | /** |
225 | * pci_restore_bars - restore a devices BAR values (e.g. after wake-up) | ||
226 | * @dev: PCI device to have its BARs restored | ||
227 | * | ||
228 | * Restore the BAR values for a given device, so as to make it | ||
229 | * accessible by its driver. | ||
230 | */ | ||
231 | void | ||
232 | pci_restore_bars(struct pci_dev *dev) | ||
233 | { | ||
234 | int i, numres; | ||
235 | |||
236 | switch (dev->hdr_type) { | ||
237 | case PCI_HEADER_TYPE_NORMAL: | ||
238 | numres = 6; | ||
239 | break; | ||
240 | case PCI_HEADER_TYPE_BRIDGE: | ||
241 | numres = 2; | ||
242 | break; | ||
243 | case PCI_HEADER_TYPE_CARDBUS: | ||
244 | numres = 1; | ||
245 | break; | ||
246 | default: | ||
247 | /* Should never get here, but just in case... */ | ||
248 | return; | ||
249 | } | ||
250 | |||
251 | for (i = 0; i < numres; i ++) | ||
252 | pci_update_resource(dev, &dev->resource[i], i); | ||
253 | } | ||
254 | |||
255 | /** | ||
256 | * pci_set_power_state - Set the power state of a PCI device | 225 | * pci_set_power_state - Set the power state of a PCI device |
257 | * @dev: PCI device to be suspended | 226 | * @dev: PCI device to be suspended |
258 | * @state: PCI power state (D0, D1, D2, D3hot, D3cold) we're entering | 227 | * @state: PCI power state (D0, D1, D2, D3hot, D3cold) we're entering |
@@ -270,7 +239,7 @@ int (*platform_pci_set_power_state)(struct pci_dev *dev, pci_power_t t); | |||
270 | int | 239 | int |
271 | pci_set_power_state(struct pci_dev *dev, pci_power_t state) | 240 | pci_set_power_state(struct pci_dev *dev, pci_power_t state) |
272 | { | 241 | { |
273 | int pm, need_restore = 0; | 242 | int pm; |
274 | u16 pmcsr, pmc; | 243 | u16 pmcsr, pmc; |
275 | 244 | ||
276 | /* bound the state we're entering */ | 245 | /* bound the state we're entering */ |
@@ -309,17 +278,14 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state) | |||
309 | return -EIO; | 278 | return -EIO; |
310 | } | 279 | } |
311 | 280 | ||
312 | pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr); | ||
313 | |||
314 | /* If we're in D3, force entire word to 0. | 281 | /* If we're in D3, force entire word to 0. |
315 | * This doesn't affect PME_Status, disables PME_En, and | 282 | * This doesn't affect PME_Status, disables PME_En, and |
316 | * sets PowerState to 0. | 283 | * sets PowerState to 0. |
317 | */ | 284 | */ |
318 | if (dev->current_state >= PCI_D3hot) { | 285 | if (dev->current_state >= PCI_D3hot) |
319 | if (!(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET)) | ||
320 | need_restore = 1; | ||
321 | pmcsr = 0; | 286 | pmcsr = 0; |
322 | } else { | 287 | else { |
288 | pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr); | ||
323 | pmcsr &= ~PCI_PM_CTRL_STATE_MASK; | 289 | pmcsr &= ~PCI_PM_CTRL_STATE_MASK; |
324 | pmcsr |= state; | 290 | pmcsr |= state; |
325 | } | 291 | } |
@@ -342,22 +308,6 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state) | |||
342 | platform_pci_set_power_state(dev, state); | 308 | platform_pci_set_power_state(dev, state); |
343 | 309 | ||
344 | dev->current_state = state; | 310 | dev->current_state = state; |
345 | |||
346 | /* According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT | ||
347 | * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning | ||
348 | * from D3hot to D0 _may_ perform an internal reset, thereby | ||
349 | * going to "D0 Uninitialized" rather than "D0 Initialized". | ||
350 | * For example, at least some versions of the 3c905B and the | ||
351 | * 3c556B exhibit this behaviour. | ||
352 | * | ||
353 | * At least some laptop BIOSen (e.g. the Thinkpad T21) leave | ||
354 | * devices in a D3hot state at boot. Consequently, we need to | ||
355 | * restore at least the BARs so that the device will be | ||
356 | * accessible to its driver. | ||
357 | */ | ||
358 | if (need_restore) | ||
359 | pci_restore_bars(dev); | ||
360 | |||
361 | return 0; | 311 | return 0; |
362 | } | 312 | } |
363 | 313 | ||
@@ -855,7 +805,6 @@ struct pci_dev *isa_bridge; | |||
855 | EXPORT_SYMBOL(isa_bridge); | 805 | EXPORT_SYMBOL(isa_bridge); |
856 | #endif | 806 | #endif |
857 | 807 | ||
858 | EXPORT_SYMBOL_GPL(pci_restore_bars); | ||
859 | EXPORT_SYMBOL(pci_enable_device_bars); | 808 | EXPORT_SYMBOL(pci_enable_device_bars); |
860 | EXPORT_SYMBOL(pci_enable_device); | 809 | EXPORT_SYMBOL(pci_enable_device); |
861 | EXPORT_SYMBOL(pci_disable_device); | 810 | EXPORT_SYMBOL(pci_disable_device); |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 8d0968bd527e..a9160ad16581 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -373,6 +373,25 @@ static void __devinit quirk_vt82c686_acpi(struct pci_dev *dev) | |||
373 | } | 373 | } |
374 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi ); | 374 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_4, quirk_vt82c686_acpi ); |
375 | 375 | ||
376 | /* | ||
377 | * VIA VT8235 ISA Bridge: Two IO regions pointed to by words at | ||
378 | * 0x88 (128 bytes of power management registers) | ||
379 | * 0xd0 (16 bytes of SMB registers) | ||
380 | */ | ||
381 | static void __devinit quirk_vt8235_acpi(struct pci_dev *dev) | ||
382 | { | ||
383 | u16 pm, smb; | ||
384 | |||
385 | pci_read_config_word(dev, 0x88, &pm); | ||
386 | pm &= PCI_BASE_ADDRESS_IO_MASK; | ||
387 | quirk_io_region(dev, pm, 128, PCI_BRIDGE_RESOURCES); | ||
388 | |||
389 | pci_read_config_word(dev, 0xd0, &smb); | ||
390 | smb &= PCI_BASE_ADDRESS_IO_MASK; | ||
391 | quirk_io_region(dev, smb, 16, PCI_BRIDGE_RESOURCES + 1); | ||
392 | } | ||
393 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8235, quirk_vt8235_acpi); | ||
394 | |||
376 | 395 | ||
377 | #ifdef CONFIG_X86_IO_APIC | 396 | #ifdef CONFIG_X86_IO_APIC |
378 | 397 | ||
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 878fd0a65c02..84eedc965688 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c | |||
@@ -26,13 +26,18 @@ | |||
26 | #include "pci.h" | 26 | #include "pci.h" |
27 | 27 | ||
28 | 28 | ||
29 | void | 29 | static void |
30 | pci_update_resource(struct pci_dev *dev, struct resource *res, int resno) | 30 | pci_update_resource(struct pci_dev *dev, struct resource *res, int resno) |
31 | { | 31 | { |
32 | struct pci_bus_region region; | 32 | struct pci_bus_region region; |
33 | u32 new, check, mask; | 33 | u32 new, check, mask; |
34 | int reg; | 34 | int reg; |
35 | 35 | ||
36 | /* Ignore resources for unimplemented BARs and unused resource slots | ||
37 | for 64 bit BARs. */ | ||
38 | if (!res->flags) | ||
39 | return; | ||
40 | |||
36 | pcibios_resource_to_bus(dev, ®ion, res); | 41 | pcibios_resource_to_bus(dev, ®ion, res); |
37 | 42 | ||
38 | pr_debug(" got res [%lx:%lx] bus [%lx:%lx] flags %lx for " | 43 | pr_debug(" got res [%lx:%lx] bus [%lx:%lx] flags %lx for " |
@@ -67,7 +72,7 @@ pci_update_resource(struct pci_dev *dev, struct resource *res, int resno) | |||
67 | 72 | ||
68 | if ((new & (PCI_BASE_ADDRESS_SPACE|PCI_BASE_ADDRESS_MEM_TYPE_MASK)) == | 73 | if ((new & (PCI_BASE_ADDRESS_SPACE|PCI_BASE_ADDRESS_MEM_TYPE_MASK)) == |
69 | (PCI_BASE_ADDRESS_SPACE_MEMORY|PCI_BASE_ADDRESS_MEM_TYPE_64)) { | 74 | (PCI_BASE_ADDRESS_SPACE_MEMORY|PCI_BASE_ADDRESS_MEM_TYPE_64)) { |
70 | new = 0; /* currently everyone zeros the high address */ | 75 | new = region.start >> 16 >> 16; |
71 | pci_write_config_dword(dev, reg + 4, new); | 76 | pci_write_config_dword(dev, reg + 4, new); |
72 | pci_read_config_dword(dev, reg + 4, &check); | 77 | pci_read_config_dword(dev, reg + 4, &check); |
73 | if (check != new) { | 78 | if (check != new) { |
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index 8f4d2999af8e..79c74f3a11f5 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -8120,20 +8120,22 @@ static struct notifier_block qeth_ip6_notifier = { | |||
8120 | #endif | 8120 | #endif |
8121 | 8121 | ||
8122 | static int | 8122 | static int |
8123 | qeth_reboot_event(struct notifier_block *this, unsigned long event, void *ptr) | 8123 | __qeth_reboot_event_card(struct device *dev, void *data) |
8124 | { | 8124 | { |
8125 | |||
8126 | struct device *entry; | ||
8127 | struct qeth_card *card; | 8125 | struct qeth_card *card; |
8128 | 8126 | ||
8129 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); | 8127 | card = (struct qeth_card *) dev->driver_data; |
8130 | list_for_each_entry(entry, &qeth_ccwgroup_driver.driver.devices, | 8128 | qeth_clear_ip_list(card, 0, 0); |
8131 | driver_list) { | 8129 | qeth_qdio_clear_card(card, 0); |
8132 | card = (struct qeth_card *) entry->driver_data; | 8130 | return 0; |
8133 | qeth_clear_ip_list(card, 0, 0); | 8131 | } |
8134 | qeth_qdio_clear_card(card, 0); | 8132 | |
8135 | } | 8133 | static int |
8136 | up_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); | 8134 | qeth_reboot_event(struct notifier_block *this, unsigned long event, void *ptr) |
8135 | { | ||
8136 | |||
8137 | driver_for_each_device(&qeth_ccwgroup_driver.driver, NULL, NULL, | ||
8138 | __qeth_reboot_event_card); | ||
8137 | return NOTIFY_DONE; | 8139 | return NOTIFY_DONE; |
8138 | } | 8140 | } |
8139 | 8141 | ||
diff --git a/drivers/s390/net/qeth_proc.c b/drivers/s390/net/qeth_proc.c index 04719196fd20..f2ccfea8fdb8 100644 --- a/drivers/s390/net/qeth_proc.c +++ b/drivers/s390/net/qeth_proc.c | |||
@@ -27,23 +27,33 @@ const char *VERSION_QETH_PROC_C = "$Revision: 1.13 $"; | |||
27 | #define QETH_PROCFILE_NAME "qeth" | 27 | #define QETH_PROCFILE_NAME "qeth" |
28 | static struct proc_dir_entry *qeth_procfile; | 28 | static struct proc_dir_entry *qeth_procfile; |
29 | 29 | ||
30 | static int | ||
31 | qeth_procfile_seq_match(struct device *dev, void *data) | ||
32 | { | ||
33 | return 1; | ||
34 | } | ||
35 | |||
30 | static void * | 36 | static void * |
31 | qeth_procfile_seq_start(struct seq_file *s, loff_t *offset) | 37 | qeth_procfile_seq_start(struct seq_file *s, loff_t *offset) |
32 | { | 38 | { |
33 | struct list_head *next_card = NULL; | 39 | struct device *dev; |
34 | int i = 0; | 40 | loff_t nr; |
35 | 41 | ||
36 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); | 42 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); |
37 | 43 | ||
38 | if (*offset == 0) | 44 | nr = *offset; |
45 | if (nr == 0) | ||
39 | return SEQ_START_TOKEN; | 46 | return SEQ_START_TOKEN; |
40 | 47 | ||
41 | /* get card at pos *offset */ | 48 | dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, |
42 | list_for_each(next_card, &qeth_ccwgroup_driver.driver.devices) | 49 | NULL, qeth_procfile_seq_match); |
43 | if (++i == *offset) | ||
44 | return next_card; | ||
45 | 50 | ||
46 | return NULL; | 51 | /* get card at pos *offset */ |
52 | nr = *offset; | ||
53 | while (nr-- > 1 && dev) | ||
54 | dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, | ||
55 | NULL, qeth_procfile_seq_match); | ||
56 | return (void *) dev; | ||
47 | } | 57 | } |
48 | 58 | ||
49 | static void | 59 | static void |
@@ -55,23 +65,21 @@ qeth_procfile_seq_stop(struct seq_file *s, void* it) | |||
55 | static void * | 65 | static void * |
56 | qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) | 66 | qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) |
57 | { | 67 | { |
58 | struct list_head *next_card = NULL; | 68 | struct device *prev, *next; |
59 | struct list_head *current_card; | ||
60 | 69 | ||
61 | if (it == SEQ_START_TOKEN) { | 70 | if (it == SEQ_START_TOKEN) { |
62 | next_card = qeth_ccwgroup_driver.driver.devices.next; | 71 | next = driver_find_device(&qeth_ccwgroup_driver.driver, |
63 | if (next_card->next == next_card) /* list empty */ | 72 | NULL, NULL, qeth_procfile_seq_match); |
64 | return NULL; | 73 | if (next) |
65 | (*offset)++; | 74 | (*offset)++; |
66 | } else { | 75 | return (void *) next; |
67 | current_card = (struct list_head *)it; | ||
68 | if (current_card->next == &qeth_ccwgroup_driver.driver.devices) | ||
69 | return NULL; /* end of list reached */ | ||
70 | next_card = current_card->next; | ||
71 | (*offset)++; | ||
72 | } | 76 | } |
73 | 77 | prev = (struct device *) it; | |
74 | return next_card; | 78 | next = driver_find_device(&qeth_ccwgroup_driver.driver, |
79 | prev, NULL, qeth_procfile_seq_match); | ||
80 | if (next) | ||
81 | (*offset)++; | ||
82 | return (void *) next; | ||
75 | } | 83 | } |
76 | 84 | ||
77 | static inline const char * | 85 | static inline const char * |
@@ -126,7 +134,7 @@ qeth_procfile_seq_show(struct seq_file *s, void *it) | |||
126 | "-------------- ---- ------ ---------- ---- " | 134 | "-------------- ---- ------ ---------- ---- " |
127 | "---- ----- -----\n"); | 135 | "---- ----- -----\n"); |
128 | } else { | 136 | } else { |
129 | device = list_entry(it, struct device, driver_list); | 137 | device = (struct device *) it; |
130 | card = device->driver_data; | 138 | card = device->driver_data; |
131 | seq_printf(s, "%s/%s/%s x%02X %-10s %-14s %-4i ", | 139 | seq_printf(s, "%s/%s/%s x%02X %-10s %-14s %-4i ", |
132 | CARD_RDEV_ID(card), | 140 | CARD_RDEV_ID(card), |
@@ -180,17 +188,20 @@ static struct proc_dir_entry *qeth_perf_procfile; | |||
180 | static void * | 188 | static void * |
181 | qeth_perf_procfile_seq_start(struct seq_file *s, loff_t *offset) | 189 | qeth_perf_procfile_seq_start(struct seq_file *s, loff_t *offset) |
182 | { | 190 | { |
183 | struct list_head *next_card = NULL; | 191 | struct device *dev = NULL; |
184 | int i = 0; | 192 | int nr; |
185 | 193 | ||
186 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); | 194 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); |
187 | /* get card at pos *offset */ | 195 | /* get card at pos *offset */ |
188 | list_for_each(next_card, &qeth_ccwgroup_driver.driver.devices){ | 196 | dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, NULL, |
189 | if (i == *offset) | 197 | qeth_procfile_seq_match); |
190 | return next_card; | 198 | |
191 | i++; | 199 | /* get card at pos *offset */ |
192 | } | 200 | nr = *offset; |
193 | return NULL; | 201 | while (nr-- > 1 && dev) |
202 | dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, | ||
203 | NULL, qeth_procfile_seq_match); | ||
204 | return (void *) dev; | ||
194 | } | 205 | } |
195 | 206 | ||
196 | static void | 207 | static void |
@@ -202,12 +213,14 @@ qeth_perf_procfile_seq_stop(struct seq_file *s, void* it) | |||
202 | static void * | 213 | static void * |
203 | qeth_perf_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) | 214 | qeth_perf_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) |
204 | { | 215 | { |
205 | struct list_head *current_card = (struct list_head *)it; | 216 | struct device *prev, *next; |
206 | 217 | ||
207 | if (current_card->next == &qeth_ccwgroup_driver.driver.devices) | 218 | prev = (struct device *) it; |
208 | return NULL; /* end of list reached */ | 219 | next = driver_find_device(&qeth_ccwgroup_driver.driver, prev, |
209 | (*offset)++; | 220 | NULL, qeth_procfile_seq_match); |
210 | return current_card->next; | 221 | if (next) |
222 | (*offset)++; | ||
223 | return (void *) next; | ||
211 | } | 224 | } |
212 | 225 | ||
213 | static int | 226 | static int |
@@ -216,7 +229,7 @@ qeth_perf_procfile_seq_show(struct seq_file *s, void *it) | |||
216 | struct device *device; | 229 | struct device *device; |
217 | struct qeth_card *card; | 230 | struct qeth_card *card; |
218 | 231 | ||
219 | device = list_entry(it, struct device, driver_list); | 232 | device = (struct device *) it; |
220 | card = device->driver_data; | 233 | card = device->driver_data; |
221 | seq_printf(s, "For card with devnos %s/%s/%s (%s):\n", | 234 | seq_printf(s, "For card with devnos %s/%s/%s (%s):\n", |
222 | CARD_RDEV_ID(card), | 235 | CARD_RDEV_ID(card), |
@@ -318,8 +331,8 @@ static struct proc_dir_entry *qeth_ipato_procfile; | |||
318 | static void * | 331 | static void * |
319 | qeth_ipato_procfile_seq_start(struct seq_file *s, loff_t *offset) | 332 | qeth_ipato_procfile_seq_start(struct seq_file *s, loff_t *offset) |
320 | { | 333 | { |
321 | struct list_head *next_card = NULL; | 334 | struct device *dev; |
322 | int i = 0; | 335 | loff_t nr; |
323 | 336 | ||
324 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); | 337 | down_read(&qeth_ccwgroup_driver.driver.bus->subsys.rwsem); |
325 | /* TODO: finish this */ | 338 | /* TODO: finish this */ |
@@ -328,13 +341,16 @@ qeth_ipato_procfile_seq_start(struct seq_file *s, loff_t *offset) | |||
328 | * output driver settings then; | 341 | * output driver settings then; |
329 | * else output setting for respective card | 342 | * else output setting for respective card |
330 | */ | 343 | */ |
344 | |||
345 | dev = driver_find_device(&qeth_ccwgroup_driver.driver, NULL, NULL, | ||
346 | qeth_procfile_seq_match); | ||
347 | |||
331 | /* get card at pos *offset */ | 348 | /* get card at pos *offset */ |
332 | list_for_each(next_card, &qeth_ccwgroup_driver.driver.devices){ | 349 | nr = *offset; |
333 | if (i == *offset) | 350 | while (nr-- > 1 && dev) |
334 | return next_card; | 351 | dev = driver_find_device(&qeth_ccwgroup_driver.driver, dev, |
335 | i++; | 352 | NULL, qeth_procfile_seq_match); |
336 | } | 353 | return (void *) dev; |
337 | return NULL; | ||
338 | } | 354 | } |
339 | 355 | ||
340 | static void | 356 | static void |
@@ -346,18 +362,14 @@ qeth_ipato_procfile_seq_stop(struct seq_file *s, void* it) | |||
346 | static void * | 362 | static void * |
347 | qeth_ipato_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) | 363 | qeth_ipato_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) |
348 | { | 364 | { |
349 | struct list_head *current_card = (struct list_head *)it; | 365 | struct device *prev, *next; |
350 | 366 | ||
351 | /* TODO: finish this */ | 367 | prev = (struct device *) it; |
352 | /* | 368 | next = driver_find_device(&qeth_ccwgroup_driver.driver, prev, |
353 | * maybe SEQ_SATRT_TOKEN can be returned for offset 0 | 369 | NULL, qeth_procfile_seq_match); |
354 | * output driver settings then; | 370 | if (next) |
355 | * else output setting for respective card | 371 | (*offset)++; |
356 | */ | 372 | return (void *) next; |
357 | if (current_card->next == &qeth_ccwgroup_driver.driver.devices) | ||
358 | return NULL; /* end of list reached */ | ||
359 | (*offset)++; | ||
360 | return current_card->next; | ||
361 | } | 373 | } |
362 | 374 | ||
363 | static int | 375 | static int |
@@ -372,7 +384,7 @@ qeth_ipato_procfile_seq_show(struct seq_file *s, void *it) | |||
372 | * output driver settings then; | 384 | * output driver settings then; |
373 | * else output setting for respective card | 385 | * else output setting for respective card |
374 | */ | 386 | */ |
375 | device = list_entry(it, struct device, driver_list); | 387 | device = (struct device *) it; |
376 | card = device->driver_data; | 388 | card = device->driver_data; |
377 | 389 | ||
378 | return 0; | 390 | return 0; |
diff --git a/drivers/serial/cpm_uart/cpm_uart.h b/drivers/serial/cpm_uart/cpm_uart.h index 5f6187baad86..73c8a088c160 100644 --- a/drivers/serial/cpm_uart/cpm_uart.h +++ b/drivers/serial/cpm_uart/cpm_uart.h | |||
@@ -40,13 +40,15 @@ | |||
40 | #define TX_NUM_FIFO 4 | 40 | #define TX_NUM_FIFO 4 |
41 | #define TX_BUF_SIZE 32 | 41 | #define TX_BUF_SIZE 32 |
42 | 42 | ||
43 | #define SCC_WAIT_CLOSING 100 | ||
44 | |||
43 | struct uart_cpm_port { | 45 | struct uart_cpm_port { |
44 | struct uart_port port; | 46 | struct uart_port port; |
45 | u16 rx_nrfifos; | 47 | u16 rx_nrfifos; |
46 | u16 rx_fifosize; | 48 | u16 rx_fifosize; |
47 | u16 tx_nrfifos; | 49 | u16 tx_nrfifos; |
48 | u16 tx_fifosize; | 50 | u16 tx_fifosize; |
49 | smc_t *smcp; | 51 | smc_t *smcp; |
50 | smc_uart_t *smcup; | 52 | smc_uart_t *smcup; |
51 | scc_t *sccp; | 53 | scc_t *sccp; |
52 | scc_uart_t *sccup; | 54 | scc_uart_t *sccup; |
@@ -67,6 +69,8 @@ struct uart_cpm_port { | |||
67 | int bits; | 69 | int bits; |
68 | /* Keep track of 'odd' SMC2 wirings */ | 70 | /* Keep track of 'odd' SMC2 wirings */ |
69 | int is_portb; | 71 | int is_portb; |
72 | /* wait on close if needed */ | ||
73 | int wait_closing; | ||
70 | }; | 74 | }; |
71 | 75 | ||
72 | extern int cpm_uart_port_map[UART_NR]; | 76 | extern int cpm_uart_port_map[UART_NR]; |
diff --git a/drivers/serial/cpm_uart/cpm_uart_core.c b/drivers/serial/cpm_uart/cpm_uart_core.c index 29db677d4284..d639ac92a117 100644 --- a/drivers/serial/cpm_uart/cpm_uart_core.c +++ b/drivers/serial/cpm_uart/cpm_uart_core.c | |||
@@ -9,9 +9,10 @@ | |||
9 | * | 9 | * |
10 | * Maintainer: Kumar Gala (kumar.gala@freescale.com) (CPM2) | 10 | * Maintainer: Kumar Gala (kumar.gala@freescale.com) (CPM2) |
11 | * Pantelis Antoniou (panto@intracom.gr) (CPM1) | 11 | * Pantelis Antoniou (panto@intracom.gr) (CPM1) |
12 | * | 12 | * |
13 | * Copyright (C) 2004 Freescale Semiconductor, Inc. | 13 | * Copyright (C) 2004 Freescale Semiconductor, Inc. |
14 | * (C) 2004 Intracom, S.A. | 14 | * (C) 2004 Intracom, S.A. |
15 | * (C) 2005 MontaVista Software, Inc. by Vitaly Bordug <vbordug@ru.mvista.com> | ||
15 | * | 16 | * |
16 | * This program is free software; you can redistribute it and/or modify | 17 | * This program is free software; you can redistribute it and/or modify |
17 | * it under the terms of the GNU General Public License as published by | 18 | * it under the terms of the GNU General Public License as published by |
@@ -70,8 +71,22 @@ static void cpm_uart_initbd(struct uart_cpm_port *pinfo); | |||
70 | 71 | ||
71 | /**************************************************************/ | 72 | /**************************************************************/ |
72 | 73 | ||
74 | static inline unsigned long cpu2cpm_addr(void *addr) | ||
75 | { | ||
76 | if ((unsigned long)addr >= CPM_ADDR) | ||
77 | return (unsigned long)addr; | ||
78 | return virt_to_bus(addr); | ||
79 | } | ||
80 | |||
81 | static inline void *cpm2cpu_addr(unsigned long addr) | ||
82 | { | ||
83 | if (addr >= CPM_ADDR) | ||
84 | return (void *)addr; | ||
85 | return bus_to_virt(addr); | ||
86 | } | ||
87 | |||
73 | /* | 88 | /* |
74 | * Check, if transmit buffers are processed | 89 | * Check, if transmit buffers are processed |
75 | */ | 90 | */ |
76 | static unsigned int cpm_uart_tx_empty(struct uart_port *port) | 91 | static unsigned int cpm_uart_tx_empty(struct uart_port *port) |
77 | { | 92 | { |
@@ -143,15 +158,18 @@ static void cpm_uart_start_tx(struct uart_port *port, unsigned int tty_start) | |||
143 | } | 158 | } |
144 | 159 | ||
145 | if (cpm_uart_tx_pump(port) != 0) { | 160 | if (cpm_uart_tx_pump(port) != 0) { |
146 | if (IS_SMC(pinfo)) | 161 | if (IS_SMC(pinfo)) { |
147 | smcp->smc_smcm |= SMCM_TX; | 162 | smcp->smc_smcm |= SMCM_TX; |
148 | else | 163 | smcp->smc_smcmr |= SMCMR_TEN; |
164 | } else { | ||
149 | sccp->scc_sccm |= UART_SCCM_TX; | 165 | sccp->scc_sccm |= UART_SCCM_TX; |
166 | pinfo->sccp->scc_gsmrl |= SCC_GSMRL_ENT; | ||
167 | } | ||
150 | } | 168 | } |
151 | } | 169 | } |
152 | 170 | ||
153 | /* | 171 | /* |
154 | * Stop receiver | 172 | * Stop receiver |
155 | */ | 173 | */ |
156 | static void cpm_uart_stop_rx(struct uart_port *port) | 174 | static void cpm_uart_stop_rx(struct uart_port *port) |
157 | { | 175 | { |
@@ -176,7 +194,7 @@ static void cpm_uart_enable_ms(struct uart_port *port) | |||
176 | } | 194 | } |
177 | 195 | ||
178 | /* | 196 | /* |
179 | * Generate a break. | 197 | * Generate a break. |
180 | */ | 198 | */ |
181 | static void cpm_uart_break_ctl(struct uart_port *port, int break_state) | 199 | static void cpm_uart_break_ctl(struct uart_port *port, int break_state) |
182 | { | 200 | { |
@@ -231,7 +249,7 @@ static void cpm_uart_int_rx(struct uart_port *port, struct pt_regs *regs) | |||
231 | /* get number of characters, and check spce in flip-buffer */ | 249 | /* get number of characters, and check spce in flip-buffer */ |
232 | i = bdp->cbd_datlen; | 250 | i = bdp->cbd_datlen; |
233 | 251 | ||
234 | /* If we have not enough room in tty flip buffer, then we try | 252 | /* If we have not enough room in tty flip buffer, then we try |
235 | * later, which will be the next rx-interrupt or a timeout | 253 | * later, which will be the next rx-interrupt or a timeout |
236 | */ | 254 | */ |
237 | if ((tty->flip.count + i) >= TTY_FLIPBUF_SIZE) { | 255 | if ((tty->flip.count + i) >= TTY_FLIPBUF_SIZE) { |
@@ -243,7 +261,7 @@ static void cpm_uart_int_rx(struct uart_port *port, struct pt_regs *regs) | |||
243 | } | 261 | } |
244 | 262 | ||
245 | /* get pointer */ | 263 | /* get pointer */ |
246 | cp = (unsigned char *)bus_to_virt(bdp->cbd_bufaddr); | 264 | cp = cpm2cpu_addr(bdp->cbd_bufaddr); |
247 | 265 | ||
248 | /* loop through the buffer */ | 266 | /* loop through the buffer */ |
249 | while (i-- > 0) { | 267 | while (i-- > 0) { |
@@ -265,13 +283,14 @@ static void cpm_uart_int_rx(struct uart_port *port, struct pt_regs *regs) | |||
265 | } /* End while (i--) */ | 283 | } /* End while (i--) */ |
266 | 284 | ||
267 | /* This BD is ready to be used again. Clear status. get next */ | 285 | /* This BD is ready to be used again. Clear status. get next */ |
268 | bdp->cbd_sc &= ~(BD_SC_BR | BD_SC_FR | BD_SC_PR | BD_SC_OV); | 286 | bdp->cbd_sc &= ~(BD_SC_BR | BD_SC_FR | BD_SC_PR | BD_SC_OV | BD_SC_ID); |
269 | bdp->cbd_sc |= BD_SC_EMPTY; | 287 | bdp->cbd_sc |= BD_SC_EMPTY; |
270 | 288 | ||
271 | if (bdp->cbd_sc & BD_SC_WRAP) | 289 | if (bdp->cbd_sc & BD_SC_WRAP) |
272 | bdp = pinfo->rx_bd_base; | 290 | bdp = pinfo->rx_bd_base; |
273 | else | 291 | else |
274 | bdp++; | 292 | bdp++; |
293 | |||
275 | } /* End for (;;) */ | 294 | } /* End for (;;) */ |
276 | 295 | ||
277 | /* Write back buffer pointer */ | 296 | /* Write back buffer pointer */ |
@@ -336,22 +355,22 @@ static irqreturn_t cpm_uart_int(int irq, void *data, struct pt_regs *regs) | |||
336 | 355 | ||
337 | if (IS_SMC(pinfo)) { | 356 | if (IS_SMC(pinfo)) { |
338 | events = smcp->smc_smce; | 357 | events = smcp->smc_smce; |
358 | smcp->smc_smce = events; | ||
339 | if (events & SMCM_BRKE) | 359 | if (events & SMCM_BRKE) |
340 | uart_handle_break(port); | 360 | uart_handle_break(port); |
341 | if (events & SMCM_RX) | 361 | if (events & SMCM_RX) |
342 | cpm_uart_int_rx(port, regs); | 362 | cpm_uart_int_rx(port, regs); |
343 | if (events & SMCM_TX) | 363 | if (events & SMCM_TX) |
344 | cpm_uart_int_tx(port, regs); | 364 | cpm_uart_int_tx(port, regs); |
345 | smcp->smc_smce = events; | ||
346 | } else { | 365 | } else { |
347 | events = sccp->scc_scce; | 366 | events = sccp->scc_scce; |
367 | sccp->scc_scce = events; | ||
348 | if (events & UART_SCCM_BRKE) | 368 | if (events & UART_SCCM_BRKE) |
349 | uart_handle_break(port); | 369 | uart_handle_break(port); |
350 | if (events & UART_SCCM_RX) | 370 | if (events & UART_SCCM_RX) |
351 | cpm_uart_int_rx(port, regs); | 371 | cpm_uart_int_rx(port, regs); |
352 | if (events & UART_SCCM_TX) | 372 | if (events & UART_SCCM_TX) |
353 | cpm_uart_int_tx(port, regs); | 373 | cpm_uart_int_tx(port, regs); |
354 | sccp->scc_scce = events; | ||
355 | } | 374 | } |
356 | return (events) ? IRQ_HANDLED : IRQ_NONE; | 375 | return (events) ? IRQ_HANDLED : IRQ_NONE; |
357 | } | 376 | } |
@@ -360,6 +379,7 @@ static int cpm_uart_startup(struct uart_port *port) | |||
360 | { | 379 | { |
361 | int retval; | 380 | int retval; |
362 | struct uart_cpm_port *pinfo = (struct uart_cpm_port *)port; | 381 | struct uart_cpm_port *pinfo = (struct uart_cpm_port *)port; |
382 | int line = pinfo - cpm_uart_ports; | ||
363 | 383 | ||
364 | pr_debug("CPM uart[%d]:startup\n", port->line); | 384 | pr_debug("CPM uart[%d]:startup\n", port->line); |
365 | 385 | ||
@@ -376,9 +396,19 @@ static int cpm_uart_startup(struct uart_port *port) | |||
376 | pinfo->sccp->scc_sccm |= UART_SCCM_RX; | 396 | pinfo->sccp->scc_sccm |= UART_SCCM_RX; |
377 | } | 397 | } |
378 | 398 | ||
399 | if (!(pinfo->flags & FLAG_CONSOLE)) | ||
400 | cpm_line_cr_cmd(line,CPM_CR_INIT_TRX); | ||
379 | return 0; | 401 | return 0; |
380 | } | 402 | } |
381 | 403 | ||
404 | inline void cpm_uart_wait_until_send(struct uart_cpm_port *pinfo) | ||
405 | { | ||
406 | unsigned long target_jiffies = jiffies + pinfo->wait_closing; | ||
407 | |||
408 | while (!time_after(jiffies, target_jiffies)) | ||
409 | schedule(); | ||
410 | } | ||
411 | |||
382 | /* | 412 | /* |
383 | * Shutdown the uart | 413 | * Shutdown the uart |
384 | */ | 414 | */ |
@@ -394,6 +424,12 @@ static void cpm_uart_shutdown(struct uart_port *port) | |||
394 | 424 | ||
395 | /* If the port is not the console, disable Rx and Tx. */ | 425 | /* If the port is not the console, disable Rx and Tx. */ |
396 | if (!(pinfo->flags & FLAG_CONSOLE)) { | 426 | if (!(pinfo->flags & FLAG_CONSOLE)) { |
427 | /* Wait for all the BDs marked sent */ | ||
428 | while(!cpm_uart_tx_empty(port)) | ||
429 | schedule_timeout(2); | ||
430 | if(pinfo->wait_closing) | ||
431 | cpm_uart_wait_until_send(pinfo); | ||
432 | |||
397 | /* Stop uarts */ | 433 | /* Stop uarts */ |
398 | if (IS_SMC(pinfo)) { | 434 | if (IS_SMC(pinfo)) { |
399 | volatile smc_t *smcp = pinfo->smcp; | 435 | volatile smc_t *smcp = pinfo->smcp; |
@@ -502,7 +538,7 @@ static void cpm_uart_set_termios(struct uart_port *port, | |||
502 | */ | 538 | */ |
503 | if ((termios->c_cflag & CREAD) == 0) | 539 | if ((termios->c_cflag & CREAD) == 0) |
504 | port->read_status_mask &= ~BD_SC_EMPTY; | 540 | port->read_status_mask &= ~BD_SC_EMPTY; |
505 | 541 | ||
506 | spin_lock_irqsave(&port->lock, flags); | 542 | spin_lock_irqsave(&port->lock, flags); |
507 | 543 | ||
508 | /* Start bit has not been added (so don't, because we would just | 544 | /* Start bit has not been added (so don't, because we would just |
@@ -569,7 +605,8 @@ static int cpm_uart_tx_pump(struct uart_port *port) | |||
569 | /* Pick next descriptor and fill from buffer */ | 605 | /* Pick next descriptor and fill from buffer */ |
570 | bdp = pinfo->tx_cur; | 606 | bdp = pinfo->tx_cur; |
571 | 607 | ||
572 | p = bus_to_virt(bdp->cbd_bufaddr); | 608 | p = cpm2cpu_addr(bdp->cbd_bufaddr); |
609 | |||
573 | *p++ = xmit->buf[xmit->tail]; | 610 | *p++ = xmit->buf[xmit->tail]; |
574 | bdp->cbd_datlen = 1; | 611 | bdp->cbd_datlen = 1; |
575 | bdp->cbd_sc |= BD_SC_READY; | 612 | bdp->cbd_sc |= BD_SC_READY; |
@@ -595,7 +632,7 @@ static int cpm_uart_tx_pump(struct uart_port *port) | |||
595 | 632 | ||
596 | while (!(bdp->cbd_sc & BD_SC_READY) && (xmit->tail != xmit->head)) { | 633 | while (!(bdp->cbd_sc & BD_SC_READY) && (xmit->tail != xmit->head)) { |
597 | count = 0; | 634 | count = 0; |
598 | p = bus_to_virt(bdp->cbd_bufaddr); | 635 | p = cpm2cpu_addr(bdp->cbd_bufaddr); |
599 | while (count < pinfo->tx_fifosize) { | 636 | while (count < pinfo->tx_fifosize) { |
600 | *p++ = xmit->buf[xmit->tail]; | 637 | *p++ = xmit->buf[xmit->tail]; |
601 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); | 638 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); |
@@ -606,6 +643,7 @@ static int cpm_uart_tx_pump(struct uart_port *port) | |||
606 | } | 643 | } |
607 | bdp->cbd_datlen = count; | 644 | bdp->cbd_datlen = count; |
608 | bdp->cbd_sc |= BD_SC_READY; | 645 | bdp->cbd_sc |= BD_SC_READY; |
646 | __asm__("eieio"); | ||
609 | /* Get next BD. */ | 647 | /* Get next BD. */ |
610 | if (bdp->cbd_sc & BD_SC_WRAP) | 648 | if (bdp->cbd_sc & BD_SC_WRAP) |
611 | bdp = pinfo->tx_bd_base; | 649 | bdp = pinfo->tx_bd_base; |
@@ -643,12 +681,12 @@ static void cpm_uart_initbd(struct uart_cpm_port *pinfo) | |||
643 | mem_addr = pinfo->mem_addr; | 681 | mem_addr = pinfo->mem_addr; |
644 | bdp = pinfo->rx_cur = pinfo->rx_bd_base; | 682 | bdp = pinfo->rx_cur = pinfo->rx_bd_base; |
645 | for (i = 0; i < (pinfo->rx_nrfifos - 1); i++, bdp++) { | 683 | for (i = 0; i < (pinfo->rx_nrfifos - 1); i++, bdp++) { |
646 | bdp->cbd_bufaddr = virt_to_bus(mem_addr); | 684 | bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr); |
647 | bdp->cbd_sc = BD_SC_EMPTY | BD_SC_INTRPT; | 685 | bdp->cbd_sc = BD_SC_EMPTY | BD_SC_INTRPT; |
648 | mem_addr += pinfo->rx_fifosize; | 686 | mem_addr += pinfo->rx_fifosize; |
649 | } | 687 | } |
650 | 688 | ||
651 | bdp->cbd_bufaddr = virt_to_bus(mem_addr); | 689 | bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr); |
652 | bdp->cbd_sc = BD_SC_WRAP | BD_SC_EMPTY | BD_SC_INTRPT; | 690 | bdp->cbd_sc = BD_SC_WRAP | BD_SC_EMPTY | BD_SC_INTRPT; |
653 | 691 | ||
654 | /* Set the physical address of the host memory | 692 | /* Set the physical address of the host memory |
@@ -658,12 +696,12 @@ static void cpm_uart_initbd(struct uart_cpm_port *pinfo) | |||
658 | mem_addr = pinfo->mem_addr + L1_CACHE_ALIGN(pinfo->rx_nrfifos * pinfo->rx_fifosize); | 696 | mem_addr = pinfo->mem_addr + L1_CACHE_ALIGN(pinfo->rx_nrfifos * pinfo->rx_fifosize); |
659 | bdp = pinfo->tx_cur = pinfo->tx_bd_base; | 697 | bdp = pinfo->tx_cur = pinfo->tx_bd_base; |
660 | for (i = 0; i < (pinfo->tx_nrfifos - 1); i++, bdp++) { | 698 | for (i = 0; i < (pinfo->tx_nrfifos - 1); i++, bdp++) { |
661 | bdp->cbd_bufaddr = virt_to_bus(mem_addr); | 699 | bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr); |
662 | bdp->cbd_sc = BD_SC_INTRPT; | 700 | bdp->cbd_sc = BD_SC_INTRPT; |
663 | mem_addr += pinfo->tx_fifosize; | 701 | mem_addr += pinfo->tx_fifosize; |
664 | } | 702 | } |
665 | 703 | ||
666 | bdp->cbd_bufaddr = virt_to_bus(mem_addr); | 704 | bdp->cbd_bufaddr = cpu2cpm_addr(mem_addr); |
667 | bdp->cbd_sc = BD_SC_WRAP | BD_SC_INTRPT; | 705 | bdp->cbd_sc = BD_SC_WRAP | BD_SC_INTRPT; |
668 | } | 706 | } |
669 | 707 | ||
@@ -763,6 +801,8 @@ static void cpm_uart_init_smc(struct uart_cpm_port *pinfo) | |||
763 | /* Using idle charater time requires some additional tuning. */ | 801 | /* Using idle charater time requires some additional tuning. */ |
764 | up->smc_mrblr = pinfo->rx_fifosize; | 802 | up->smc_mrblr = pinfo->rx_fifosize; |
765 | up->smc_maxidl = pinfo->rx_fifosize; | 803 | up->smc_maxidl = pinfo->rx_fifosize; |
804 | up->smc_brklen = 0; | ||
805 | up->smc_brkec = 0; | ||
766 | up->smc_brkcr = 1; | 806 | up->smc_brkcr = 1; |
767 | 807 | ||
768 | cpm_line_cr_cmd(line, CPM_CR_INIT_TRX); | 808 | cpm_line_cr_cmd(line, CPM_CR_INIT_TRX); |
@@ -796,7 +836,7 @@ static int cpm_uart_request_port(struct uart_port *port) | |||
796 | /* | 836 | /* |
797 | * Setup any port IO, connect any baud rate generators, | 837 | * Setup any port IO, connect any baud rate generators, |
798 | * etc. This is expected to be handled by board | 838 | * etc. This is expected to be handled by board |
799 | * dependant code | 839 | * dependant code |
800 | */ | 840 | */ |
801 | if (pinfo->set_lineif) | 841 | if (pinfo->set_lineif) |
802 | pinfo->set_lineif(pinfo); | 842 | pinfo->set_lineif(pinfo); |
@@ -815,6 +855,10 @@ static int cpm_uart_request_port(struct uart_port *port) | |||
815 | return ret; | 855 | return ret; |
816 | 856 | ||
817 | cpm_uart_initbd(pinfo); | 857 | cpm_uart_initbd(pinfo); |
858 | if (IS_SMC(pinfo)) | ||
859 | cpm_uart_init_smc(pinfo); | ||
860 | else | ||
861 | cpm_uart_init_scc(pinfo); | ||
818 | 862 | ||
819 | return 0; | 863 | return 0; |
820 | } | 864 | } |
@@ -869,7 +913,7 @@ struct uart_cpm_port cpm_uart_ports[UART_NR] = { | |||
869 | .flags = FLAG_SMC, | 913 | .flags = FLAG_SMC, |
870 | .tx_nrfifos = TX_NUM_FIFO, | 914 | .tx_nrfifos = TX_NUM_FIFO, |
871 | .tx_fifosize = TX_BUF_SIZE, | 915 | .tx_fifosize = TX_BUF_SIZE, |
872 | .rx_nrfifos = RX_NUM_FIFO, | 916 | .rx_nrfifos = RX_NUM_FIFO, |
873 | .rx_fifosize = RX_BUF_SIZE, | 917 | .rx_fifosize = RX_BUF_SIZE, |
874 | .set_lineif = smc1_lineif, | 918 | .set_lineif = smc1_lineif, |
875 | }, | 919 | }, |
@@ -883,7 +927,7 @@ struct uart_cpm_port cpm_uart_ports[UART_NR] = { | |||
883 | .flags = FLAG_SMC, | 927 | .flags = FLAG_SMC, |
884 | .tx_nrfifos = TX_NUM_FIFO, | 928 | .tx_nrfifos = TX_NUM_FIFO, |
885 | .tx_fifosize = TX_BUF_SIZE, | 929 | .tx_fifosize = TX_BUF_SIZE, |
886 | .rx_nrfifos = RX_NUM_FIFO, | 930 | .rx_nrfifos = RX_NUM_FIFO, |
887 | .rx_fifosize = RX_BUF_SIZE, | 931 | .rx_fifosize = RX_BUF_SIZE, |
888 | .set_lineif = smc2_lineif, | 932 | .set_lineif = smc2_lineif, |
889 | #ifdef CONFIG_SERIAL_CPM_ALT_SMC2 | 933 | #ifdef CONFIG_SERIAL_CPM_ALT_SMC2 |
@@ -899,9 +943,10 @@ struct uart_cpm_port cpm_uart_ports[UART_NR] = { | |||
899 | }, | 943 | }, |
900 | .tx_nrfifos = TX_NUM_FIFO, | 944 | .tx_nrfifos = TX_NUM_FIFO, |
901 | .tx_fifosize = TX_BUF_SIZE, | 945 | .tx_fifosize = TX_BUF_SIZE, |
902 | .rx_nrfifos = RX_NUM_FIFO, | 946 | .rx_nrfifos = RX_NUM_FIFO, |
903 | .rx_fifosize = RX_BUF_SIZE, | 947 | .rx_fifosize = RX_BUF_SIZE, |
904 | .set_lineif = scc1_lineif, | 948 | .set_lineif = scc1_lineif, |
949 | .wait_closing = SCC_WAIT_CLOSING, | ||
905 | }, | 950 | }, |
906 | [UART_SCC2] = { | 951 | [UART_SCC2] = { |
907 | .port = { | 952 | .port = { |
@@ -912,9 +957,10 @@ struct uart_cpm_port cpm_uart_ports[UART_NR] = { | |||
912 | }, | 957 | }, |
913 | .tx_nrfifos = TX_NUM_FIFO, | 958 | .tx_nrfifos = TX_NUM_FIFO, |
914 | .tx_fifosize = TX_BUF_SIZE, | 959 | .tx_fifosize = TX_BUF_SIZE, |
915 | .rx_nrfifos = RX_NUM_FIFO, | 960 | .rx_nrfifos = RX_NUM_FIFO, |
916 | .rx_fifosize = RX_BUF_SIZE, | 961 | .rx_fifosize = RX_BUF_SIZE, |
917 | .set_lineif = scc2_lineif, | 962 | .set_lineif = scc2_lineif, |
963 | .wait_closing = SCC_WAIT_CLOSING, | ||
918 | }, | 964 | }, |
919 | [UART_SCC3] = { | 965 | [UART_SCC3] = { |
920 | .port = { | 966 | .port = { |
@@ -925,9 +971,10 @@ struct uart_cpm_port cpm_uart_ports[UART_NR] = { | |||
925 | }, | 971 | }, |
926 | .tx_nrfifos = TX_NUM_FIFO, | 972 | .tx_nrfifos = TX_NUM_FIFO, |
927 | .tx_fifosize = TX_BUF_SIZE, | 973 | .tx_fifosize = TX_BUF_SIZE, |
928 | .rx_nrfifos = RX_NUM_FIFO, | 974 | .rx_nrfifos = RX_NUM_FIFO, |
929 | .rx_fifosize = RX_BUF_SIZE, | 975 | .rx_fifosize = RX_BUF_SIZE, |
930 | .set_lineif = scc3_lineif, | 976 | .set_lineif = scc3_lineif, |
977 | .wait_closing = SCC_WAIT_CLOSING, | ||
931 | }, | 978 | }, |
932 | [UART_SCC4] = { | 979 | [UART_SCC4] = { |
933 | .port = { | 980 | .port = { |
@@ -938,9 +985,10 @@ struct uart_cpm_port cpm_uart_ports[UART_NR] = { | |||
938 | }, | 985 | }, |
939 | .tx_nrfifos = TX_NUM_FIFO, | 986 | .tx_nrfifos = TX_NUM_FIFO, |
940 | .tx_fifosize = TX_BUF_SIZE, | 987 | .tx_fifosize = TX_BUF_SIZE, |
941 | .rx_nrfifos = RX_NUM_FIFO, | 988 | .rx_nrfifos = RX_NUM_FIFO, |
942 | .rx_fifosize = RX_BUF_SIZE, | 989 | .rx_fifosize = RX_BUF_SIZE, |
943 | .set_lineif = scc4_lineif, | 990 | .set_lineif = scc4_lineif, |
991 | .wait_closing = SCC_WAIT_CLOSING, | ||
944 | }, | 992 | }, |
945 | }; | 993 | }; |
946 | 994 | ||
@@ -983,11 +1031,8 @@ static void cpm_uart_console_write(struct console *co, const char *s, | |||
983 | * If the buffer address is in the CPM DPRAM, don't | 1031 | * If the buffer address is in the CPM DPRAM, don't |
984 | * convert it. | 1032 | * convert it. |
985 | */ | 1033 | */ |
986 | if ((uint) (bdp->cbd_bufaddr) > (uint) CPM_ADDR) | 1034 | cp = cpm2cpu_addr(bdp->cbd_bufaddr); |
987 | cp = (unsigned char *) (bdp->cbd_bufaddr); | 1035 | |
988 | else | ||
989 | cp = bus_to_virt(bdp->cbd_bufaddr); | ||
990 | |||
991 | *cp = *s; | 1036 | *cp = *s; |
992 | 1037 | ||
993 | bdp->cbd_datlen = 1; | 1038 | bdp->cbd_datlen = 1; |
@@ -1003,10 +1048,7 @@ static void cpm_uart_console_write(struct console *co, const char *s, | |||
1003 | while ((bdp->cbd_sc & BD_SC_READY) != 0) | 1048 | while ((bdp->cbd_sc & BD_SC_READY) != 0) |
1004 | ; | 1049 | ; |
1005 | 1050 | ||
1006 | if ((uint) (bdp->cbd_bufaddr) > (uint) CPM_ADDR) | 1051 | cp = cpm2cpu_addr(bdp->cbd_bufaddr); |
1007 | cp = (unsigned char *) (bdp->cbd_bufaddr); | ||
1008 | else | ||
1009 | cp = bus_to_virt(bdp->cbd_bufaddr); | ||
1010 | 1052 | ||
1011 | *cp = 13; | 1053 | *cp = 13; |
1012 | bdp->cbd_datlen = 1; | 1054 | bdp->cbd_datlen = 1; |
@@ -1045,7 +1087,7 @@ static int __init cpm_uart_console_setup(struct console *co, char *options) | |||
1045 | port = | 1087 | port = |
1046 | (struct uart_port *)&cpm_uart_ports[cpm_uart_port_map[co->index]]; | 1088 | (struct uart_port *)&cpm_uart_ports[cpm_uart_port_map[co->index]]; |
1047 | pinfo = (struct uart_cpm_port *)port; | 1089 | pinfo = (struct uart_cpm_port *)port; |
1048 | 1090 | ||
1049 | pinfo->flags |= FLAG_CONSOLE; | 1091 | pinfo->flags |= FLAG_CONSOLE; |
1050 | 1092 | ||
1051 | if (options) { | 1093 | if (options) { |
@@ -1062,7 +1104,7 @@ static int __init cpm_uart_console_setup(struct console *co, char *options) | |||
1062 | /* | 1104 | /* |
1063 | * Setup any port IO, connect any baud rate generators, | 1105 | * Setup any port IO, connect any baud rate generators, |
1064 | * etc. This is expected to be handled by board | 1106 | * etc. This is expected to be handled by board |
1065 | * dependant code | 1107 | * dependant code |
1066 | */ | 1108 | */ |
1067 | if (pinfo->set_lineif) | 1109 | if (pinfo->set_lineif) |
1068 | pinfo->set_lineif(pinfo); | 1110 | pinfo->set_lineif(pinfo); |
@@ -1092,14 +1134,14 @@ static int __init cpm_uart_console_setup(struct console *co, char *options) | |||
1092 | return 0; | 1134 | return 0; |
1093 | } | 1135 | } |
1094 | 1136 | ||
1095 | extern struct uart_driver cpm_reg; | 1137 | static struct uart_driver cpm_reg; |
1096 | static struct console cpm_scc_uart_console = { | 1138 | static struct console cpm_scc_uart_console = { |
1097 | .name "ttyCPM", | 1139 | .name = "ttyCPM", |
1098 | .write cpm_uart_console_write, | 1140 | .write = cpm_uart_console_write, |
1099 | .device uart_console_device, | 1141 | .device = uart_console_device, |
1100 | .setup cpm_uart_console_setup, | 1142 | .setup = cpm_uart_console_setup, |
1101 | .flags CON_PRINTBUFFER, | 1143 | .flags = CON_PRINTBUFFER, |
1102 | .index -1, | 1144 | .index = -1, |
1103 | .data = &cpm_reg, | 1145 | .data = &cpm_reg, |
1104 | }; | 1146 | }; |
1105 | 1147 | ||
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm1.c b/drivers/serial/cpm_uart/cpm_uart_cpm1.c index 8efbd6d1d6a4..4b0786e7eb7f 100644 --- a/drivers/serial/cpm_uart/cpm_uart_cpm1.c +++ b/drivers/serial/cpm_uart/cpm_uart_cpm1.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * Maintainer: Kumar Gala (kumar.gala@freescale.com) (CPM2) | 6 | * Maintainer: Kumar Gala (kumar.gala@freescale.com) (CPM2) |
7 | * Pantelis Antoniou (panto@intracom.gr) (CPM1) | 7 | * Pantelis Antoniou (panto@intracom.gr) (CPM1) |
8 | * | 8 | * |
9 | * Copyright (C) 2004 Freescale Semiconductor, Inc. | 9 | * Copyright (C) 2004 Freescale Semiconductor, Inc. |
10 | * (C) 2004 Intracom, S.A. | 10 | * (C) 2004 Intracom, S.A. |
11 | * | 11 | * |
@@ -82,6 +82,17 @@ void cpm_line_cr_cmd(int line, int cmd) | |||
82 | void smc1_lineif(struct uart_cpm_port *pinfo) | 82 | void smc1_lineif(struct uart_cpm_port *pinfo) |
83 | { | 83 | { |
84 | volatile cpm8xx_t *cp = cpmp; | 84 | volatile cpm8xx_t *cp = cpmp; |
85 | |||
86 | (void)cp; /* fix warning */ | ||
87 | #if defined (CONFIG_MPC885ADS) | ||
88 | /* Enable SMC1 transceivers */ | ||
89 | { | ||
90 | cp->cp_pepar |= 0x000000c0; | ||
91 | cp->cp_pedir &= ~0x000000c0; | ||
92 | cp->cp_peso &= ~0x00000040; | ||
93 | cp->cp_peso |= 0x00000080; | ||
94 | } | ||
95 | #elif defined (CONFIG_MPC86XADS) | ||
85 | unsigned int iobits = 0x000000c0; | 96 | unsigned int iobits = 0x000000c0; |
86 | 97 | ||
87 | if (!pinfo->is_portb) { | 98 | if (!pinfo->is_portb) { |
@@ -93,41 +104,33 @@ void smc1_lineif(struct uart_cpm_port *pinfo) | |||
93 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_padir &= ~iobits; | 104 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_padir &= ~iobits; |
94 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_paodr &= ~iobits; | 105 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_paodr &= ~iobits; |
95 | } | 106 | } |
96 | |||
97 | #ifdef CONFIG_MPC885ADS | ||
98 | /* Enable SMC1 transceivers */ | ||
99 | { | ||
100 | volatile uint __iomem *bcsr1 = ioremap(BCSR1, 4); | ||
101 | uint tmp; | ||
102 | |||
103 | tmp = in_be32(bcsr1); | ||
104 | tmp &= ~BCSR1_RS232EN_1; | ||
105 | out_be32(bcsr1, tmp); | ||
106 | iounmap(bcsr1); | ||
107 | } | ||
108 | #endif | 107 | #endif |
109 | |||
110 | pinfo->brg = 1; | 108 | pinfo->brg = 1; |
111 | } | 109 | } |
112 | 110 | ||
113 | void smc2_lineif(struct uart_cpm_port *pinfo) | 111 | void smc2_lineif(struct uart_cpm_port *pinfo) |
114 | { | 112 | { |
115 | #ifdef CONFIG_MPC885ADS | ||
116 | volatile cpm8xx_t *cp = cpmp; | 113 | volatile cpm8xx_t *cp = cpmp; |
117 | volatile uint __iomem *bcsr1; | ||
118 | uint tmp; | ||
119 | 114 | ||
115 | (void)cp; /* fix warning */ | ||
116 | #if defined (CONFIG_MPC885ADS) | ||
120 | cp->cp_pepar |= 0x00000c00; | 117 | cp->cp_pepar |= 0x00000c00; |
121 | cp->cp_pedir &= ~0x00000c00; | 118 | cp->cp_pedir &= ~0x00000c00; |
122 | cp->cp_peso &= ~0x00000400; | 119 | cp->cp_peso &= ~0x00000400; |
123 | cp->cp_peso |= 0x00000800; | 120 | cp->cp_peso |= 0x00000800; |
121 | #elif defined (CONFIG_MPC86XADS) | ||
122 | unsigned int iobits = 0x00000c00; | ||
123 | |||
124 | if (!pinfo->is_portb) { | ||
125 | cp->cp_pbpar |= iobits; | ||
126 | cp->cp_pbdir &= ~iobits; | ||
127 | cp->cp_pbodr &= ~iobits; | ||
128 | } else { | ||
129 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_papar |= iobits; | ||
130 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_padir &= ~iobits; | ||
131 | ((immap_t *)IMAP_ADDR)->im_ioport.iop_paodr &= ~iobits; | ||
132 | } | ||
124 | 133 | ||
125 | /* Enable SMC2 transceivers */ | ||
126 | bcsr1 = ioremap(BCSR1, 4); | ||
127 | tmp = in_be32(bcsr1); | ||
128 | tmp &= ~BCSR1_RS232EN_2; | ||
129 | out_be32(bcsr1, tmp); | ||
130 | iounmap(bcsr1); | ||
131 | #endif | 134 | #endif |
132 | 135 | ||
133 | pinfo->brg = 2; | 136 | pinfo->brg = 2; |
@@ -158,7 +161,7 @@ void scc4_lineif(struct uart_cpm_port *pinfo) | |||
158 | } | 161 | } |
159 | 162 | ||
160 | /* | 163 | /* |
161 | * Allocate DP-Ram and memory buffers. We need to allocate a transmit and | 164 | * Allocate DP-Ram and memory buffers. We need to allocate a transmit and |
162 | * receive buffer descriptors from dual port ram, and a character | 165 | * receive buffer descriptors from dual port ram, and a character |
163 | * buffer area from host mem. If we are allocating for the console we need | 166 | * buffer area from host mem. If we are allocating for the console we need |
164 | * to do it from bootmem | 167 | * to do it from bootmem |
@@ -185,6 +188,8 @@ int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con) | |||
185 | memsz = L1_CACHE_ALIGN(pinfo->rx_nrfifos * pinfo->rx_fifosize) + | 188 | memsz = L1_CACHE_ALIGN(pinfo->rx_nrfifos * pinfo->rx_fifosize) + |
186 | L1_CACHE_ALIGN(pinfo->tx_nrfifos * pinfo->tx_fifosize); | 189 | L1_CACHE_ALIGN(pinfo->tx_nrfifos * pinfo->tx_fifosize); |
187 | if (is_con) { | 190 | if (is_con) { |
191 | /* was hostalloc but changed cause it blows away the */ | ||
192 | /* large tlb mapping when pinning the kernel area */ | ||
188 | mem_addr = (u8 *) cpm_dpram_addr(cpm_dpalloc(memsz, 8)); | 193 | mem_addr = (u8 *) cpm_dpram_addr(cpm_dpalloc(memsz, 8)); |
189 | dma_addr = 0; | 194 | dma_addr = 0; |
190 | } else | 195 | } else |
diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c index fbf659b6dab0..3edc9f49344b 100644 --- a/drivers/video/modedb.c +++ b/drivers/video/modedb.c | |||
@@ -246,6 +246,11 @@ static const struct fb_videomode modedb[] = { | |||
246 | /* 480x300 @ 72 Hz, 48.0 kHz hsync */ | 246 | /* 480x300 @ 72 Hz, 48.0 kHz hsync */ |
247 | NULL, 72, 480, 300, 33386, 40, 24, 11, 19, 80, 3, | 247 | NULL, 72, 480, 300, 33386, 40, 24, 11, 19, 80, 3, |
248 | 0, FB_VMODE_DOUBLE | 248 | 0, FB_VMODE_DOUBLE |
249 | }, { | ||
250 | /* 1920x1200 @ 60 Hz, 74.5 Khz hsync */ | ||
251 | NULL, 60, 1920, 1200, 5177, 128, 336, 1, 38, 208, 3, | ||
252 | FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
253 | FB_VMODE_NONINTERLACED | ||
249 | }, | 254 | }, |
250 | }; | 255 | }; |
251 | 256 | ||
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c index b2e6b2407869..52b16850a54e 100644 --- a/drivers/video/nvidia/nvidia.c +++ b/drivers/video/nvidia/nvidia.c | |||
@@ -1324,6 +1324,13 @@ static int __devinit nvidia_set_fbinfo(struct fb_info *info) | |||
1324 | 1324 | ||
1325 | fb_videomode_to_var(&nvidiafb_default_var, &modedb); | 1325 | fb_videomode_to_var(&nvidiafb_default_var, &modedb); |
1326 | nvidiafb_default_var.bits_per_pixel = 8; | 1326 | nvidiafb_default_var.bits_per_pixel = 8; |
1327 | } else if (par->fpWidth && par->fpHeight) { | ||
1328 | char buf[16]; | ||
1329 | |||
1330 | memset(buf, 0, 16); | ||
1331 | snprintf(buf, 15, "%dx%d", par->fpWidth, par->fpHeight); | ||
1332 | fb_find_mode(&nvidiafb_default_var, info, buf, specs->modedb, | ||
1333 | specs->modedb_len, &modedb, 8); | ||
1327 | } | 1334 | } |
1328 | 1335 | ||
1329 | if (mode_option) | 1336 | if (mode_option) |
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index 2d29db7ef800..beeec7b51425 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c | |||
@@ -598,7 +598,7 @@ sa1100fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
598 | * requests for the LCD controller. If we hit this, it means we're | 598 | * requests for the LCD controller. If we hit this, it means we're |
599 | * doing nothing but LCD DMA. | 599 | * doing nothing but LCD DMA. |
600 | */ | 600 | */ |
601 | static unsigned int sa1100fb_display_dma_period(struct fb_var_screeninfo *var) | 601 | static inline unsigned int sa1100fb_display_dma_period(struct fb_var_screeninfo *var) |
602 | { | 602 | { |
603 | /* | 603 | /* |
604 | * Period = pixclock * bits_per_byte * bytes_per_transfer | 604 | * Period = pixclock * bits_per_byte * bytes_per_transfer |
@@ -248,17 +248,13 @@ inline void __bio_clone(struct bio *bio, struct bio *bio_src) | |||
248 | { | 248 | { |
249 | request_queue_t *q = bdev_get_queue(bio_src->bi_bdev); | 249 | request_queue_t *q = bdev_get_queue(bio_src->bi_bdev); |
250 | 250 | ||
251 | memcpy(bio->bi_io_vec, bio_src->bi_io_vec, bio_src->bi_max_vecs * sizeof(struct bio_vec)); | 251 | memcpy(bio->bi_io_vec, bio_src->bi_io_vec, |
252 | bio_src->bi_max_vecs * sizeof(struct bio_vec)); | ||
252 | 253 | ||
253 | bio->bi_sector = bio_src->bi_sector; | 254 | bio->bi_sector = bio_src->bi_sector; |
254 | bio->bi_bdev = bio_src->bi_bdev; | 255 | bio->bi_bdev = bio_src->bi_bdev; |
255 | bio->bi_flags |= 1 << BIO_CLONED; | 256 | bio->bi_flags |= 1 << BIO_CLONED; |
256 | bio->bi_rw = bio_src->bi_rw; | 257 | bio->bi_rw = bio_src->bi_rw; |
257 | |||
258 | /* | ||
259 | * notes -- maybe just leave bi_idx alone. assume identical mapping | ||
260 | * for the clone | ||
261 | */ | ||
262 | bio->bi_vcnt = bio_src->bi_vcnt; | 258 | bio->bi_vcnt = bio_src->bi_vcnt; |
263 | bio->bi_size = bio_src->bi_size; | 259 | bio->bi_size = bio_src->bi_size; |
264 | bio->bi_idx = bio_src->bi_idx; | 260 | bio->bi_idx = bio_src->bi_idx; |
diff --git a/fs/dcache.c b/fs/dcache.c index 3aa8a7e980d8..a15a2e1f5520 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/string.h> | 19 | #include <linux/string.h> |
20 | #include <linux/mm.h> | 20 | #include <linux/mm.h> |
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/fsnotify.h> | ||
22 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
23 | #include <linux/init.h> | 24 | #include <linux/init.h> |
24 | #include <linux/smp_lock.h> | 25 | #include <linux/smp_lock.h> |
@@ -101,6 +102,7 @@ static inline void dentry_iput(struct dentry * dentry) | |||
101 | list_del_init(&dentry->d_alias); | 102 | list_del_init(&dentry->d_alias); |
102 | spin_unlock(&dentry->d_lock); | 103 | spin_unlock(&dentry->d_lock); |
103 | spin_unlock(&dcache_lock); | 104 | spin_unlock(&dcache_lock); |
105 | fsnotify_inoderemove(inode); | ||
104 | if (dentry->d_op && dentry->d_op->d_iput) | 106 | if (dentry->d_op && dentry->d_op->d_iput) |
105 | dentry->d_op->d_iput(dentry, inode); | 107 | dentry->d_op->d_iput(dentry, inode); |
106 | else | 108 | else |
@@ -1165,13 +1167,16 @@ out: | |||
1165 | 1167 | ||
1166 | void d_delete(struct dentry * dentry) | 1168 | void d_delete(struct dentry * dentry) |
1167 | { | 1169 | { |
1170 | int isdir = 0; | ||
1168 | /* | 1171 | /* |
1169 | * Are we the only user? | 1172 | * Are we the only user? |
1170 | */ | 1173 | */ |
1171 | spin_lock(&dcache_lock); | 1174 | spin_lock(&dcache_lock); |
1172 | spin_lock(&dentry->d_lock); | 1175 | spin_lock(&dentry->d_lock); |
1176 | isdir = S_ISDIR(dentry->d_inode->i_mode); | ||
1173 | if (atomic_read(&dentry->d_count) == 1) { | 1177 | if (atomic_read(&dentry->d_count) == 1) { |
1174 | dentry_iput(dentry); | 1178 | dentry_iput(dentry); |
1179 | fsnotify_nameremove(dentry, isdir); | ||
1175 | return; | 1180 | return; |
1176 | } | 1181 | } |
1177 | 1182 | ||
@@ -1180,6 +1185,8 @@ void d_delete(struct dentry * dentry) | |||
1180 | 1185 | ||
1181 | spin_unlock(&dentry->d_lock); | 1186 | spin_unlock(&dentry->d_lock); |
1182 | spin_unlock(&dcache_lock); | 1187 | spin_unlock(&dcache_lock); |
1188 | |||
1189 | fsnotify_nameremove(dentry, isdir); | ||
1183 | } | 1190 | } |
1184 | 1191 | ||
1185 | static void __d_rehash(struct dentry * entry, struct hlist_head *list) | 1192 | static void __d_rehash(struct dentry * entry, struct hlist_head *list) |
diff --git a/fs/isofs/compress.c b/fs/isofs/compress.c index 34a44e451689..4917315db732 100644 --- a/fs/isofs/compress.c +++ b/fs/isofs/compress.c | |||
@@ -129,8 +129,14 @@ static int zisofs_readpage(struct file *file, struct page *page) | |||
129 | cend = le32_to_cpu(*(__le32 *)(bh->b_data + (blockendptr & bufmask))); | 129 | cend = le32_to_cpu(*(__le32 *)(bh->b_data + (blockendptr & bufmask))); |
130 | brelse(bh); | 130 | brelse(bh); |
131 | 131 | ||
132 | if (cstart > cend) | ||
133 | goto eio; | ||
134 | |||
132 | csize = cend-cstart; | 135 | csize = cend-cstart; |
133 | 136 | ||
137 | if (csize > deflateBound(1UL << zisofs_block_shift)) | ||
138 | goto eio; | ||
139 | |||
134 | /* Now page[] contains an array of pages, any of which can be NULL, | 140 | /* Now page[] contains an array of pages, any of which can be NULL, |
135 | and the locks on which we hold. We should now read the data and | 141 | and the locks on which we hold. We should now read the data and |
136 | release the pages. If the pages are NULL the decompressed data | 142 | release the pages. If the pages are NULL the decompressed data |
diff --git a/fs/namei.c b/fs/namei.c index 32accb6a672f..57046d98a746 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -1802,7 +1802,6 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
1802 | up(&dentry->d_inode->i_sem); | 1802 | up(&dentry->d_inode->i_sem); |
1803 | if (!error) { | 1803 | if (!error) { |
1804 | d_delete(dentry); | 1804 | d_delete(dentry); |
1805 | fsnotify_rmdir(dentry, dentry->d_inode, dir); | ||
1806 | } | 1805 | } |
1807 | dput(dentry); | 1806 | dput(dentry); |
1808 | 1807 | ||
@@ -1874,9 +1873,7 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry) | |||
1874 | 1873 | ||
1875 | /* We don't d_delete() NFS sillyrenamed files--they still exist. */ | 1874 | /* We don't d_delete() NFS sillyrenamed files--they still exist. */ |
1876 | if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { | 1875 | if (!error && !(dentry->d_flags & DCACHE_NFSFS_RENAMED)) { |
1877 | struct inode *inode = dentry->d_inode; | ||
1878 | d_delete(dentry); | 1876 | d_delete(dentry); |
1879 | fsnotify_unlink(dentry, inode, dir); | ||
1880 | } | 1877 | } |
1881 | 1878 | ||
1882 | return error; | 1879 | return error; |
diff --git a/fs/namespace.c b/fs/namespace.c index 587eb0d707ee..79bd8a46e1e7 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -160,7 +160,7 @@ clone_mnt(struct vfsmount *old, struct dentry *root) | |||
160 | mnt->mnt_root = dget(root); | 160 | mnt->mnt_root = dget(root); |
161 | mnt->mnt_mountpoint = mnt->mnt_root; | 161 | mnt->mnt_mountpoint = mnt->mnt_root; |
162 | mnt->mnt_parent = mnt; | 162 | mnt->mnt_parent = mnt; |
163 | mnt->mnt_namespace = old->mnt_namespace; | 163 | mnt->mnt_namespace = current->namespace; |
164 | 164 | ||
165 | /* stick the duplicate mount on the same expiry list | 165 | /* stick the duplicate mount on the same expiry list |
166 | * as the original if that was on one */ | 166 | * as the original if that was on one */ |
diff --git a/include/asm-i386/mach-visws/do_timer.h b/include/asm-i386/mach-visws/do_timer.h index 33acd50fd9a8..92d638fc8b11 100644 --- a/include/asm-i386/mach-visws/do_timer.h +++ b/include/asm-i386/mach-visws/do_timer.h | |||
@@ -1,6 +1,7 @@ | |||
1 | /* defines for inline arch setup functions */ | 1 | /* defines for inline arch setup functions */ |
2 | 2 | ||
3 | #include <asm/fixmap.h> | 3 | #include <asm/fixmap.h> |
4 | #include <asm/i8259.h> | ||
4 | #include "cobalt.h" | 5 | #include "cobalt.h" |
5 | 6 | ||
6 | static inline void do_timer_interrupt_hook(struct pt_regs *regs) | 7 | static inline void do_timer_interrupt_hook(struct pt_regs *regs) |
diff --git a/include/asm-ppc/pgtable.h b/include/asm-ppc/pgtable.h index c41c7958ea1f..92f30b28b252 100644 --- a/include/asm-ppc/pgtable.h +++ b/include/asm-ppc/pgtable.h | |||
@@ -227,21 +227,21 @@ extern unsigned long ioremap_bot, ioremap_base; | |||
227 | * doesn't support SMP. So we can use this as software bit, like | 227 | * doesn't support SMP. So we can use this as software bit, like |
228 | * DIRTY. | 228 | * DIRTY. |
229 | * | 229 | * |
230 | * PPC Book-E Linux implementation uses PPC HW PTE bit field definition, | 230 | * With the PPC 44x Linux implementation, the 0-11th LSBs of the PTE are used |
231 | * even it doesn't have HW PTE. 0-11th LSB of PTE stand for memory | 231 | * for memory protection related functions (see PTE structure in |
232 | * protection-related function. (See PTE structure in include/asm-ppc/mmu.h) | 232 | * include/asm-ppc/mmu.h). The _PAGE_XXX definitions in this file map to the |
233 | * Definition of _PAGE_XXX in "include/asm-ppc/pagetable.h" stands for | 233 | * above bits. Note that the bit values are CPU specific, not architecture |
234 | * above bits. Note that those bits values are CPU dependent, not | 234 | * specific. |
235 | * architecture. | ||
236 | * | 235 | * |
237 | * Kernel PTE entry holds arch-dependent swp_entry structure under certain | 236 | * The kernel PTE entry holds an arch-dependent swp_entry structure under |
238 | * situation. In other words, in such situation, some portion of PTE bits | 237 | * certain situations. In other words, in such situations some portion of |
239 | * are used as swp_entry. In PPC implementation, 3-24th LSB are shared with | 238 | * the PTE bits are used as a swp_entry. In the PPC implementation, the |
240 | * swp_entry, however 0-2nd three LSB still hold protection values. | 239 | * 3-24th LSB are shared with swp_entry, however the 0-2nd three LSB still |
241 | * That means three protection bits are reserved for both PTE and SWAP | 240 | * hold protection values. That means the three protection bits are |
242 | * entry at the most three LSBs. | 241 | * reserved for both PTE and SWAP entry at the most significant three |
242 | * LSBs. | ||
243 | * | 243 | * |
244 | * There are three protection bits available for SWAP entry; | 244 | * There are three protection bits available for SWAP entry: |
245 | * _PAGE_PRESENT | 245 | * _PAGE_PRESENT |
246 | * _PAGE_FILE | 246 | * _PAGE_FILE |
247 | * _PAGE_HASHPTE (if HW has) | 247 | * _PAGE_HASHPTE (if HW has) |
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 1cb4935348d8..602c305c8585 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
@@ -44,26 +44,22 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | |||
44 | } | 44 | } |
45 | 45 | ||
46 | /* | 46 | /* |
47 | * fsnotify_unlink - file was unlinked | 47 | * fsnotify_nameremove - a filename was removed from a directory |
48 | */ | 48 | */ |
49 | static inline void fsnotify_unlink(struct dentry *dentry, struct inode *inode, struct inode *dir) | 49 | static inline void fsnotify_nameremove(struct dentry *dentry, int isdir) |
50 | { | 50 | { |
51 | inode_dir_notify(dir, DN_DELETE); | 51 | if (isdir) |
52 | inotify_inode_queue_event(dir, IN_DELETE, 0, dentry->d_name.name); | 52 | isdir = IN_ISDIR; |
53 | inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL); | 53 | dnotify_parent(dentry, DN_DELETE); |
54 | 54 | inotify_dentry_parent_queue_event(dentry, IN_DELETE|isdir, 0, dentry->d_name.name); | |
55 | inotify_inode_is_dead(inode); | ||
56 | } | 55 | } |
57 | 56 | ||
58 | /* | 57 | /* |
59 | * fsnotify_rmdir - directory was removed | 58 | * fsnotify_inoderemove - an inode is going away |
60 | */ | 59 | */ |
61 | static inline void fsnotify_rmdir(struct dentry *dentry, struct inode *inode, | 60 | static inline void fsnotify_inoderemove(struct inode *inode) |
62 | struct inode *dir) | ||
63 | { | 61 | { |
64 | inode_dir_notify(dir, DN_DELETE); | 62 | inotify_inode_queue_event(inode, IN_DELETE_SELF, 0, NULL); |
65 | inotify_inode_queue_event(dir,IN_DELETE|IN_ISDIR,0,dentry->d_name.name); | ||
66 | inotify_inode_queue_event(inode, IN_DELETE_SELF | IN_ISDIR, 0, NULL); | ||
67 | inotify_inode_is_dead(inode); | 63 | inotify_inode_is_dead(inode); |
68 | } | 64 | } |
69 | 65 | ||
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index 70c2a9dc4b2b..6552b71bfa73 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
@@ -12,15 +12,13 @@ | |||
12 | #define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */ | 12 | #define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */ |
13 | #define NETLINK_XFRM 6 /* ipsec */ | 13 | #define NETLINK_XFRM 6 /* ipsec */ |
14 | #define NETLINK_SELINUX 7 /* SELinux event notifications */ | 14 | #define NETLINK_SELINUX 7 /* SELinux event notifications */ |
15 | #define NETLINK_ARPD 8 | 15 | #define NETLINK_ISCSI 8 /* Open-iSCSI */ |
16 | #define NETLINK_AUDIT 9 /* auditing */ | 16 | #define NETLINK_AUDIT 9 /* auditing */ |
17 | #define NETLINK_FIB_LOOKUP 10 | 17 | #define NETLINK_FIB_LOOKUP 10 |
18 | #define NETLINK_ROUTE6 11 /* af_inet6 route comm channel */ | ||
19 | #define NETLINK_NETFILTER 12 /* netfilter subsystem */ | 18 | #define NETLINK_NETFILTER 12 /* netfilter subsystem */ |
20 | #define NETLINK_IP6_FW 13 | 19 | #define NETLINK_IP6_FW 13 |
21 | #define NETLINK_DNRTMSG 14 /* DECnet routing messages */ | 20 | #define NETLINK_DNRTMSG 14 /* DECnet routing messages */ |
22 | #define NETLINK_KOBJECT_UEVENT 15 /* Kernel messages to userspace */ | 21 | #define NETLINK_KOBJECT_UEVENT 15 /* Kernel messages to userspace */ |
23 | #define NETLINK_TAPBASE 16 /* 16 to 31 are ethertap */ | ||
24 | 22 | ||
25 | #define MAX_LINKS 32 | 23 | #define MAX_LINKS 32 |
26 | 24 | ||
diff --git a/include/linux/pci.h b/include/linux/pci.h index 98bdd95fcee9..8621cf42b46f 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -225,7 +225,6 @@ | |||
225 | #define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */ | 225 | #define PCI_PM_CAP_PME_D3cold 0x8000 /* PME# from D3 (cold) */ |
226 | #define PCI_PM_CTRL 4 /* PM control and status register */ | 226 | #define PCI_PM_CTRL 4 /* PM control and status register */ |
227 | #define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */ | 227 | #define PCI_PM_CTRL_STATE_MASK 0x0003 /* Current power state (D0 to D3) */ |
228 | #define PCI_PM_CTRL_NO_SOFT_RESET 0x0004 /* No reset for D3hot->D0 */ | ||
229 | #define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */ | 228 | #define PCI_PM_CTRL_PME_ENABLE 0x0100 /* PME pin enable */ |
230 | #define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */ | 229 | #define PCI_PM_CTRL_DATA_SEL_MASK 0x1e00 /* Data select (??) */ |
231 | #define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */ | 230 | #define PCI_PM_CTRL_DATA_SCALE_MASK 0x6000 /* Data scale (??) */ |
@@ -817,9 +816,7 @@ int pci_set_mwi(struct pci_dev *dev); | |||
817 | void pci_clear_mwi(struct pci_dev *dev); | 816 | void pci_clear_mwi(struct pci_dev *dev); |
818 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); | 817 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); |
819 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); | 818 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); |
820 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); | ||
821 | int pci_assign_resource(struct pci_dev *dev, int i); | 819 | int pci_assign_resource(struct pci_dev *dev, int i); |
822 | void pci_restore_bars(struct pci_dev *dev); | ||
823 | 820 | ||
824 | /* ROM control related routines */ | 821 | /* ROM control related routines */ |
825 | void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size); | 822 | void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size); |
diff --git a/include/linux/swap.h b/include/linux/swap.h index 239f520cc49e..bfe3e763ccf2 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h | |||
@@ -7,7 +7,6 @@ | |||
7 | #include <linux/mmzone.h> | 7 | #include <linux/mmzone.h> |
8 | #include <linux/list.h> | 8 | #include <linux/list.h> |
9 | #include <linux/sched.h> | 9 | #include <linux/sched.h> |
10 | #include <linux/pagemap.h> | ||
11 | 10 | ||
12 | #include <asm/atomic.h> | 11 | #include <asm/atomic.h> |
13 | #include <asm/page.h> | 12 | #include <asm/page.h> |
@@ -255,6 +254,8 @@ static inline void put_swap_token(struct mm_struct *mm) | |||
255 | 254 | ||
256 | #define si_swapinfo(val) \ | 255 | #define si_swapinfo(val) \ |
257 | do { (val)->freeswap = (val)->totalswap = 0; } while (0) | 256 | do { (val)->freeswap = (val)->totalswap = 0; } while (0) |
257 | /* only sparc can not include linux/pagemap.h in this file | ||
258 | * so leave page_cache_release and release_pages undeclared... */ | ||
258 | #define free_page_and_swap_cache(page) \ | 259 | #define free_page_and_swap_cache(page) \ |
259 | page_cache_release(page) | 260 | page_cache_release(page) |
260 | #define free_pages_and_swap_cache(pages, nr) \ | 261 | #define free_pages_and_swap_cache(pages, nr) \ |
diff --git a/include/linux/zlib.h b/include/linux/zlib.h index 850076ea14d3..74f7b78c22d2 100644 --- a/include/linux/zlib.h +++ b/include/linux/zlib.h | |||
@@ -506,6 +506,11 @@ extern int zlib_deflateReset (z_streamp strm); | |||
506 | stream state was inconsistent (such as zalloc or state being NULL). | 506 | stream state was inconsistent (such as zalloc or state being NULL). |
507 | */ | 507 | */ |
508 | 508 | ||
509 | static inline unsigned long deflateBound(unsigned long s) | ||
510 | { | ||
511 | return s + ((s + 7) >> 3) + ((s + 63) >> 6) + 11; | ||
512 | } | ||
513 | |||
509 | extern int zlib_deflateParams (z_streamp strm, int level, int strategy); | 514 | extern int zlib_deflateParams (z_streamp strm, int level, int strategy); |
510 | /* | 515 | /* |
511 | Dynamically update the compression level and compression strategy. The | 516 | Dynamically update the compression level and compression strategy. The |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 42a84c53678b..06b24f637026 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
@@ -57,12 +57,6 @@ | |||
57 | #define BT_DBG(fmt, arg...) printk(KERN_INFO "%s: " fmt "\n" , __FUNCTION__ , ## arg) | 57 | #define BT_DBG(fmt, arg...) printk(KERN_INFO "%s: " fmt "\n" , __FUNCTION__ , ## arg) |
58 | #define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __FUNCTION__ , ## arg) | 58 | #define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __FUNCTION__ , ## arg) |
59 | 59 | ||
60 | #ifdef HCI_DATA_DUMP | ||
61 | #define BT_DMP(buf, len) bt_dump(__FUNCTION__, buf, len) | ||
62 | #else | ||
63 | #define BT_DMP(D...) | ||
64 | #endif | ||
65 | |||
66 | extern struct proc_dir_entry *proc_bt; | 60 | extern struct proc_dir_entry *proc_bt; |
67 | 61 | ||
68 | /* Connection and socket states */ | 62 | /* Connection and socket states */ |
@@ -174,8 +168,6 @@ static inline int skb_frags_no(struct sk_buff *skb) | |||
174 | return n; | 168 | return n; |
175 | } | 169 | } |
176 | 170 | ||
177 | void bt_dump(char *pref, __u8 *buf, int count); | ||
178 | |||
179 | int bt_err(__u16 code); | 171 | int bt_err(__u16 code); |
180 | 172 | ||
181 | #endif /* __BLUETOOTH_H */ | 173 | #endif /* __BLUETOOTH_H */ |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 805fb9097318..21a4e3b2cbda 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -398,21 +398,31 @@ static int cpuset_path(const struct cpuset *cs, char *buf, int buflen) | |||
398 | * to continue to serve a useful existence. Next time it's released, | 398 | * to continue to serve a useful existence. Next time it's released, |
399 | * we will get notified again, if it still has 'notify_on_release' set. | 399 | * we will get notified again, if it still has 'notify_on_release' set. |
400 | * | 400 | * |
401 | * Note final arg to call_usermodehelper() is 0 - that means | 401 | * The final arg to call_usermodehelper() is 0, which means don't |
402 | * don't wait. Since we are holding the global cpuset_sem here, | 402 | * wait. The separate /sbin/cpuset_release_agent task is forked by |
403 | * and we are asking another thread (started from keventd) to rmdir a | 403 | * call_usermodehelper(), then control in this thread returns here, |
404 | * cpuset, we can't wait - or we'd deadlock with the removing thread | 404 | * without waiting for the release agent task. We don't bother to |
405 | * on cpuset_sem. | 405 | * wait because the caller of this routine has no use for the exit |
406 | * status of the /sbin/cpuset_release_agent task, so no sense holding | ||
407 | * our caller up for that. | ||
408 | * | ||
409 | * The simple act of forking that task might require more memory, | ||
410 | * which might need cpuset_sem. So this routine must be called while | ||
411 | * cpuset_sem is not held, to avoid a possible deadlock. See also | ||
412 | * comments for check_for_release(), below. | ||
406 | */ | 413 | */ |
407 | 414 | ||
408 | static int cpuset_release_agent(char *cpuset_str) | 415 | static void cpuset_release_agent(const char *pathbuf) |
409 | { | 416 | { |
410 | char *argv[3], *envp[3]; | 417 | char *argv[3], *envp[3]; |
411 | int i; | 418 | int i; |
412 | 419 | ||
420 | if (!pathbuf) | ||
421 | return; | ||
422 | |||
413 | i = 0; | 423 | i = 0; |
414 | argv[i++] = "/sbin/cpuset_release_agent"; | 424 | argv[i++] = "/sbin/cpuset_release_agent"; |
415 | argv[i++] = cpuset_str; | 425 | argv[i++] = (char *)pathbuf; |
416 | argv[i] = NULL; | 426 | argv[i] = NULL; |
417 | 427 | ||
418 | i = 0; | 428 | i = 0; |
@@ -421,17 +431,29 @@ static int cpuset_release_agent(char *cpuset_str) | |||
421 | envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; | 431 | envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; |
422 | envp[i] = NULL; | 432 | envp[i] = NULL; |
423 | 433 | ||
424 | return call_usermodehelper(argv[0], argv, envp, 0); | 434 | call_usermodehelper(argv[0], argv, envp, 0); |
435 | kfree(pathbuf); | ||
425 | } | 436 | } |
426 | 437 | ||
427 | /* | 438 | /* |
428 | * Either cs->count of using tasks transitioned to zero, or the | 439 | * Either cs->count of using tasks transitioned to zero, or the |
429 | * cs->children list of child cpusets just became empty. If this | 440 | * cs->children list of child cpusets just became empty. If this |
430 | * cs is notify_on_release() and now both the user count is zero and | 441 | * cs is notify_on_release() and now both the user count is zero and |
431 | * the list of children is empty, send notice to user land. | 442 | * the list of children is empty, prepare cpuset path in a kmalloc'd |
443 | * buffer, to be returned via ppathbuf, so that the caller can invoke | ||
444 | * cpuset_release_agent() with it later on, once cpuset_sem is dropped. | ||
445 | * Call here with cpuset_sem held. | ||
446 | * | ||
447 | * This check_for_release() routine is responsible for kmalloc'ing | ||
448 | * pathbuf. The above cpuset_release_agent() is responsible for | ||
449 | * kfree'ing pathbuf. The caller of these routines is responsible | ||
450 | * for providing a pathbuf pointer, initialized to NULL, then | ||
451 | * calling check_for_release() with cpuset_sem held and the address | ||
452 | * of the pathbuf pointer, then dropping cpuset_sem, then calling | ||
453 | * cpuset_release_agent() with pathbuf, as set by check_for_release(). | ||
432 | */ | 454 | */ |
433 | 455 | ||
434 | static void check_for_release(struct cpuset *cs) | 456 | static void check_for_release(struct cpuset *cs, char **ppathbuf) |
435 | { | 457 | { |
436 | if (notify_on_release(cs) && atomic_read(&cs->count) == 0 && | 458 | if (notify_on_release(cs) && atomic_read(&cs->count) == 0 && |
437 | list_empty(&cs->children)) { | 459 | list_empty(&cs->children)) { |
@@ -441,10 +463,9 @@ static void check_for_release(struct cpuset *cs) | |||
441 | if (!buf) | 463 | if (!buf) |
442 | return; | 464 | return; |
443 | if (cpuset_path(cs, buf, PAGE_SIZE) < 0) | 465 | if (cpuset_path(cs, buf, PAGE_SIZE) < 0) |
444 | goto out; | 466 | kfree(buf); |
445 | cpuset_release_agent(buf); | 467 | else |
446 | out: | 468 | *ppathbuf = buf; |
447 | kfree(buf); | ||
448 | } | 469 | } |
449 | } | 470 | } |
450 | 471 | ||
@@ -727,14 +748,14 @@ static int update_flag(cpuset_flagbits_t bit, struct cpuset *cs, char *buf) | |||
727 | return 0; | 748 | return 0; |
728 | } | 749 | } |
729 | 750 | ||
730 | static int attach_task(struct cpuset *cs, char *buf) | 751 | static int attach_task(struct cpuset *cs, char *pidbuf, char **ppathbuf) |
731 | { | 752 | { |
732 | pid_t pid; | 753 | pid_t pid; |
733 | struct task_struct *tsk; | 754 | struct task_struct *tsk; |
734 | struct cpuset *oldcs; | 755 | struct cpuset *oldcs; |
735 | cpumask_t cpus; | 756 | cpumask_t cpus; |
736 | 757 | ||
737 | if (sscanf(buf, "%d", &pid) != 1) | 758 | if (sscanf(pidbuf, "%d", &pid) != 1) |
738 | return -EIO; | 759 | return -EIO; |
739 | if (cpus_empty(cs->cpus_allowed) || nodes_empty(cs->mems_allowed)) | 760 | if (cpus_empty(cs->cpus_allowed) || nodes_empty(cs->mems_allowed)) |
740 | return -ENOSPC; | 761 | return -ENOSPC; |
@@ -777,7 +798,7 @@ static int attach_task(struct cpuset *cs, char *buf) | |||
777 | 798 | ||
778 | put_task_struct(tsk); | 799 | put_task_struct(tsk); |
779 | if (atomic_dec_and_test(&oldcs->count)) | 800 | if (atomic_dec_and_test(&oldcs->count)) |
780 | check_for_release(oldcs); | 801 | check_for_release(oldcs, ppathbuf); |
781 | return 0; | 802 | return 0; |
782 | } | 803 | } |
783 | 804 | ||
@@ -801,6 +822,7 @@ static ssize_t cpuset_common_file_write(struct file *file, const char __user *us | |||
801 | struct cftype *cft = __d_cft(file->f_dentry); | 822 | struct cftype *cft = __d_cft(file->f_dentry); |
802 | cpuset_filetype_t type = cft->private; | 823 | cpuset_filetype_t type = cft->private; |
803 | char *buffer; | 824 | char *buffer; |
825 | char *pathbuf = NULL; | ||
804 | int retval = 0; | 826 | int retval = 0; |
805 | 827 | ||
806 | /* Crude upper limit on largest legitimate cpulist user might write. */ | 828 | /* Crude upper limit on largest legitimate cpulist user might write. */ |
@@ -841,7 +863,7 @@ static ssize_t cpuset_common_file_write(struct file *file, const char __user *us | |||
841 | retval = update_flag(CS_NOTIFY_ON_RELEASE, cs, buffer); | 863 | retval = update_flag(CS_NOTIFY_ON_RELEASE, cs, buffer); |
842 | break; | 864 | break; |
843 | case FILE_TASKLIST: | 865 | case FILE_TASKLIST: |
844 | retval = attach_task(cs, buffer); | 866 | retval = attach_task(cs, buffer, &pathbuf); |
845 | break; | 867 | break; |
846 | default: | 868 | default: |
847 | retval = -EINVAL; | 869 | retval = -EINVAL; |
@@ -852,6 +874,7 @@ static ssize_t cpuset_common_file_write(struct file *file, const char __user *us | |||
852 | retval = nbytes; | 874 | retval = nbytes; |
853 | out2: | 875 | out2: |
854 | up(&cpuset_sem); | 876 | up(&cpuset_sem); |
877 | cpuset_release_agent(pathbuf); | ||
855 | out1: | 878 | out1: |
856 | kfree(buffer); | 879 | kfree(buffer); |
857 | return retval; | 880 | return retval; |
@@ -1357,6 +1380,7 @@ static int cpuset_rmdir(struct inode *unused_dir, struct dentry *dentry) | |||
1357 | struct cpuset *cs = dentry->d_fsdata; | 1380 | struct cpuset *cs = dentry->d_fsdata; |
1358 | struct dentry *d; | 1381 | struct dentry *d; |
1359 | struct cpuset *parent; | 1382 | struct cpuset *parent; |
1383 | char *pathbuf = NULL; | ||
1360 | 1384 | ||
1361 | /* the vfs holds both inode->i_sem already */ | 1385 | /* the vfs holds both inode->i_sem already */ |
1362 | 1386 | ||
@@ -1376,7 +1400,7 @@ static int cpuset_rmdir(struct inode *unused_dir, struct dentry *dentry) | |||
1376 | update_cpu_domains(cs); | 1400 | update_cpu_domains(cs); |
1377 | list_del(&cs->sibling); /* delete my sibling from parent->children */ | 1401 | list_del(&cs->sibling); /* delete my sibling from parent->children */ |
1378 | if (list_empty(&parent->children)) | 1402 | if (list_empty(&parent->children)) |
1379 | check_for_release(parent); | 1403 | check_for_release(parent, &pathbuf); |
1380 | spin_lock(&cs->dentry->d_lock); | 1404 | spin_lock(&cs->dentry->d_lock); |
1381 | d = dget(cs->dentry); | 1405 | d = dget(cs->dentry); |
1382 | cs->dentry = NULL; | 1406 | cs->dentry = NULL; |
@@ -1384,6 +1408,7 @@ static int cpuset_rmdir(struct inode *unused_dir, struct dentry *dentry) | |||
1384 | cpuset_d_remove_dir(d); | 1408 | cpuset_d_remove_dir(d); |
1385 | dput(d); | 1409 | dput(d); |
1386 | up(&cpuset_sem); | 1410 | up(&cpuset_sem); |
1411 | cpuset_release_agent(pathbuf); | ||
1387 | return 0; | 1412 | return 0; |
1388 | } | 1413 | } |
1389 | 1414 | ||
@@ -1483,10 +1508,13 @@ void cpuset_exit(struct task_struct *tsk) | |||
1483 | task_unlock(tsk); | 1508 | task_unlock(tsk); |
1484 | 1509 | ||
1485 | if (notify_on_release(cs)) { | 1510 | if (notify_on_release(cs)) { |
1511 | char *pathbuf = NULL; | ||
1512 | |||
1486 | down(&cpuset_sem); | 1513 | down(&cpuset_sem); |
1487 | if (atomic_dec_and_test(&cs->count)) | 1514 | if (atomic_dec_and_test(&cs->count)) |
1488 | check_for_release(cs); | 1515 | check_for_release(cs, &pathbuf); |
1489 | up(&cpuset_sem); | 1516 | up(&cpuset_sem); |
1517 | cpuset_release_agent(pathbuf); | ||
1490 | } else { | 1518 | } else { |
1491 | atomic_dec(&cs->count); | 1519 | atomic_dec(&cs->count); |
1492 | } | 1520 | } |
diff --git a/lib/crc32.c b/lib/crc32.c index 58b222783f9c..065198f98b3f 100644 --- a/lib/crc32.c +++ b/lib/crc32.c | |||
@@ -473,7 +473,7 @@ static u32 test_step(u32 init, unsigned char *buf, size_t len) | |||
473 | init = bitreverse(init); | 473 | init = bitreverse(init); |
474 | crc2 = bitreverse(crc1); | 474 | crc2 = bitreverse(crc1); |
475 | if (crc1 != bitreverse(crc2)) | 475 | if (crc1 != bitreverse(crc2)) |
476 | printf("\nBit reversal fail: 0x%08x -> %0x08x -> 0x%08x\n", | 476 | printf("\nBit reversal fail: 0x%08x -> 0x%08x -> 0x%08x\n", |
477 | crc1, crc2, bitreverse(crc2)); | 477 | crc1, crc2, bitreverse(crc2)); |
478 | crc1 = crc32_le(init, buf, len); | 478 | crc1 = crc32_le(init, buf, len); |
479 | if (crc1 != crc2) | 479 | if (crc1 != crc2) |
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index fb5524365bc2..ffa26c10bfe8 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -299,7 +299,6 @@ struct hci_dev *hci_dev_get(int index) | |||
299 | read_unlock(&hci_dev_list_lock); | 299 | read_unlock(&hci_dev_list_lock); |
300 | return hdev; | 300 | return hdev; |
301 | } | 301 | } |
302 | EXPORT_SYMBOL(hci_dev_get); | ||
303 | 302 | ||
304 | /* ---- Inquiry support ---- */ | 303 | /* ---- Inquiry support ---- */ |
305 | static void inquiry_cache_flush(struct hci_dev *hdev) | 304 | static void inquiry_cache_flush(struct hci_dev *hdev) |
@@ -1042,7 +1041,6 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *p | |||
1042 | 1041 | ||
1043 | return 0; | 1042 | return 0; |
1044 | } | 1043 | } |
1045 | EXPORT_SYMBOL(hci_send_cmd); | ||
1046 | 1044 | ||
1047 | /* Get data from the previously sent command */ | 1045 | /* Get data from the previously sent command */ |
1048 | void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf) | 1046 | void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf) |
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index c4b592b4ef10..46367bd129c3 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c | |||
@@ -1035,9 +1035,11 @@ void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data) | |||
1035 | ev->type = type; | 1035 | ev->type = type; |
1036 | memcpy(ev->data, data, dlen); | 1036 | memcpy(ev->data, data, dlen); |
1037 | 1037 | ||
1038 | bt_cb(skb)->incoming = 1; | ||
1039 | do_gettimeofday(&skb->stamp); | ||
1040 | |||
1038 | skb->pkt_type = HCI_EVENT_PKT; | 1041 | skb->pkt_type = HCI_EVENT_PKT; |
1039 | skb->dev = (void *) hdev; | 1042 | skb->dev = (void *) hdev; |
1040 | hci_send_to_sock(hdev, skb); | 1043 | hci_send_to_sock(hdev, skb); |
1041 | kfree_skb(skb); | 1044 | kfree_skb(skb); |
1042 | } | 1045 | } |
1043 | EXPORT_SYMBOL(hci_si_event); | ||
diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c index 9efb0a093612..ee6a66979913 100644 --- a/net/bluetooth/lib.c +++ b/net/bluetooth/lib.c | |||
@@ -34,31 +34,6 @@ | |||
34 | 34 | ||
35 | #include <net/bluetooth/bluetooth.h> | 35 | #include <net/bluetooth/bluetooth.h> |
36 | 36 | ||
37 | void bt_dump(char *pref, __u8 *buf, int count) | ||
38 | { | ||
39 | char *ptr; | ||
40 | char line[100]; | ||
41 | unsigned int i; | ||
42 | |||
43 | printk(KERN_INFO "%s: dump, len %d\n", pref, count); | ||
44 | |||
45 | ptr = line; | ||
46 | *ptr = 0; | ||
47 | for (i = 0; i < count; i++) { | ||
48 | ptr += sprintf(ptr, " %2.2X", buf[i]); | ||
49 | |||
50 | if (i && !((i + 1) % 20)) { | ||
51 | printk(KERN_INFO "%s:%s\n", pref, line); | ||
52 | ptr = line; | ||
53 | *ptr = 0; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | if (line[0]) | ||
58 | printk(KERN_INFO "%s:%s\n", pref, line); | ||
59 | } | ||
60 | EXPORT_SYMBOL(bt_dump); | ||
61 | |||
62 | void baswap(bdaddr_t *dst, bdaddr_t *src) | 37 | void baswap(bdaddr_t *dst, bdaddr_t *src) |
63 | { | 38 | { |
64 | unsigned char *d = (unsigned char *) dst; | 39 | unsigned char *d = (unsigned char *) dst; |
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index e9e6fda66f1a..27bf5047cd33 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
@@ -389,8 +389,6 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) | |||
389 | rfcomm_dlc_unlock(d); | 389 | rfcomm_dlc_unlock(d); |
390 | 390 | ||
391 | skb_queue_purge(&d->tx_queue); | 391 | skb_queue_purge(&d->tx_queue); |
392 | rfcomm_session_put(s); | ||
393 | |||
394 | rfcomm_dlc_unlink(d); | 392 | rfcomm_dlc_unlink(d); |
395 | } | 393 | } |
396 | 394 | ||
@@ -600,8 +598,6 @@ static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst | |||
600 | goto failed; | 598 | goto failed; |
601 | } | 599 | } |
602 | 600 | ||
603 | rfcomm_session_hold(s); | ||
604 | |||
605 | s->initiator = 1; | 601 | s->initiator = 1; |
606 | 602 | ||
607 | bacpy(&addr.l2_bdaddr, dst); | 603 | bacpy(&addr.l2_bdaddr, dst); |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 279f57abfecb..3d78464f64ea 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -936,8 +936,7 @@ int icmp_rcv(struct sk_buff *skb) | |||
936 | case CHECKSUM_HW: | 936 | case CHECKSUM_HW: |
937 | if (!(u16)csum_fold(skb->csum)) | 937 | if (!(u16)csum_fold(skb->csum)) |
938 | break; | 938 | break; |
939 | NETDEBUG(if (net_ratelimit()) | 939 | LIMIT_NETDEBUG(printk(KERN_DEBUG "icmp v4 hw csum failure\n")); |
940 | printk(KERN_DEBUG "icmp v4 hw csum failure\n")); | ||
941 | case CHECKSUM_NONE: | 940 | case CHECKSUM_NONE: |
942 | if ((u16)csum_fold(skb_checksum(skb, 0, skb->len, 0))) | 941 | if ((u16)csum_fold(skb_checksum(skb, 0, skb->len, 0))) |
943 | goto error; | 942 | goto error; |
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index 7f68e27eb4ea..eb377ae15305 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -377,7 +377,7 @@ static struct ipq *ip_frag_create(unsigned hash, struct iphdr *iph, u32 user) | |||
377 | return ip_frag_intern(hash, qp); | 377 | return ip_frag_intern(hash, qp); |
378 | 378 | ||
379 | out_nomem: | 379 | out_nomem: |
380 | NETDEBUG(if (net_ratelimit()) printk(KERN_ERR "ip_frag_create: no memory left !\n")); | 380 | LIMIT_NETDEBUG(printk(KERN_ERR "ip_frag_create: no memory left !\n")); |
381 | return NULL; | 381 | return NULL; |
382 | } | 382 | } |
383 | 383 | ||
@@ -625,10 +625,8 @@ static struct sk_buff *ip_frag_reasm(struct ipq *qp, struct net_device *dev) | |||
625 | return head; | 625 | return head; |
626 | 626 | ||
627 | out_nomem: | 627 | out_nomem: |
628 | NETDEBUG(if (net_ratelimit()) | 628 | LIMIT_NETDEBUG(printk(KERN_ERR "IP: queue_glue: no memory for gluing " |
629 | printk(KERN_ERR | 629 | "queue %p\n", qp)); |
630 | "IP: queue_glue: no memory for gluing queue %p\n", | ||
631 | qp)); | ||
632 | goto out_fail; | 630 | goto out_fail; |
633 | out_oversize: | 631 | out_oversize: |
634 | if (net_ratelimit()) | 632 | if (net_ratelimit()) |
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index fc7c481d0d79..ff4bd067b397 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c | |||
@@ -848,6 +848,9 @@ mc_msf_out: | |||
848 | 848 | ||
849 | case IP_IPSEC_POLICY: | 849 | case IP_IPSEC_POLICY: |
850 | case IP_XFRM_POLICY: | 850 | case IP_XFRM_POLICY: |
851 | err = -EPERM; | ||
852 | if (!capable(CAP_NET_ADMIN)) | ||
853 | break; | ||
851 | err = xfrm_user_policy(sk, optname, optval, optlen); | 854 | err = xfrm_user_policy(sk, optname, optval, optlen); |
852 | break; | 855 | break; |
853 | 856 | ||
diff --git a/net/ipv4/netfilter/ip_nat_standalone.c b/net/ipv4/netfilter/ip_nat_standalone.c index bc59d0d6e89e..91d5ea1dbbc9 100644 --- a/net/ipv4/netfilter/ip_nat_standalone.c +++ b/net/ipv4/netfilter/ip_nat_standalone.c | |||
@@ -102,6 +102,10 @@ ip_nat_fn(unsigned int hooknum, | |||
102 | return NF_ACCEPT; | 102 | return NF_ACCEPT; |
103 | } | 103 | } |
104 | 104 | ||
105 | /* Don't try to NAT if this packet is not conntracked */ | ||
106 | if (ct == &ip_conntrack_untracked) | ||
107 | return NF_ACCEPT; | ||
108 | |||
105 | switch (ctinfo) { | 109 | switch (ctinfo) { |
106 | case IP_CT_RELATED: | 110 | case IP_CT_RELATED: |
107 | case IP_CT_RELATED+IP_CT_IS_REPLY: | 111 | case IP_CT_RELATED+IP_CT_IS_REPLY: |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 62f62bb05c2a..5d91213d34c0 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -1494,12 +1494,11 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1494 | * to destinations, already remembered | 1494 | * to destinations, already remembered |
1495 | * to the moment of synflood. | 1495 | * to the moment of synflood. |
1496 | */ | 1496 | */ |
1497 | NETDEBUG(if (net_ratelimit()) \ | 1497 | LIMIT_NETDEBUG(printk(KERN_DEBUG "TCP: drop open " |
1498 | printk(KERN_DEBUG "TCP: drop open " | 1498 | "request from %u.%u." |
1499 | "request from %u.%u." | 1499 | "%u.%u/%u\n", |
1500 | "%u.%u/%u\n", \ | 1500 | NIPQUAD(saddr), |
1501 | NIPQUAD(saddr), | 1501 | ntohs(skb->h.th->source))); |
1502 | ntohs(skb->h.th->source))); | ||
1503 | dst_release(dst); | 1502 | dst_release(dst); |
1504 | goto drop_and_free; | 1503 | goto drop_and_free; |
1505 | } | 1504 | } |
@@ -1627,8 +1626,7 @@ static int tcp_v4_checksum_init(struct sk_buff *skb) | |||
1627 | skb->nh.iph->daddr, skb->csum)) | 1626 | skb->nh.iph->daddr, skb->csum)) |
1628 | return 0; | 1627 | return 0; |
1629 | 1628 | ||
1630 | NETDEBUG(if (net_ratelimit()) | 1629 | LIMIT_NETDEBUG(printk(KERN_DEBUG "hw tcp v4 csum failed\n")); |
1631 | printk(KERN_DEBUG "hw tcp v4 csum failed\n")); | ||
1632 | skb->ip_summed = CHECKSUM_NONE; | 1630 | skb->ip_summed = CHECKSUM_NONE; |
1633 | } | 1631 | } |
1634 | if (skb->len <= 76) { | 1632 | if (skb->len <= 76) { |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 7c24e64b443f..dc4d07357e3a 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -628,7 +628,7 @@ back_from_confirm: | |||
628 | /* ... which is an evident application bug. --ANK */ | 628 | /* ... which is an evident application bug. --ANK */ |
629 | release_sock(sk); | 629 | release_sock(sk); |
630 | 630 | ||
631 | NETDEBUG(if (net_ratelimit()) printk(KERN_DEBUG "udp cork app bug 2\n")); | 631 | LIMIT_NETDEBUG(printk(KERN_DEBUG "udp cork app bug 2\n")); |
632 | err = -EINVAL; | 632 | err = -EINVAL; |
633 | goto out; | 633 | goto out; |
634 | } | 634 | } |
@@ -693,7 +693,7 @@ static int udp_sendpage(struct sock *sk, struct page *page, int offset, | |||
693 | if (unlikely(!up->pending)) { | 693 | if (unlikely(!up->pending)) { |
694 | release_sock(sk); | 694 | release_sock(sk); |
695 | 695 | ||
696 | NETDEBUG(if (net_ratelimit()) printk(KERN_DEBUG "udp cork app bug 3\n")); | 696 | LIMIT_NETDEBUG(printk(KERN_DEBUG "udp cork app bug 3\n")); |
697 | return -EINVAL; | 697 | return -EINVAL; |
698 | } | 698 | } |
699 | 699 | ||
@@ -1102,7 +1102,7 @@ static int udp_checksum_init(struct sk_buff *skb, struct udphdr *uh, | |||
1102 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 1102 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
1103 | if (!udp_check(uh, ulen, saddr, daddr, skb->csum)) | 1103 | if (!udp_check(uh, ulen, saddr, daddr, skb->csum)) |
1104 | return 0; | 1104 | return 0; |
1105 | NETDEBUG(if (net_ratelimit()) printk(KERN_DEBUG "udp v4 hw csum failure.\n")); | 1105 | LIMIT_NETDEBUG(printk(KERN_DEBUG "udp v4 hw csum failure.\n")); |
1106 | skb->ip_summed = CHECKSUM_NONE; | 1106 | skb->ip_summed = CHECKSUM_NONE; |
1107 | } | 1107 | } |
1108 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) | 1108 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) |
@@ -1181,14 +1181,13 @@ int udp_rcv(struct sk_buff *skb) | |||
1181 | return(0); | 1181 | return(0); |
1182 | 1182 | ||
1183 | short_packet: | 1183 | short_packet: |
1184 | NETDEBUG(if (net_ratelimit()) | 1184 | LIMIT_NETDEBUG(printk(KERN_DEBUG "UDP: short packet: From %u.%u.%u.%u:%u %d/%d to %u.%u.%u.%u:%u\n", |
1185 | printk(KERN_DEBUG "UDP: short packet: From %u.%u.%u.%u:%u %d/%d to %u.%u.%u.%u:%u\n", | 1185 | NIPQUAD(saddr), |
1186 | NIPQUAD(saddr), | 1186 | ntohs(uh->source), |
1187 | ntohs(uh->source), | 1187 | ulen, |
1188 | ulen, | 1188 | len, |
1189 | len, | 1189 | NIPQUAD(daddr), |
1190 | NIPQUAD(daddr), | 1190 | ntohs(uh->dest))); |
1191 | ntohs(uh->dest))); | ||
1192 | no_header: | 1191 | no_header: |
1193 | UDP_INC_STATS_BH(UDP_MIB_INERRORS); | 1192 | UDP_INC_STATS_BH(UDP_MIB_INERRORS); |
1194 | kfree_skb(skb); | 1193 | kfree_skb(skb); |
@@ -1199,13 +1198,12 @@ csum_error: | |||
1199 | * RFC1122: OK. Discards the bad packet silently (as far as | 1198 | * RFC1122: OK. Discards the bad packet silently (as far as |
1200 | * the network is concerned, anyway) as per 4.1.3.4 (MUST). | 1199 | * the network is concerned, anyway) as per 4.1.3.4 (MUST). |
1201 | */ | 1200 | */ |
1202 | NETDEBUG(if (net_ratelimit()) | 1201 | LIMIT_NETDEBUG(printk(KERN_DEBUG "UDP: bad checksum. From %d.%d.%d.%d:%d to %d.%d.%d.%d:%d ulen %d\n", |
1203 | printk(KERN_DEBUG "UDP: bad checksum. From %d.%d.%d.%d:%d to %d.%d.%d.%d:%d ulen %d\n", | 1202 | NIPQUAD(saddr), |
1204 | NIPQUAD(saddr), | 1203 | ntohs(uh->source), |
1205 | ntohs(uh->source), | 1204 | NIPQUAD(daddr), |
1206 | NIPQUAD(daddr), | 1205 | ntohs(uh->dest), |
1207 | ntohs(uh->dest), | 1206 | ulen)); |
1208 | ulen)); | ||
1209 | drop: | 1207 | drop: |
1210 | UDP_INC_STATS_BH(UDP_MIB_INERRORS); | 1208 | UDP_INC_STATS_BH(UDP_MIB_INERRORS); |
1211 | kfree_skb(skb); | 1209 | kfree_skb(skb); |
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index f3ef4c38d315..3bc144a79fa5 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -504,6 +504,9 @@ done: | |||
504 | break; | 504 | break; |
505 | case IPV6_IPSEC_POLICY: | 505 | case IPV6_IPSEC_POLICY: |
506 | case IPV6_XFRM_POLICY: | 506 | case IPV6_XFRM_POLICY: |
507 | retv = -EPERM; | ||
508 | if (!capable(CAP_NET_ADMIN)) | ||
509 | break; | ||
507 | retv = xfrm_user_policy(sk, optname, optval, optlen); | 510 | retv = xfrm_user_policy(sk, optname, optval, optlen); |
508 | break; | 511 | break; |
509 | 512 | ||