diff options
Diffstat (limited to 'drivers')
319 files changed, 3750 insertions, 2345 deletions
diff --git a/drivers/ata/pata_at32.c b/drivers/ata/pata_at32.c index 82fb6e273169..ab61095093b9 100644 --- a/drivers/ata/pata_at32.c +++ b/drivers/ata/pata_at32.c | |||
@@ -24,8 +24,8 @@ | |||
24 | #include <linux/err.h> | 24 | #include <linux/err.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | 26 | ||
27 | #include <asm/arch/board.h> | 27 | #include <mach/board.h> |
28 | #include <asm/arch/smc.h> | 28 | #include <mach/smc.h> |
29 | 29 | ||
30 | #define DRV_NAME "pata_at32" | 30 | #define DRV_NAME "pata_at32" |
31 | #define DRV_VERSION "0.0.3" | 31 | #define DRV_VERSION "0.0.3" |
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index d81632cd7d06..0ce0c279aabf 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c | |||
@@ -1292,8 +1292,6 @@ static void cciss_check_queues(ctlr_info_t *h) | |||
1292 | h->next_to_run = curr_queue; | 1292 | h->next_to_run = curr_queue; |
1293 | break; | 1293 | break; |
1294 | } | 1294 | } |
1295 | } else { | ||
1296 | curr_queue = (curr_queue + 1) % (h->highest_lun + 1); | ||
1297 | } | 1295 | } |
1298 | } | 1296 | } |
1299 | } | 1297 | } |
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index a5da35632651..d9d1b65d206c 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c | |||
@@ -1436,10 +1436,6 @@ static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks) | |||
1436 | tracks->xa=0; | 1436 | tracks->xa=0; |
1437 | tracks->error=0; | 1437 | tracks->error=0; |
1438 | cdinfo(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n"); | 1438 | cdinfo(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n"); |
1439 | if (!CDROM_CAN(CDC_PLAY_AUDIO)) { | ||
1440 | tracks->error=CDS_NO_INFO; | ||
1441 | return; | ||
1442 | } | ||
1443 | /* Grab the TOC header so we can see how many tracks there are */ | 1439 | /* Grab the TOC header so we can see how many tracks there are */ |
1444 | if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header))) { | 1440 | if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header))) { |
1445 | if (ret == -ENOMEDIUM) | 1441 | if (ret == -ENOMEDIUM) |
diff --git a/drivers/char/ds1620.c b/drivers/char/ds1620.c index 34275c6f1da2..74e9cd81b5b2 100644 --- a/drivers/char/ds1620.c +++ b/drivers/char/ds1620.c | |||
@@ -10,7 +10,7 @@ | |||
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <linux/smp_lock.h> | 11 | #include <linux/smp_lock.h> |
12 | 12 | ||
13 | #include <asm/hardware.h> | 13 | #include <mach/hardware.h> |
14 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
15 | #include <asm/uaccess.h> | 15 | #include <asm/uaccess.h> |
16 | #include <asm/therm.h> | 16 | #include <asm/therm.h> |
diff --git a/drivers/char/efirtc.c b/drivers/char/efirtc.c index 67fbd7aab5db..34d15d548236 100644 --- a/drivers/char/efirtc.c +++ b/drivers/char/efirtc.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <linux/rtc.h> | 37 | #include <linux/rtc.h> |
38 | #include <linux/proc_fs.h> | 38 | #include <linux/proc_fs.h> |
39 | #include <linux/efi.h> | 39 | #include <linux/efi.h> |
40 | #include <linux/smp_lock.h> | ||
41 | #include <linux/uaccess.h> | 40 | #include <linux/uaccess.h> |
42 | 41 | ||
43 | #include <asm/system.h> | 42 | #include <asm/system.h> |
diff --git a/drivers/char/hvc_console.h b/drivers/char/hvc_console.h index d9ce10915625..9790201718ae 100644 --- a/drivers/char/hvc_console.h +++ b/drivers/char/hvc_console.h | |||
@@ -6,7 +6,7 @@ | |||
6 | * Ryan S. Arnold <rsa@us.ibm.com> | 6 | * Ryan S. Arnold <rsa@us.ibm.com> |
7 | * | 7 | * |
8 | * hvc_console header information: | 8 | * hvc_console header information: |
9 | * moved here from include/asm-powerpc/hvconsole.h | 9 | * moved here from arch/powerpc/include/asm/hvconsole.h |
10 | * and drivers/char/hvc_console.c | 10 | * and drivers/char/hvc_console.c |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
diff --git a/drivers/char/hvcs.c b/drivers/char/hvcs.c index 786d518e9477..473d9b14439a 100644 --- a/drivers/char/hvcs.c +++ b/drivers/char/hvcs.c | |||
@@ -114,7 +114,7 @@ | |||
114 | * the hvcs_final_close() function in order to get it out of the spinlock. | 114 | * the hvcs_final_close() function in order to get it out of the spinlock. |
115 | * Rearranged hvcs_close(). Cleaned up some printks and did some housekeeping | 115 | * Rearranged hvcs_close(). Cleaned up some printks and did some housekeeping |
116 | * on the changelog. Removed local CLC_LENGTH and used HVCS_CLC_LENGTH from | 116 | * on the changelog. Removed local CLC_LENGTH and used HVCS_CLC_LENGTH from |
117 | * include/asm-powerpc/hvcserver.h | 117 | * arch/powerepc/include/asm/hvcserver.h |
118 | * | 118 | * |
119 | * 1.3.2 -> 1.3.3 Replaced yield() in hvcs_close() with tty_wait_until_sent() to | 119 | * 1.3.2 -> 1.3.3 Replaced yield() in hvcs_close() with tty_wait_until_sent() to |
120 | * prevent possible lockup with realtime scheduling as similarily pointed out by | 120 | * prevent possible lockup with realtime scheduling as similarily pointed out by |
diff --git a/drivers/char/hw_random/ixp4xx-rng.c b/drivers/char/hw_random/ixp4xx-rng.c index bab43ca32ac1..263567f5f392 100644 --- a/drivers/char/hw_random/ixp4xx-rng.c +++ b/drivers/char/hw_random/ixp4xx-rng.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/hw_random.h> | 23 | #include <linux/hw_random.h> |
24 | 24 | ||
25 | #include <asm/io.h> | 25 | #include <asm/io.h> |
26 | #include <asm/hardware.h> | 26 | #include <mach/hardware.h> |
27 | 27 | ||
28 | 28 | ||
29 | static int ixp4xx_rng_data_read(struct hwrng *rng, u32 *buffer) | 29 | static int ixp4xx_rng_data_read(struct hwrng *rng, u32 *buffer) |
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 82a51f38a546..1bc00c9d860d 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -916,7 +916,6 @@ int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines) | |||
916 | ws.ws_col = vc->vc_cols; | 916 | ws.ws_col = vc->vc_cols; |
917 | ws.ws_ypixel = vc->vc_scan_lines; | 917 | ws.ws_ypixel = vc->vc_scan_lines; |
918 | 918 | ||
919 | mutex_lock(&vc->vc_tty->termios_mutex); | ||
920 | spin_lock_irq(&vc->vc_tty->ctrl_lock); | 919 | spin_lock_irq(&vc->vc_tty->ctrl_lock); |
921 | if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col)) | 920 | if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col)) |
922 | pgrp = get_pid(vc->vc_tty->pgrp); | 921 | pgrp = get_pid(vc->vc_tty->pgrp); |
@@ -926,7 +925,6 @@ int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines) | |||
926 | put_pid(pgrp); | 925 | put_pid(pgrp); |
927 | } | 926 | } |
928 | *cws = ws; | 927 | *cws = ws; |
929 | mutex_unlock(&vc->vc_tty->termios_mutex); | ||
930 | } | 928 | } |
931 | 929 | ||
932 | if (CON_IS_VISIBLE(vc)) | 930 | if (CON_IS_VISIBLE(vc)) |
diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c index 42a107fe9233..2d637e0fbc03 100644 --- a/drivers/crypto/ixp4xx_crypto.c +++ b/drivers/crypto/ixp4xx_crypto.c | |||
@@ -27,8 +27,8 @@ | |||
27 | #include <crypto/authenc.h> | 27 | #include <crypto/authenc.h> |
28 | #include <crypto/scatterwalk.h> | 28 | #include <crypto/scatterwalk.h> |
29 | 29 | ||
30 | #include <asm/arch/npe.h> | 30 | #include <mach/npe.h> |
31 | #include <asm/arch/qmgr.h> | 31 | #include <mach/qmgr.h> |
32 | 32 | ||
33 | #define MAX_KEYLEN 32 | 33 | #define MAX_KEYLEN 32 |
34 | 34 | ||
diff --git a/drivers/dma/iop-adma.c b/drivers/dma/iop-adma.c index 85bfeba4d85e..71fba82462cb 100644 --- a/drivers/dma/iop-adma.c +++ b/drivers/dma/iop-adma.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/memory.h> | 33 | #include <linux/memory.h> |
34 | #include <linux/ioport.h> | 34 | #include <linux/ioport.h> |
35 | 35 | ||
36 | #include <asm/arch/adma.h> | 36 | #include <mach/adma.h> |
37 | 37 | ||
38 | #define to_iop_adma_chan(chan) container_of(chan, struct iop_adma_chan, common) | 38 | #define to_iop_adma_chan(chan) container_of(chan, struct iop_adma_chan, common) |
39 | #define to_iop_adma_device(dev) \ | 39 | #define to_iop_adma_device(dev) \ |
diff --git a/drivers/i2c/busses/i2c-acorn.c b/drivers/i2c/busses/i2c-acorn.c index 7c2be3558a24..75089febbc13 100644 --- a/drivers/i2c/busses/i2c-acorn.c +++ b/drivers/i2c/busses/i2c-acorn.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/i2c.h> | 16 | #include <linux/i2c.h> |
17 | #include <linux/i2c-algo-bit.h> | 17 | #include <linux/i2c-algo-bit.h> |
18 | 18 | ||
19 | #include <asm/hardware.h> | 19 | #include <mach/hardware.h> |
20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
21 | #include <asm/hardware/ioc.h> | 21 | #include <asm/hardware/ioc.h> |
22 | #include <asm/system.h> | 22 | #include <asm/system.h> |
diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c index 73d61946a534..c1adcdbf7979 100644 --- a/drivers/i2c/busses/i2c-at91.c +++ b/drivers/i2c/busses/i2c-at91.c | |||
@@ -27,9 +27,9 @@ | |||
27 | 27 | ||
28 | #include <asm/io.h> | 28 | #include <asm/io.h> |
29 | 29 | ||
30 | #include <asm/arch/at91_twi.h> | 30 | #include <mach/at91_twi.h> |
31 | #include <asm/arch/board.h> | 31 | #include <mach/board.h> |
32 | #include <asm/arch/cpu.h> | 32 | #include <mach/cpu.h> |
33 | 33 | ||
34 | #define TWI_CLOCK 100000 /* Hz. max 400 Kbits/sec */ | 34 | #define TWI_CLOCK 100000 /* Hz. max 400 Kbits/sec */ |
35 | 35 | ||
diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c index af3846eda985..5d7789834b95 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c | |||
@@ -36,10 +36,9 @@ | |||
36 | #include <linux/platform_device.h> | 36 | #include <linux/platform_device.h> |
37 | #include <linux/io.h> | 37 | #include <linux/io.h> |
38 | 38 | ||
39 | #include <asm/hardware.h> | 39 | #include <mach/hardware.h> |
40 | #include <asm/mach-types.h> | ||
41 | 40 | ||
42 | #include <asm/arch/i2c.h> | 41 | #include <mach/i2c.h> |
43 | 42 | ||
44 | /* ----- global defines ----------------------------------------------- */ | 43 | /* ----- global defines ----------------------------------------------- */ |
45 | 44 | ||
diff --git a/drivers/i2c/busses/i2c-ixp2000.c b/drivers/i2c/busses/i2c-ixp2000.c index 5af9e6521e6c..05d72e981353 100644 --- a/drivers/i2c/busses/i2c-ixp2000.c +++ b/drivers/i2c/busses/i2c-ixp2000.c | |||
@@ -33,8 +33,8 @@ | |||
33 | #include <linux/i2c.h> | 33 | #include <linux/i2c.h> |
34 | #include <linux/i2c-algo-bit.h> | 34 | #include <linux/i2c-algo-bit.h> |
35 | 35 | ||
36 | #include <asm/hardware.h> /* Pick up IXP2000-specific bits */ | 36 | #include <mach/hardware.h> /* Pick up IXP2000-specific bits */ |
37 | #include <asm/arch/gpio.h> | 37 | #include <mach/gpio.h> |
38 | 38 | ||
39 | static inline int ixp2000_scl_pin(void *data) | 39 | static inline int ixp2000_scl_pin(void *data) |
40 | { | 40 | { |
diff --git a/drivers/i2c/busses/i2c-pnx.c b/drivers/i2c/busses/i2c-pnx.c index 1ca21084ffcf..ec15cff556b9 100644 --- a/drivers/i2c/busses/i2c-pnx.c +++ b/drivers/i2c/busses/i2c-pnx.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/completion.h> | 19 | #include <linux/completion.h> |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/i2c-pnx.h> | 21 | #include <linux/i2c-pnx.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/irq.h> | 23 | #include <asm/irq.h> |
24 | #include <asm/uaccess.h> | 24 | #include <asm/uaccess.h> |
25 | 25 | ||
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index af9e6034d7fb..44d838410f15 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c | |||
@@ -34,11 +34,11 @@ | |||
34 | #include <linux/err.h> | 34 | #include <linux/err.h> |
35 | #include <linux/clk.h> | 35 | #include <linux/clk.h> |
36 | 36 | ||
37 | #include <asm/hardware.h> | 37 | #include <mach/hardware.h> |
38 | #include <asm/irq.h> | 38 | #include <asm/irq.h> |
39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
40 | #include <asm/arch/i2c.h> | 40 | #include <mach/i2c.h> |
41 | #include <asm/arch/pxa-regs.h> | 41 | #include <mach/pxa-regs.h> |
42 | 42 | ||
43 | struct pxa_i2c { | 43 | struct pxa_i2c { |
44 | spinlock_t lock; | 44 | spinlock_t lock; |
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 4864723c7425..c772e02c2803 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
@@ -35,11 +35,11 @@ | |||
35 | #include <linux/clk.h> | 35 | #include <linux/clk.h> |
36 | #include <linux/cpufreq.h> | 36 | #include <linux/cpufreq.h> |
37 | 37 | ||
38 | #include <asm/hardware.h> | 38 | #include <mach/hardware.h> |
39 | #include <asm/irq.h> | 39 | #include <asm/irq.h> |
40 | #include <asm/io.h> | 40 | #include <asm/io.h> |
41 | 41 | ||
42 | #include <asm/arch/regs-gpio.h> | 42 | #include <mach/regs-gpio.h> |
43 | #include <asm/plat-s3c/regs-iic.h> | 43 | #include <asm/plat-s3c/regs-iic.h> |
44 | #include <asm/plat-s3c/iic.h> | 44 | #include <asm/plat-s3c/iic.h> |
45 | 45 | ||
diff --git a/drivers/i2c/chips/isp1301_omap.c b/drivers/i2c/chips/isp1301_omap.c index 03a33f1b9cd3..18355ae2155d 100644 --- a/drivers/i2c/chips/isp1301_omap.c +++ b/drivers/i2c/chips/isp1301_omap.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/workqueue.h> | 33 | #include <linux/workqueue.h> |
34 | 34 | ||
35 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
36 | #include <asm/arch/usb.h> | 36 | #include <mach/usb.h> |
37 | 37 | ||
38 | 38 | ||
39 | #ifndef DEBUG | 39 | #ifndef DEBUG |
@@ -94,7 +94,7 @@ struct isp1301 { | |||
94 | /* board-specific PM hooks */ | 94 | /* board-specific PM hooks */ |
95 | 95 | ||
96 | #include <asm/gpio.h> | 96 | #include <asm/gpio.h> |
97 | #include <asm/arch/mux.h> | 97 | #include <mach/mux.h> |
98 | #include <asm/mach-types.h> | 98 | #include <asm/mach-types.h> |
99 | 99 | ||
100 | 100 | ||
diff --git a/drivers/i2c/chips/menelaus.c b/drivers/i2c/chips/menelaus.c index b36db1797c11..176126d3a01d 100644 --- a/drivers/i2c/chips/menelaus.c +++ b/drivers/i2c/chips/menelaus.c | |||
@@ -41,11 +41,10 @@ | |||
41 | #include <linux/rtc.h> | 41 | #include <linux/rtc.h> |
42 | #include <linux/bcd.h> | 42 | #include <linux/bcd.h> |
43 | 43 | ||
44 | #include <asm/mach-types.h> | ||
45 | #include <asm/mach/irq.h> | 44 | #include <asm/mach/irq.h> |
46 | 45 | ||
47 | #include <asm/arch/gpio.h> | 46 | #include <mach/gpio.h> |
48 | #include <asm/arch/menelaus.h> | 47 | #include <mach/menelaus.h> |
49 | 48 | ||
50 | #define DRIVER_NAME "menelaus" | 49 | #define DRIVER_NAME "menelaus" |
51 | 50 | ||
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index 130ef64b44f7..a34758d29516 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig | |||
@@ -54,16 +54,6 @@ menuconfig IDE | |||
54 | 54 | ||
55 | if IDE | 55 | if IDE |
56 | 56 | ||
57 | config IDE_MAX_HWIFS | ||
58 | int "Max IDE interfaces" | ||
59 | depends on ALPHA || SUPERH || IA64 || EMBEDDED | ||
60 | range 1 10 | ||
61 | default 4 | ||
62 | help | ||
63 | This is the maximum number of IDE hardware interfaces that will | ||
64 | be supported by the driver. Make sure it is at least as high as | ||
65 | the number of IDE interfaces in your system. | ||
66 | |||
67 | config BLK_DEV_IDE | 57 | config BLK_DEV_IDE |
68 | tristate "Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support" | 58 | tristate "Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support" |
69 | ---help--- | 59 | ---help--- |
diff --git a/drivers/ide/arm/ide_arm.c b/drivers/ide/arm/ide_arm.c index 176532ffae0e..f728f2927b5a 100644 --- a/drivers/ide/arm/ide_arm.c +++ b/drivers/ide/arm/ide_arm.c | |||
@@ -11,13 +11,12 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/ide.h> | 12 | #include <linux/ide.h> |
13 | 13 | ||
14 | #include <asm/mach-types.h> | ||
15 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
16 | 15 | ||
17 | #define DRV_NAME "ide_arm" | 16 | #define DRV_NAME "ide_arm" |
18 | 17 | ||
19 | #ifdef CONFIG_ARCH_CLPS7500 | 18 | #ifdef CONFIG_ARCH_CLPS7500 |
20 | # include <asm/arch/hardware.h> | 19 | # include <mach/hardware.h> |
21 | # | 20 | # |
22 | # define IDE_ARM_IO (ISASLOT_IO + 0x1f0) | 21 | # define IDE_ARM_IO (ISASLOT_IO + 0x1f0) |
23 | # define IDE_ARM_IRQ IRQ_ISA_14 | 22 | # define IDE_ARM_IRQ IRQ_ISA_14 |
diff --git a/drivers/ide/arm/palm_bk3710.c b/drivers/ide/arm/palm_bk3710.c index 3e842d60eae9..f788fa5a977b 100644 --- a/drivers/ide/arm/palm_bk3710.c +++ b/drivers/ide/arm/palm_bk3710.c | |||
@@ -309,7 +309,7 @@ static void __devinit palm_bk3710_chipinit(void __iomem *base) | |||
309 | palm_bk3710_setpiomode(base, NULL, 1, 600, 0); | 309 | palm_bk3710_setpiomode(base, NULL, 1, 600, 0); |
310 | } | 310 | } |
311 | 311 | ||
312 | static u8 __devinit palm_bk3710_cable_detect(ide_hwif_t *hwif) | 312 | static u8 palm_bk3710_cable_detect(ide_hwif_t *hwif) |
313 | { | 313 | { |
314 | return ATA_CBL_PATA80; | 314 | return ATA_CBL_PATA80; |
315 | } | 315 | } |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index e617cf08aef6..89a112d513ad 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
@@ -66,11 +66,11 @@ static struct cdrom_info *ide_cd_get(struct gendisk *disk) | |||
66 | mutex_lock(&idecd_ref_mutex); | 66 | mutex_lock(&idecd_ref_mutex); |
67 | cd = ide_cd_g(disk); | 67 | cd = ide_cd_g(disk); |
68 | if (cd) { | 68 | if (cd) { |
69 | kref_get(&cd->kref); | 69 | if (ide_device_get(cd->drive)) |
70 | if (ide_device_get(cd->drive)) { | ||
71 | kref_put(&cd->kref, ide_cd_release); | ||
72 | cd = NULL; | 70 | cd = NULL; |
73 | } | 71 | else |
72 | kref_get(&cd->kref); | ||
73 | |||
74 | } | 74 | } |
75 | mutex_unlock(&idecd_ref_mutex); | 75 | mutex_unlock(&idecd_ref_mutex); |
76 | return cd; | 76 | return cd; |
@@ -78,9 +78,11 @@ static struct cdrom_info *ide_cd_get(struct gendisk *disk) | |||
78 | 78 | ||
79 | static void ide_cd_put(struct cdrom_info *cd) | 79 | static void ide_cd_put(struct cdrom_info *cd) |
80 | { | 80 | { |
81 | ide_drive_t *drive = cd->drive; | ||
82 | |||
81 | mutex_lock(&idecd_ref_mutex); | 83 | mutex_lock(&idecd_ref_mutex); |
82 | ide_device_put(cd->drive); | ||
83 | kref_put(&cd->kref, ide_cd_release); | 84 | kref_put(&cd->kref, ide_cd_release); |
85 | ide_device_put(drive); | ||
84 | mutex_unlock(&idecd_ref_mutex); | 86 | mutex_unlock(&idecd_ref_mutex); |
85 | } | 87 | } |
86 | 88 | ||
@@ -1305,6 +1307,7 @@ static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, | |||
1305 | int stat; | 1307 | int stat; |
1306 | unsigned char cmd[BLK_MAX_CDB]; | 1308 | unsigned char cmd[BLK_MAX_CDB]; |
1307 | unsigned len = sizeof(capbuf); | 1309 | unsigned len = sizeof(capbuf); |
1310 | u32 blocklen; | ||
1308 | 1311 | ||
1309 | memset(cmd, 0, BLK_MAX_CDB); | 1312 | memset(cmd, 0, BLK_MAX_CDB); |
1310 | cmd[0] = GPCMD_READ_CDVD_CAPACITY; | 1313 | cmd[0] = GPCMD_READ_CDVD_CAPACITY; |
@@ -1317,23 +1320,24 @@ static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, | |||
1317 | /* | 1320 | /* |
1318 | * Sanity check the given block size | 1321 | * Sanity check the given block size |
1319 | */ | 1322 | */ |
1320 | switch (capbuf.blocklen) { | 1323 | blocklen = be32_to_cpu(capbuf.blocklen); |
1321 | case __constant_cpu_to_be32(512): | 1324 | switch (blocklen) { |
1322 | case __constant_cpu_to_be32(1024): | 1325 | case 512: |
1323 | case __constant_cpu_to_be32(2048): | 1326 | case 1024: |
1324 | case __constant_cpu_to_be32(4096): | 1327 | case 2048: |
1328 | case 4096: | ||
1325 | break; | 1329 | break; |
1326 | default: | 1330 | default: |
1327 | printk(KERN_ERR "%s: weird block size %u\n", | 1331 | printk(KERN_ERR "%s: weird block size %u\n", |
1328 | drive->name, capbuf.blocklen); | 1332 | drive->name, blocklen); |
1329 | printk(KERN_ERR "%s: default to 2kb block size\n", | 1333 | printk(KERN_ERR "%s: default to 2kb block size\n", |
1330 | drive->name); | 1334 | drive->name); |
1331 | capbuf.blocklen = __constant_cpu_to_be32(2048); | 1335 | blocklen = 2048; |
1332 | break; | 1336 | break; |
1333 | } | 1337 | } |
1334 | 1338 | ||
1335 | *capacity = 1 + be32_to_cpu(capbuf.lba); | 1339 | *capacity = 1 + be32_to_cpu(capbuf.lba); |
1336 | *sectors_per_frame = be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS; | 1340 | *sectors_per_frame = blocklen >> SECTOR_BITS; |
1337 | return 0; | 1341 | return 0; |
1338 | } | 1342 | } |
1339 | 1343 | ||
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 28d85b410f7c..68b9cf0138b0 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c | |||
@@ -65,11 +65,10 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) | |||
65 | mutex_lock(&idedisk_ref_mutex); | 65 | mutex_lock(&idedisk_ref_mutex); |
66 | idkp = ide_disk_g(disk); | 66 | idkp = ide_disk_g(disk); |
67 | if (idkp) { | 67 | if (idkp) { |
68 | kref_get(&idkp->kref); | 68 | if (ide_device_get(idkp->drive)) |
69 | if (ide_device_get(idkp->drive)) { | ||
70 | kref_put(&idkp->kref, ide_disk_release); | ||
71 | idkp = NULL; | 69 | idkp = NULL; |
72 | } | 70 | else |
71 | kref_get(&idkp->kref); | ||
73 | } | 72 | } |
74 | mutex_unlock(&idedisk_ref_mutex); | 73 | mutex_unlock(&idedisk_ref_mutex); |
75 | return idkp; | 74 | return idkp; |
@@ -77,9 +76,11 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) | |||
77 | 76 | ||
78 | static void ide_disk_put(struct ide_disk_obj *idkp) | 77 | static void ide_disk_put(struct ide_disk_obj *idkp) |
79 | { | 78 | { |
79 | ide_drive_t *drive = idkp->drive; | ||
80 | |||
80 | mutex_lock(&idedisk_ref_mutex); | 81 | mutex_lock(&idedisk_ref_mutex); |
81 | ide_device_put(idkp->drive); | ||
82 | kref_put(&idkp->kref, ide_disk_release); | 82 | kref_put(&idkp->kref, ide_disk_release); |
83 | ide_device_put(drive); | ||
83 | mutex_unlock(&idedisk_ref_mutex); | 84 | mutex_unlock(&idedisk_ref_mutex); |
84 | } | 85 | } |
85 | 86 | ||
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index 71c377a7bcf2..adc682755857 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c | |||
@@ -649,11 +649,7 @@ static unsigned int ide_get_mode_mask(ide_drive_t *drive, u8 base, u8 req_mode) | |||
649 | if (id->field_valid & 2) { | 649 | if (id->field_valid & 2) { |
650 | mask = id->dma_1word & hwif->swdma_mask; | 650 | mask = id->dma_1word & hwif->swdma_mask; |
651 | } else if (id->tDMA) { | 651 | } else if (id->tDMA) { |
652 | /* | 652 | u8 mode = id->tDMA; |
653 | * ide_fix_driveid() doesn't convert ->tDMA to the | ||
654 | * CPU endianness so we need to do it here | ||
655 | */ | ||
656 | u8 mode = le16_to_cpu(id->tDMA); | ||
657 | 653 | ||
658 | /* | 654 | /* |
659 | * if the mode is valid convert it to the mask | 655 | * if the mode is valid convert it to the mask |
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index ca11a26746f1..e9034c0125f3 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c | |||
@@ -167,11 +167,10 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk) | |||
167 | mutex_lock(&idefloppy_ref_mutex); | 167 | mutex_lock(&idefloppy_ref_mutex); |
168 | floppy = ide_floppy_g(disk); | 168 | floppy = ide_floppy_g(disk); |
169 | if (floppy) { | 169 | if (floppy) { |
170 | kref_get(&floppy->kref); | 170 | if (ide_device_get(floppy->drive)) |
171 | if (ide_device_get(floppy->drive)) { | ||
172 | kref_put(&floppy->kref, idefloppy_cleanup_obj); | ||
173 | floppy = NULL; | 171 | floppy = NULL; |
174 | } | 172 | else |
173 | kref_get(&floppy->kref); | ||
175 | } | 174 | } |
176 | mutex_unlock(&idefloppy_ref_mutex); | 175 | mutex_unlock(&idefloppy_ref_mutex); |
177 | return floppy; | 176 | return floppy; |
@@ -179,9 +178,11 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk) | |||
179 | 178 | ||
180 | static void ide_floppy_put(struct ide_floppy_obj *floppy) | 179 | static void ide_floppy_put(struct ide_floppy_obj *floppy) |
181 | { | 180 | { |
181 | ide_drive_t *drive = floppy->drive; | ||
182 | |||
182 | mutex_lock(&idefloppy_ref_mutex); | 183 | mutex_lock(&idefloppy_ref_mutex); |
183 | ide_device_put(floppy->drive); | ||
184 | kref_put(&floppy->kref, idefloppy_cleanup_obj); | 184 | kref_put(&floppy->kref, idefloppy_cleanup_obj); |
185 | ide_device_put(drive); | ||
185 | mutex_unlock(&idefloppy_ref_mutex); | 186 | mutex_unlock(&idefloppy_ref_mutex); |
186 | } | 187 | } |
187 | 188 | ||
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 8aae91764513..2cbadffe922e 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
@@ -484,11 +484,11 @@ void ide_fix_driveid (struct hd_driveid *id) | |||
484 | for (i = 0; i < 3; i++) | 484 | for (i = 0; i < 3; i++) |
485 | id->words157_159[i] = __le16_to_cpu(id->words157_159[i]); | 485 | id->words157_159[i] = __le16_to_cpu(id->words157_159[i]); |
486 | id->cfa_power = __le16_to_cpu(id->cfa_power); | 486 | id->cfa_power = __le16_to_cpu(id->cfa_power); |
487 | for (i = 0; i < 14; i++) | 487 | for (i = 0; i < 15; i++) |
488 | id->words161_175[i] = __le16_to_cpu(id->words161_175[i]); | 488 | id->words161_175[i] = __le16_to_cpu(id->words161_175[i]); |
489 | for (i = 0; i < 31; i++) | 489 | for (i = 0; i < 30; i++) |
490 | id->words176_205[i] = __le16_to_cpu(id->words176_205[i]); | 490 | id->words176_205[i] = __le16_to_cpu(id->words176_205[i]); |
491 | for (i = 0; i < 48; i++) | 491 | for (i = 0; i < 49; i++) |
492 | id->words206_254[i] = __le16_to_cpu(id->words206_254[i]); | 492 | id->words206_254[i] = __le16_to_cpu(id->words206_254[i]); |
493 | id->integrity_word = __le16_to_cpu(id->integrity_word); | 493 | id->integrity_word = __le16_to_cpu(id->integrity_word); |
494 | # else | 494 | # else |
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 82c2afe4d28a..1bce84b56630 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
@@ -331,11 +331,10 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk) | |||
331 | mutex_lock(&idetape_ref_mutex); | 331 | mutex_lock(&idetape_ref_mutex); |
332 | tape = ide_tape_g(disk); | 332 | tape = ide_tape_g(disk); |
333 | if (tape) { | 333 | if (tape) { |
334 | kref_get(&tape->kref); | 334 | if (ide_device_get(tape->drive)) |
335 | if (ide_device_get(tape->drive)) { | ||
336 | kref_put(&tape->kref, ide_tape_release); | ||
337 | tape = NULL; | 335 | tape = NULL; |
338 | } | 336 | else |
337 | kref_get(&tape->kref); | ||
339 | } | 338 | } |
340 | mutex_unlock(&idetape_ref_mutex); | 339 | mutex_unlock(&idetape_ref_mutex); |
341 | return tape; | 340 | return tape; |
@@ -343,9 +342,11 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk) | |||
343 | 342 | ||
344 | static void ide_tape_put(struct ide_tape_obj *tape) | 343 | static void ide_tape_put(struct ide_tape_obj *tape) |
345 | { | 344 | { |
345 | ide_drive_t *drive = tape->drive; | ||
346 | |||
346 | mutex_lock(&idetape_ref_mutex); | 347 | mutex_lock(&idetape_ref_mutex); |
347 | ide_device_put(tape->drive); | ||
348 | kref_put(&tape->kref, ide_tape_release); | 348 | kref_put(&tape->kref, ide_tape_release); |
349 | ide_device_put(drive); | ||
349 | mutex_unlock(&idetape_ref_mutex); | 350 | mutex_unlock(&idetape_ref_mutex); |
350 | } | 351 | } |
351 | 352 | ||
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index e0c8fe7d9fea..40644b6f1c00 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
@@ -160,7 +160,7 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev) | |||
160 | return dev->irq; | 160 | return dev->irq; |
161 | } | 161 | } |
162 | 162 | ||
163 | static u8 __devinit atp86x_cable_detect(ide_hwif_t *hwif) | 163 | static u8 atp86x_cable_detect(ide_hwif_t *hwif) |
164 | { | 164 | { |
165 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 165 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
166 | u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; | 166 | u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; |
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index b582687e0cd4..d647526af557 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
@@ -371,7 +371,7 @@ static int ali_cable_override(struct pci_dev *pdev) | |||
371 | * FIXME: frobs bits that are not defined on newer ALi devicea | 371 | * FIXME: frobs bits that are not defined on newer ALi devicea |
372 | */ | 372 | */ |
373 | 373 | ||
374 | static u8 __devinit ali_cable_detect(ide_hwif_t *hwif) | 374 | static u8 ali_cable_detect(ide_hwif_t *hwif) |
375 | { | 375 | { |
376 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 376 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
377 | unsigned long flags; | 377 | unsigned long flags; |
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 2cea7bf51a0f..1e66a960a96a 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
@@ -175,7 +175,7 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev) | |||
175 | return dev->irq; | 175 | return dev->irq; |
176 | } | 176 | } |
177 | 177 | ||
178 | static u8 __devinit amd_cable_detect(ide_hwif_t *hwif) | 178 | static u8 amd_cable_detect(ide_hwif_t *hwif) |
179 | { | 179 | { |
180 | if ((amd_80w >> hwif->channel) & 1) | 180 | if ((amd_80w >> hwif->channel) & 1) |
181 | return ATA_CBL_PATA80; | 181 | return ATA_CBL_PATA80; |
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index 332f08f43b56..41f6cb6c163a 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c | |||
@@ -119,7 +119,7 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
119 | spin_unlock_irqrestore(&atiixp_lock, flags); | 119 | spin_unlock_irqrestore(&atiixp_lock, flags); |
120 | } | 120 | } |
121 | 121 | ||
122 | static u8 __devinit atiixp_cable_detect(ide_hwif_t *hwif) | 122 | static u8 atiixp_cable_detect(ide_hwif_t *hwif) |
123 | { | 123 | { |
124 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | 124 | struct pci_dev *pdev = to_pci_dev(hwif->dev); |
125 | u8 udma_mode = 0, ch = hwif->channel; | 125 | u8 udma_mode = 0, ch = hwif->channel; |
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index 1360b4fa9fd3..e064398e03b4 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c | |||
@@ -354,7 +354,7 @@ static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev) | |||
354 | return 0; | 354 | return 0; |
355 | } | 355 | } |
356 | 356 | ||
357 | static u8 __devinit cmd64x_cable_detect(ide_hwif_t *hwif) | 357 | static u8 cmd64x_cable_detect(ide_hwif_t *hwif) |
358 | { | 358 | { |
359 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 359 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
360 | u8 bmidecsr = 0, mask = hwif->channel ? 0x02 : 0x01; | 360 | u8 bmidecsr = 0, mask = hwif->channel ? 0x02 : 0x01; |
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c index c0364b287f17..151844fcbb07 100644 --- a/drivers/ide/pci/cs5520.c +++ b/drivers/ide/pci/cs5520.c | |||
@@ -96,6 +96,7 @@ static const struct ide_port_ops cs5520_port_ops = { | |||
96 | 96 | ||
97 | static const struct ide_port_info cyrix_chipset __devinitdata = { | 97 | static const struct ide_port_info cyrix_chipset __devinitdata = { |
98 | .name = DRV_NAME, | 98 | .name = DRV_NAME, |
99 | .enablebits = { { 0x60, 0x01, 0x01 }, { 0x60, 0x02, 0x02 } }, | ||
99 | .port_ops = &cs5520_port_ops, | 100 | .port_ops = &cs5520_port_ops, |
100 | .host_flags = IDE_HFLAG_ISA_PORTS | IDE_HFLAG_CS5520, | 101 | .host_flags = IDE_HFLAG_ISA_PORTS | IDE_HFLAG_CS5520, |
101 | .pio_mask = ATA_PIO4, | 102 | .pio_mask = ATA_PIO4, |
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index f7b50cdeefa6..dd3dc23af995 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c | |||
@@ -153,7 +153,7 @@ static void cs5535_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
153 | cs5535_set_speed(drive, XFER_PIO_0 + pio); | 153 | cs5535_set_speed(drive, XFER_PIO_0 + pio); |
154 | } | 154 | } |
155 | 155 | ||
156 | static u8 __devinit cs5535_cable_detect(ide_hwif_t *hwif) | 156 | static u8 cs5535_cable_detect(ide_hwif_t *hwif) |
157 | { | 157 | { |
158 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 158 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
159 | u8 bit; | 159 | u8 bit; |
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index 5271b246b88c..748793a413ab 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
@@ -1214,7 +1214,7 @@ static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev) | |||
1214 | return dev->irq; | 1214 | return dev->irq; |
1215 | } | 1215 | } |
1216 | 1216 | ||
1217 | static u8 __devinit hpt3xx_cable_detect(ide_hwif_t *hwif) | 1217 | static u8 hpt3xx_cable_detect(ide_hwif_t *hwif) |
1218 | { | 1218 | { |
1219 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 1219 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
1220 | struct ide_host *host = pci_get_drvdata(dev); | 1220 | struct ide_host *host = pci_get_drvdata(dev); |
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c index 6eba8f188264..652e47dd7e89 100644 --- a/drivers/ide/pci/it8213.c +++ b/drivers/ide/pci/it8213.c | |||
@@ -141,7 +141,7 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
141 | } | 141 | } |
142 | } | 142 | } |
143 | 143 | ||
144 | static u8 __devinit it8213_cable_detect(ide_hwif_t *hwif) | 144 | static u8 it8213_cable_detect(ide_hwif_t *hwif) |
145 | { | 145 | { |
146 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 146 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
147 | u8 reg42h = 0; | 147 | u8 reg42h = 0; |
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index e16a1d113a2a..b6dc723de702 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c | |||
@@ -428,7 +428,7 @@ static void it821x_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
428 | * the needed logic onboard. | 428 | * the needed logic onboard. |
429 | */ | 429 | */ |
430 | 430 | ||
431 | static u8 __devinit it821x_cable_detect(ide_hwif_t *hwif) | 431 | static u8 it821x_cable_detect(ide_hwif_t *hwif) |
432 | { | 432 | { |
433 | /* The reference driver also only does disk side */ | 433 | /* The reference driver also only does disk side */ |
434 | return ATA_CBL_PATA80; | 434 | return ATA_CBL_PATA80; |
@@ -443,7 +443,7 @@ static u8 __devinit it821x_cable_detect(ide_hwif_t *hwif) | |||
443 | * final tuning that is needed, or fixups to work around bugs. | 443 | * final tuning that is needed, or fixups to work around bugs. |
444 | */ | 444 | */ |
445 | 445 | ||
446 | static void __devinit it821x_quirkproc(ide_drive_t *drive) | 446 | static void it821x_quirkproc(ide_drive_t *drive) |
447 | { | 447 | { |
448 | struct it821x_dev *itdev = ide_get_hwifdata(drive->hwif); | 448 | struct it821x_dev *itdev = ide_get_hwifdata(drive->hwif); |
449 | struct hd_driveid *id = drive->id; | 449 | struct hd_driveid *id = drive->id; |
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c index 545b6e172d9b..bb9d09d8f196 100644 --- a/drivers/ide/pci/jmicron.c +++ b/drivers/ide/pci/jmicron.c | |||
@@ -27,7 +27,7 @@ typedef enum { | |||
27 | * Returns the cable type. | 27 | * Returns the cable type. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | static u8 __devinit jmicron_cable_detect(ide_hwif_t *hwif) | 30 | static u8 jmicron_cable_detect(ide_hwif_t *hwif) |
31 | { | 31 | { |
32 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | 32 | struct pci_dev *pdev = to_pci_dev(hwif->dev); |
33 | 33 | ||
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index 998615fa285f..0f609b72f470 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c | |||
@@ -193,7 +193,7 @@ static void pdcnew_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
193 | } | 193 | } |
194 | } | 194 | } |
195 | 195 | ||
196 | static u8 __devinit pdcnew_cable_detect(ide_hwif_t *hwif) | 196 | static u8 pdcnew_cable_detect(ide_hwif_t *hwif) |
197 | { | 197 | { |
198 | if (get_indexed_reg(hwif, 0x0b) & 0x04) | 198 | if (get_indexed_reg(hwif, 0x0b) & 0x04) |
199 | return ATA_CBL_PATA40; | 199 | return ATA_CBL_PATA40; |
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index 6ff2def58da0..de9a27400462 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
@@ -117,7 +117,7 @@ static void pdc202xx_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
117 | pdc202xx_set_mode(drive, XFER_PIO_0 + pio); | 117 | pdc202xx_set_mode(drive, XFER_PIO_0 + pio); |
118 | } | 118 | } |
119 | 119 | ||
120 | static u8 __devinit pdc2026x_cable_detect(ide_hwif_t *hwif) | 120 | static u8 pdc2026x_cable_detect(ide_hwif_t *hwif) |
121 | { | 121 | { |
122 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 122 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
123 | u16 CIS, mask = hwif->channel ? (1 << 11) : (1 << 10); | 123 | u16 CIS, mask = hwif->channel ? (1 << 11) : (1 << 10); |
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 7fc3022dcf68..30cfc815fe31 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c | |||
@@ -256,7 +256,7 @@ static const struct ich_laptop ich_laptop[] = { | |||
256 | { 0, } | 256 | { 0, } |
257 | }; | 257 | }; |
258 | 258 | ||
259 | static u8 __devinit piix_cable_detect(ide_hwif_t *hwif) | 259 | static u8 piix_cable_detect(ide_hwif_t *hwif) |
260 | { | 260 | { |
261 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | 261 | struct pci_dev *pdev = to_pci_dev(hwif->dev); |
262 | const struct ich_laptop *lap = &ich_laptop[0]; | 262 | const struct ich_laptop *lap = &ich_laptop[0]; |
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c index 94a7ab864236..6cde48bba6f8 100644 --- a/drivers/ide/pci/scc_pata.c +++ b/drivers/ide/pci/scc_pata.c | |||
@@ -827,7 +827,7 @@ static void __devinit init_iops_scc(ide_hwif_t *hwif) | |||
827 | init_mmio_iops_scc(hwif); | 827 | init_mmio_iops_scc(hwif); |
828 | } | 828 | } |
829 | 829 | ||
830 | static u8 __devinit scc_cable_detect(ide_hwif_t *hwif) | 830 | static u8 scc_cable_detect(ide_hwif_t *hwif) |
831 | { | 831 | { |
832 | return ATA_CBL_PATA80; | 832 | return ATA_CBL_PATA80; |
833 | } | 833 | } |
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index d173f2937722..c3bdc6e51a48 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -272,7 +272,7 @@ static unsigned int __devinit init_chipset_svwks(struct pci_dev *dev) | |||
272 | return dev->irq; | 272 | return dev->irq; |
273 | } | 273 | } |
274 | 274 | ||
275 | static u8 __devinit ata66_svwks_svwks(ide_hwif_t *hwif) | 275 | static u8 ata66_svwks_svwks(ide_hwif_t *hwif) |
276 | { | 276 | { |
277 | return ATA_CBL_PATA80; | 277 | return ATA_CBL_PATA80; |
278 | } | 278 | } |
@@ -284,7 +284,7 @@ static u8 __devinit ata66_svwks_svwks(ide_hwif_t *hwif) | |||
284 | * Bit 14 clear = primary IDE channel does not have 80-pin cable. | 284 | * Bit 14 clear = primary IDE channel does not have 80-pin cable. |
285 | * Bit 14 set = primary IDE channel has 80-pin cable. | 285 | * Bit 14 set = primary IDE channel has 80-pin cable. |
286 | */ | 286 | */ |
287 | static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif) | 287 | static u8 ata66_svwks_dell(ide_hwif_t *hwif) |
288 | { | 288 | { |
289 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 289 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
290 | 290 | ||
@@ -303,7 +303,7 @@ static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif) | |||
303 | * | 303 | * |
304 | * WARNING: this only works on Alpine hardware! | 304 | * WARNING: this only works on Alpine hardware! |
305 | */ | 305 | */ |
306 | static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif) | 306 | static u8 ata66_svwks_cobalt(ide_hwif_t *hwif) |
307 | { | 307 | { |
308 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 308 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
309 | 309 | ||
@@ -315,7 +315,7 @@ static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif) | |||
315 | return ATA_CBL_PATA40; | 315 | return ATA_CBL_PATA40; |
316 | } | 316 | } |
317 | 317 | ||
318 | static u8 __devinit svwks_cable_detect(ide_hwif_t *hwif) | 318 | static u8 svwks_cable_detect(ide_hwif_t *hwif) |
319 | { | 319 | { |
320 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 320 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
321 | 321 | ||
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index b8ad9ad6cf0d..445ce6fbea33 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -639,7 +639,7 @@ static int is_dev_seagate_sata(ide_drive_t *drive) | |||
639 | * that can occur before we know what drives are present. | 639 | * that can occur before we know what drives are present. |
640 | */ | 640 | */ |
641 | 641 | ||
642 | static void __devinit sil_quirkproc(ide_drive_t *drive) | 642 | static void sil_quirkproc(ide_drive_t *drive) |
643 | { | 643 | { |
644 | ide_hwif_t *hwif = drive->hwif; | 644 | ide_hwif_t *hwif = drive->hwif; |
645 | 645 | ||
@@ -679,7 +679,7 @@ static void __devinit init_iops_siimage(ide_hwif_t *hwif) | |||
679 | * Check for the presence of an ATA66 capable cable on the interface. | 679 | * Check for the presence of an ATA66 capable cable on the interface. |
680 | */ | 680 | */ |
681 | 681 | ||
682 | static u8 __devinit sil_cable_detect(ide_hwif_t *hwif) | 682 | static u8 sil_cable_detect(ide_hwif_t *hwif) |
683 | { | 683 | { |
684 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 684 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
685 | unsigned long addr = siimage_selreg(hwif, 0); | 685 | unsigned long addr = siimage_selreg(hwif, 0); |
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index cc95f90b53b7..e5a4b42b4e33 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c | |||
@@ -518,7 +518,7 @@ static const struct sis_laptop sis_laptop[] = { | |||
518 | { 0, } | 518 | { 0, } |
519 | }; | 519 | }; |
520 | 520 | ||
521 | static u8 __devinit sis_cable_detect(ide_hwif_t *hwif) | 521 | static u8 sis_cable_detect(ide_hwif_t *hwif) |
522 | { | 522 | { |
523 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | 523 | struct pci_dev *pdev = to_pci_dev(hwif->dev); |
524 | const struct sis_laptop *lap = &sis_laptop[0]; | 524 | const struct sis_laptop *lap = &sis_laptop[0]; |
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index 13d1fa491f26..866d6c65e3a0 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
@@ -116,7 +116,7 @@ static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
116 | } | 116 | } |
117 | } | 117 | } |
118 | 118 | ||
119 | static u8 __devinit slc90e66_cable_detect(ide_hwif_t *hwif) | 119 | static u8 slc90e66_cable_detect(ide_hwif_t *hwif) |
120 | { | 120 | { |
121 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 121 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
122 | u8 reg47 = 0, mask = hwif->channel ? 0x01 : 0x02; | 122 | u8 reg47 = 0, mask = hwif->channel ? 0x01 : 0x02; |
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c index b1cb8a9ce5a9..7fc88c375e5d 100644 --- a/drivers/ide/pci/tc86c001.c +++ b/drivers/ide/pci/tc86c001.c | |||
@@ -131,7 +131,7 @@ static void tc86c001_dma_start(ide_drive_t *drive) | |||
131 | ide_dma_start(drive); | 131 | ide_dma_start(drive); |
132 | } | 132 | } |
133 | 133 | ||
134 | static u8 __devinit tc86c001_cable_detect(ide_hwif_t *hwif) | 134 | static u8 tc86c001_cable_detect(ide_hwif_t *hwif) |
135 | { | 135 | { |
136 | struct pci_dev *dev = to_pci_dev(hwif->dev); | 136 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
137 | unsigned long sc_base = pci_resource_start(dev, 5); | 137 | unsigned long sc_base = pci_resource_start(dev, 5); |
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index 454d2bf62dce..a6b2cc83f293 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c | |||
@@ -352,7 +352,7 @@ static int via_cable_override(struct pci_dev *pdev) | |||
352 | return 0; | 352 | return 0; |
353 | } | 353 | } |
354 | 354 | ||
355 | static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif) | 355 | static u8 via82cxxx_cable_detect(ide_hwif_t *hwif) |
356 | { | 356 | { |
357 | struct pci_dev *pdev = to_pci_dev(hwif->dev); | 357 | struct pci_dev *pdev = to_pci_dev(hwif->dev); |
358 | struct ide_host *host = pci_get_drvdata(pdev); | 358 | struct ide_host *host = pci_get_drvdata(pdev); |
diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c index dd9bc68f1c7b..898c8b5c38dd 100644 --- a/drivers/infiniband/hw/ehca/ehca_reqs.c +++ b/drivers/infiniband/hw/ehca/ehca_reqs.c | |||
@@ -42,7 +42,7 @@ | |||
42 | */ | 42 | */ |
43 | 43 | ||
44 | 44 | ||
45 | #include <asm-powerpc/system.h> | 45 | #include <asm/system.h> |
46 | #include "ehca_classes.h" | 46 | #include "ehca_classes.h" |
47 | #include "ehca_tools.h" | 47 | #include "ehca_tools.h" |
48 | #include "ehca_qes.h" | 48 | #include "ehca_qes.h" |
diff --git a/drivers/input/keyboard/aaed2000_kbd.c b/drivers/input/keyboard/aaed2000_kbd.c index 8a77bfcd05bc..18222a689a03 100644 --- a/drivers/input/keyboard/aaed2000_kbd.c +++ b/drivers/input/keyboard/aaed2000_kbd.c | |||
@@ -20,8 +20,8 @@ | |||
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | 22 | ||
23 | #include <asm/arch/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <asm/arch/aaed2000.h> | 24 | #include <mach/aaed2000.h> |
25 | 25 | ||
26 | #define KB_ROWS 12 | 26 | #define KB_ROWS 12 |
27 | #define KB_COLS 8 | 27 | #define KB_COLS 8 |
diff --git a/drivers/input/keyboard/corgikbd.c b/drivers/input/keyboard/corgikbd.c index 1aa46ae12630..134e67bf6a90 100644 --- a/drivers/input/keyboard/corgikbd.c +++ b/drivers/input/keyboard/corgikbd.c | |||
@@ -20,10 +20,10 @@ | |||
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | 22 | ||
23 | #include <asm/arch/corgi.h> | 23 | #include <mach/corgi.h> |
24 | #include <asm/arch/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/arch/pxa-regs.h> | 25 | #include <mach/pxa-regs.h> |
26 | #include <asm/arch/pxa2xx-gpio.h> | 26 | #include <mach/pxa2xx-gpio.h> |
27 | #include <asm/hardware/scoop.h> | 27 | #include <asm/hardware/scoop.h> |
28 | 28 | ||
29 | #define KB_ROWS 8 | 29 | #define KB_ROWS 8 |
diff --git a/drivers/input/keyboard/jornada720_kbd.c b/drivers/input/keyboard/jornada720_kbd.c index ce650af6d649..4e016d823069 100644 --- a/drivers/input/keyboard/jornada720_kbd.c +++ b/drivers/input/keyboard/jornada720_kbd.c | |||
@@ -24,8 +24,8 @@ | |||
24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
25 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
26 | 26 | ||
27 | #include <asm/arch/jornada720.h> | 27 | #include <mach/jornada720.h> |
28 | #include <asm/hardware.h> | 28 | #include <mach/hardware.h> |
29 | 29 | ||
30 | MODULE_AUTHOR("Kristoffer Ericson <Kristoffer.Ericson@gmail.com>"); | 30 | MODULE_AUTHOR("Kristoffer Ericson <Kristoffer.Ericson@gmail.com>"); |
31 | MODULE_DESCRIPTION("HP Jornada 710/720/728 keyboard driver"); | 31 | MODULE_DESCRIPTION("HP Jornada 710/720/728 keyboard driver"); |
diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c index 7797ef6e5e64..22f17a593be7 100644 --- a/drivers/input/keyboard/maple_keyb.c +++ b/drivers/input/keyboard/maple_keyb.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * SEGA Dreamcast keyboard driver | 2 | * SEGA Dreamcast keyboard driver |
3 | * Based on drivers/usb/usbkbd.c | 3 | * Based on drivers/usb/usbkbd.c |
4 | * Copyright YAEGASHI Takeshi, 2001 | 4 | * Copyright YAEGASHI Takeshi, 2001 |
5 | * Porting to 2.6 Copyright Adrian McMenamin, 2007 | 5 | * Porting to 2.6 Copyright Adrian McMenamin, 2007, 2008 |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by | 8 | * it under the terms of the GNU General Public License as published by |
@@ -45,39 +45,51 @@ struct dc_kbd { | |||
45 | }; | 45 | }; |
46 | 46 | ||
47 | static const unsigned short dc_kbd_keycode[NR_SCANCODES] = { | 47 | static const unsigned short dc_kbd_keycode[NR_SCANCODES] = { |
48 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_A, KEY_B, KEY_C, KEY_D, | 48 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_A, KEY_B, |
49 | KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, | 49 | KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, |
50 | KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, | 50 | KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, |
51 | KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2, | 51 | KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, |
52 | KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, | 52 | KEY_7, KEY_8, KEY_9, KEY_0, KEY_ENTER, KEY_ESC, KEY_BACKSPACE, |
53 | KEY_ENTER, KEY_ESC, KEY_BACKSPACE, KEY_TAB, KEY_SPACE, KEY_MINUS, KEY_EQUAL, KEY_LEFTBRACE, | 53 | KEY_TAB, KEY_SPACE, KEY_MINUS, KEY_EQUAL, KEY_LEFTBRACE, |
54 | KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_BACKSLASH, KEY_SEMICOLON, KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, | 54 | KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_BACKSLASH, KEY_SEMICOLON, |
55 | KEY_DOT, KEY_SLASH, KEY_CAPSLOCK, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, | 55 | KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, KEY_DOT, KEY_SLASH, |
56 | KEY_CAPSLOCK, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, | ||
56 | KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_SYSRQ, | 57 | KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_SYSRQ, |
57 | KEY_SCROLLLOCK, KEY_PAUSE, KEY_INSERT, KEY_HOME, KEY_PAGEUP, KEY_DELETE, | 58 | KEY_SCROLLLOCK, KEY_PAUSE, KEY_INSERT, KEY_HOME, KEY_PAGEUP, |
58 | KEY_END, KEY_PAGEDOWN, KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP, | 59 | KEY_DELETE, KEY_END, KEY_PAGEDOWN, KEY_RIGHT, KEY_LEFT, KEY_DOWN, |
59 | KEY_NUMLOCK, KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, KEY_KPPLUS, KEY_KPENTER, KEY_KP1, KEY_KP2, | 60 | KEY_UP, KEY_NUMLOCK, KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, |
60 | KEY_KP3, KEY_KP4, KEY_KP5, KEY_KP6, KEY_KP7, KEY_KP8, KEY_KP9, KEY_KP0, KEY_KPDOT, | 61 | KEY_KPPLUS, KEY_KPENTER, KEY_KP1, KEY_KP2, KEY_KP3, KEY_KP4, KEY_KP5, |
61 | KEY_102ND, KEY_COMPOSE, KEY_POWER, KEY_KPEQUAL, KEY_F13, KEY_F14, KEY_F15, | 62 | KEY_KP6, KEY_KP7, KEY_KP8, KEY_KP9, KEY_KP0, KEY_KPDOT, KEY_102ND, |
62 | KEY_F16, KEY_F17, KEY_F18, KEY_F19, KEY_F20, | 63 | KEY_COMPOSE, KEY_POWER, KEY_KPEQUAL, KEY_F13, KEY_F14, KEY_F15, |
63 | KEY_F21, KEY_F22, KEY_F23, KEY_F24, KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT, | 64 | KEY_F16, KEY_F17, KEY_F18, KEY_F19, KEY_F20, KEY_F21, KEY_F22, |
64 | KEY_STOP, KEY_AGAIN, KEY_UNDO, KEY_CUT, KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE, | 65 | KEY_F23, KEY_F24, KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT, KEY_STOP, |
65 | KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPCOMMA, KEY_RESERVED, KEY_RO, KEY_KATAKANAHIRAGANA , KEY_YEN, | 66 | KEY_AGAIN, KEY_UNDO, KEY_CUT, KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE, |
66 | KEY_HENKAN, KEY_MUHENKAN, KEY_KPJPCOMMA, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 67 | KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
67 | KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA, KEY_ZENKAKUHANKAKU, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 68 | KEY_KPCOMMA, KEY_RESERVED, KEY_RO, KEY_KATAKANAHIRAGANA , KEY_YEN, |
68 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 69 | KEY_HENKAN, KEY_MUHENKAN, KEY_KPJPCOMMA, KEY_RESERVED, KEY_RESERVED, |
69 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 70 | KEY_RESERVED, KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA, |
70 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 71 | KEY_ZENKAKUHANKAKU, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
71 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 72 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
72 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 73 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
73 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 74 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
74 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 75 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
75 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 76 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
76 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | 77 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
77 | KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_LEFTALT, KEY_LEFTMETA, KEY_RIGHTCTRL, KEY_RIGHTSHIFT, KEY_RIGHTALT, KEY_RIGHTMETA, | 78 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
78 | KEY_PLAYPAUSE, KEY_STOPCD, KEY_PREVIOUSSONG, KEY_NEXTSONG, KEY_EJECTCD, KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_MUTE, | 79 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
79 | KEY_WWW, KEY_BACK, KEY_FORWARD, KEY_STOP, KEY_FIND, KEY_SCROLLUP, KEY_SCROLLDOWN, KEY_EDIT, KEY_SLEEP, | 80 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
80 | KEY_SCREENLOCK, KEY_REFRESH, KEY_CALC, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED | 81 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, |
82 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | ||
83 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | ||
84 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | ||
85 | KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, | ||
86 | KEY_RESERVED, KEY_RESERVED, KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_LEFTALT, | ||
87 | KEY_LEFTMETA, KEY_RIGHTCTRL, KEY_RIGHTSHIFT, KEY_RIGHTALT, | ||
88 | KEY_RIGHTMETA, KEY_PLAYPAUSE, KEY_STOPCD, KEY_PREVIOUSSONG, | ||
89 | KEY_NEXTSONG, KEY_EJECTCD, KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_MUTE, | ||
90 | KEY_WWW, KEY_BACK, KEY_FORWARD, KEY_STOP, KEY_FIND, KEY_SCROLLUP, | ||
91 | KEY_SCROLLDOWN, KEY_EDIT, KEY_SLEEP, KEY_SCREENLOCK, KEY_REFRESH, | ||
92 | KEY_CALC, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED | ||
81 | }; | 93 | }; |
82 | 94 | ||
83 | static void dc_scan_kbd(struct dc_kbd *kbd) | 95 | static void dc_scan_kbd(struct dc_kbd *kbd) |
@@ -127,12 +139,12 @@ static void dc_scan_kbd(struct dc_kbd *kbd) | |||
127 | static void dc_kbd_callback(struct mapleq *mq) | 139 | static void dc_kbd_callback(struct mapleq *mq) |
128 | { | 140 | { |
129 | struct maple_device *mapledev = mq->dev; | 141 | struct maple_device *mapledev = mq->dev; |
130 | struct dc_kbd *kbd = mapledev->private_data; | 142 | struct dc_kbd *kbd = maple_get_drvdata(mapledev); |
131 | unsigned long *buf = mq->recvbuf; | 143 | unsigned long *buf = mq->recvbuf; |
132 | 144 | ||
133 | /* | 145 | /* |
134 | * We should always be getting the lock because the only | 146 | * We should always get the lock because the only |
135 | * time it may be locked if driver is in cleanup phase. | 147 | * time it may be locked is if the driver is in the cleanup phase. |
136 | */ | 148 | */ |
137 | if (likely(mutex_trylock(&maple_keyb_mutex))) { | 149 | if (likely(mutex_trylock(&maple_keyb_mutex))) { |
138 | 150 | ||
@@ -145,106 +157,96 @@ static void dc_kbd_callback(struct mapleq *mq) | |||
145 | } | 157 | } |
146 | } | 158 | } |
147 | 159 | ||
148 | static int dc_kbd_connect(struct maple_device *mdev) | 160 | static int probe_maple_kbd(struct device *dev) |
149 | { | 161 | { |
162 | struct maple_device *mdev = to_maple_dev(dev); | ||
163 | struct maple_driver *mdrv = to_maple_driver(dev->driver); | ||
150 | int i, error; | 164 | int i, error; |
151 | struct dc_kbd *kbd; | 165 | struct dc_kbd *kbd; |
152 | struct input_dev *dev; | 166 | struct input_dev *idev; |
153 | 167 | ||
154 | if (!(mdev->function & MAPLE_FUNC_KEYBOARD)) | 168 | if (!(mdev->function & MAPLE_FUNC_KEYBOARD)) |
155 | return -EINVAL; | 169 | return -EINVAL; |
156 | 170 | ||
157 | kbd = kzalloc(sizeof(struct dc_kbd), GFP_KERNEL); | 171 | kbd = kzalloc(sizeof(struct dc_kbd), GFP_KERNEL); |
158 | dev = input_allocate_device(); | 172 | idev = input_allocate_device(); |
159 | if (!kbd || !dev) { | 173 | if (!kbd || !idev) { |
160 | error = -ENOMEM; | 174 | error = -ENOMEM; |
161 | goto fail; | 175 | goto fail; |
162 | } | 176 | } |
163 | 177 | ||
164 | mdev->private_data = kbd; | 178 | kbd->dev = idev; |
165 | |||
166 | kbd->dev = dev; | ||
167 | memcpy(kbd->keycode, dc_kbd_keycode, sizeof(kbd->keycode)); | 179 | memcpy(kbd->keycode, dc_kbd_keycode, sizeof(kbd->keycode)); |
168 | 180 | ||
169 | dev->name = mdev->product_name; | 181 | idev->name = mdev->product_name; |
170 | dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); | 182 | idev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); |
171 | dev->keycode = kbd->keycode; | 183 | idev->keycode = kbd->keycode; |
172 | dev->keycodesize = sizeof (unsigned short); | 184 | idev->keycodesize = sizeof(unsigned short); |
173 | dev->keycodemax = ARRAY_SIZE(kbd->keycode); | 185 | idev->keycodemax = ARRAY_SIZE(kbd->keycode); |
174 | dev->id.bustype = BUS_HOST; | 186 | idev->id.bustype = BUS_HOST; |
175 | dev->dev.parent = &mdev->dev; | 187 | idev->dev.parent = &mdev->dev; |
176 | 188 | ||
177 | for (i = 0; i < NR_SCANCODES; i++) | 189 | for (i = 0; i < NR_SCANCODES; i++) |
178 | __set_bit(dc_kbd_keycode[i], dev->keybit); | 190 | __set_bit(dc_kbd_keycode[i], idev->keybit); |
179 | __clear_bit(KEY_RESERVED, dev->keybit); | 191 | __clear_bit(KEY_RESERVED, idev->keybit); |
180 | 192 | ||
181 | input_set_capability(dev, EV_MSC, MSC_SCAN); | 193 | input_set_capability(idev, EV_MSC, MSC_SCAN); |
182 | input_set_drvdata(dev, kbd); | 194 | input_set_drvdata(idev, kbd); |
183 | 195 | ||
184 | error = input_register_device(dev); | 196 | error = input_register_device(idev); |
185 | if (error) | 197 | if (error) |
186 | goto fail; | 198 | goto fail; |
187 | 199 | ||
188 | /* Maple polling is locked to VBLANK - which may be just 50/s */ | 200 | /* Maple polling is locked to VBLANK - which may be just 50/s */ |
189 | maple_getcond_callback(mdev, dc_kbd_callback, HZ/50, MAPLE_FUNC_KEYBOARD); | 201 | maple_getcond_callback(mdev, dc_kbd_callback, HZ/50, |
190 | return 0; | 202 | MAPLE_FUNC_KEYBOARD); |
191 | 203 | ||
192 | fail: | 204 | mdev->driver = mdrv; |
193 | input_free_device(dev); | 205 | |
206 | maple_set_drvdata(mdev, kbd); | ||
207 | |||
208 | return error; | ||
209 | |||
210 | fail: | ||
211 | input_free_device(idev); | ||
194 | kfree(kbd); | 212 | kfree(kbd); |
195 | mdev->private_data = NULL; | 213 | maple_set_drvdata(mdev, NULL); |
196 | return error; | 214 | return error; |
197 | } | 215 | } |
198 | 216 | ||
199 | static void dc_kbd_disconnect(struct maple_device *mdev) | 217 | static int remove_maple_kbd(struct device *dev) |
200 | { | 218 | { |
201 | struct dc_kbd *kbd; | 219 | struct maple_device *mdev = to_maple_dev(dev); |
220 | struct dc_kbd *kbd = maple_get_drvdata(mdev); | ||
202 | 221 | ||
203 | mutex_lock(&maple_keyb_mutex); | 222 | mutex_lock(&maple_keyb_mutex); |
204 | 223 | ||
205 | kbd = mdev->private_data; | ||
206 | mdev->private_data = NULL; | ||
207 | input_unregister_device(kbd->dev); | 224 | input_unregister_device(kbd->dev); |
208 | kfree(kbd); | 225 | kfree(kbd); |
209 | 226 | ||
210 | mutex_unlock(&maple_keyb_mutex); | 227 | maple_set_drvdata(mdev, NULL); |
211 | } | ||
212 | |||
213 | /* allow the keyboard to be used */ | ||
214 | static int probe_maple_kbd(struct device *dev) | ||
215 | { | ||
216 | struct maple_device *mdev = to_maple_dev(dev); | ||
217 | struct maple_driver *mdrv = to_maple_driver(dev->driver); | ||
218 | int error; | ||
219 | |||
220 | error = dc_kbd_connect(mdev); | ||
221 | if (error) | ||
222 | return error; | ||
223 | |||
224 | mdev->driver = mdrv; | ||
225 | mdev->registered = 1; | ||
226 | 228 | ||
229 | mutex_unlock(&maple_keyb_mutex); | ||
227 | return 0; | 230 | return 0; |
228 | } | 231 | } |
229 | 232 | ||
230 | static struct maple_driver dc_kbd_driver = { | 233 | static struct maple_driver dc_kbd_driver = { |
231 | .function = MAPLE_FUNC_KEYBOARD, | 234 | .function = MAPLE_FUNC_KEYBOARD, |
232 | .connect = dc_kbd_connect, | ||
233 | .disconnect = dc_kbd_disconnect, | ||
234 | .drv = { | 235 | .drv = { |
235 | .name = "Dreamcast_keyboard", | 236 | .name = "Dreamcast_keyboard", |
236 | .probe = probe_maple_kbd, | 237 | .probe = probe_maple_kbd, |
237 | }, | 238 | .remove = remove_maple_kbd, |
239 | }, | ||
238 | }; | 240 | }; |
239 | 241 | ||
240 | static int __init dc_kbd_init(void) | 242 | static int __init dc_kbd_init(void) |
241 | { | 243 | { |
242 | return maple_driver_register(&dc_kbd_driver.drv); | 244 | return maple_driver_register(&dc_kbd_driver); |
243 | } | 245 | } |
244 | 246 | ||
245 | static void __exit dc_kbd_exit(void) | 247 | static void __exit dc_kbd_exit(void) |
246 | { | 248 | { |
247 | driver_unregister(&dc_kbd_driver.drv); | 249 | maple_driver_unregister(&dc_kbd_driver); |
248 | } | 250 | } |
249 | 251 | ||
250 | module_init(dc_kbd_init); | 252 | module_init(dc_kbd_init); |
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c index 10afd2068068..dcea87a0bc56 100644 --- a/drivers/input/keyboard/omap-keypad.c +++ b/drivers/input/keyboard/omap-keypad.c | |||
@@ -34,14 +34,13 @@ | |||
34 | #include <linux/platform_device.h> | 34 | #include <linux/platform_device.h> |
35 | #include <linux/mutex.h> | 35 | #include <linux/mutex.h> |
36 | #include <linux/errno.h> | 36 | #include <linux/errno.h> |
37 | #include <asm/arch/gpio.h> | 37 | #include <mach/gpio.h> |
38 | #include <asm/arch/keypad.h> | 38 | #include <mach/keypad.h> |
39 | #include <asm/arch/menelaus.h> | 39 | #include <mach/menelaus.h> |
40 | #include <asm/irq.h> | 40 | #include <asm/irq.h> |
41 | #include <asm/hardware.h> | 41 | #include <mach/hardware.h> |
42 | #include <asm/io.h> | 42 | #include <asm/io.h> |
43 | #include <asm/mach-types.h> | 43 | #include <mach/mux.h> |
44 | #include <asm/arch/mux.h> | ||
45 | 44 | ||
46 | #undef NEW_BOARD_LEARNING_MODE | 45 | #undef NEW_BOARD_LEARNING_MODE |
47 | 46 | ||
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 6f1516f50750..6d30c6d334c3 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c | |||
@@ -26,12 +26,11 @@ | |||
26 | #include <linux/clk.h> | 26 | #include <linux/clk.h> |
27 | #include <linux/err.h> | 27 | #include <linux/err.h> |
28 | 28 | ||
29 | #include <asm/mach-types.h> | ||
30 | #include <asm/mach/arch.h> | 29 | #include <asm/mach/arch.h> |
31 | #include <asm/mach/map.h> | 30 | #include <asm/mach/map.h> |
32 | 31 | ||
33 | #include <asm/arch/hardware.h> | 32 | #include <mach/hardware.h> |
34 | #include <asm/arch/pxa27x_keypad.h> | 33 | #include <mach/pxa27x_keypad.h> |
35 | 34 | ||
36 | /* | 35 | /* |
37 | * Keypad Controller registers | 36 | * Keypad Controller registers |
diff --git a/drivers/input/keyboard/spitzkbd.c b/drivers/input/keyboard/spitzkbd.c index 1aa37181c40f..de67b8e0a799 100644 --- a/drivers/input/keyboard/spitzkbd.c +++ b/drivers/input/keyboard/spitzkbd.c | |||
@@ -20,10 +20,10 @@ | |||
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | 22 | ||
23 | #include <asm/arch/spitz.h> | 23 | #include <mach/spitz.h> |
24 | #include <asm/arch/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/arch/pxa-regs.h> | 25 | #include <mach/pxa-regs.h> |
26 | #include <asm/arch/pxa2xx-gpio.h> | 26 | #include <mach/pxa2xx-gpio.h> |
27 | 27 | ||
28 | #define KB_ROWS 7 | 28 | #define KB_ROWS 7 |
29 | #define KB_COLS 11 | 29 | #define KB_COLS 11 |
diff --git a/drivers/input/keyboard/tosakbd.c b/drivers/input/keyboard/tosakbd.c index b12b7ee4b6aa..44cb50af3ce9 100644 --- a/drivers/input/keyboard/tosakbd.c +++ b/drivers/input/keyboard/tosakbd.c | |||
@@ -19,8 +19,8 @@ | |||
19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
20 | #include <linux/interrupt.h> | 20 | #include <linux/interrupt.h> |
21 | 21 | ||
22 | #include <asm/arch/gpio.h> | 22 | #include <mach/gpio.h> |
23 | #include <asm/arch/tosa.h> | 23 | #include <mach/tosa.h> |
24 | 24 | ||
25 | #define KB_ROWMASK(r) (1 << (r)) | 25 | #define KB_ROWMASK(r) (1 << (r)) |
26 | #define SCANCODE(r, c) (((r)<<4) + (c) + 1) | 26 | #define SCANCODE(r, c) (((r)<<4) + (c) + 1) |
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c index 798d84c44d03..9946d73624b9 100644 --- a/drivers/input/misc/ixp4xx-beeper.c +++ b/drivers/input/misc/ixp4xx-beeper.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
23 | #include <asm/hardware.h> | 23 | #include <mach/hardware.h> |
24 | 24 | ||
25 | MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); | 25 | MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>"); |
26 | MODULE_DESCRIPTION("ixp4xx beeper driver"); | 26 | MODULE_DESCRIPTION("ixp4xx beeper driver"); |
diff --git a/drivers/input/mouse/rpcmouse.c b/drivers/input/mouse/rpcmouse.c index 18a48636ba4a..56c079ef5018 100644 --- a/drivers/input/mouse/rpcmouse.c +++ b/drivers/input/mouse/rpcmouse.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/input.h> | 24 | #include <linux/input.h> |
25 | 25 | ||
26 | #include <asm/hardware.h> | 26 | #include <mach/hardware.h> |
27 | #include <asm/irq.h> | 27 | #include <asm/irq.h> |
28 | #include <asm/io.h> | 28 | #include <asm/io.h> |
29 | #include <asm/hardware/iomd.h> | 29 | #include <asm/hardware/iomd.h> |
diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c index 1567b7782478..7f36edd34f8b 100644 --- a/drivers/input/serio/rpckbd.c +++ b/drivers/input/serio/rpckbd.c | |||
@@ -35,7 +35,7 @@ | |||
35 | #include <linux/platform_device.h> | 35 | #include <linux/platform_device.h> |
36 | 36 | ||
37 | #include <asm/irq.h> | 37 | #include <asm/irq.h> |
38 | #include <asm/hardware.h> | 38 | #include <mach/hardware.h> |
39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
40 | #include <asm/hardware/iomd.h> | 40 | #include <asm/hardware/iomd.h> |
41 | #include <asm/system.h> | 41 | #include <asm/system.h> |
diff --git a/drivers/input/touchscreen/corgi_ts.c b/drivers/input/touchscreen/corgi_ts.c index d0e13fc4a88c..65202c9f63ff 100644 --- a/drivers/input/touchscreen/corgi_ts.c +++ b/drivers/input/touchscreen/corgi_ts.c | |||
@@ -19,10 +19,10 @@ | |||
19 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
21 | 21 | ||
22 | #include <asm/arch/sharpsl.h> | 22 | #include <mach/sharpsl.h> |
23 | #include <asm/arch/hardware.h> | 23 | #include <mach/hardware.h> |
24 | #include <asm/arch/pxa-regs.h> | 24 | #include <mach/pxa-regs.h> |
25 | #include <asm/arch/pxa2xx-gpio.h> | 25 | #include <mach/pxa2xx-gpio.h> |
26 | 26 | ||
27 | 27 | ||
28 | #define PWR_MODE_ACTIVE 0 | 28 | #define PWR_MODE_ACTIVE 0 |
diff --git a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c index 4f86081dc7fc..4d3139e2099d 100644 --- a/drivers/input/touchscreen/h3600_ts_input.c +++ b/drivers/input/touchscreen/h3600_ts_input.c | |||
@@ -39,8 +39,8 @@ | |||
39 | #include <linux/delay.h> | 39 | #include <linux/delay.h> |
40 | 40 | ||
41 | /* SA1100 serial defines */ | 41 | /* SA1100 serial defines */ |
42 | #include <asm/arch/hardware.h> | 42 | #include <mach/hardware.h> |
43 | #include <asm/arch/irqs.h> | 43 | #include <mach/irqs.h> |
44 | 44 | ||
45 | #define DRIVER_DESC "H3600 touchscreen driver" | 45 | #define DRIVER_DESC "H3600 touchscreen driver" |
46 | 46 | ||
diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c index 1aca108b1031..bf44f9d68342 100644 --- a/drivers/input/touchscreen/jornada720_ts.c +++ b/drivers/input/touchscreen/jornada720_ts.c | |||
@@ -19,8 +19,8 @@ | |||
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | 21 | ||
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/arch/jornada720.h> | 23 | #include <mach/jornada720.h> |
24 | 24 | ||
25 | MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); | 25 | MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); |
26 | MODULE_DESCRIPTION("HP Jornada 710/720/728 touchscreen driver"); | 26 | MODULE_DESCRIPTION("HP Jornada 710/720/728 touchscreen driver"); |
diff --git a/drivers/input/touchscreen/mainstone-wm97xx.c b/drivers/input/touchscreen/mainstone-wm97xx.c index 590a1379aa32..283f93a0cee2 100644 --- a/drivers/input/touchscreen/mainstone-wm97xx.c +++ b/drivers/input/touchscreen/mainstone-wm97xx.c | |||
@@ -33,7 +33,7 @@ | |||
33 | #include <linux/interrupt.h> | 33 | #include <linux/interrupt.h> |
34 | #include <linux/wm97xx.h> | 34 | #include <linux/wm97xx.h> |
35 | #include <linux/io.h> | 35 | #include <linux/io.h> |
36 | #include <asm/arch/pxa-regs.h> | 36 | #include <mach/pxa-regs.h> |
37 | 37 | ||
38 | #define VERSION "0.13" | 38 | #define VERSION "0.13" |
39 | 39 | ||
diff --git a/drivers/isdn/Makefile b/drivers/isdn/Makefile index 8380a4568d11..f1f777570e8e 100644 --- a/drivers/isdn/Makefile +++ b/drivers/isdn/Makefile | |||
@@ -5,7 +5,7 @@ | |||
5 | obj-$(CONFIG_ISDN_I4L) += i4l/ | 5 | obj-$(CONFIG_ISDN_I4L) += i4l/ |
6 | obj-$(CONFIG_ISDN_CAPI) += capi/ | 6 | obj-$(CONFIG_ISDN_CAPI) += capi/ |
7 | obj-$(CONFIG_MISDN) += mISDN/ | 7 | obj-$(CONFIG_MISDN) += mISDN/ |
8 | obj-$(CONFIG_ISDN_CAPI) += hardware/ | 8 | obj-$(CONFIG_ISDN) += hardware/ |
9 | obj-$(CONFIG_ISDN_DIVERSION) += divert/ | 9 | obj-$(CONFIG_ISDN_DIVERSION) += divert/ |
10 | obj-$(CONFIG_ISDN_DRV_HISAX) += hisax/ | 10 | obj-$(CONFIG_ISDN_DRV_HISAX) += hisax/ |
11 | obj-$(CONFIG_ISDN_DRV_ICN) += icn/ | 11 | obj-$(CONFIG_ISDN_DRV_ICN) += icn/ |
diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c index 2649ea55a9e8..1eac03f39d00 100644 --- a/drivers/isdn/hardware/mISDN/hfcmulti.c +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c | |||
@@ -140,7 +140,7 @@ | |||
140 | * #define HFC_REGISTER_DEBUG | 140 | * #define HFC_REGISTER_DEBUG |
141 | */ | 141 | */ |
142 | 142 | ||
143 | static const char *hfcmulti_revision = "2.00"; | 143 | static const char *hfcmulti_revision = "2.02"; |
144 | 144 | ||
145 | #include <linux/module.h> | 145 | #include <linux/module.h> |
146 | #include <linux/pci.h> | 146 | #include <linux/pci.h> |
@@ -427,12 +427,12 @@ write_fifo_regio(struct hfc_multi *hc, u_char *data, int len) | |||
427 | { | 427 | { |
428 | outb(A_FIFO_DATA0, (hc->pci_iobase)+4); | 428 | outb(A_FIFO_DATA0, (hc->pci_iobase)+4); |
429 | while (len>>2) { | 429 | while (len>>2) { |
430 | outl(*(u32 *)data, hc->pci_iobase); | 430 | outl(cpu_to_le32(*(u32 *)data), hc->pci_iobase); |
431 | data += 4; | 431 | data += 4; |
432 | len -= 4; | 432 | len -= 4; |
433 | } | 433 | } |
434 | while (len>>1) { | 434 | while (len>>1) { |
435 | outw(*(u16 *)data, hc->pci_iobase); | 435 | outw(cpu_to_le16(*(u16 *)data), hc->pci_iobase); |
436 | data += 2; | 436 | data += 2; |
437 | len -= 2; | 437 | len -= 2; |
438 | } | 438 | } |
@@ -447,17 +447,19 @@ void | |||
447 | write_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len) | 447 | write_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len) |
448 | { | 448 | { |
449 | while (len>>2) { | 449 | while (len>>2) { |
450 | writel(*(u32 *)data, (hc->pci_membase)+A_FIFO_DATA0); | 450 | writel(cpu_to_le32(*(u32 *)data), |
451 | hc->pci_membase + A_FIFO_DATA0); | ||
451 | data += 4; | 452 | data += 4; |
452 | len -= 4; | 453 | len -= 4; |
453 | } | 454 | } |
454 | while (len>>1) { | 455 | while (len>>1) { |
455 | writew(*(u16 *)data, (hc->pci_membase)+A_FIFO_DATA0); | 456 | writew(cpu_to_le16(*(u16 *)data), |
457 | hc->pci_membase + A_FIFO_DATA0); | ||
456 | data += 2; | 458 | data += 2; |
457 | len -= 2; | 459 | len -= 2; |
458 | } | 460 | } |
459 | while (len) { | 461 | while (len) { |
460 | writeb(*data, (hc->pci_membase)+A_FIFO_DATA0); | 462 | writeb(*data, hc->pci_membase + A_FIFO_DATA0); |
461 | data++; | 463 | data++; |
462 | len--; | 464 | len--; |
463 | } | 465 | } |
@@ -468,12 +470,12 @@ read_fifo_regio(struct hfc_multi *hc, u_char *data, int len) | |||
468 | { | 470 | { |
469 | outb(A_FIFO_DATA0, (hc->pci_iobase)+4); | 471 | outb(A_FIFO_DATA0, (hc->pci_iobase)+4); |
470 | while (len>>2) { | 472 | while (len>>2) { |
471 | *(u32 *)data = inl(hc->pci_iobase); | 473 | *(u32 *)data = le32_to_cpu(inl(hc->pci_iobase)); |
472 | data += 4; | 474 | data += 4; |
473 | len -= 4; | 475 | len -= 4; |
474 | } | 476 | } |
475 | while (len>>1) { | 477 | while (len>>1) { |
476 | *(u16 *)data = inw(hc->pci_iobase); | 478 | *(u16 *)data = le16_to_cpu(inw(hc->pci_iobase)); |
477 | data += 2; | 479 | data += 2; |
478 | len -= 2; | 480 | len -= 2; |
479 | } | 481 | } |
@@ -490,18 +492,18 @@ read_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len) | |||
490 | { | 492 | { |
491 | while (len>>2) { | 493 | while (len>>2) { |
492 | *(u32 *)data = | 494 | *(u32 *)data = |
493 | readl((hc->pci_membase)+A_FIFO_DATA0); | 495 | le32_to_cpu(readl(hc->pci_membase + A_FIFO_DATA0)); |
494 | data += 4; | 496 | data += 4; |
495 | len -= 4; | 497 | len -= 4; |
496 | } | 498 | } |
497 | while (len>>1) { | 499 | while (len>>1) { |
498 | *(u16 *)data = | 500 | *(u16 *)data = |
499 | readw((hc->pci_membase)+A_FIFO_DATA0); | 501 | le16_to_cpu(readw(hc->pci_membase + A_FIFO_DATA0)); |
500 | data += 2; | 502 | data += 2; |
501 | len -= 2; | 503 | len -= 2; |
502 | } | 504 | } |
503 | while (len) { | 505 | while (len) { |
504 | *data = readb((hc->pci_membase)+A_FIFO_DATA0); | 506 | *data = readb(hc->pci_membase + A_FIFO_DATA0); |
505 | data++; | 507 | data++; |
506 | len--; | 508 | len--; |
507 | } | 509 | } |
@@ -3971,7 +3973,7 @@ open_bchannel(struct hfc_multi *hc, struct dchannel *dch, | |||
3971 | struct bchannel *bch; | 3973 | struct bchannel *bch; |
3972 | int ch; | 3974 | int ch; |
3973 | 3975 | ||
3974 | if (!test_bit(rq->adr.channel, &dch->dev.channelmap[0])) | 3976 | if (!test_channelmap(rq->adr.channel, dch->dev.channelmap)) |
3975 | return -EINVAL; | 3977 | return -EINVAL; |
3976 | if (rq->protocol == ISDN_P_NONE) | 3978 | if (rq->protocol == ISDN_P_NONE) |
3977 | return -EINVAL; | 3979 | return -EINVAL; |
@@ -4587,7 +4589,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m) | |||
4587 | list_add(&bch->ch.list, &dch->dev.bchannels); | 4589 | list_add(&bch->ch.list, &dch->dev.bchannels); |
4588 | hc->chan[ch].bch = bch; | 4590 | hc->chan[ch].bch = bch; |
4589 | hc->chan[ch].port = 0; | 4591 | hc->chan[ch].port = 0; |
4590 | test_and_set_bit(bch->nr, &dch->dev.channelmap[0]); | 4592 | set_channelmap(bch->nr, dch->dev.channelmap); |
4591 | } | 4593 | } |
4592 | /* set optical line type */ | 4594 | /* set optical line type */ |
4593 | if (port[Port_cnt] & 0x001) { | 4595 | if (port[Port_cnt] & 0x001) { |
@@ -4755,7 +4757,7 @@ init_multi_port(struct hfc_multi *hc, int pt) | |||
4755 | list_add(&bch->ch.list, &dch->dev.bchannels); | 4757 | list_add(&bch->ch.list, &dch->dev.bchannels); |
4756 | hc->chan[i + ch].bch = bch; | 4758 | hc->chan[i + ch].bch = bch; |
4757 | hc->chan[i + ch].port = pt; | 4759 | hc->chan[i + ch].port = pt; |
4758 | test_and_set_bit(bch->nr, &dch->dev.channelmap[0]); | 4760 | set_channelmap(bch->nr, dch->dev.channelmap); |
4759 | } | 4761 | } |
4760 | /* set master clock */ | 4762 | /* set master clock */ |
4761 | if (port[Port_cnt] & 0x001) { | 4763 | if (port[Port_cnt] & 0x001) { |
@@ -5050,12 +5052,12 @@ static void __devexit hfc_remove_pci(struct pci_dev *pdev) | |||
5050 | 5052 | ||
5051 | static const struct hm_map hfcm_map[] = { | 5053 | static const struct hm_map hfcm_map[] = { |
5052 | /*0*/ {VENDOR_BN, "HFC-1S Card (mini PCI)", 4, 1, 1, 3, 0, DIP_4S, 0}, | 5054 | /*0*/ {VENDOR_BN, "HFC-1S Card (mini PCI)", 4, 1, 1, 3, 0, DIP_4S, 0}, |
5053 | /*1*/ {VENDOR_BN, "HFC-2S Card", 4, 2, 1, 3, 0, DIP_4S}, | 5055 | /*1*/ {VENDOR_BN, "HFC-2S Card", 4, 2, 1, 3, 0, DIP_4S, 0}, |
5054 | /*2*/ {VENDOR_BN, "HFC-2S Card (mini PCI)", 4, 2, 1, 3, 0, DIP_4S, 0}, | 5056 | /*2*/ {VENDOR_BN, "HFC-2S Card (mini PCI)", 4, 2, 1, 3, 0, DIP_4S, 0}, |
5055 | /*3*/ {VENDOR_BN, "HFC-4S Card", 4, 4, 1, 2, 0, DIP_4S, 0}, | 5057 | /*3*/ {VENDOR_BN, "HFC-4S Card", 4, 4, 1, 2, 0, DIP_4S, 0}, |
5056 | /*4*/ {VENDOR_BN, "HFC-4S Card (mini PCI)", 4, 4, 1, 2, 0, 0, 0}, | 5058 | /*4*/ {VENDOR_BN, "HFC-4S Card (mini PCI)", 4, 4, 1, 2, 0, 0, 0}, |
5057 | /*5*/ {VENDOR_CCD, "HFC-4S Eval (old)", 4, 4, 0, 0, 0, 0, 0}, | 5059 | /*5*/ {VENDOR_CCD, "HFC-4S Eval (old)", 4, 4, 0, 0, 0, 0, 0}, |
5058 | /*6*/ {VENDOR_CCD, "HFC-4S IOB4ST", 4, 4, 1, 2, 0, 0, 0}, | 5060 | /*6*/ {VENDOR_CCD, "HFC-4S IOB4ST", 4, 4, 1, 2, 0, DIP_4S, 0}, |
5059 | /*7*/ {VENDOR_CCD, "HFC-4S", 4, 4, 1, 2, 0, 0, 0}, | 5061 | /*7*/ {VENDOR_CCD, "HFC-4S", 4, 4, 1, 2, 0, 0, 0}, |
5060 | /*8*/ {VENDOR_DIG, "HFC-4S Card", 4, 4, 0, 2, 0, 0, HFC_IO_MODE_REGIO}, | 5062 | /*8*/ {VENDOR_DIG, "HFC-4S Card", 4, 4, 0, 2, 0, 0, HFC_IO_MODE_REGIO}, |
5061 | /*9*/ {VENDOR_CCD, "HFC-4S Swyx 4xS0 SX2 QuadBri", 4, 4, 1, 2, 0, 0, 0}, | 5063 | /*9*/ {VENDOR_CCD, "HFC-4S Swyx 4xS0 SX2 QuadBri", 4, 4, 1, 2, 0, 0, 0}, |
@@ -5251,9 +5253,6 @@ HFCmulti_init(void) | |||
5251 | if (debug & DEBUG_HFCMULTI_INIT) | 5253 | if (debug & DEBUG_HFCMULTI_INIT) |
5252 | printk(KERN_DEBUG "%s: init entered\n", __func__); | 5254 | printk(KERN_DEBUG "%s: init entered\n", __func__); |
5253 | 5255 | ||
5254 | #ifdef __BIG_ENDIAN | ||
5255 | #error "not running on big endian machines now" | ||
5256 | #endif | ||
5257 | hfc_interrupt = symbol_get(ztdummy_extern_interrupt); | 5256 | hfc_interrupt = symbol_get(ztdummy_extern_interrupt); |
5258 | register_interrupt = symbol_get(ztdummy_register_interrupt); | 5257 | register_interrupt = symbol_get(ztdummy_register_interrupt); |
5259 | unregister_interrupt = symbol_get(ztdummy_unregister_interrupt); | 5258 | unregister_interrupt = symbol_get(ztdummy_unregister_interrupt); |
diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c index 3231814e7efa..9cf5edbb1a9b 100644 --- a/drivers/isdn/hardware/mISDN/hfcpci.c +++ b/drivers/isdn/hardware/mISDN/hfcpci.c | |||
@@ -2056,7 +2056,7 @@ setup_card(struct hfc_pci *card) | |||
2056 | card->dch.dev.nrbchan = 2; | 2056 | card->dch.dev.nrbchan = 2; |
2057 | for (i = 0; i < 2; i++) { | 2057 | for (i = 0; i < 2; i++) { |
2058 | card->bch[i].nr = i + 1; | 2058 | card->bch[i].nr = i + 1; |
2059 | test_and_set_bit(i + 1, &card->dch.dev.channelmap[0]); | 2059 | set_channelmap(i + 1, card->dch.dev.channelmap); |
2060 | card->bch[i].debug = debug; | 2060 | card->bch[i].debug = debug; |
2061 | mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM); | 2061 | mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM); |
2062 | card->bch[i].hw = card; | 2062 | card->bch[i].hw = card; |
diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c index 155b99780c4f..e42150a57780 100644 --- a/drivers/isdn/mISDN/l1oip_core.c +++ b/drivers/isdn/mISDN/l1oip_core.c | |||
@@ -1006,8 +1006,7 @@ open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq) | |||
1006 | struct bchannel *bch; | 1006 | struct bchannel *bch; |
1007 | int ch; | 1007 | int ch; |
1008 | 1008 | ||
1009 | if (!test_bit(rq->adr.channel & 0x1f, | 1009 | if (!test_channelmap(rq->adr.channel, dch->dev.channelmap)) |
1010 | &dch->dev.channelmap[rq->adr.channel >> 5])) | ||
1011 | return -EINVAL; | 1010 | return -EINVAL; |
1012 | if (rq->protocol == ISDN_P_NONE) | 1011 | if (rq->protocol == ISDN_P_NONE) |
1013 | return -EINVAL; | 1012 | return -EINVAL; |
@@ -1412,8 +1411,7 @@ init_card(struct l1oip *hc, int pri, int bundle) | |||
1412 | bch->ch.nr = i + ch; | 1411 | bch->ch.nr = i + ch; |
1413 | list_add(&bch->ch.list, &dch->dev.bchannels); | 1412 | list_add(&bch->ch.list, &dch->dev.bchannels); |
1414 | hc->chan[i + ch].bch = bch; | 1413 | hc->chan[i + ch].bch = bch; |
1415 | test_and_set_bit(bch->nr & 0x1f, | 1414 | set_channelmap(bch->nr, dch->dev.channelmap); |
1416 | &dch->dev.channelmap[bch->nr >> 5]); | ||
1417 | } | 1415 | } |
1418 | ret = mISDN_register_device(&dch->dev, hc->name); | 1416 | ret = mISDN_register_device(&dch->dev, hc->name); |
1419 | if (ret) | 1417 | if (ret) |
diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c index 4ba4cc364c9e..e5a20f9542d1 100644 --- a/drivers/isdn/mISDN/socket.c +++ b/drivers/isdn/mISDN/socket.c | |||
@@ -379,7 +379,7 @@ data_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
379 | di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); | 379 | di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); |
380 | di.protocol = dev->D.protocol; | 380 | di.protocol = dev->D.protocol; |
381 | memcpy(di.channelmap, dev->channelmap, | 381 | memcpy(di.channelmap, dev->channelmap, |
382 | MISDN_CHMAP_SIZE * 4); | 382 | sizeof(di.channelmap)); |
383 | di.nrbchan = dev->nrbchan; | 383 | di.nrbchan = dev->nrbchan; |
384 | strcpy(di.name, dev->name); | 384 | strcpy(di.name, dev->name); |
385 | if (copy_to_user((void __user *)arg, &di, sizeof(di))) | 385 | if (copy_to_user((void __user *)arg, &di, sizeof(di))) |
@@ -637,7 +637,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
637 | di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); | 637 | di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); |
638 | di.protocol = dev->D.protocol; | 638 | di.protocol = dev->D.protocol; |
639 | memcpy(di.channelmap, dev->channelmap, | 639 | memcpy(di.channelmap, dev->channelmap, |
640 | MISDN_CHMAP_SIZE * 4); | 640 | sizeof(di.channelmap)); |
641 | di.nrbchan = dev->nrbchan; | 641 | di.nrbchan = dev->nrbchan; |
642 | strcpy(di.name, dev->name); | 642 | strcpy(di.name, dev->name); |
643 | if (copy_to_user((void __user *)arg, &di, sizeof(di))) | 643 | if (copy_to_user((void __user *)arg, &di, sizeof(di))) |
diff --git a/drivers/leds/leds-ams-delta.c b/drivers/leds/leds-ams-delta.c index c37bb0d5a0c5..32c98b2efa3f 100644 --- a/drivers/leds/leds-ams-delta.c +++ b/drivers/leds/leds-ams-delta.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/leds.h> | 14 | #include <linux/leds.h> |
15 | #include <asm/arch/board-ams-delta.h> | 15 | #include <mach/board-ams-delta.h> |
16 | 16 | ||
17 | /* | 17 | /* |
18 | * Our context | 18 | * Our context |
diff --git a/drivers/leds/leds-cm-x270.c b/drivers/leds/leds-cm-x270.c index accc7eddb788..836a43d776e6 100644 --- a/drivers/leds/leds-cm-x270.c +++ b/drivers/leds/leds-cm-x270.c | |||
@@ -18,8 +18,8 @@ | |||
18 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
19 | #include <linux/leds.h> | 19 | #include <linux/leds.h> |
20 | 20 | ||
21 | #include <asm/arch/hardware.h> | 21 | #include <mach/hardware.h> |
22 | #include <asm/arch/pxa-regs.h> | 22 | #include <mach/pxa-regs.h> |
23 | 23 | ||
24 | #define GPIO_RED_LED (93) | 24 | #define GPIO_RED_LED (93) |
25 | #define GPIO_GREEN_LED (94) | 25 | #define GPIO_GREEN_LED (94) |
diff --git a/drivers/leds/leds-corgi.c b/drivers/leds/leds-corgi.c index a709704b9f93..bc2dcd89f635 100644 --- a/drivers/leds/leds-corgi.c +++ b/drivers/leds/leds-corgi.c | |||
@@ -15,10 +15,9 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
18 | #include <asm/mach-types.h> | 18 | #include <mach/corgi.h> |
19 | #include <asm/arch/corgi.h> | 19 | #include <mach/hardware.h> |
20 | #include <asm/arch/hardware.h> | 20 | #include <mach/pxa-regs.h> |
21 | #include <asm/arch/pxa-regs.h> | ||
22 | #include <asm/hardware/scoop.h> | 21 | #include <asm/hardware/scoop.h> |
23 | 22 | ||
24 | static void corgiled_amber_set(struct led_classdev *led_cdev, | 23 | static void corgiled_amber_set(struct led_classdev *led_cdev, |
diff --git a/drivers/leds/leds-fsg.c b/drivers/leds/leds-fsg.c index a7421b8c47d8..be0e12144b8b 100644 --- a/drivers/leds/leds-fsg.c +++ b/drivers/leds/leds-fsg.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
21 | #include <linux/leds.h> | 21 | #include <linux/leds.h> |
22 | #include <asm/arch/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | 24 | ||
25 | static short __iomem *latch_address; | 25 | static short __iomem *latch_address; |
diff --git a/drivers/leds/leds-h1940.c b/drivers/leds/leds-h1940.c index 73c705021686..11b77a70bbcb 100644 --- a/drivers/leds/leds-h1940.c +++ b/drivers/leds/leds-h1940.c | |||
@@ -16,9 +16,9 @@ | |||
16 | #include <linux/string.h> | 16 | #include <linux/string.h> |
17 | #include <linux/ctype.h> | 17 | #include <linux/ctype.h> |
18 | #include <linux/leds.h> | 18 | #include <linux/leds.h> |
19 | #include <asm/arch/regs-gpio.h> | 19 | #include <mach/regs-gpio.h> |
20 | #include <asm/hardware.h> | 20 | #include <mach/hardware.h> |
21 | #include <asm/arch/h1940-latch.h> | 21 | #include <mach/h1940-latch.h> |
22 | 22 | ||
23 | /* | 23 | /* |
24 | * Green led. | 24 | * Green led. |
diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c index 7295f7f52185..5d91362e3066 100644 --- a/drivers/leds/leds-locomo.c +++ b/drivers/leds/leds-locomo.c | |||
@@ -13,7 +13,7 @@ | |||
13 | #include <linux/device.h> | 13 | #include <linux/device.h> |
14 | #include <linux/leds.h> | 14 | #include <linux/leds.h> |
15 | 15 | ||
16 | #include <asm/hardware.h> | 16 | #include <mach/hardware.h> |
17 | #include <asm/hardware/locomo.h> | 17 | #include <asm/hardware/locomo.h> |
18 | 18 | ||
19 | static void locomoled_brightness_set(struct led_classdev *led_cdev, | 19 | static void locomoled_brightness_set(struct led_classdev *led_cdev, |
diff --git a/drivers/leds/leds-s3c24xx.c b/drivers/leds/leds-s3c24xx.c index d4f5021dccbf..25a07f2643ad 100644 --- a/drivers/leds/leds-s3c24xx.c +++ b/drivers/leds/leds-s3c24xx.c | |||
@@ -16,9 +16,9 @@ | |||
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
18 | 18 | ||
19 | #include <asm/hardware.h> | 19 | #include <mach/hardware.h> |
20 | #include <asm/arch/regs-gpio.h> | 20 | #include <mach/regs-gpio.h> |
21 | #include <asm/arch/leds-gpio.h> | 21 | #include <mach/leds-gpio.h> |
22 | 22 | ||
23 | /* our context */ | 23 | /* our context */ |
24 | 24 | ||
diff --git a/drivers/leds/leds-spitz.c b/drivers/leds/leds-spitz.c index e75e8543bc5a..178831c64bfb 100644 --- a/drivers/leds/leds-spitz.c +++ b/drivers/leds/leds-spitz.c | |||
@@ -17,9 +17,9 @@ | |||
17 | #include <linux/leds.h> | 17 | #include <linux/leds.h> |
18 | #include <asm/hardware/scoop.h> | 18 | #include <asm/hardware/scoop.h> |
19 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
20 | #include <asm/arch/hardware.h> | 20 | #include <mach/hardware.h> |
21 | #include <asm/arch/pxa-regs.h> | 21 | #include <mach/pxa-regs.h> |
22 | #include <asm/arch/spitz.h> | 22 | #include <mach/spitz.h> |
23 | 23 | ||
24 | static void spitzled_amber_set(struct led_classdev *led_cdev, | 24 | static void spitzled_amber_set(struct led_classdev *led_cdev, |
25 | enum led_brightness value) | 25 | enum led_brightness value) |
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index b1e5b4705250..d7e46d345d9e 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <linux/delay.h> | 16 | #include <linux/delay.h> |
17 | #include <linux/sched.h> | 17 | #include <linux/sched.h> |
18 | #include <linux/timer.h> | 18 | #include <linux/timer.h> |
19 | #include <linux/hdreg.h> | ||
20 | #include <linux/stddef.h> | 19 | #include <linux/stddef.h> |
21 | #include <linux/init.h> | 20 | #include <linux/init.h> |
22 | #include <linux/ide.h> | 21 | #include <linux/ide.h> |
diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c index b15f82c49766..5e7ebca1968e 100644 --- a/drivers/media/video/pxa_camera.c +++ b/drivers/media/video/pxa_camera.c | |||
@@ -36,8 +36,8 @@ | |||
36 | #include <linux/videodev2.h> | 36 | #include <linux/videodev2.h> |
37 | 37 | ||
38 | #include <asm/dma.h> | 38 | #include <asm/dma.h> |
39 | #include <asm/arch/pxa-regs.h> | 39 | #include <mach/pxa-regs.h> |
40 | #include <asm/arch/camera.h> | 40 | #include <mach/camera.h> |
41 | 41 | ||
42 | #define PXA_CAM_VERSION_CODE KERNEL_VERSION(0, 0, 5) | 42 | #define PXA_CAM_VERSION_CODE KERNEL_VERSION(0, 0, 5) |
43 | #define PXA_CAM_DRV_NAME "pxa27x-camera" | 43 | #define PXA_CAM_DRV_NAME "pxa27x-camera" |
diff --git a/drivers/media/video/vino.c b/drivers/media/video/vino.c index 3989b0eded28..ef7572cbc4ab 100644 --- a/drivers/media/video/vino.c +++ b/drivers/media/video/vino.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/i2c-algo-sgi.h> | 39 | #include <linux/i2c-algo-sgi.h> |
40 | 40 | ||
41 | #include <linux/videodev2.h> | 41 | #include <linux/videodev2.h> |
42 | #include <media/v4l2-ioctl.h> | ||
42 | #include <media/v4l2-common.h> | 43 | #include <media/v4l2-common.h> |
43 | #include <linux/video_decoder.h> | 44 | #include <linux/video_decoder.h> |
44 | #include <linux/mutex.h> | 45 | #include <linux/mutex.h> |
diff --git a/drivers/mfd/mcp-sa11x0.c b/drivers/mfd/mcp-sa11x0.c index b5272b5ce3fa..28380b20bc70 100644 --- a/drivers/mfd/mcp-sa11x0.c +++ b/drivers/mfd/mcp-sa11x0.c | |||
@@ -21,12 +21,12 @@ | |||
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | 22 | ||
23 | #include <asm/dma.h> | 23 | #include <asm/dma.h> |
24 | #include <asm/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
26 | #include <asm/system.h> | 26 | #include <asm/system.h> |
27 | #include <asm/arch/mcp.h> | 27 | #include <mach/mcp.h> |
28 | 28 | ||
29 | #include <asm/arch/assabet.h> | 29 | #include <mach/assabet.h> |
30 | 30 | ||
31 | #include "mcp.h" | 31 | #include "mcp.h" |
32 | 32 | ||
diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c index f6b10dda31fd..a316f1b75933 100644 --- a/drivers/mfd/ucb1x00-core.c +++ b/drivers/mfd/ucb1x00-core.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #include <linux/mutex.h> | 26 | #include <linux/mutex.h> |
27 | 27 | ||
28 | #include <asm/dma.h> | 28 | #include <asm/dma.h> |
29 | #include <asm/hardware.h> | 29 | #include <mach/hardware.h> |
30 | 30 | ||
31 | #include "ucb1x00.h" | 31 | #include "ucb1x00.h" |
32 | 32 | ||
diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c index ad34e2d22524..44762ca86a8d 100644 --- a/drivers/mfd/ucb1x00-ts.c +++ b/drivers/mfd/ucb1x00-ts.c | |||
@@ -32,7 +32,7 @@ | |||
32 | #include <linux/kthread.h> | 32 | #include <linux/kthread.h> |
33 | 33 | ||
34 | #include <asm/dma.h> | 34 | #include <asm/dma.h> |
35 | #include <asm/arch/collie.h> | 35 | #include <mach/collie.h> |
36 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
37 | 37 | ||
38 | #include "ucb1x00.h" | 38 | #include "ucb1x00.h" |
diff --git a/drivers/misc/sgi-gru/grutlbpurge.c b/drivers/misc/sgi-gru/grutlbpurge.c index bcfd5425e2e6..c84496a77691 100644 --- a/drivers/misc/sgi-gru/grutlbpurge.c +++ b/drivers/misc/sgi-gru/grutlbpurge.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <linux/hugetlb.h> | 34 | #include <linux/hugetlb.h> |
35 | #include <linux/delay.h> | 35 | #include <linux/delay.h> |
36 | #include <linux/timex.h> | 36 | #include <linux/timex.h> |
37 | #include <linux/delay.h> | ||
38 | #include <linux/srcu.h> | 37 | #include <linux/srcu.h> |
39 | #include <asm/processor.h> | 38 | #include <asm/processor.h> |
40 | #include "gru.h" | 39 | #include "gru.h" |
diff --git a/drivers/mmc/host/at91_mci.c b/drivers/mmc/host/at91_mci.c index f15e2064305c..6915f40ac8ab 100644 --- a/drivers/mmc/host/at91_mci.c +++ b/drivers/mmc/host/at91_mci.c | |||
@@ -73,9 +73,9 @@ | |||
73 | #include <asm/gpio.h> | 73 | #include <asm/gpio.h> |
74 | 74 | ||
75 | #include <asm/mach/mmc.h> | 75 | #include <asm/mach/mmc.h> |
76 | #include <asm/arch/board.h> | 76 | #include <mach/board.h> |
77 | #include <asm/arch/cpu.h> | 77 | #include <mach/cpu.h> |
78 | #include <asm/arch/at91_mci.h> | 78 | #include <mach/at91_mci.h> |
79 | 79 | ||
80 | #define DRIVER_NAME "at91_mci" | 80 | #define DRIVER_NAME "at91_mci" |
81 | 81 | ||
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c index 992b4beb757c..0bd06f5bd62f 100644 --- a/drivers/mmc/host/atmel-mci.c +++ b/drivers/mmc/host/atmel-mci.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <asm/io.h> | 28 | #include <asm/io.h> |
29 | #include <asm/unaligned.h> | 29 | #include <asm/unaligned.h> |
30 | 30 | ||
31 | #include <asm/arch/board.h> | 31 | #include <mach/board.h> |
32 | 32 | ||
33 | #include "atmel-mci-regs.h" | 33 | #include "atmel-mci-regs.h" |
34 | 34 | ||
diff --git a/drivers/mmc/host/imxmmc.c b/drivers/mmc/host/imxmmc.c index f61406da65d2..2f0fcdb869b7 100644 --- a/drivers/mmc/host/imxmmc.c +++ b/drivers/mmc/host/imxmmc.c | |||
@@ -42,8 +42,8 @@ | |||
42 | #include <asm/io.h> | 42 | #include <asm/io.h> |
43 | #include <asm/irq.h> | 43 | #include <asm/irq.h> |
44 | #include <asm/sizes.h> | 44 | #include <asm/sizes.h> |
45 | #include <asm/arch/mmc.h> | 45 | #include <mach/mmc.h> |
46 | #include <asm/arch/imx-dma.h> | 46 | #include <mach/imx-dma.h> |
47 | 47 | ||
48 | #include "imxmmc.h" | 48 | #include "imxmmc.h" |
49 | 49 | ||
diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c index dbc26eb6a89e..c16028872bbb 100644 --- a/drivers/mmc/host/omap.c +++ b/drivers/mmc/host/omap.c | |||
@@ -29,14 +29,13 @@ | |||
29 | 29 | ||
30 | #include <asm/io.h> | 30 | #include <asm/io.h> |
31 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
32 | #include <asm/mach-types.h> | 32 | |
33 | 33 | #include <mach/board.h> | |
34 | #include <asm/arch/board.h> | 34 | #include <mach/mmc.h> |
35 | #include <asm/arch/mmc.h> | 35 | #include <mach/gpio.h> |
36 | #include <asm/arch/gpio.h> | 36 | #include <mach/dma.h> |
37 | #include <asm/arch/dma.h> | 37 | #include <mach/mux.h> |
38 | #include <asm/arch/mux.h> | 38 | #include <mach/fpga.h> |
39 | #include <asm/arch/fpga.h> | ||
40 | 39 | ||
41 | #define OMAP_MMC_REG_CMD 0x00 | 40 | #define OMAP_MMC_REG_CMD 0x00 |
42 | #define OMAP_MMC_REG_ARGL 0x04 | 41 | #define OMAP_MMC_REG_ARGL 0x04 |
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c index a8e18fe53077..55093ad132ca 100644 --- a/drivers/mmc/host/pxamci.c +++ b/drivers/mmc/host/pxamci.c | |||
@@ -31,8 +31,8 @@ | |||
31 | #include <asm/io.h> | 31 | #include <asm/io.h> |
32 | #include <asm/sizes.h> | 32 | #include <asm/sizes.h> |
33 | 33 | ||
34 | #include <asm/arch/pxa-regs.h> | 34 | #include <mach/pxa-regs.h> |
35 | #include <asm/arch/mmc.h> | 35 | #include <mach/mmc.h> |
36 | 36 | ||
37 | #include "pxamci.h" | 37 | #include "pxamci.h" |
38 | 38 | ||
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c index be550c26da68..7c994e1ae276 100644 --- a/drivers/mmc/host/s3cmci.c +++ b/drivers/mmc/host/s3cmci.c | |||
@@ -18,8 +18,8 @@ | |||
18 | 18 | ||
19 | #include <asm/dma.h> | 19 | #include <asm/dma.h> |
20 | 20 | ||
21 | #include <asm/arch/regs-sdi.h> | 21 | #include <mach/regs-sdi.h> |
22 | #include <asm/arch/regs-gpio.h> | 22 | #include <mach/regs-gpio.h> |
23 | 23 | ||
24 | #include <asm/plat-s3c24xx/mci.h> | 24 | #include <asm/plat-s3c24xx/mci.h> |
25 | 25 | ||
diff --git a/drivers/mtd/maps/autcpu12-nvram.c b/drivers/mtd/maps/autcpu12-nvram.c index cf32267263df..53664188fc47 100644 --- a/drivers/mtd/maps/autcpu12-nvram.c +++ b/drivers/mtd/maps/autcpu12-nvram.c | |||
@@ -25,8 +25,8 @@ | |||
25 | #include <linux/init.h> | 25 | #include <linux/init.h> |
26 | #include <asm/io.h> | 26 | #include <asm/io.h> |
27 | #include <asm/sizes.h> | 27 | #include <asm/sizes.h> |
28 | #include <asm/hardware.h> | 28 | #include <mach/hardware.h> |
29 | #include <asm/arch/autcpu12.h> | 29 | #include <mach/autcpu12.h> |
30 | #include <linux/mtd/mtd.h> | 30 | #include <linux/mtd/mtd.h> |
31 | #include <linux/mtd/map.h> | 31 | #include <linux/mtd/map.h> |
32 | #include <linux/mtd/partitions.h> | 32 | #include <linux/mtd/partitions.h> |
diff --git a/drivers/mtd/maps/cdb89712.c b/drivers/mtd/maps/cdb89712.c index cb507da0a87d..e5059aa3c724 100644 --- a/drivers/mtd/maps/cdb89712.c +++ b/drivers/mtd/maps/cdb89712.c | |||
@@ -9,7 +9,7 @@ | |||
9 | #include <linux/ioport.h> | 9 | #include <linux/ioport.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | #include <asm/io.h> | 11 | #include <asm/io.h> |
12 | #include <asm/arch/hardware.h> | 12 | #include <mach/hardware.h> |
13 | #include <linux/mtd/mtd.h> | 13 | #include <linux/mtd/mtd.h> |
14 | #include <linux/mtd/map.h> | 14 | #include <linux/mtd/map.h> |
15 | #include <linux/mtd/partitions.h> | 15 | #include <linux/mtd/partitions.h> |
diff --git a/drivers/mtd/maps/ceiva.c b/drivers/mtd/maps/ceiva.c index 6464d487eb1a..60e68bde0fea 100644 --- a/drivers/mtd/maps/ceiva.c +++ b/drivers/mtd/maps/ceiva.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/mtd/partitions.h> | 25 | #include <linux/mtd/partitions.h> |
26 | #include <linux/mtd/concat.h> | 26 | #include <linux/mtd/concat.h> |
27 | 27 | ||
28 | #include <asm/hardware.h> | 28 | #include <mach/hardware.h> |
29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
30 | #include <asm/io.h> | 30 | #include <asm/io.h> |
31 | #include <asm/sizes.h> | 31 | #include <asm/sizes.h> |
diff --git a/drivers/mtd/maps/h720x-flash.c b/drivers/mtd/maps/h720x-flash.c index ef8915474462..35fef655ccc4 100644 --- a/drivers/mtd/maps/h720x-flash.c +++ b/drivers/mtd/maps/h720x-flash.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/mtd/mtd.h> | 16 | #include <linux/mtd/mtd.h> |
17 | #include <linux/mtd/map.h> | 17 | #include <linux/mtd/map.h> |
18 | #include <linux/mtd/partitions.h> | 18 | #include <linux/mtd/partitions.h> |
19 | #include <asm/hardware.h> | 19 | #include <mach/hardware.h> |
20 | #include <asm/io.h> | 20 | #include <asm/io.h> |
21 | 21 | ||
22 | static struct mtd_info *mymtd; | 22 | static struct mtd_info *mymtd; |
diff --git a/drivers/mtd/maps/integrator-flash.c b/drivers/mtd/maps/integrator-flash.c index ee361aaadb1e..7100ee3c7b01 100644 --- a/drivers/mtd/maps/integrator-flash.c +++ b/drivers/mtd/maps/integrator-flash.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <linux/mtd/partitions.h> | 37 | #include <linux/mtd/partitions.h> |
38 | 38 | ||
39 | #include <asm/mach/flash.h> | 39 | #include <asm/mach/flash.h> |
40 | #include <asm/hardware.h> | 40 | #include <mach/hardware.h> |
41 | #include <asm/io.h> | 41 | #include <asm/io.h> |
42 | #include <asm/system.h> | 42 | #include <asm/system.h> |
43 | 43 | ||
diff --git a/drivers/mtd/maps/ipaq-flash.c b/drivers/mtd/maps/ipaq-flash.c index a806119797e0..ed58f6a77bd9 100644 --- a/drivers/mtd/maps/ipaq-flash.c +++ b/drivers/mtd/maps/ipaq-flash.c | |||
@@ -24,8 +24,8 @@ | |||
24 | #include <linux/mtd/concat.h> | 24 | #include <linux/mtd/concat.h> |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #include <asm/hardware.h> | 27 | #include <mach/hardware.h> |
28 | #include <asm/arch-sa1100/h3600.h> | 28 | #include <mach/h3600.h> |
29 | #include <asm/io.h> | 29 | #include <asm/io.h> |
30 | 30 | ||
31 | 31 | ||
diff --git a/drivers/mtd/maps/ixp2000.c b/drivers/mtd/maps/ixp2000.c index c2264792a20b..dcdb1f17577d 100644 --- a/drivers/mtd/maps/ixp2000.c +++ b/drivers/mtd/maps/ixp2000.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #include <linux/mtd/partitions.h> | 30 | #include <linux/mtd/partitions.h> |
31 | 31 | ||
32 | #include <asm/io.h> | 32 | #include <asm/io.h> |
33 | #include <asm/hardware.h> | 33 | #include <mach/hardware.h> |
34 | #include <asm/mach/flash.h> | 34 | #include <asm/mach/flash.h> |
35 | 35 | ||
36 | #include <linux/reboot.h> | 36 | #include <linux/reboot.h> |
diff --git a/drivers/mtd/maps/omap_nor.c b/drivers/mtd/maps/omap_nor.c index 68eec6c6c517..05f276af15da 100644 --- a/drivers/mtd/maps/omap_nor.c +++ b/drivers/mtd/maps/omap_nor.c | |||
@@ -43,9 +43,9 @@ | |||
43 | #include <linux/mtd/partitions.h> | 43 | #include <linux/mtd/partitions.h> |
44 | 44 | ||
45 | #include <asm/io.h> | 45 | #include <asm/io.h> |
46 | #include <asm/hardware.h> | 46 | #include <mach/hardware.h> |
47 | #include <asm/mach/flash.h> | 47 | #include <asm/mach/flash.h> |
48 | #include <asm/arch/tc.h> | 48 | #include <mach/tc.h> |
49 | 49 | ||
50 | #ifdef CONFIG_MTD_PARTITIONS | 50 | #ifdef CONFIG_MTD_PARTITIONS |
51 | static const char *part_probes[] = { /* "RedBoot", */ "cmdlinepart", NULL }; | 51 | static const char *part_probes[] = { /* "RedBoot", */ "cmdlinepart", NULL }; |
diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c index 82113295c266..771139c5bf87 100644 --- a/drivers/mtd/maps/pxa2xx-flash.c +++ b/drivers/mtd/maps/pxa2xx-flash.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/mtd/partitions.h> | 19 | #include <linux/mtd/partitions.h> |
20 | 20 | ||
21 | #include <asm/io.h> | 21 | #include <asm/io.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/cacheflush.h> | 23 | #include <asm/cacheflush.h> |
24 | 24 | ||
25 | #include <asm/mach/flash.h> | 25 | #include <asm/mach/flash.h> |
diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c index e177a43dfff0..7df6bbf0e4d9 100644 --- a/drivers/mtd/maps/sa1100-flash.c +++ b/drivers/mtd/maps/sa1100-flash.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <linux/mtd/partitions.h> | 18 | #include <linux/mtd/partitions.h> |
19 | #include <linux/mtd/concat.h> | 19 | #include <linux/mtd/concat.h> |
20 | 20 | ||
21 | #include <asm/hardware.h> | 21 | #include <mach/hardware.h> |
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | #include <asm/sizes.h> | 23 | #include <asm/sizes.h> |
24 | #include <asm/mach/flash.h> | 24 | #include <asm/mach/flash.h> |
diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c index 9b6af7e74a65..00d46e137b2a 100644 --- a/drivers/mtd/mtdsuper.c +++ b/drivers/mtd/mtdsuper.c | |||
@@ -125,8 +125,11 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
125 | int (*fill_super)(struct super_block *, void *, int), | 125 | int (*fill_super)(struct super_block *, void *, int), |
126 | struct vfsmount *mnt) | 126 | struct vfsmount *mnt) |
127 | { | 127 | { |
128 | #ifdef CONFIG_BLOCK | ||
128 | struct block_device *bdev; | 129 | struct block_device *bdev; |
129 | int mtdnr, ret; | 130 | int ret, major; |
131 | #endif | ||
132 | int mtdnr; | ||
130 | 133 | ||
131 | if (!dev_name) | 134 | if (!dev_name) |
132 | return -EINVAL; | 135 | return -EINVAL; |
@@ -178,6 +181,7 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
178 | } | 181 | } |
179 | } | 182 | } |
180 | 183 | ||
184 | #ifdef CONFIG_BLOCK | ||
181 | /* try the old way - the hack where we allowed users to mount | 185 | /* try the old way - the hack where we allowed users to mount |
182 | * /dev/mtdblock$(n) but didn't actually _use_ the blockdev | 186 | * /dev/mtdblock$(n) but didn't actually _use_ the blockdev |
183 | */ | 187 | */ |
@@ -190,22 +194,25 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags, | |||
190 | DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); | 194 | DEBUG(1, "MTDSB: lookup_bdev() returned 0\n"); |
191 | 195 | ||
192 | ret = -EINVAL; | 196 | ret = -EINVAL; |
193 | if (MAJOR(bdev->bd_dev) != MTD_BLOCK_MAJOR) | ||
194 | goto not_an_MTD_device; | ||
195 | 197 | ||
198 | major = MAJOR(bdev->bd_dev); | ||
196 | mtdnr = MINOR(bdev->bd_dev); | 199 | mtdnr = MINOR(bdev->bd_dev); |
197 | bdput(bdev); | 200 | bdput(bdev); |
198 | 201 | ||
202 | if (major != MTD_BLOCK_MAJOR) | ||
203 | goto not_an_MTD_device; | ||
204 | |||
199 | return get_sb_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super, | 205 | return get_sb_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super, |
200 | mnt); | 206 | mnt); |
201 | 207 | ||
202 | not_an_MTD_device: | 208 | not_an_MTD_device: |
209 | #endif /* CONFIG_BLOCK */ | ||
210 | |||
203 | if (!(flags & MS_SILENT)) | 211 | if (!(flags & MS_SILENT)) |
204 | printk(KERN_NOTICE | 212 | printk(KERN_NOTICE |
205 | "MTD: Attempt to mount non-MTD device \"%s\"\n", | 213 | "MTD: Attempt to mount non-MTD device \"%s\"\n", |
206 | dev_name); | 214 | dev_name); |
207 | bdput(bdev); | 215 | return -EINVAL; |
208 | return ret; | ||
209 | } | 216 | } |
210 | 217 | ||
211 | EXPORT_SYMBOL_GPL(get_sb_mtd); | 218 | EXPORT_SYMBOL_GPL(get_sb_mtd); |
diff --git a/drivers/mtd/nand/ams-delta.c b/drivers/mtd/nand/ams-delta.c index a0ba07c36ee9..26d42987971f 100644 --- a/drivers/mtd/nand/ams-delta.c +++ b/drivers/mtd/nand/ams-delta.c | |||
@@ -22,10 +22,10 @@ | |||
22 | #include <linux/mtd/nand.h> | 22 | #include <linux/mtd/nand.h> |
23 | #include <linux/mtd/partitions.h> | 23 | #include <linux/mtd/partitions.h> |
24 | #include <asm/io.h> | 24 | #include <asm/io.h> |
25 | #include <asm/arch/hardware.h> | 25 | #include <mach/hardware.h> |
26 | #include <asm/sizes.h> | 26 | #include <asm/sizes.h> |
27 | #include <asm/arch/gpio.h> | 27 | #include <mach/gpio.h> |
28 | #include <asm/arch/board-ams-delta.h> | 28 | #include <mach/board-ams-delta.h> |
29 | 29 | ||
30 | /* | 30 | /* |
31 | * MTD structure for E3 (Delta) | 31 | * MTD structure for E3 (Delta) |
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c index 99aec46e2145..3387e0d5076b 100644 --- a/drivers/mtd/nand/atmel_nand.c +++ b/drivers/mtd/nand/atmel_nand.c | |||
@@ -32,8 +32,8 @@ | |||
32 | #include <linux/gpio.h> | 32 | #include <linux/gpio.h> |
33 | #include <linux/io.h> | 33 | #include <linux/io.h> |
34 | 34 | ||
35 | #include <asm/arch/board.h> | 35 | #include <mach/board.h> |
36 | #include <asm/arch/cpu.h> | 36 | #include <mach/cpu.h> |
37 | 37 | ||
38 | #ifdef CONFIG_MTD_NAND_ATMEL_ECC_HW | 38 | #ifdef CONFIG_MTD_NAND_ATMEL_ECC_HW |
39 | #define hard_ecc 1 | 39 | #define hard_ecc 1 |
diff --git a/drivers/mtd/nand/autcpu12.c b/drivers/mtd/nand/autcpu12.c index 553dd7e9b41c..7c95da1f612c 100644 --- a/drivers/mtd/nand/autcpu12.c +++ b/drivers/mtd/nand/autcpu12.c | |||
@@ -32,9 +32,9 @@ | |||
32 | #include <linux/mtd/nand.h> | 32 | #include <linux/mtd/nand.h> |
33 | #include <linux/mtd/partitions.h> | 33 | #include <linux/mtd/partitions.h> |
34 | #include <asm/io.h> | 34 | #include <asm/io.h> |
35 | #include <asm/arch/hardware.h> | 35 | #include <mach/hardware.h> |
36 | #include <asm/sizes.h> | 36 | #include <asm/sizes.h> |
37 | #include <asm/arch/autcpu12.h> | 37 | #include <mach/autcpu12.h> |
38 | 38 | ||
39 | /* | 39 | /* |
40 | * MTD structure for AUTCPU12 board | 40 | * MTD structure for AUTCPU12 board |
diff --git a/drivers/mtd/nand/cmx270_nand.c b/drivers/mtd/nand/cmx270_nand.c index fc8529bedfdf..9eba3f04783a 100644 --- a/drivers/mtd/nand/cmx270_nand.c +++ b/drivers/mtd/nand/cmx270_nand.c | |||
@@ -26,8 +26,8 @@ | |||
26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
27 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
28 | 28 | ||
29 | #include <asm/arch/hardware.h> | 29 | #include <mach/hardware.h> |
30 | #include <asm/arch/pxa-regs.h> | 30 | #include <mach/pxa-regs.h> |
31 | 31 | ||
32 | #define GPIO_NAND_CS (11) | 32 | #define GPIO_NAND_CS (11) |
33 | #define GPIO_NAND_RB (89) | 33 | #define GPIO_NAND_RB (89) |
diff --git a/drivers/mtd/nand/edb7312.c b/drivers/mtd/nand/edb7312.c index 387e4352903e..86366bfba9f8 100644 --- a/drivers/mtd/nand/edb7312.c +++ b/drivers/mtd/nand/edb7312.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/mtd/nand.h> | 23 | #include <linux/mtd/nand.h> |
24 | #include <linux/mtd/partitions.h> | 24 | #include <linux/mtd/partitions.h> |
25 | #include <asm/io.h> | 25 | #include <asm/io.h> |
26 | #include <asm/arch/hardware.h> /* for CLPS7111_VIRT_BASE */ | 26 | #include <mach/hardware.h> /* for CLPS7111_VIRT_BASE */ |
27 | #include <asm/sizes.h> | 27 | #include <asm/sizes.h> |
28 | #include <asm/hardware/clps7111.h> | 28 | #include <asm/hardware/clps7111.h> |
29 | 29 | ||
diff --git a/drivers/mtd/nand/h1910.c b/drivers/mtd/nand/h1910.c index 9e59de501c2e..f8ce79b446ed 100644 --- a/drivers/mtd/nand/h1910.c +++ b/drivers/mtd/nand/h1910.c | |||
@@ -24,10 +24,10 @@ | |||
24 | #include <linux/mtd/nand.h> | 24 | #include <linux/mtd/nand.h> |
25 | #include <linux/mtd/partitions.h> | 25 | #include <linux/mtd/partitions.h> |
26 | #include <asm/io.h> | 26 | #include <asm/io.h> |
27 | #include <asm/arch/hardware.h> /* for CLPS7111_VIRT_BASE */ | 27 | #include <mach/hardware.h> /* for CLPS7111_VIRT_BASE */ |
28 | #include <asm/sizes.h> | 28 | #include <asm/sizes.h> |
29 | #include <asm/arch/h1900-gpio.h> | 29 | #include <mach/h1900-gpio.h> |
30 | #include <asm/arch/ipaq.h> | 30 | #include <mach/ipaq.h> |
31 | 31 | ||
32 | /* | 32 | /* |
33 | * MTD structure for EDB7312 board | 33 | * MTD structure for EDB7312 board |
diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c index ee2ac3948cd8..64002488c6ee 100644 --- a/drivers/mtd/nand/orion_nand.c +++ b/drivers/mtd/nand/orion_nand.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <linux/mtd/partitions.h> | 18 | #include <linux/mtd/partitions.h> |
19 | #include <asm/io.h> | 19 | #include <asm/io.h> |
20 | #include <asm/sizes.h> | 20 | #include <asm/sizes.h> |
21 | #include <asm/arch/hardware.h> | 21 | #include <mach/hardware.h> |
22 | #include <asm/plat-orion/orion_nand.h> | 22 | #include <asm/plat-orion/orion_nand.h> |
23 | 23 | ||
24 | #ifdef CONFIG_MTD_CMDLINE_PARTS | 24 | #ifdef CONFIG_MTD_CMDLINE_PARTS |
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c index fe2bc7e42119..a64ad15b8fdd 100644 --- a/drivers/mtd/nand/pxa3xx_nand.c +++ b/drivers/mtd/nand/pxa3xx_nand.c | |||
@@ -22,8 +22,8 @@ | |||
22 | #include <linux/irq.h> | 22 | #include <linux/irq.h> |
23 | #include <asm/dma.h> | 23 | #include <asm/dma.h> |
24 | 24 | ||
25 | #include <asm/arch/pxa-regs.h> | 25 | #include <mach/pxa-regs.h> |
26 | #include <asm/arch/pxa3xx_nand.h> | 26 | #include <mach/pxa3xx_nand.h> |
27 | 27 | ||
28 | #define CHIP_DELAY_TIMEOUT (2 * HZ/10) | 28 | #define CHIP_DELAY_TIMEOUT (2 * HZ/10) |
29 | 29 | ||
diff --git a/drivers/mtd/nand/sharpsl.c b/drivers/mtd/nand/sharpsl.c index 6dba2fb66ae5..30a518e211bd 100644 --- a/drivers/mtd/nand/sharpsl.c +++ b/drivers/mtd/nand/sharpsl.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <linux/mtd/partitions.h> | 21 | #include <linux/mtd/partitions.h> |
22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
26 | 26 | ||
27 | static void __iomem *sharpsl_io_base; | 27 | static void __iomem *sharpsl_io_base; |
diff --git a/drivers/mtd/nand/ts7250.c b/drivers/mtd/nand/ts7250.c index 807a72752eeb..2c410a011317 100644 --- a/drivers/mtd/nand/ts7250.c +++ b/drivers/mtd/nand/ts7250.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/mtd/nand.h> | 25 | #include <linux/mtd/nand.h> |
26 | #include <linux/mtd/partitions.h> | 26 | #include <linux/mtd/partitions.h> |
27 | #include <asm/io.h> | 27 | #include <asm/io.h> |
28 | #include <asm/arch/hardware.h> | 28 | #include <mach/hardware.h> |
29 | #include <asm/sizes.h> | 29 | #include <asm/sizes.h> |
30 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
31 | 31 | ||
diff --git a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c index a637910b02dd..aa4a5246be53 100644 --- a/drivers/net/arm/am79c961a.c +++ b/drivers/net/arm/am79c961a.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <linux/bitops.h> | 28 | #include <linux/bitops.h> |
29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
30 | 30 | ||
31 | #include <asm/hardware.h> | 31 | #include <mach/hardware.h> |
32 | #include <asm/io.h> | 32 | #include <asm/io.h> |
33 | #include <asm/system.h> | 33 | #include <asm/system.h> |
34 | 34 | ||
diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c index ffae266e2d7f..0fa53464efb2 100644 --- a/drivers/net/arm/at91_ether.c +++ b/drivers/net/arm/at91_ether.c | |||
@@ -32,9 +32,9 @@ | |||
32 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
33 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
34 | 34 | ||
35 | #include <asm/arch/at91rm9200_emac.h> | 35 | #include <mach/at91rm9200_emac.h> |
36 | #include <asm/arch/gpio.h> | 36 | #include <mach/gpio.h> |
37 | #include <asm/arch/board.h> | 37 | #include <mach/board.h> |
38 | 38 | ||
39 | #include "at91_ether.h" | 39 | #include "at91_ether.h" |
40 | 40 | ||
diff --git a/drivers/net/arm/ep93xx_eth.c b/drivers/net/arm/ep93xx_eth.c index 18d3eeb7eab2..1267444d79da 100644 --- a/drivers/net/arm/ep93xx_eth.c +++ b/drivers/net/arm/ep93xx_eth.c | |||
@@ -20,8 +20,8 @@ | |||
20 | #include <linux/moduleparam.h> | 20 | #include <linux/moduleparam.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <asm/arch/ep93xx-regs.h> | 23 | #include <mach/ep93xx-regs.h> |
24 | #include <asm/arch/platform.h> | 24 | #include <mach/platform.h> |
25 | #include <asm/io.h> | 25 | #include <asm/io.h> |
26 | 26 | ||
27 | #define DRV_MODULE_NAME "ep93xx-eth" | 27 | #define DRV_MODULE_NAME "ep93xx-eth" |
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c index 9b777d9433cd..020771bfb603 100644 --- a/drivers/net/arm/ixp4xx_eth.c +++ b/drivers/net/arm/ixp4xx_eth.c | |||
@@ -32,8 +32,8 @@ | |||
32 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
33 | #include <linux/mii.h> | 33 | #include <linux/mii.h> |
34 | #include <linux/platform_device.h> | 34 | #include <linux/platform_device.h> |
35 | #include <asm/arch/npe.h> | 35 | #include <mach/npe.h> |
36 | #include <asm/arch/qmgr.h> | 36 | #include <mach/qmgr.h> |
37 | 37 | ||
38 | #define DEBUG_QUEUES 0 | 38 | #define DEBUG_QUEUES 0 |
39 | #define DEBUG_DESC 0 | 39 | #define DEBUG_DESC 0 |
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index fba87abe78ee..ea6144a9565e 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
@@ -189,7 +189,7 @@ static unsigned int netcard_portlist[] __used __initdata = {IXDP2X01_CS8900_VIRT | |||
189 | static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0}; | 189 | static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0}; |
190 | #elif defined(CONFIG_ARCH_PNX010X) | 190 | #elif defined(CONFIG_ARCH_PNX010X) |
191 | #include <asm/irq.h> | 191 | #include <asm/irq.h> |
192 | #include <asm/arch/gpio.h> | 192 | #include <mach/gpio.h> |
193 | #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */ | 193 | #define CIRRUS_DEFAULT_BASE IO_ADDRESS(EXT_STATIC2_s0_BASE + 0x200000) /* = Physical address 0x48200000 */ |
194 | #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */ | 194 | #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */ |
195 | static unsigned int netcard_portlist[] __used __initdata = {CIRRUS_DEFAULT_BASE, 0}; | 195 | static unsigned int netcard_portlist[] __used __initdata = {CIRRUS_DEFAULT_BASE, 0}; |
diff --git a/drivers/net/irda/ep7211-sir.c b/drivers/net/irda/ep7211-sir.c index 831572429bb9..f83c5b881d2d 100644 --- a/drivers/net/irda/ep7211-sir.c +++ b/drivers/net/irda/ep7211-sir.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <net/irda/irda_device.h> | 14 | #include <net/irda/irda_device.h> |
15 | 15 | ||
16 | #include <asm/io.h> | 16 | #include <asm/io.h> |
17 | #include <asm/hardware.h> | 17 | #include <mach/hardware.h> |
18 | 18 | ||
19 | #include "sir-dev.h" | 19 | #include "sir-dev.h" |
20 | 20 | ||
diff --git a/drivers/net/irda/pxaficp_ir.c b/drivers/net/irda/pxaficp_ir.c index f76b0b6c277d..4aa61a1a3d55 100644 --- a/drivers/net/irda/pxaficp_ir.c +++ b/drivers/net/irda/pxaficp_ir.c | |||
@@ -23,8 +23,8 @@ | |||
23 | #include <net/irda/irda_device.h> | 23 | #include <net/irda/irda_device.h> |
24 | 24 | ||
25 | #include <asm/dma.h> | 25 | #include <asm/dma.h> |
26 | #include <asm/arch/irda.h> | 26 | #include <mach/irda.h> |
27 | #include <asm/arch/pxa-regs.h> | 27 | #include <mach/pxa-regs.h> |
28 | 28 | ||
29 | #define IrSR_RXPL_NEG_IS_ZERO (1<<4) | 29 | #define IrSR_RXPL_NEG_IS_ZERO (1<<4) |
30 | #define IrSR_RXPL_POS_IS_ZERO 0x0 | 30 | #define IrSR_RXPL_POS_IS_ZERO 0x0 |
diff --git a/drivers/net/irda/sa1100_ir.c b/drivers/net/irda/sa1100_ir.c index 1bc8518f9197..a95188948de7 100644 --- a/drivers/net/irda/sa1100_ir.c +++ b/drivers/net/irda/sa1100_ir.c | |||
@@ -37,7 +37,7 @@ | |||
37 | 37 | ||
38 | #include <asm/irq.h> | 38 | #include <asm/irq.h> |
39 | #include <asm/dma.h> | 39 | #include <asm/dma.h> |
40 | #include <asm/hardware.h> | 40 | #include <mach/hardware.h> |
41 | #include <asm/mach/irda.h> | 41 | #include <asm/mach/irda.h> |
42 | 42 | ||
43 | static int power_level = 3; | 43 | static int power_level = 3; |
diff --git a/drivers/net/ixp2000/ixp2400-msf.c b/drivers/net/ixp2000/ixp2400-msf.c index 9ec38eebfb56..f5ffd7e05d26 100644 --- a/drivers/net/ixp2000/ixp2400-msf.c +++ b/drivers/net/ixp2000/ixp2400-msf.c | |||
@@ -13,8 +13,8 @@ | |||
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <asm/hardware.h> | 16 | #include <mach/hardware.h> |
17 | #include <asm/arch/ixp2000-regs.h> | 17 | #include <mach/ixp2000-regs.h> |
18 | #include <asm/delay.h> | 18 | #include <asm/delay.h> |
19 | #include <asm/io.h> | 19 | #include <asm/io.h> |
20 | #include "ixp2400-msf.h" | 20 | #include "ixp2400-msf.h" |
diff --git a/drivers/net/ixp2000/ixpdev.c b/drivers/net/ixp2000/ixpdev.c index 7111c65f0b30..7b70c66504a0 100644 --- a/drivers/net/ixp2000/ixpdev.c +++ b/drivers/net/ixp2000/ixpdev.c | |||
@@ -16,7 +16,6 @@ | |||
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/moduleparam.h> | 17 | #include <linux/moduleparam.h> |
18 | #include <asm/hardware/uengine.h> | 18 | #include <asm/hardware/uengine.h> |
19 | #include <asm/mach-types.h> | ||
20 | #include <asm/io.h> | 19 | #include <asm/io.h> |
21 | #include "ixp2400_rx.ucode" | 20 | #include "ixp2400_rx.ucode" |
22 | #include "ixp2400_tx.ucode" | 21 | #include "ixp2400_tx.ucode" |
diff --git a/drivers/net/macb.c b/drivers/net/macb.c index daba82bbcb56..84c77f1f9a5c 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c | |||
@@ -21,8 +21,8 @@ | |||
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/phy.h> | 22 | #include <linux/phy.h> |
23 | 23 | ||
24 | #include <asm/arch/board.h> | 24 | #include <mach/board.h> |
25 | #include <asm/arch/cpu.h> | 25 | #include <mach/cpu.h> |
26 | 26 | ||
27 | #include "macb.h" | 27 | #include "macb.h" |
28 | 28 | ||
diff --git a/drivers/net/netx-eth.c b/drivers/net/netx-eth.c index dc442e370850..3f9af759cb90 100644 --- a/drivers/net/netx-eth.c +++ b/drivers/net/netx-eth.c | |||
@@ -29,12 +29,11 @@ | |||
29 | #include <linux/mii.h> | 29 | #include <linux/mii.h> |
30 | 30 | ||
31 | #include <asm/io.h> | 31 | #include <asm/io.h> |
32 | #include <asm/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <asm/arch/hardware.h> | 33 | #include <mach/netx-regs.h> |
34 | #include <asm/arch/netx-regs.h> | 34 | #include <mach/pfifo.h> |
35 | #include <asm/arch/pfifo.h> | 35 | #include <mach/xc.h> |
36 | #include <asm/arch/xc.h> | 36 | #include <mach/eth.h> |
37 | #include <asm/arch/eth.h> | ||
38 | 37 | ||
39 | /* XC Fifo Offsets */ | 38 | /* XC Fifo Offsets */ |
40 | #define EMPTY_PTR_FIFO(xcno) (0 + ((xcno) << 3)) /* Index of the empty pointer FIFO */ | 39 | #define EMPTY_PTR_FIFO(xcno) (0 + ((xcno) << 3)) /* Index of the empty pointer FIFO */ |
diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h index 76c17c28fab4..2abfc2845198 100644 --- a/drivers/net/smc911x.h +++ b/drivers/net/smc911x.h | |||
@@ -222,7 +222,7 @@ static inline void SMC_outsl(struct smc911x_local *lp, int reg, | |||
222 | */ | 222 | */ |
223 | #include <linux/dma-mapping.h> | 223 | #include <linux/dma-mapping.h> |
224 | #include <asm/dma.h> | 224 | #include <asm/dma.h> |
225 | #include <asm/arch/pxa-regs.h> | 225 | #include <mach/pxa-regs.h> |
226 | 226 | ||
227 | static dma_addr_t rx_dmabuf, tx_dmabuf; | 227 | static dma_addr_t rx_dmabuf, tx_dmabuf; |
228 | static int rx_dmalen, tx_dmalen; | 228 | static int rx_dmalen, tx_dmalen; |
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h index 22209b6f1405..997e7f1d5c6e 100644 --- a/drivers/net/smc91x.h +++ b/drivers/net/smc91x.h | |||
@@ -187,7 +187,7 @@ static inline void SMC_outw(u16 val, void __iomem *ioaddr, int reg) | |||
187 | 187 | ||
188 | #elif defined(CONFIG_SA1100_ASSABET) | 188 | #elif defined(CONFIG_SA1100_ASSABET) |
189 | 189 | ||
190 | #include <asm/arch/neponset.h> | 190 | #include <mach/neponset.h> |
191 | 191 | ||
192 | /* We can only do 8-bit reads and writes in the static memory space. */ | 192 | /* We can only do 8-bit reads and writes in the static memory space. */ |
193 | #define SMC_CAN_USE_8BIT 1 | 193 | #define SMC_CAN_USE_8BIT 1 |
@@ -339,7 +339,7 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg) | |||
339 | * IOBARRIER on entry to their ISR. | 339 | * IOBARRIER on entry to their ISR. |
340 | */ | 340 | */ |
341 | 341 | ||
342 | #include <asm/arch/constants.h> /* IOBARRIER_VIRT */ | 342 | #include <mach/constants.h> /* IOBARRIER_VIRT */ |
343 | 343 | ||
344 | #define SMC_CAN_USE_8BIT 0 | 344 | #define SMC_CAN_USE_8BIT 0 |
345 | #define SMC_CAN_USE_16BIT 1 | 345 | #define SMC_CAN_USE_16BIT 1 |
@@ -525,7 +525,7 @@ struct smc_local { | |||
525 | */ | 525 | */ |
526 | #include <linux/dma-mapping.h> | 526 | #include <linux/dma-mapping.h> |
527 | #include <asm/dma.h> | 527 | #include <asm/dma.h> |
528 | #include <asm/arch/pxa-regs.h> | 528 | #include <mach/pxa-regs.h> |
529 | 529 | ||
530 | #ifdef SMC_insl | 530 | #ifdef SMC_insl |
531 | #undef SMC_insl | 531 | #undef SMC_insl |
diff --git a/drivers/net/stnic.c b/drivers/net/stnic.c index b65be5d70fec..2ed0bd596815 100644 --- a/drivers/net/stnic.c +++ b/drivers/net/stnic.c | |||
@@ -19,7 +19,7 @@ | |||
19 | 19 | ||
20 | #include <asm/system.h> | 20 | #include <asm/system.h> |
21 | #include <asm/io.h> | 21 | #include <asm/io.h> |
22 | #include <asm/se.h> | 22 | #include <mach-se/mach/se.h> |
23 | #include <asm/machvec.h> | 23 | #include <asm/machvec.h> |
24 | #ifdef CONFIG_SH_STANDARD_BIOS | 24 | #ifdef CONFIG_SH_STANDARD_BIOS |
25 | #include <asm/sh_bios.h> | 25 | #include <asm/sh_bios.h> |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 26aa37aa531f..d2439b85a790 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -7687,21 +7687,11 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
7687 | */ | 7687 | */ |
7688 | static int tg3_init_hw(struct tg3 *tp, int reset_phy) | 7688 | static int tg3_init_hw(struct tg3 *tp, int reset_phy) |
7689 | { | 7689 | { |
7690 | int err; | ||
7691 | |||
7692 | /* Force the chip into D0. */ | ||
7693 | err = tg3_set_power_state(tp, PCI_D0); | ||
7694 | if (err) | ||
7695 | goto out; | ||
7696 | |||
7697 | tg3_switch_clocks(tp); | 7690 | tg3_switch_clocks(tp); |
7698 | 7691 | ||
7699 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); | 7692 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); |
7700 | 7693 | ||
7701 | err = tg3_reset_hw(tp, reset_phy); | 7694 | return tg3_reset_hw(tp, reset_phy); |
7702 | |||
7703 | out: | ||
7704 | return err; | ||
7705 | } | 7695 | } |
7706 | 7696 | ||
7707 | #define TG3_STAT_ADD32(PSTAT, REG) \ | 7697 | #define TG3_STAT_ADD32(PSTAT, REG) \ |
@@ -8016,13 +8006,11 @@ static int tg3_open(struct net_device *dev) | |||
8016 | 8006 | ||
8017 | netif_carrier_off(tp->dev); | 8007 | netif_carrier_off(tp->dev); |
8018 | 8008 | ||
8019 | tg3_full_lock(tp, 0); | ||
8020 | |||
8021 | err = tg3_set_power_state(tp, PCI_D0); | 8009 | err = tg3_set_power_state(tp, PCI_D0); |
8022 | if (err) { | 8010 | if (err) |
8023 | tg3_full_unlock(tp); | ||
8024 | return err; | 8011 | return err; |
8025 | } | 8012 | |
8013 | tg3_full_lock(tp, 0); | ||
8026 | 8014 | ||
8027 | tg3_disable_ints(tp); | 8015 | tg3_disable_ints(tp); |
8028 | tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE; | 8016 | tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE; |
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig index 91fc2c765d90..4c7ff61a1a9c 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig | |||
@@ -649,6 +649,7 @@ config RTL8187 | |||
649 | Trendnet TEW-424UB | 649 | Trendnet TEW-424UB |
650 | ASUS P5B Deluxe | 650 | ASUS P5B Deluxe |
651 | Toshiba Satellite Pro series of laptops | 651 | Toshiba Satellite Pro series of laptops |
652 | Asus Wireless Link | ||
652 | 653 | ||
653 | Thanks to Realtek for their support! | 654 | Thanks to Realtek for their support! |
654 | 655 | ||
diff --git a/drivers/net/wireless/ath5k/ath5k.h b/drivers/net/wireless/ath5k/ath5k.h index ba35c30d203c..9102eea3c8bf 100644 --- a/drivers/net/wireless/ath5k/ath5k.h +++ b/drivers/net/wireless/ath5k/ath5k.h | |||
@@ -186,11 +186,13 @@ struct ath5k_srev_name { | |||
186 | #define AR5K_SREV_RAD_2111 0x20 | 186 | #define AR5K_SREV_RAD_2111 0x20 |
187 | #define AR5K_SREV_RAD_5112 0x30 | 187 | #define AR5K_SREV_RAD_5112 0x30 |
188 | #define AR5K_SREV_RAD_5112A 0x35 | 188 | #define AR5K_SREV_RAD_5112A 0x35 |
189 | #define AR5K_SREV_RAD_5112B 0x36 | ||
189 | #define AR5K_SREV_RAD_2112 0x40 | 190 | #define AR5K_SREV_RAD_2112 0x40 |
190 | #define AR5K_SREV_RAD_2112A 0x45 | 191 | #define AR5K_SREV_RAD_2112A 0x45 |
191 | #define AR5K_SREV_RAD_SC0 0x56 /* Found on 2413/2414 */ | 192 | #define AR5K_SREV_RAD_2112B 0x46 |
192 | #define AR5K_SREV_RAD_SC1 0x63 /* Found on 5413/5414 */ | 193 | #define AR5K_SREV_RAD_SC0 0x50 /* Found on 2413/2414 */ |
193 | #define AR5K_SREV_RAD_SC2 0xa2 /* Found on 2424-5/5424 */ | 194 | #define AR5K_SREV_RAD_SC1 0x60 /* Found on 5413/5414 */ |
195 | #define AR5K_SREV_RAD_SC2 0xa0 /* Found on 2424-5/5424 */ | ||
194 | #define AR5K_SREV_RAD_5133 0xc0 /* MIMO found on 5418 */ | 196 | #define AR5K_SREV_RAD_5133 0xc0 /* MIMO found on 5418 */ |
195 | 197 | ||
196 | /* IEEE defs */ | 198 | /* IEEE defs */ |
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index ff3fad794b61..ebf19bc11f5b 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c | |||
@@ -2170,6 +2170,7 @@ ath5k_beacon_config(struct ath5k_softc *sc) | |||
2170 | 2170 | ||
2171 | ath5k_hw_set_intr(ah, 0); | 2171 | ath5k_hw_set_intr(ah, 0); |
2172 | sc->bmisscount = 0; | 2172 | sc->bmisscount = 0; |
2173 | sc->imask &= ~(AR5K_INT_BMISS | AR5K_INT_SWBA); | ||
2173 | 2174 | ||
2174 | if (sc->opmode == IEEE80211_IF_TYPE_STA) { | 2175 | if (sc->opmode == IEEE80211_IF_TYPE_STA) { |
2175 | sc->imask |= AR5K_INT_BMISS; | 2176 | sc->imask |= AR5K_INT_BMISS; |
diff --git a/drivers/net/wireless/ath5k/debug.c b/drivers/net/wireless/ath5k/debug.c index 41d5fa34b544..6fa6c8e04ff0 100644 --- a/drivers/net/wireless/ath5k/debug.c +++ b/drivers/net/wireless/ath5k/debug.c | |||
@@ -129,7 +129,7 @@ static struct reg regs[] = { | |||
129 | REG_STRUCT_INIT(AR5K_CPC1), | 129 | REG_STRUCT_INIT(AR5K_CPC1), |
130 | REG_STRUCT_INIT(AR5K_CPC2), | 130 | REG_STRUCT_INIT(AR5K_CPC2), |
131 | REG_STRUCT_INIT(AR5K_CPC3), | 131 | REG_STRUCT_INIT(AR5K_CPC3), |
132 | REG_STRUCT_INIT(AR5K_CPCORN), | 132 | REG_STRUCT_INIT(AR5K_CPCOVF), |
133 | REG_STRUCT_INIT(AR5K_RESET_CTL), | 133 | REG_STRUCT_INIT(AR5K_RESET_CTL), |
134 | REG_STRUCT_INIT(AR5K_SLEEP_CTL), | 134 | REG_STRUCT_INIT(AR5K_SLEEP_CTL), |
135 | REG_STRUCT_INIT(AR5K_INTPEND), | 135 | REG_STRUCT_INIT(AR5K_INTPEND), |
diff --git a/drivers/net/wireless/ath5k/debug.h b/drivers/net/wireless/ath5k/debug.h index 2cf8d18b10e3..ffc529393306 100644 --- a/drivers/net/wireless/ath5k/debug.h +++ b/drivers/net/wireless/ath5k/debug.h | |||
@@ -63,7 +63,6 @@ | |||
63 | 63 | ||
64 | struct ath5k_softc; | 64 | struct ath5k_softc; |
65 | struct ath5k_hw; | 65 | struct ath5k_hw; |
66 | struct ieee80211_hw_mode; | ||
67 | struct sk_buff; | 66 | struct sk_buff; |
68 | struct ath5k_buf; | 67 | struct ath5k_buf; |
69 | 68 | ||
diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c index 7ca87a557312..ad1a5b422c8c 100644 --- a/drivers/net/wireless/ath5k/hw.c +++ b/drivers/net/wireless/ath5k/hw.c | |||
@@ -139,6 +139,8 @@ static int ath5k_hw_post(struct ath5k_hw *ah) | |||
139 | for (c = 0; c < 2; c++) { | 139 | for (c = 0; c < 2; c++) { |
140 | 140 | ||
141 | cur_reg = regs[c]; | 141 | cur_reg = regs[c]; |
142 | |||
143 | /* Save previous value */ | ||
142 | init_val = ath5k_hw_reg_read(ah, cur_reg); | 144 | init_val = ath5k_hw_reg_read(ah, cur_reg); |
143 | 145 | ||
144 | for (i = 0; i < 256; i++) { | 146 | for (i = 0; i < 256; i++) { |
@@ -170,6 +172,10 @@ static int ath5k_hw_post(struct ath5k_hw *ah) | |||
170 | var_pattern = 0x003b080f; | 172 | var_pattern = 0x003b080f; |
171 | ath5k_hw_reg_write(ah, var_pattern, cur_reg); | 173 | ath5k_hw_reg_write(ah, var_pattern, cur_reg); |
172 | } | 174 | } |
175 | |||
176 | /* Restore previous value */ | ||
177 | ath5k_hw_reg_write(ah, init_val, cur_reg); | ||
178 | |||
173 | } | 179 | } |
174 | 180 | ||
175 | return 0; | 181 | return 0; |
@@ -287,67 +293,42 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version) | |||
287 | /* Identify the radio chip*/ | 293 | /* Identify the radio chip*/ |
288 | if (ah->ah_version == AR5K_AR5210) { | 294 | if (ah->ah_version == AR5K_AR5210) { |
289 | ah->ah_radio = AR5K_RF5110; | 295 | ah->ah_radio = AR5K_RF5110; |
296 | /* | ||
297 | * Register returns 0x0/0x04 for radio revision | ||
298 | * so ath5k_hw_radio_revision doesn't parse the value | ||
299 | * correctly. For now we are based on mac's srev to | ||
300 | * identify RF2425 radio. | ||
301 | */ | ||
302 | } else if (srev == AR5K_SREV_VER_AR2425) { | ||
303 | ah->ah_radio = AR5K_RF2425; | ||
304 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF2425; | ||
290 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5112) { | 305 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5112) { |
291 | ah->ah_radio = AR5K_RF5111; | 306 | ah->ah_radio = AR5K_RF5111; |
292 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5111; | 307 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5111; |
293 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC0) { | 308 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC0) { |
294 | |||
295 | ah->ah_radio = AR5K_RF5112; | 309 | ah->ah_radio = AR5K_RF5112; |
296 | 310 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112; | |
297 | if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5112A) { | ||
298 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112; | ||
299 | } else { | ||
300 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; | ||
301 | } | ||
302 | |||
303 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC1) { | 311 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC1) { |
304 | ah->ah_radio = AR5K_RF2413; | 312 | ah->ah_radio = AR5K_RF2413; |
305 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; | 313 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF2413; |
306 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC2) { | 314 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC2) { |
307 | ah->ah_radio = AR5K_RF5413; | 315 | ah->ah_radio = AR5K_RF5413; |
308 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; | 316 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5413; |
309 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5133) { | 317 | } else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5133) { |
310 | |||
311 | /* AR5424 */ | 318 | /* AR5424 */ |
312 | if (srev >= AR5K_SREV_VER_AR5424) { | 319 | if (srev >= AR5K_SREV_VER_AR5424) { |
313 | ah->ah_radio = AR5K_RF5413; | 320 | ah->ah_radio = AR5K_RF5413; |
314 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5424; | 321 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5413; |
315 | /* AR2424 */ | 322 | /* AR2424 */ |
316 | } else { | 323 | } else { |
317 | ah->ah_radio = AR5K_RF2413; /* For testing */ | 324 | ah->ah_radio = AR5K_RF2413; /* For testing */ |
318 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; | 325 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF2413; |
319 | } | 326 | } |
320 | |||
321 | /* | ||
322 | * Register returns 0x4 for radio revision | ||
323 | * so ath5k_hw_radio_revision doesn't parse the value | ||
324 | * correctly. For now we are based on mac's srev to | ||
325 | * identify RF2425 radio. | ||
326 | */ | ||
327 | } else if (srev == AR5K_SREV_VER_AR2425) { | ||
328 | ah->ah_radio = AR5K_RF2425; | ||
329 | ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112; | ||
330 | } | 327 | } |
331 | |||
332 | ah->ah_phy = AR5K_PHY(0); | 328 | ah->ah_phy = AR5K_PHY(0); |
333 | 329 | ||
334 | /* | 330 | /* |
335 | * Identify AR5212-based PCI-E cards | 331 | * Write PCI-E power save settings |
336 | * And write some initial settings. | ||
337 | * | ||
338 | * (doing a "strings" on ndis driver | ||
339 | * -ar5211.sys- reveals the following | ||
340 | * pci-e related functions: | ||
341 | * | ||
342 | * pcieClockReq | ||
343 | * pcieRxErrNotify | ||
344 | * pcieL1SKPEnable | ||
345 | * pcieAspm | ||
346 | * pcieDisableAspmOnRfWake | ||
347 | * pciePowerSaveEnable | ||
348 | * | ||
349 | * I guess these point to ClockReq but | ||
350 | * i'm not sure.) | ||
351 | */ | 332 | */ |
352 | if ((ah->ah_version == AR5K_AR5212) && (pdev->is_pcie)) { | 333 | if ((ah->ah_version == AR5K_AR5212) && (pdev->is_pcie)) { |
353 | ath5k_hw_reg_write(ah, 0x9248fc00, 0x4080); | 334 | ath5k_hw_reg_write(ah, 0x9248fc00, 0x4080); |
@@ -369,10 +350,15 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version) | |||
369 | if (ret) | 350 | if (ret) |
370 | goto err_free; | 351 | goto err_free; |
371 | 352 | ||
353 | /* Write AR5K_PCICFG_UNK on 2112B and later chips */ | ||
354 | if (ah->ah_radio_5ghz_revision > AR5K_SREV_RAD_2112B || | ||
355 | srev > AR5K_SREV_VER_AR2413) { | ||
356 | ath5k_hw_reg_write(ah, AR5K_PCICFG_UNK, AR5K_PCICFG); | ||
357 | } | ||
358 | |||
372 | /* | 359 | /* |
373 | * Get card capabilities, values, ... | 360 | * Get card capabilities, values, ... |
374 | */ | 361 | */ |
375 | |||
376 | ret = ath5k_eeprom_init(ah); | 362 | ret = ath5k_eeprom_init(ah); |
377 | if (ret) { | 363 | if (ret) { |
378 | ATH5K_ERR(sc, "unable to init EEPROM\n"); | 364 | ATH5K_ERR(sc, "unable to init EEPROM\n"); |
@@ -843,27 +829,41 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
843 | * Write some more initial register settings | 829 | * Write some more initial register settings |
844 | */ | 830 | */ |
845 | if (ah->ah_version == AR5K_AR5212) { | 831 | if (ah->ah_version == AR5K_AR5212) { |
846 | ath5k_hw_reg_write(ah, 0x0002a002, AR5K_PHY(11)); | 832 | ath5k_hw_reg_write(ah, 0x0002a002, 0x982c); |
847 | 833 | ||
848 | if (channel->hw_value == CHANNEL_G) | 834 | if (channel->hw_value == CHANNEL_G) |
849 | if (ah->ah_mac_srev < AR5K_SREV_VER_AR2413) | 835 | if (ah->ah_mac_srev < AR5K_SREV_VER_AR2413) |
850 | ath5k_hw_reg_write(ah, 0x00f80d80, | 836 | ath5k_hw_reg_write(ah, 0x00f80d80, |
851 | AR5K_PHY(83)); | 837 | 0x994c); |
852 | else if (ah->ah_mac_srev < AR5K_SREV_VER_AR2424) | 838 | else if (ah->ah_mac_srev < AR5K_SREV_VER_AR2424) |
853 | ath5k_hw_reg_write(ah, 0x00380140, | 839 | ath5k_hw_reg_write(ah, 0x00380140, |
854 | AR5K_PHY(83)); | 840 | 0x994c); |
855 | else if (ah->ah_mac_srev < AR5K_SREV_VER_AR2425) | 841 | else if (ah->ah_mac_srev < AR5K_SREV_VER_AR2425) |
856 | ath5k_hw_reg_write(ah, 0x00fc0ec0, | 842 | ath5k_hw_reg_write(ah, 0x00fc0ec0, |
857 | AR5K_PHY(83)); | 843 | 0x994c); |
858 | else /* 2425 */ | 844 | else /* 2425 */ |
859 | ath5k_hw_reg_write(ah, 0x00fc0fc0, | 845 | ath5k_hw_reg_write(ah, 0x00fc0fc0, |
860 | AR5K_PHY(83)); | 846 | 0x994c); |
861 | else | 847 | else |
862 | ath5k_hw_reg_write(ah, 0x00000000, | 848 | ath5k_hw_reg_write(ah, 0x00000000, 0x994c); |
863 | AR5K_PHY(83)); | 849 | |
864 | 850 | /* Some bits are disabled here, we know nothing about | |
865 | ath5k_hw_reg_write(ah, 0x000009b5, 0xa228); | 851 | * register 0xa228 yet, most of the times this ends up |
866 | ath5k_hw_reg_write(ah, 0x0000000f, 0x8060); | 852 | * with a value 0x9b5 -haven't seen any dump with |
853 | * a different value- */ | ||
854 | /* Got this from decompiling binary HAL */ | ||
855 | data = ath5k_hw_reg_read(ah, 0xa228); | ||
856 | data &= 0xfffffdff; | ||
857 | ath5k_hw_reg_write(ah, data, 0xa228); | ||
858 | |||
859 | data = ath5k_hw_reg_read(ah, 0xa228); | ||
860 | data &= 0xfffe03ff; | ||
861 | ath5k_hw_reg_write(ah, data, 0xa228); | ||
862 | data = 0; | ||
863 | |||
864 | /* Just write 0x9b5 ? */ | ||
865 | /* ath5k_hw_reg_write(ah, 0x000009b5, 0xa228); */ | ||
866 | ath5k_hw_reg_write(ah, 0x0000000f, AR5K_SEQ_MASK); | ||
867 | ath5k_hw_reg_write(ah, 0x00000000, 0xa254); | 867 | ath5k_hw_reg_write(ah, 0x00000000, 0xa254); |
868 | ath5k_hw_reg_write(ah, 0x0000000e, AR5K_PHY_SCAL); | 868 | ath5k_hw_reg_write(ah, 0x0000000e, AR5K_PHY_SCAL); |
869 | } | 869 | } |
@@ -879,6 +879,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
879 | else | 879 | else |
880 | data = 0xffb80d20; | 880 | data = 0xffb80d20; |
881 | ath5k_hw_reg_write(ah, data, AR5K_PHY_FRAME_CTL); | 881 | ath5k_hw_reg_write(ah, data, AR5K_PHY_FRAME_CTL); |
882 | data = 0; | ||
882 | } | 883 | } |
883 | 884 | ||
884 | /* | 885 | /* |
@@ -898,7 +899,6 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
898 | 899 | ||
899 | /* | 900 | /* |
900 | * Write RF registers | 901 | * Write RF registers |
901 | * TODO:Does this work on 5211 (5111) ? | ||
902 | */ | 902 | */ |
903 | ret = ath5k_hw_rfregs(ah, channel, mode); | 903 | ret = ath5k_hw_rfregs(ah, channel, mode); |
904 | if (ret) | 904 | if (ret) |
@@ -935,7 +935,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
935 | return ret; | 935 | return ret; |
936 | 936 | ||
937 | /* Set antenna mode */ | 937 | /* Set antenna mode */ |
938 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x44), | 938 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_ANT_CTL, |
939 | ah->ah_antenna[ee_mode][0], 0xfffffc06); | 939 | ah->ah_antenna[ee_mode][0], 0xfffffc06); |
940 | 940 | ||
941 | /* | 941 | /* |
@@ -965,15 +965,15 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
965 | 965 | ||
966 | ath5k_hw_reg_write(ah, | 966 | ath5k_hw_reg_write(ah, |
967 | AR5K_PHY_NF_SVAL(ee->ee_noise_floor_thr[ee_mode]), | 967 | AR5K_PHY_NF_SVAL(ee->ee_noise_floor_thr[ee_mode]), |
968 | AR5K_PHY(0x5a)); | 968 | AR5K_PHY_NFTHRES); |
969 | 969 | ||
970 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x11), | 970 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_SETTLING, |
971 | (ee->ee_switch_settling[ee_mode] << 7) & 0x3f80, | 971 | (ee->ee_switch_settling[ee_mode] << 7) & 0x3f80, |
972 | 0xffffc07f); | 972 | 0xffffc07f); |
973 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x12), | 973 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_GAIN, |
974 | (ee->ee_ant_tx_rx[ee_mode] << 12) & 0x3f000, | 974 | (ee->ee_ant_tx_rx[ee_mode] << 12) & 0x3f000, |
975 | 0xfffc0fff); | 975 | 0xfffc0fff); |
976 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x14), | 976 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_DESIRED_SIZE, |
977 | (ee->ee_adc_desired_size[ee_mode] & 0x00ff) | | 977 | (ee->ee_adc_desired_size[ee_mode] & 0x00ff) | |
978 | ((ee->ee_pga_desired_size[ee_mode] << 8) & 0xff00), | 978 | ((ee->ee_pga_desired_size[ee_mode] << 8) & 0xff00), |
979 | 0xffff0000); | 979 | 0xffff0000); |
@@ -982,13 +982,13 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
982 | (ee->ee_tx_end2xpa_disable[ee_mode] << 24) | | 982 | (ee->ee_tx_end2xpa_disable[ee_mode] << 24) | |
983 | (ee->ee_tx_end2xpa_disable[ee_mode] << 16) | | 983 | (ee->ee_tx_end2xpa_disable[ee_mode] << 16) | |
984 | (ee->ee_tx_frm2xpa_enable[ee_mode] << 8) | | 984 | (ee->ee_tx_frm2xpa_enable[ee_mode] << 8) | |
985 | (ee->ee_tx_frm2xpa_enable[ee_mode]), AR5K_PHY(0x0d)); | 985 | (ee->ee_tx_frm2xpa_enable[ee_mode]), AR5K_PHY_RF_CTL4); |
986 | 986 | ||
987 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x0a), | 987 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_RF_CTL3, |
988 | ee->ee_tx_end2xlna_enable[ee_mode] << 8, 0xffff00ff); | 988 | ee->ee_tx_end2xlna_enable[ee_mode] << 8, 0xffff00ff); |
989 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x19), | 989 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_NF, |
990 | (ee->ee_thr_62[ee_mode] << 12) & 0x7f000, 0xfff80fff); | 990 | (ee->ee_thr_62[ee_mode] << 12) & 0x7f000, 0xfff80fff); |
991 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x49), 4, 0xffffff01); | 991 | AR5K_REG_MASKED_BITS(ah, AR5K_PHY_OFDM_SELFCORR, 4, 0xffffff01); |
992 | 992 | ||
993 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, | 993 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, |
994 | AR5K_PHY_IQ_CORR_ENABLE | | 994 | AR5K_PHY_IQ_CORR_ENABLE | |
@@ -1063,7 +1063,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
1063 | ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT); | 1063 | ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT); |
1064 | 1064 | ||
1065 | /* | 1065 | /* |
1066 | * 5111/5112 Specific | 1066 | * On 5211+ read activation -> rx delay |
1067 | * and use it. | ||
1067 | */ | 1068 | */ |
1068 | if (ah->ah_version != AR5K_AR5210) { | 1069 | if (ah->ah_version != AR5K_AR5210) { |
1069 | data = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) & | 1070 | data = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) & |
@@ -1071,40 +1072,77 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
1071 | data = (channel->hw_value & CHANNEL_CCK) ? | 1072 | data = (channel->hw_value & CHANNEL_CCK) ? |
1072 | ((data << 2) / 22) : (data / 10); | 1073 | ((data << 2) / 22) : (data / 10); |
1073 | 1074 | ||
1074 | udelay(100 + data); | 1075 | udelay(100 + (2 * data)); |
1076 | data = 0; | ||
1075 | } else { | 1077 | } else { |
1076 | mdelay(1); | 1078 | mdelay(1); |
1077 | } | 1079 | } |
1078 | 1080 | ||
1079 | /* | 1081 | /* |
1080 | * Enable calibration and wait until completion | 1082 | * Perform ADC test (?) |
1083 | */ | ||
1084 | data = ath5k_hw_reg_read(ah, AR5K_PHY_TST1); | ||
1085 | ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1); | ||
1086 | for (i = 0; i <= 20; i++) { | ||
1087 | if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10)) | ||
1088 | break; | ||
1089 | udelay(200); | ||
1090 | } | ||
1091 | ath5k_hw_reg_write(ah, data, AR5K_PHY_TST1); | ||
1092 | data = 0; | ||
1093 | |||
1094 | /* | ||
1095 | * Start automatic gain calibration | ||
1096 | * | ||
1097 | * During AGC calibration RX path is re-routed to | ||
1098 | * a signal detector so we don't receive anything. | ||
1099 | * | ||
1100 | * This method is used to calibrate some static offsets | ||
1101 | * used together with on-the fly I/Q calibration (the | ||
1102 | * one performed via ath5k_hw_phy_calibrate), that doesn't | ||
1103 | * interrupt rx path. | ||
1104 | * | ||
1105 | * If we are in a noisy environment AGC calibration may time | ||
1106 | * out. | ||
1081 | */ | 1107 | */ |
1082 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL, | 1108 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL, |
1083 | AR5K_PHY_AGCCTL_CAL); | 1109 | AR5K_PHY_AGCCTL_CAL); |
1084 | 1110 | ||
1111 | /* At the same time start I/Q calibration for QAM constellation | ||
1112 | * -no need for CCK- */ | ||
1113 | ah->ah_calibration = false; | ||
1114 | if (!(mode == AR5K_MODE_11B)) { | ||
1115 | ah->ah_calibration = true; | ||
1116 | AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, | ||
1117 | AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15); | ||
1118 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, | ||
1119 | AR5K_PHY_IQ_RUN); | ||
1120 | } | ||
1121 | |||
1122 | /* Wait for gain calibration to finish (we check for I/Q calibration | ||
1123 | * during ath5k_phy_calibrate) */ | ||
1085 | if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL, | 1124 | if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL, |
1086 | AR5K_PHY_AGCCTL_CAL, 0, false)) { | 1125 | AR5K_PHY_AGCCTL_CAL, 0, false)) { |
1087 | ATH5K_ERR(ah->ah_sc, "calibration timeout (%uMHz)\n", | 1126 | ATH5K_ERR(ah->ah_sc, "gain calibration timeout (%uMHz)\n", |
1088 | channel->center_freq); | 1127 | channel->center_freq); |
1089 | return -EAGAIN; | 1128 | return -EAGAIN; |
1090 | } | 1129 | } |
1091 | 1130 | ||
1131 | /* | ||
1132 | * Start noise floor calibration | ||
1133 | * | ||
1134 | * If we run NF calibration before AGC, it always times out. | ||
1135 | * Binary HAL starts NF and AGC calibration at the same time | ||
1136 | * and only waits for AGC to finish. I believe that's wrong because | ||
1137 | * during NF calibration, rx path is also routed to a detector, so if | ||
1138 | * it doesn't finish we won't have RX. | ||
1139 | * | ||
1140 | * XXX: Find an interval that's OK for all cards... | ||
1141 | */ | ||
1092 | ret = ath5k_hw_noise_floor_calibration(ah, channel->center_freq); | 1142 | ret = ath5k_hw_noise_floor_calibration(ah, channel->center_freq); |
1093 | if (ret) | 1143 | if (ret) |
1094 | return ret; | 1144 | return ret; |
1095 | 1145 | ||
1096 | ah->ah_calibration = false; | ||
1097 | |||
1098 | /* A and G modes can use QAM modulation which requires enabling | ||
1099 | * I and Q calibration. Don't bother in B mode. */ | ||
1100 | if (!(mode == AR5K_MODE_11B)) { | ||
1101 | ah->ah_calibration = true; | ||
1102 | AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, | ||
1103 | AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15); | ||
1104 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, | ||
1105 | AR5K_PHY_IQ_RUN); | ||
1106 | } | ||
1107 | |||
1108 | /* | 1146 | /* |
1109 | * Reset queues and start beacon timers at the end of the reset routine | 1147 | * Reset queues and start beacon timers at the end of the reset routine |
1110 | */ | 1148 | */ |
@@ -1154,6 +1192,12 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode, | |||
1154 | ath5k_hw_reg_write(ah, AR5K_PHY_SCLOCK_32MHZ, AR5K_PHY_SCLOCK); | 1192 | ath5k_hw_reg_write(ah, AR5K_PHY_SCLOCK_32MHZ, AR5K_PHY_SCLOCK); |
1155 | ath5k_hw_reg_write(ah, AR5K_PHY_SDELAY_32MHZ, AR5K_PHY_SDELAY); | 1193 | ath5k_hw_reg_write(ah, AR5K_PHY_SDELAY_32MHZ, AR5K_PHY_SDELAY); |
1156 | ath5k_hw_reg_write(ah, ah->ah_phy_spending, AR5K_PHY_SPENDING); | 1194 | ath5k_hw_reg_write(ah, ah->ah_phy_spending, AR5K_PHY_SPENDING); |
1195 | |||
1196 | data = ath5k_hw_reg_read(ah, AR5K_USEC_5211) & 0xffffc07f ; | ||
1197 | data |= (ah->ah_phy_spending == AR5K_PHY_SPENDING_18) ? | ||
1198 | 0x00000f80 : 0x00001380 ; | ||
1199 | ath5k_hw_reg_write(ah, data, AR5K_USEC_5211); | ||
1200 | data = 0; | ||
1157 | } | 1201 | } |
1158 | 1202 | ||
1159 | if (ah->ah_version == AR5K_AR5212) { | 1203 | if (ah->ah_version == AR5K_AR5212) { |
@@ -1226,7 +1270,7 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, | |||
1226 | bool set_chip, u16 sleep_duration) | 1270 | bool set_chip, u16 sleep_duration) |
1227 | { | 1271 | { |
1228 | unsigned int i; | 1272 | unsigned int i; |
1229 | u32 staid; | 1273 | u32 staid, data; |
1230 | 1274 | ||
1231 | ATH5K_TRACE(ah->ah_sc); | 1275 | ATH5K_TRACE(ah->ah_sc); |
1232 | staid = ath5k_hw_reg_read(ah, AR5K_STA_ID1); | 1276 | staid = ath5k_hw_reg_read(ah, AR5K_STA_ID1); |
@@ -1238,7 +1282,8 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, | |||
1238 | case AR5K_PM_NETWORK_SLEEP: | 1282 | case AR5K_PM_NETWORK_SLEEP: |
1239 | if (set_chip) | 1283 | if (set_chip) |
1240 | ath5k_hw_reg_write(ah, | 1284 | ath5k_hw_reg_write(ah, |
1241 | AR5K_SLEEP_CTL_SLE | sleep_duration, | 1285 | AR5K_SLEEP_CTL_SLE_ALLOW | |
1286 | sleep_duration, | ||
1242 | AR5K_SLEEP_CTL); | 1287 | AR5K_SLEEP_CTL); |
1243 | 1288 | ||
1244 | staid |= AR5K_STA_ID1_PWR_SV; | 1289 | staid |= AR5K_STA_ID1_PWR_SV; |
@@ -1253,13 +1298,24 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, | |||
1253 | break; | 1298 | break; |
1254 | 1299 | ||
1255 | case AR5K_PM_AWAKE: | 1300 | case AR5K_PM_AWAKE: |
1301 | |||
1302 | staid &= ~AR5K_STA_ID1_PWR_SV; | ||
1303 | |||
1256 | if (!set_chip) | 1304 | if (!set_chip) |
1257 | goto commit; | 1305 | goto commit; |
1258 | 1306 | ||
1259 | ath5k_hw_reg_write(ah, AR5K_SLEEP_CTL_SLE_WAKE, | 1307 | /* Preserve sleep duration */ |
1260 | AR5K_SLEEP_CTL); | 1308 | data = ath5k_hw_reg_read(ah, AR5K_SLEEP_CTL); |
1309 | if( data & 0xffc00000 ){ | ||
1310 | data = 0; | ||
1311 | } else { | ||
1312 | data = data & 0xfffcffff; | ||
1313 | } | ||
1314 | |||
1315 | ath5k_hw_reg_write(ah, data, AR5K_SLEEP_CTL); | ||
1316 | udelay(15); | ||
1261 | 1317 | ||
1262 | for (i = 5000; i > 0; i--) { | 1318 | for (i = 50; i > 0; i--) { |
1263 | /* Check if the chip did wake up */ | 1319 | /* Check if the chip did wake up */ |
1264 | if ((ath5k_hw_reg_read(ah, AR5K_PCICFG) & | 1320 | if ((ath5k_hw_reg_read(ah, AR5K_PCICFG) & |
1265 | AR5K_PCICFG_SPWR_DN) == 0) | 1321 | AR5K_PCICFG_SPWR_DN) == 0) |
@@ -1267,15 +1323,13 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode, | |||
1267 | 1323 | ||
1268 | /* Wait a bit and retry */ | 1324 | /* Wait a bit and retry */ |
1269 | udelay(200); | 1325 | udelay(200); |
1270 | ath5k_hw_reg_write(ah, AR5K_SLEEP_CTL_SLE_WAKE, | 1326 | ath5k_hw_reg_write(ah, data, AR5K_SLEEP_CTL); |
1271 | AR5K_SLEEP_CTL); | ||
1272 | } | 1327 | } |
1273 | 1328 | ||
1274 | /* Fail if the chip didn't wake up */ | 1329 | /* Fail if the chip didn't wake up */ |
1275 | if (i <= 0) | 1330 | if (i <= 0) |
1276 | return -EIO; | 1331 | return -EIO; |
1277 | 1332 | ||
1278 | staid &= ~AR5K_STA_ID1_PWR_SV; | ||
1279 | break; | 1333 | break; |
1280 | 1334 | ||
1281 | default: | 1335 | default: |
@@ -1304,6 +1358,7 @@ void ath5k_hw_start_rx(struct ath5k_hw *ah) | |||
1304 | { | 1358 | { |
1305 | ATH5K_TRACE(ah->ah_sc); | 1359 | ATH5K_TRACE(ah->ah_sc); |
1306 | ath5k_hw_reg_write(ah, AR5K_CR_RXE, AR5K_CR); | 1360 | ath5k_hw_reg_write(ah, AR5K_CR_RXE, AR5K_CR); |
1361 | ath5k_hw_reg_read(ah, AR5K_CR); | ||
1307 | } | 1362 | } |
1308 | 1363 | ||
1309 | /* | 1364 | /* |
@@ -1390,6 +1445,7 @@ int ath5k_hw_tx_start(struct ath5k_hw *ah, unsigned int queue) | |||
1390 | } | 1445 | } |
1391 | /* Start queue */ | 1446 | /* Start queue */ |
1392 | ath5k_hw_reg_write(ah, tx_queue, AR5K_CR); | 1447 | ath5k_hw_reg_write(ah, tx_queue, AR5K_CR); |
1448 | ath5k_hw_reg_read(ah, AR5K_CR); | ||
1393 | } else { | 1449 | } else { |
1394 | /* Return if queue is disabled */ | 1450 | /* Return if queue is disabled */ |
1395 | if (AR5K_REG_READ_Q(ah, AR5K_QCU_TXD, queue)) | 1451 | if (AR5K_REG_READ_Q(ah, AR5K_QCU_TXD, queue)) |
@@ -1687,6 +1743,7 @@ enum ath5k_int ath5k_hw_set_intr(struct ath5k_hw *ah, enum ath5k_int new_mask) | |||
1687 | * (they will be re-enabled afterwards). | 1743 | * (they will be re-enabled afterwards). |
1688 | */ | 1744 | */ |
1689 | ath5k_hw_reg_write(ah, AR5K_IER_DISABLE, AR5K_IER); | 1745 | ath5k_hw_reg_write(ah, AR5K_IER_DISABLE, AR5K_IER); |
1746 | ath5k_hw_reg_read(ah, AR5K_IER); | ||
1690 | 1747 | ||
1691 | old_mask = ah->ah_imr; | 1748 | old_mask = ah->ah_imr; |
1692 | 1749 | ||
@@ -3363,11 +3420,13 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue) | |||
3363 | ath5k_hw_reg_write(ah, ah->ah_turbo ? | 3420 | ath5k_hw_reg_write(ah, ah->ah_turbo ? |
3364 | AR5K_INIT_PROTO_TIME_CNTRL_TURBO : | 3421 | AR5K_INIT_PROTO_TIME_CNTRL_TURBO : |
3365 | AR5K_INIT_PROTO_TIME_CNTRL, AR5K_IFS1); | 3422 | AR5K_INIT_PROTO_TIME_CNTRL, AR5K_IFS1); |
3366 | /* Set PHY register 0x9844 (??) */ | 3423 | /* Set AR5K_PHY_SETTLING */ |
3367 | ath5k_hw_reg_write(ah, ah->ah_turbo ? | 3424 | ath5k_hw_reg_write(ah, ah->ah_turbo ? |
3368 | (ath5k_hw_reg_read(ah, AR5K_PHY(17)) & ~0x7F) | 0x38 : | 3425 | (ath5k_hw_reg_read(ah, AR5K_PHY_SETTLING) & ~0x7F) |
3369 | (ath5k_hw_reg_read(ah, AR5K_PHY(17)) & ~0x7F) | 0x1C, | 3426 | | 0x38 : |
3370 | AR5K_PHY(17)); | 3427 | (ath5k_hw_reg_read(ah, AR5K_PHY_SETTLING) & ~0x7F) |
3428 | | 0x1C, | ||
3429 | AR5K_PHY_SETTLING); | ||
3371 | /* Set Frame Control Register */ | 3430 | /* Set Frame Control Register */ |
3372 | ath5k_hw_reg_write(ah, ah->ah_turbo ? | 3431 | ath5k_hw_reg_write(ah, ah->ah_turbo ? |
3373 | (AR5K_PHY_FRAME_CTL_INI | AR5K_PHY_TURBO_MODE | | 3432 | (AR5K_PHY_FRAME_CTL_INI | AR5K_PHY_TURBO_MODE | |
@@ -3488,7 +3547,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue) | |||
3488 | if (tq->tqi_flags & AR5K_TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE) | 3547 | if (tq->tqi_flags & AR5K_TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE) |
3489 | AR5K_REG_ENABLE_BITS(ah, | 3548 | AR5K_REG_ENABLE_BITS(ah, |
3490 | AR5K_QUEUE_MISC(queue), | 3549 | AR5K_QUEUE_MISC(queue), |
3491 | AR5K_QCU_MISC_TXE); | 3550 | AR5K_QCU_MISC_RDY_VEOL_POLICY); |
3492 | } | 3551 | } |
3493 | 3552 | ||
3494 | if (tq->tqi_flags & AR5K_TXQ_FLAG_BACKOFF_DISABLE) | 3553 | if (tq->tqi_flags & AR5K_TXQ_FLAG_BACKOFF_DISABLE) |
diff --git a/drivers/net/wireless/ath5k/initvals.c b/drivers/net/wireless/ath5k/initvals.c index 04c84e9da89d..2806b21bf90b 100644 --- a/drivers/net/wireless/ath5k/initvals.c +++ b/drivers/net/wireless/ath5k/initvals.c | |||
@@ -489,7 +489,7 @@ static const struct ath5k_ini ar5212_ini[] = { | |||
489 | { AR5K_QUEUE_TXDP(9), 0x00000000 }, | 489 | { AR5K_QUEUE_TXDP(9), 0x00000000 }, |
490 | { AR5K_DCU_FP, 0x00000000 }, | 490 | { AR5K_DCU_FP, 0x00000000 }, |
491 | { AR5K_DCU_TXP, 0x00000000 }, | 491 | { AR5K_DCU_TXP, 0x00000000 }, |
492 | { AR5K_DCU_TX_FILTER, 0x00000000 }, | 492 | { AR5K_DCU_TX_FILTER_0_BASE, 0x00000000 }, |
493 | /* Unknown table */ | 493 | /* Unknown table */ |
494 | { 0x1078, 0x00000000 }, | 494 | { 0x1078, 0x00000000 }, |
495 | { 0x10b8, 0x00000000 }, | 495 | { 0x10b8, 0x00000000 }, |
@@ -679,7 +679,7 @@ static const struct ath5k_ini ar5212_ini[] = { | |||
679 | { AR5K_PHY(645), 0x00106c10 }, | 679 | { AR5K_PHY(645), 0x00106c10 }, |
680 | { AR5K_PHY(646), 0x009c4060 }, | 680 | { AR5K_PHY(646), 0x009c4060 }, |
681 | { AR5K_PHY(647), 0x1483800a }, | 681 | { AR5K_PHY(647), 0x1483800a }, |
682 | /* { AR5K_PHY(648), 0x018830c6 },*/ /* 2413 */ | 682 | /* { AR5K_PHY(648), 0x018830c6 },*/ /* 2413/2425 */ |
683 | { AR5K_PHY(648), 0x01831061 }, | 683 | { AR5K_PHY(648), 0x01831061 }, |
684 | { AR5K_PHY(649), 0x00000400 }, | 684 | { AR5K_PHY(649), 0x00000400 }, |
685 | /*{ AR5K_PHY(650), 0x000001b5 },*/ | 685 | /*{ AR5K_PHY(650), 0x000001b5 },*/ |
diff --git a/drivers/net/wireless/ath5k/phy.c b/drivers/net/wireless/ath5k/phy.c index afd8689e5c03..fa0d47faf574 100644 --- a/drivers/net/wireless/ath5k/phy.c +++ b/drivers/net/wireless/ath5k/phy.c | |||
@@ -1020,6 +1020,74 @@ static const struct ath5k_ini_rfgain rfgain_2413[] = { | |||
1020 | { AR5K_RF_GAIN(63), { 0x000000f9 } }, | 1020 | { AR5K_RF_GAIN(63), { 0x000000f9 } }, |
1021 | }; | 1021 | }; |
1022 | 1022 | ||
1023 | /* Initial RF Gain settings for RF2425 */ | ||
1024 | static const struct ath5k_ini_rfgain rfgain_2425[] = { | ||
1025 | { AR5K_RF_GAIN(0), { 0x00000000 } }, | ||
1026 | { AR5K_RF_GAIN(1), { 0x00000040 } }, | ||
1027 | { AR5K_RF_GAIN(2), { 0x00000080 } }, | ||
1028 | { AR5K_RF_GAIN(3), { 0x00000181 } }, | ||
1029 | { AR5K_RF_GAIN(4), { 0x000001c1 } }, | ||
1030 | { AR5K_RF_GAIN(5), { 0x00000001 } }, | ||
1031 | { AR5K_RF_GAIN(6), { 0x00000041 } }, | ||
1032 | { AR5K_RF_GAIN(7), { 0x00000081 } }, | ||
1033 | { AR5K_RF_GAIN(8), { 0x00000188 } }, | ||
1034 | { AR5K_RF_GAIN(9), { 0x000001c8 } }, | ||
1035 | { AR5K_RF_GAIN(10), { 0x00000008 } }, | ||
1036 | { AR5K_RF_GAIN(11), { 0x00000048 } }, | ||
1037 | { AR5K_RF_GAIN(12), { 0x00000088 } }, | ||
1038 | { AR5K_RF_GAIN(13), { 0x00000189 } }, | ||
1039 | { AR5K_RF_GAIN(14), { 0x000001c9 } }, | ||
1040 | { AR5K_RF_GAIN(15), { 0x00000009 } }, | ||
1041 | { AR5K_RF_GAIN(16), { 0x00000049 } }, | ||
1042 | { AR5K_RF_GAIN(17), { 0x00000089 } }, | ||
1043 | { AR5K_RF_GAIN(18), { 0x000001b0 } }, | ||
1044 | { AR5K_RF_GAIN(19), { 0x000001f0 } }, | ||
1045 | { AR5K_RF_GAIN(20), { 0x00000030 } }, | ||
1046 | { AR5K_RF_GAIN(21), { 0x00000070 } }, | ||
1047 | { AR5K_RF_GAIN(22), { 0x00000171 } }, | ||
1048 | { AR5K_RF_GAIN(23), { 0x000001b1 } }, | ||
1049 | { AR5K_RF_GAIN(24), { 0x000001f1 } }, | ||
1050 | { AR5K_RF_GAIN(25), { 0x00000031 } }, | ||
1051 | { AR5K_RF_GAIN(26), { 0x00000071 } }, | ||
1052 | { AR5K_RF_GAIN(27), { 0x000001b8 } }, | ||
1053 | { AR5K_RF_GAIN(28), { 0x000001f8 } }, | ||
1054 | { AR5K_RF_GAIN(29), { 0x00000038 } }, | ||
1055 | { AR5K_RF_GAIN(30), { 0x00000078 } }, | ||
1056 | { AR5K_RF_GAIN(31), { 0x000000b8 } }, | ||
1057 | { AR5K_RF_GAIN(32), { 0x000001b9 } }, | ||
1058 | { AR5K_RF_GAIN(33), { 0x000001f9 } }, | ||
1059 | { AR5K_RF_GAIN(34), { 0x00000039 } }, | ||
1060 | { AR5K_RF_GAIN(35), { 0x00000079 } }, | ||
1061 | { AR5K_RF_GAIN(36), { 0x000000b9 } }, | ||
1062 | { AR5K_RF_GAIN(37), { 0x000000f9 } }, | ||
1063 | { AR5K_RF_GAIN(38), { 0x000000f9 } }, | ||
1064 | { AR5K_RF_GAIN(39), { 0x000000f9 } }, | ||
1065 | { AR5K_RF_GAIN(40), { 0x000000f9 } }, | ||
1066 | { AR5K_RF_GAIN(41), { 0x000000f9 } }, | ||
1067 | { AR5K_RF_GAIN(42), { 0x000000f9 } }, | ||
1068 | { AR5K_RF_GAIN(43), { 0x000000f9 } }, | ||
1069 | { AR5K_RF_GAIN(44), { 0x000000f9 } }, | ||
1070 | { AR5K_RF_GAIN(45), { 0x000000f9 } }, | ||
1071 | { AR5K_RF_GAIN(46), { 0x000000f9 } }, | ||
1072 | { AR5K_RF_GAIN(47), { 0x000000f9 } }, | ||
1073 | { AR5K_RF_GAIN(48), { 0x000000f9 } }, | ||
1074 | { AR5K_RF_GAIN(49), { 0x000000f9 } }, | ||
1075 | { AR5K_RF_GAIN(50), { 0x000000f9 } }, | ||
1076 | { AR5K_RF_GAIN(51), { 0x000000f9 } }, | ||
1077 | { AR5K_RF_GAIN(52), { 0x000000f9 } }, | ||
1078 | { AR5K_RF_GAIN(53), { 0x000000f9 } }, | ||
1079 | { AR5K_RF_GAIN(54), { 0x000000f9 } }, | ||
1080 | { AR5K_RF_GAIN(55), { 0x000000f9 } }, | ||
1081 | { AR5K_RF_GAIN(56), { 0x000000f9 } }, | ||
1082 | { AR5K_RF_GAIN(57), { 0x000000f9 } }, | ||
1083 | { AR5K_RF_GAIN(58), { 0x000000f9 } }, | ||
1084 | { AR5K_RF_GAIN(59), { 0x000000f9 } }, | ||
1085 | { AR5K_RF_GAIN(60), { 0x000000f9 } }, | ||
1086 | { AR5K_RF_GAIN(61), { 0x000000f9 } }, | ||
1087 | { AR5K_RF_GAIN(62), { 0x000000f9 } }, | ||
1088 | { AR5K_RF_GAIN(63), { 0x000000f9 } }, | ||
1089 | }; | ||
1090 | |||
1023 | static const struct ath5k_gain_opt rfgain_opt_5112 = { | 1091 | static const struct ath5k_gain_opt rfgain_opt_5112 = { |
1024 | 1, | 1092 | 1, |
1025 | 8, | 1093 | 8, |
@@ -1588,8 +1656,8 @@ int ath5k_hw_rfgain(struct ath5k_hw *ah, unsigned int freq) | |||
1588 | freq = 0; /* only 2Ghz */ | 1656 | freq = 0; /* only 2Ghz */ |
1589 | break; | 1657 | break; |
1590 | case AR5K_RF2425: | 1658 | case AR5K_RF2425: |
1591 | ath5k_rfg = rfgain_2413; | 1659 | ath5k_rfg = rfgain_2425; |
1592 | size = ARRAY_SIZE(rfgain_2413); | 1660 | size = ARRAY_SIZE(rfgain_2425); |
1593 | freq = 0; /* only 2Ghz */ | 1661 | freq = 0; /* only 2Ghz */ |
1594 | break; | 1662 | break; |
1595 | default: | 1663 | default: |
@@ -1830,9 +1898,6 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah, | |||
1830 | data = data0 = data1 = data2 = 0; | 1898 | data = data0 = data1 = data2 = 0; |
1831 | c = channel->center_freq; | 1899 | c = channel->center_freq; |
1832 | 1900 | ||
1833 | /* | ||
1834 | * Set the channel on the RF5112 or newer | ||
1835 | */ | ||
1836 | if (c < 4800) { | 1901 | if (c < 4800) { |
1837 | if (!((c - 2224) % 5)) { | 1902 | if (!((c - 2224) % 5)) { |
1838 | data0 = ((2 * (c - 704)) - 3040) / 10; | 1903 | data0 = ((2 * (c - 704)) - 3040) / 10; |
@@ -1844,7 +1909,7 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah, | |||
1844 | return -EINVAL; | 1909 | return -EINVAL; |
1845 | 1910 | ||
1846 | data0 = ath5k_hw_bitswap((data0 << 2) & 0xff, 8); | 1911 | data0 = ath5k_hw_bitswap((data0 << 2) & 0xff, 8); |
1847 | } else { | 1912 | } else if ((c - (c % 5)) != 2 || c > 5435) { |
1848 | if (!(c % 20) && c >= 5120) { | 1913 | if (!(c % 20) && c >= 5120) { |
1849 | data0 = ath5k_hw_bitswap(((c - 4800) / 20 << 2), 8); | 1914 | data0 = ath5k_hw_bitswap(((c - 4800) / 20 << 2), 8); |
1850 | data2 = ath5k_hw_bitswap(3, 2); | 1915 | data2 = ath5k_hw_bitswap(3, 2); |
@@ -1856,6 +1921,9 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah, | |||
1856 | data2 = ath5k_hw_bitswap(1, 2); | 1921 | data2 = ath5k_hw_bitswap(1, 2); |
1857 | } else | 1922 | } else |
1858 | return -EINVAL; | 1923 | return -EINVAL; |
1924 | } else { | ||
1925 | data0 = ath5k_hw_bitswap((10 * (c - 2) - 4800) / 25 + 1, 8); | ||
1926 | data2 = ath5k_hw_bitswap(0, 2); | ||
1859 | } | 1927 | } |
1860 | 1928 | ||
1861 | data = (data0 << 4) | (data1 << 1) | (data2 << 2) | 0x1001; | 1929 | data = (data0 << 4) | (data1 << 1) | (data2 << 2) | 0x1001; |
@@ -1867,6 +1935,45 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah, | |||
1867 | } | 1935 | } |
1868 | 1936 | ||
1869 | /* | 1937 | /* |
1938 | * Set the channel on the RF2425 | ||
1939 | */ | ||
1940 | static int ath5k_hw_rf2425_channel(struct ath5k_hw *ah, | ||
1941 | struct ieee80211_channel *channel) | ||
1942 | { | ||
1943 | u32 data, data0, data2; | ||
1944 | u16 c; | ||
1945 | |||
1946 | data = data0 = data2 = 0; | ||
1947 | c = channel->center_freq; | ||
1948 | |||
1949 | if (c < 4800) { | ||
1950 | data0 = ath5k_hw_bitswap((c - 2272), 8); | ||
1951 | data2 = 0; | ||
1952 | /* ? 5GHz ? */ | ||
1953 | } else if ((c - (c % 5)) != 2 || c > 5435) { | ||
1954 | if (!(c % 20) && c < 5120) | ||
1955 | data0 = ath5k_hw_bitswap(((c - 4800) / 20 << 2), 8); | ||
1956 | else if (!(c % 10)) | ||
1957 | data0 = ath5k_hw_bitswap(((c - 4800) / 10 << 1), 8); | ||
1958 | else if (!(c % 5)) | ||
1959 | data0 = ath5k_hw_bitswap((c - 4800) / 5, 8); | ||
1960 | else | ||
1961 | return -EINVAL; | ||
1962 | data2 = ath5k_hw_bitswap(1, 2); | ||
1963 | } else { | ||
1964 | data0 = ath5k_hw_bitswap((10 * (c - 2) - 4800) / 25 + 1, 8); | ||
1965 | data2 = ath5k_hw_bitswap(0, 2); | ||
1966 | } | ||
1967 | |||
1968 | data = (data0 << 4) | data2 << 2 | 0x1001; | ||
1969 | |||
1970 | ath5k_hw_reg_write(ah, data & 0xff, AR5K_RF_BUFFER); | ||
1971 | ath5k_hw_reg_write(ah, (data >> 8) & 0x7f, AR5K_RF_BUFFER_CONTROL_5); | ||
1972 | |||
1973 | return 0; | ||
1974 | } | ||
1975 | |||
1976 | /* | ||
1870 | * Set a channel on the radio chip | 1977 | * Set a channel on the radio chip |
1871 | */ | 1978 | */ |
1872 | int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel) | 1979 | int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel) |
@@ -1895,6 +2002,9 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel) | |||
1895 | case AR5K_RF5111: | 2002 | case AR5K_RF5111: |
1896 | ret = ath5k_hw_rf5111_channel(ah, channel); | 2003 | ret = ath5k_hw_rf5111_channel(ah, channel); |
1897 | break; | 2004 | break; |
2005 | case AR5K_RF2425: | ||
2006 | ret = ath5k_hw_rf2425_channel(ah, channel); | ||
2007 | break; | ||
1898 | default: | 2008 | default: |
1899 | ret = ath5k_hw_rf5112_channel(ah, channel); | 2009 | ret = ath5k_hw_rf5112_channel(ah, channel); |
1900 | break; | 2010 | break; |
@@ -1903,6 +2013,15 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel) | |||
1903 | if (ret) | 2013 | if (ret) |
1904 | return ret; | 2014 | return ret; |
1905 | 2015 | ||
2016 | /* Set JAPAN setting for channel 14 */ | ||
2017 | if (channel->center_freq == 2484) { | ||
2018 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_CCKTXCTL, | ||
2019 | AR5K_PHY_CCKTXCTL_JAPAN); | ||
2020 | } else { | ||
2021 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_CCKTXCTL, | ||
2022 | AR5K_PHY_CCKTXCTL_WORLD); | ||
2023 | } | ||
2024 | |||
1906 | ah->ah_current_channel.center_freq = channel->center_freq; | 2025 | ah->ah_current_channel.center_freq = channel->center_freq; |
1907 | ah->ah_current_channel.hw_value = channel->hw_value; | 2026 | ah->ah_current_channel.hw_value = channel->hw_value; |
1908 | ah->ah_turbo = channel->hw_value == CHANNEL_T ? true : false; | 2027 | ah->ah_turbo = channel->hw_value == CHANNEL_T ? true : false; |
@@ -1933,6 +2052,8 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel) | |||
1933 | * http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL \ | 2052 | * http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL \ |
1934 | * &p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=7245893.PN.&OS=PN/7 | 2053 | * &p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=7245893.PN.&OS=PN/7 |
1935 | * | 2054 | * |
2055 | * XXX: Since during noise floor calibration antennas are detached according to | ||
2056 | * the patent, we should stop tx queues here. | ||
1936 | */ | 2057 | */ |
1937 | int | 2058 | int |
1938 | ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq) | 2059 | ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq) |
@@ -1942,7 +2063,7 @@ ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq) | |||
1942 | s32 noise_floor; | 2063 | s32 noise_floor; |
1943 | 2064 | ||
1944 | /* | 2065 | /* |
1945 | * Enable noise floor calibration and wait until completion | 2066 | * Enable noise floor calibration |
1946 | */ | 2067 | */ |
1947 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL, | 2068 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL, |
1948 | AR5K_PHY_AGCCTL_NF); | 2069 | AR5K_PHY_AGCCTL_NF); |
@@ -1952,7 +2073,7 @@ ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq) | |||
1952 | if (ret) { | 2073 | if (ret) { |
1953 | ATH5K_ERR(ah->ah_sc, | 2074 | ATH5K_ERR(ah->ah_sc, |
1954 | "noise floor calibration timeout (%uMHz)\n", freq); | 2075 | "noise floor calibration timeout (%uMHz)\n", freq); |
1955 | return ret; | 2076 | return -EAGAIN; |
1956 | } | 2077 | } |
1957 | 2078 | ||
1958 | /* Wait until the noise floor is calibrated and read the value */ | 2079 | /* Wait until the noise floor is calibrated and read the value */ |
@@ -1974,7 +2095,7 @@ ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq) | |||
1974 | if (noise_floor > AR5K_TUNE_NOISE_FLOOR) { | 2095 | if (noise_floor > AR5K_TUNE_NOISE_FLOOR) { |
1975 | ATH5K_ERR(ah->ah_sc, | 2096 | ATH5K_ERR(ah->ah_sc, |
1976 | "noise floor calibration failed (%uMHz)\n", freq); | 2097 | "noise floor calibration failed (%uMHz)\n", freq); |
1977 | return -EIO; | 2098 | return -EAGAIN; |
1978 | } | 2099 | } |
1979 | 2100 | ||
1980 | ah->ah_noise_floor = noise_floor; | 2101 | ah->ah_noise_floor = noise_floor; |
@@ -2087,38 +2208,66 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw *ah, | |||
2087 | } | 2208 | } |
2088 | 2209 | ||
2089 | /* | 2210 | /* |
2090 | * Perform a PHY calibration on RF5111/5112 | 2211 | * Perform a PHY calibration on RF5111/5112 and newer chips |
2091 | */ | 2212 | */ |
2092 | static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah, | 2213 | static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah, |
2093 | struct ieee80211_channel *channel) | 2214 | struct ieee80211_channel *channel) |
2094 | { | 2215 | { |
2095 | u32 i_pwr, q_pwr; | 2216 | u32 i_pwr, q_pwr; |
2096 | s32 iq_corr, i_coff, i_coffd, q_coff, q_coffd; | 2217 | s32 iq_corr, i_coff, i_coffd, q_coff, q_coffd; |
2218 | int i; | ||
2097 | ATH5K_TRACE(ah->ah_sc); | 2219 | ATH5K_TRACE(ah->ah_sc); |
2098 | 2220 | ||
2099 | if (!ah->ah_calibration || | 2221 | if (!ah->ah_calibration || |
2100 | ath5k_hw_reg_read(ah, AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN) | 2222 | ath5k_hw_reg_read(ah, AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN) |
2101 | goto done; | 2223 | goto done; |
2102 | 2224 | ||
2103 | ah->ah_calibration = false; | 2225 | /* Calibration has finished, get the results and re-run */ |
2226 | for (i = 0; i <= 10; i++) { | ||
2227 | iq_corr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_CORR); | ||
2228 | i_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_I); | ||
2229 | q_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_Q); | ||
2230 | } | ||
2104 | 2231 | ||
2105 | iq_corr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_CORR); | ||
2106 | i_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_I); | ||
2107 | q_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_Q); | ||
2108 | i_coffd = ((i_pwr >> 1) + (q_pwr >> 1)) >> 7; | 2232 | i_coffd = ((i_pwr >> 1) + (q_pwr >> 1)) >> 7; |
2109 | q_coffd = q_pwr >> 6; | 2233 | q_coffd = q_pwr >> 7; |
2110 | 2234 | ||
2235 | /* No correction */ | ||
2111 | if (i_coffd == 0 || q_coffd == 0) | 2236 | if (i_coffd == 0 || q_coffd == 0) |
2112 | goto done; | 2237 | goto done; |
2113 | 2238 | ||
2114 | i_coff = ((-iq_corr) / i_coffd) & 0x3f; | 2239 | i_coff = ((-iq_corr) / i_coffd) & 0x3f; |
2115 | q_coff = (((s32)i_pwr / q_coffd) - 64) & 0x1f; | ||
2116 | 2240 | ||
2117 | /* Commit new IQ value */ | 2241 | /* Boundary check */ |
2242 | if (i_coff > 31) | ||
2243 | i_coff = 31; | ||
2244 | if (i_coff < -32) | ||
2245 | i_coff = -32; | ||
2246 | |||
2247 | q_coff = (((s32)i_pwr / q_coffd) - 128) & 0x1f; | ||
2248 | |||
2249 | /* Boundary check */ | ||
2250 | if (q_coff > 15) | ||
2251 | q_coff = 15; | ||
2252 | if (q_coff < -16) | ||
2253 | q_coff = -16; | ||
2254 | |||
2255 | /* Commit new I/Q value */ | ||
2118 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_ENABLE | | 2256 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_ENABLE | |
2119 | ((u32)q_coff) | ((u32)i_coff << AR5K_PHY_IQ_CORR_Q_I_COFF_S)); | 2257 | ((u32)q_coff) | ((u32)i_coff << AR5K_PHY_IQ_CORR_Q_I_COFF_S)); |
2120 | 2258 | ||
2259 | /* Re-enable calibration -if we don't we'll commit | ||
2260 | * the same values again and again */ | ||
2261 | AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, | ||
2262 | AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15); | ||
2263 | AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_RUN); | ||
2264 | |||
2121 | done: | 2265 | done: |
2266 | |||
2267 | /* TODO: Separate noise floor calibration from I/Q calibration | ||
2268 | * since noise floor calibration interrupts rx path while I/Q | ||
2269 | * calibration doesn't. We don't need to run noise floor calibration | ||
2270 | * as often as I/Q calibration.*/ | ||
2122 | ath5k_hw_noise_floor_calibration(ah, channel->center_freq); | 2271 | ath5k_hw_noise_floor_calibration(ah, channel->center_freq); |
2123 | 2272 | ||
2124 | /* Request RF gain */ | 2273 | /* Request RF gain */ |
diff --git a/drivers/net/wireless/ath5k/reg.h b/drivers/net/wireless/ath5k/reg.h index 30629b3e37c2..7562bf173d3e 100644 --- a/drivers/net/wireless/ath5k/reg.h +++ b/drivers/net/wireless/ath5k/reg.h | |||
@@ -53,7 +53,7 @@ | |||
53 | #define AR5K_CR_TXD0 0x00000008 /* TX Disable for queue 0 on 5210 */ | 53 | #define AR5K_CR_TXD0 0x00000008 /* TX Disable for queue 0 on 5210 */ |
54 | #define AR5K_CR_TXD1 0x00000010 /* TX Disable for queue 1 on 5210 */ | 54 | #define AR5K_CR_TXD1 0x00000010 /* TX Disable for queue 1 on 5210 */ |
55 | #define AR5K_CR_RXD 0x00000020 /* RX Disable */ | 55 | #define AR5K_CR_RXD 0x00000020 /* RX Disable */ |
56 | #define AR5K_CR_SWI 0x00000040 | 56 | #define AR5K_CR_SWI 0x00000040 /* Software Interrupt */ |
57 | 57 | ||
58 | /* | 58 | /* |
59 | * RX Descriptor Pointer register | 59 | * RX Descriptor Pointer register |
@@ -65,19 +65,19 @@ | |||
65 | */ | 65 | */ |
66 | #define AR5K_CFG 0x0014 /* Register Address */ | 66 | #define AR5K_CFG 0x0014 /* Register Address */ |
67 | #define AR5K_CFG_SWTD 0x00000001 /* Byte-swap TX descriptor (for big endian archs) */ | 67 | #define AR5K_CFG_SWTD 0x00000001 /* Byte-swap TX descriptor (for big endian archs) */ |
68 | #define AR5K_CFG_SWTB 0x00000002 /* Byte-swap TX buffer (?) */ | 68 | #define AR5K_CFG_SWTB 0x00000002 /* Byte-swap TX buffer */ |
69 | #define AR5K_CFG_SWRD 0x00000004 /* Byte-swap RX descriptor */ | 69 | #define AR5K_CFG_SWRD 0x00000004 /* Byte-swap RX descriptor */ |
70 | #define AR5K_CFG_SWRB 0x00000008 /* Byte-swap RX buffer (?) */ | 70 | #define AR5K_CFG_SWRB 0x00000008 /* Byte-swap RX buffer */ |
71 | #define AR5K_CFG_SWRG 0x00000010 /* Byte-swap Register values (?) */ | 71 | #define AR5K_CFG_SWRG 0x00000010 /* Byte-swap Register access */ |
72 | #define AR5K_CFG_ADHOC 0x00000020 /* [5211+] */ | 72 | #define AR5K_CFG_ADHOC 0x00000020 /* AP/Adhoc indication [5211+] */ |
73 | #define AR5K_CFG_PHY_OK 0x00000100 /* [5211+] */ | 73 | #define AR5K_CFG_PHY_OK 0x00000100 /* [5211+] */ |
74 | #define AR5K_CFG_EEBS 0x00000200 /* EEPROM is busy */ | 74 | #define AR5K_CFG_EEBS 0x00000200 /* EEPROM is busy */ |
75 | #define AR5K_CFG_CLKGD 0x00000400 /* Clock gated (?) */ | 75 | #define AR5K_CFG_CLKGD 0x00000400 /* Clock gated (Disable dynamic clock) */ |
76 | #define AR5K_CFG_TXCNT 0x00007800 /* Tx frame count (?) [5210] */ | 76 | #define AR5K_CFG_TXCNT 0x00007800 /* Tx frame count (?) [5210] */ |
77 | #define AR5K_CFG_TXCNT_S 11 | 77 | #define AR5K_CFG_TXCNT_S 11 |
78 | #define AR5K_CFG_TXFSTAT 0x00008000 /* Tx frame status (?) [5210] */ | 78 | #define AR5K_CFG_TXFSTAT 0x00008000 /* Tx frame status (?) [5210] */ |
79 | #define AR5K_CFG_TXFSTRT 0x00010000 /* [5210] */ | 79 | #define AR5K_CFG_TXFSTRT 0x00010000 /* [5210] */ |
80 | #define AR5K_CFG_PCI_THRES 0x00060000 /* [5211+] */ | 80 | #define AR5K_CFG_PCI_THRES 0x00060000 /* PCI Master req q threshold [5211+] */ |
81 | #define AR5K_CFG_PCI_THRES_S 17 | 81 | #define AR5K_CFG_PCI_THRES_S 17 |
82 | 82 | ||
83 | /* | 83 | /* |
@@ -162,35 +162,40 @@ | |||
162 | /* | 162 | /* |
163 | * Transmit configuration register | 163 | * Transmit configuration register |
164 | */ | 164 | */ |
165 | #define AR5K_TXCFG 0x0030 /* Register Address */ | 165 | #define AR5K_TXCFG 0x0030 /* Register Address */ |
166 | #define AR5K_TXCFG_SDMAMR 0x00000007 /* DMA size */ | 166 | #define AR5K_TXCFG_SDMAMR 0x00000007 /* DMA size (read) */ |
167 | #define AR5K_TXCFG_SDMAMR_S 0 | 167 | #define AR5K_TXCFG_SDMAMR_S 0 |
168 | #define AR5K_TXCFG_B_MODE 0x00000008 /* Set b mode for 5111 (enable 2111) */ | 168 | #define AR5K_TXCFG_B_MODE 0x00000008 /* Set b mode for 5111 (enable 2111) */ |
169 | #define AR5K_TXCFG_TXFSTP 0x00000008 /* TX DMA full Stop [5210] */ | 169 | #define AR5K_TXCFG_TXFSTP 0x00000008 /* TX DMA full Stop [5210] */ |
170 | #define AR5K_TXCFG_TXFULL 0x000003f0 /* TX Triger level mask */ | 170 | #define AR5K_TXCFG_TXFULL 0x000003f0 /* TX Triger level mask */ |
171 | #define AR5K_TXCFG_TXFULL_S 4 | 171 | #define AR5K_TXCFG_TXFULL_S 4 |
172 | #define AR5K_TXCFG_TXFULL_0B 0x00000000 | 172 | #define AR5K_TXCFG_TXFULL_0B 0x00000000 |
173 | #define AR5K_TXCFG_TXFULL_64B 0x00000010 | 173 | #define AR5K_TXCFG_TXFULL_64B 0x00000010 |
174 | #define AR5K_TXCFG_TXFULL_128B 0x00000020 | 174 | #define AR5K_TXCFG_TXFULL_128B 0x00000020 |
175 | #define AR5K_TXCFG_TXFULL_192B 0x00000030 | 175 | #define AR5K_TXCFG_TXFULL_192B 0x00000030 |
176 | #define AR5K_TXCFG_TXFULL_256B 0x00000040 | 176 | #define AR5K_TXCFG_TXFULL_256B 0x00000040 |
177 | #define AR5K_TXCFG_TXCONT_EN 0x00000080 | 177 | #define AR5K_TXCFG_TXCONT_EN 0x00000080 |
178 | #define AR5K_TXCFG_DMASIZE 0x00000100 /* Flag for passing DMA size [5210] */ | 178 | #define AR5K_TXCFG_DMASIZE 0x00000100 /* Flag for passing DMA size [5210] */ |
179 | #define AR5K_TXCFG_JUMBO_TXE 0x00000400 /* Enable jumbo frames transmition (?) [5211+] */ | 179 | #define AR5K_TXCFG_JUMBO_DESC_EN 0x00000400 /* Enable jumbo tx descriptors [5211+] */ |
180 | #define AR5K_TXCFG_RTSRND 0x00001000 /* [5211+] */ | 180 | #define AR5K_TXCFG_ADHOC_BCN_ATIM 0x00000800 /* Adhoc Beacon ATIM Policy */ |
181 | #define AR5K_TXCFG_FRMPAD_DIS 0x00002000 /* [5211+] */ | 181 | #define AR5K_TXCFG_ATIM_WINDOW_DEF_DIS 0x00001000 /* Disable ATIM window defer [5211+] */ |
182 | #define AR5K_TXCFG_RDY_DIS 0x00004000 /* [5211+] */ | 182 | #define AR5K_TXCFG_RTSRND 0x00001000 /* [5211+] */ |
183 | #define AR5K_TXCFG_FRMPAD_DIS 0x00002000 /* [5211+] */ | ||
184 | #define AR5K_TXCFG_RDY_CBR_DIS 0x00004000 /* Ready time CBR disable [5211+] */ | ||
185 | #define AR5K_TXCFG_JUMBO_FRM_MODE 0x00008000 /* Jumbo frame mode [5211+] */ | ||
186 | #define AR5K_TXCFG_DCU_CACHING_DIS 0x00010000 /* Disable DCU caching */ | ||
183 | 187 | ||
184 | /* | 188 | /* |
185 | * Receive configuration register | 189 | * Receive configuration register |
186 | */ | 190 | */ |
187 | #define AR5K_RXCFG 0x0034 /* Register Address */ | 191 | #define AR5K_RXCFG 0x0034 /* Register Address */ |
188 | #define AR5K_RXCFG_SDMAMW 0x00000007 /* DMA size */ | 192 | #define AR5K_RXCFG_SDMAMW 0x00000007 /* DMA size (write) */ |
189 | #define AR5K_RXCFG_SDMAMW_S 0 | 193 | #define AR5K_RXCFG_SDMAMW_S 0 |
190 | #define AR5K_RXCFG_DEF_ANTENNA 0x00000008 /* Default antenna */ | 194 | #define AR5K_RXCFG_ZLFDMA 0x00000008 /* Enable Zero-length frame DMA */ |
191 | #define AR5K_RXCFG_ZLFDMA 0x00000010 /* Zero-length DMA */ | 195 | #define AR5K_RXCFG_DEF_ANTENNA 0x00000010 /* Default antenna (?) */ |
192 | #define AR5K_RXCFG_JUMBO_RXE 0x00000020 /* Enable jumbo frames reception (?) [5211+] */ | 196 | #define AR5K_RXCFG_JUMBO_RXE 0x00000020 /* Enable jumbo rx descriptors [5211+] */ |
193 | #define AR5K_RXCFG_JUMBO_WRAP 0x00000040 /* Wrap jumbo frames (?) [5211+] */ | 197 | #define AR5K_RXCFG_JUMBO_WRAP 0x00000040 /* Wrap jumbo frames [5211+] */ |
198 | #define AR5K_RXCFG_SLE_ENTRY 0x00000080 /* Sleep entry policy */ | ||
194 | 199 | ||
195 | /* | 200 | /* |
196 | * Receive jumbo descriptor last address register | 201 | * Receive jumbo descriptor last address register |
@@ -202,35 +207,35 @@ | |||
202 | * MIB control register | 207 | * MIB control register |
203 | */ | 208 | */ |
204 | #define AR5K_MIBC 0x0040 /* Register Address */ | 209 | #define AR5K_MIBC 0x0040 /* Register Address */ |
205 | #define AR5K_MIBC_COW 0x00000001 | 210 | #define AR5K_MIBC_COW 0x00000001 /* Warn test indicator */ |
206 | #define AR5K_MIBC_FMC 0x00000002 /* Freeze Mib Counters (?) */ | 211 | #define AR5K_MIBC_FMC 0x00000002 /* Freeze MIB Counters */ |
207 | #define AR5K_MIBC_CMC 0x00000004 /* Clean Mib Counters (?) */ | 212 | #define AR5K_MIBC_CMC 0x00000004 /* Clean MIB Counters */ |
208 | #define AR5K_MIBC_MCS 0x00000008 | 213 | #define AR5K_MIBC_MCS 0x00000008 /* MIB counter strobe */ |
209 | 214 | ||
210 | /* | 215 | /* |
211 | * Timeout prescale register | 216 | * Timeout prescale register |
212 | */ | 217 | */ |
213 | #define AR5K_TOPS 0x0044 | 218 | #define AR5K_TOPS 0x0044 |
214 | #define AR5K_TOPS_M 0x0000ffff /* [5211+] (?) */ | 219 | #define AR5K_TOPS_M 0x0000ffff |
215 | 220 | ||
216 | /* | 221 | /* |
217 | * Receive timeout register (no frame received) | 222 | * Receive timeout register (no frame received) |
218 | */ | 223 | */ |
219 | #define AR5K_RXNOFRM 0x0048 | 224 | #define AR5K_RXNOFRM 0x0048 |
220 | #define AR5K_RXNOFRM_M 0x000003ff /* [5211+] (?) */ | 225 | #define AR5K_RXNOFRM_M 0x000003ff |
221 | 226 | ||
222 | /* | 227 | /* |
223 | * Transmit timeout register (no frame sent) | 228 | * Transmit timeout register (no frame sent) |
224 | */ | 229 | */ |
225 | #define AR5K_TXNOFRM 0x004c | 230 | #define AR5K_TXNOFRM 0x004c |
226 | #define AR5K_TXNOFRM_M 0x000003ff /* [5211+] (?) */ | 231 | #define AR5K_TXNOFRM_M 0x000003ff |
227 | #define AR5K_TXNOFRM_QCU 0x000ffc00 /* [5211+] (?) */ | 232 | #define AR5K_TXNOFRM_QCU 0x000ffc00 |
228 | 233 | ||
229 | /* | 234 | /* |
230 | * Receive frame gap timeout register | 235 | * Receive frame gap timeout register |
231 | */ | 236 | */ |
232 | #define AR5K_RPGTO 0x0050 | 237 | #define AR5K_RPGTO 0x0050 |
233 | #define AR5K_RPGTO_M 0x000003ff /* [5211+] (?) */ | 238 | #define AR5K_RPGTO_M 0x000003ff |
234 | 239 | ||
235 | /* | 240 | /* |
236 | * Receive frame count limit register | 241 | * Receive frame count limit register |
@@ -241,6 +246,7 @@ | |||
241 | 246 | ||
242 | /* | 247 | /* |
243 | * Misc settings register | 248 | * Misc settings register |
249 | * (reserved0-3) | ||
244 | */ | 250 | */ |
245 | #define AR5K_MISC 0x0058 /* Register Address */ | 251 | #define AR5K_MISC 0x0058 /* Register Address */ |
246 | #define AR5K_MISC_DMA_OBS_M 0x000001e0 | 252 | #define AR5K_MISC_DMA_OBS_M 0x000001e0 |
@@ -256,6 +262,7 @@ | |||
256 | 262 | ||
257 | /* | 263 | /* |
258 | * QCU/DCU clock gating register (5311) | 264 | * QCU/DCU clock gating register (5311) |
265 | * (reserved4-5) | ||
259 | */ | 266 | */ |
260 | #define AR5K_QCUDCU_CLKGT 0x005c /* Register Address (?) */ | 267 | #define AR5K_QCUDCU_CLKGT 0x005c /* Register Address (?) */ |
261 | #define AR5K_QCUDCU_CLKGT_QCU 0x0000ffff /* Mask for QCU clock */ | 268 | #define AR5K_QCUDCU_CLKGT_QCU 0x0000ffff /* Mask for QCU clock */ |
@@ -284,18 +291,18 @@ | |||
284 | #define AR5K_ISR_TXEOL 0x00000400 /* Empty TX descriptor */ | 291 | #define AR5K_ISR_TXEOL 0x00000400 /* Empty TX descriptor */ |
285 | #define AR5K_ISR_TXURN 0x00000800 /* Transmit FIFO underrun */ | 292 | #define AR5K_ISR_TXURN 0x00000800 /* Transmit FIFO underrun */ |
286 | #define AR5K_ISR_MIB 0x00001000 /* Update MIB counters */ | 293 | #define AR5K_ISR_MIB 0x00001000 /* Update MIB counters */ |
287 | #define AR5K_ISR_SWI 0x00002000 /* Software interrupt (?) */ | 294 | #define AR5K_ISR_SWI 0x00002000 /* Software interrupt */ |
288 | #define AR5K_ISR_RXPHY 0x00004000 /* PHY error */ | 295 | #define AR5K_ISR_RXPHY 0x00004000 /* PHY error */ |
289 | #define AR5K_ISR_RXKCM 0x00008000 | 296 | #define AR5K_ISR_RXKCM 0x00008000 /* RX Key cache miss */ |
290 | #define AR5K_ISR_SWBA 0x00010000 /* Software beacon alert */ | 297 | #define AR5K_ISR_SWBA 0x00010000 /* Software beacon alert */ |
291 | #define AR5K_ISR_BRSSI 0x00020000 | 298 | #define AR5K_ISR_BRSSI 0x00020000 |
292 | #define AR5K_ISR_BMISS 0x00040000 /* Beacon missed */ | 299 | #define AR5K_ISR_BMISS 0x00040000 /* Beacon missed */ |
293 | #define AR5K_ISR_HIUERR 0x00080000 /* Host Interface Unit error [5211+] */ | 300 | #define AR5K_ISR_HIUERR 0x00080000 /* Host Interface Unit error [5211+] */ |
294 | #define AR5K_ISR_BNR 0x00100000 /* Beacon not ready [5211+] */ | 301 | #define AR5K_ISR_BNR 0x00100000 /* Beacon not ready [5211+] */ |
295 | #define AR5K_ISR_MCABT 0x00100000 /* [5210] */ | 302 | #define AR5K_ISR_MCABT 0x00100000 /* Master Cycle Abort [5210] */ |
296 | #define AR5K_ISR_RXCHIRP 0x00200000 /* [5212+] */ | 303 | #define AR5K_ISR_RXCHIRP 0x00200000 /* CHIRP Received [5212+] */ |
297 | #define AR5K_ISR_SSERR 0x00200000 /* [5210] */ | 304 | #define AR5K_ISR_SSERR 0x00200000 /* Signaled System Error [5210] */ |
298 | #define AR5K_ISR_DPERR 0x00400000 /* [5210] */ | 305 | #define AR5K_ISR_DPERR 0x00400000 /* Det par Error (?) [5210] */ |
299 | #define AR5K_ISR_TIM 0x00800000 /* [5210] */ | 306 | #define AR5K_ISR_TIM 0x00800000 /* [5210] */ |
300 | #define AR5K_ISR_BCNMISC 0x00800000 /* [5212+] */ | 307 | #define AR5K_ISR_BCNMISC 0x00800000 /* [5212+] */ |
301 | #define AR5K_ISR_GPIO 0x01000000 /* GPIO (rf kill)*/ | 308 | #define AR5K_ISR_GPIO 0x01000000 /* GPIO (rf kill)*/ |
@@ -320,14 +327,14 @@ | |||
320 | 327 | ||
321 | #define AR5K_SISR2 0x008c /* Register Address [5211+] */ | 328 | #define AR5K_SISR2 0x008c /* Register Address [5211+] */ |
322 | #define AR5K_SISR2_QCU_TXURN 0x000003ff /* Mask for QCU_TXURN */ | 329 | #define AR5K_SISR2_QCU_TXURN 0x000003ff /* Mask for QCU_TXURN */ |
323 | #define AR5K_SISR2_MCABT 0x00100000 | 330 | #define AR5K_SISR2_MCABT 0x00100000 /* Master Cycle Abort */ |
324 | #define AR5K_SISR2_SSERR 0x00200000 | 331 | #define AR5K_SISR2_SSERR 0x00200000 /* Signaled System Error */ |
325 | #define AR5K_SISR2_DPERR 0x00400000 | 332 | #define AR5K_SISR2_DPERR 0x00400000 /* Det par Error (?) */ |
326 | #define AR5K_SISR2_TIM 0x01000000 /* [5212+] */ | 333 | #define AR5K_SISR2_TIM 0x01000000 /* [5212+] */ |
327 | #define AR5K_SISR2_CAB_END 0x02000000 /* [5212+] */ | 334 | #define AR5K_SISR2_CAB_END 0x02000000 /* [5212+] */ |
328 | #define AR5K_SISR2_DTIM_SYNC 0x04000000 /* [5212+] */ | 335 | #define AR5K_SISR2_DTIM_SYNC 0x04000000 /* DTIM sync lost [5212+] */ |
329 | #define AR5K_SISR2_BCN_TIMEOUT 0x08000000 /* [5212+] */ | 336 | #define AR5K_SISR2_BCN_TIMEOUT 0x08000000 /* Beacon Timeout [5212+] */ |
330 | #define AR5K_SISR2_CAB_TIMEOUT 0x10000000 /* [5212+] */ | 337 | #define AR5K_SISR2_CAB_TIMEOUT 0x10000000 /* CAB Timeout [5212+] */ |
331 | #define AR5K_SISR2_DTIM 0x20000000 /* [5212+] */ | 338 | #define AR5K_SISR2_DTIM 0x20000000 /* [5212+] */ |
332 | 339 | ||
333 | #define AR5K_SISR3 0x0090 /* Register Address [5211+] */ | 340 | #define AR5K_SISR3 0x0090 /* Register Address [5211+] */ |
@@ -368,18 +375,18 @@ | |||
368 | #define AR5K_IMR_TXEOL 0x00000400 /* Empty TX descriptor*/ | 375 | #define AR5K_IMR_TXEOL 0x00000400 /* Empty TX descriptor*/ |
369 | #define AR5K_IMR_TXURN 0x00000800 /* Transmit FIFO underrun*/ | 376 | #define AR5K_IMR_TXURN 0x00000800 /* Transmit FIFO underrun*/ |
370 | #define AR5K_IMR_MIB 0x00001000 /* Update MIB counters*/ | 377 | #define AR5K_IMR_MIB 0x00001000 /* Update MIB counters*/ |
371 | #define AR5K_IMR_SWI 0x00002000 | 378 | #define AR5K_IMR_SWI 0x00002000 /* Software interrupt */ |
372 | #define AR5K_IMR_RXPHY 0x00004000 /* PHY error*/ | 379 | #define AR5K_IMR_RXPHY 0x00004000 /* PHY error*/ |
373 | #define AR5K_IMR_RXKCM 0x00008000 | 380 | #define AR5K_IMR_RXKCM 0x00008000 /* RX Key cache miss */ |
374 | #define AR5K_IMR_SWBA 0x00010000 /* Software beacon alert*/ | 381 | #define AR5K_IMR_SWBA 0x00010000 /* Software beacon alert*/ |
375 | #define AR5K_IMR_BRSSI 0x00020000 | 382 | #define AR5K_IMR_BRSSI 0x00020000 |
376 | #define AR5K_IMR_BMISS 0x00040000 /* Beacon missed*/ | 383 | #define AR5K_IMR_BMISS 0x00040000 /* Beacon missed*/ |
377 | #define AR5K_IMR_HIUERR 0x00080000 /* Host Interface Unit error [5211+] */ | 384 | #define AR5K_IMR_HIUERR 0x00080000 /* Host Interface Unit error [5211+] */ |
378 | #define AR5K_IMR_BNR 0x00100000 /* Beacon not ready [5211+] */ | 385 | #define AR5K_IMR_BNR 0x00100000 /* Beacon not ready [5211+] */ |
379 | #define AR5K_IMR_MCABT 0x00100000 /* [5210] */ | 386 | #define AR5K_IMR_MCABT 0x00100000 /* Master Cycle Abort [5210] */ |
380 | #define AR5K_IMR_RXCHIRP 0x00200000 /* [5212+]*/ | 387 | #define AR5K_IMR_RXCHIRP 0x00200000 /* CHIRP Received [5212+]*/ |
381 | #define AR5K_IMR_SSERR 0x00200000 /* [5210] */ | 388 | #define AR5K_IMR_SSERR 0x00200000 /* Signaled System Error [5210] */ |
382 | #define AR5K_IMR_DPERR 0x00400000 /* [5210] */ | 389 | #define AR5K_IMR_DPERR 0x00400000 /* Det par Error (?) [5210] */ |
383 | #define AR5K_IMR_TIM 0x00800000 /* [5211+] */ | 390 | #define AR5K_IMR_TIM 0x00800000 /* [5211+] */ |
384 | #define AR5K_IMR_BCNMISC 0x00800000 /* [5212+] */ | 391 | #define AR5K_IMR_BCNMISC 0x00800000 /* [5212+] */ |
385 | #define AR5K_IMR_GPIO 0x01000000 /* GPIO (rf kill)*/ | 392 | #define AR5K_IMR_GPIO 0x01000000 /* GPIO (rf kill)*/ |
@@ -405,14 +412,14 @@ | |||
405 | #define AR5K_SIMR2 0x00ac /* Register Address [5211+] */ | 412 | #define AR5K_SIMR2 0x00ac /* Register Address [5211+] */ |
406 | #define AR5K_SIMR2_QCU_TXURN 0x000003ff /* Mask for QCU_TXURN */ | 413 | #define AR5K_SIMR2_QCU_TXURN 0x000003ff /* Mask for QCU_TXURN */ |
407 | #define AR5K_SIMR2_QCU_TXURN_S 0 | 414 | #define AR5K_SIMR2_QCU_TXURN_S 0 |
408 | #define AR5K_SIMR2_MCABT 0x00100000 | 415 | #define AR5K_SIMR2_MCABT 0x00100000 /* Master Cycle Abort */ |
409 | #define AR5K_SIMR2_SSERR 0x00200000 | 416 | #define AR5K_SIMR2_SSERR 0x00200000 /* Signaled System Error */ |
410 | #define AR5K_SIMR2_DPERR 0x00400000 | 417 | #define AR5K_SIMR2_DPERR 0x00400000 /* Det par Error (?) */ |
411 | #define AR5K_SIMR2_TIM 0x01000000 /* [5212+] */ | 418 | #define AR5K_SIMR2_TIM 0x01000000 /* [5212+] */ |
412 | #define AR5K_SIMR2_CAB_END 0x02000000 /* [5212+] */ | 419 | #define AR5K_SIMR2_CAB_END 0x02000000 /* [5212+] */ |
413 | #define AR5K_SIMR2_DTIM_SYNC 0x04000000 /* [5212+] */ | 420 | #define AR5K_SIMR2_DTIM_SYNC 0x04000000 /* DTIM Sync lost [5212+] */ |
414 | #define AR5K_SIMR2_BCN_TIMEOUT 0x08000000 /* [5212+] */ | 421 | #define AR5K_SIMR2_BCN_TIMEOUT 0x08000000 /* Beacon Timeout [5212+] */ |
415 | #define AR5K_SIMR2_CAB_TIMEOUT 0x10000000 /* [5212+] */ | 422 | #define AR5K_SIMR2_CAB_TIMEOUT 0x10000000 /* CAB Timeout [5212+] */ |
416 | #define AR5K_SIMR2_DTIM 0x20000000 /* [5212+] */ | 423 | #define AR5K_SIMR2_DTIM 0x20000000 /* [5212+] */ |
417 | 424 | ||
418 | #define AR5K_SIMR3 0x00b0 /* Register Address [5211+] */ | 425 | #define AR5K_SIMR3 0x00b0 /* Register Address [5211+] */ |
@@ -425,23 +432,69 @@ | |||
425 | #define AR5K_SIMR4_QTRIG 0x000003ff /* Mask for QTRIG */ | 432 | #define AR5K_SIMR4_QTRIG 0x000003ff /* Mask for QTRIG */ |
426 | #define AR5K_SIMR4_QTRIG_S 0 | 433 | #define AR5K_SIMR4_QTRIG_S 0 |
427 | 434 | ||
435 | /* | ||
436 | * DMA Debug registers 0-7 | ||
437 | * 0xe0 - 0xfc | ||
438 | */ | ||
428 | 439 | ||
429 | /* | 440 | /* |
430 | * Decompression mask registers [5212+] | 441 | * Decompression mask registers [5212+] |
431 | */ | 442 | */ |
432 | #define AR5K_DCM_ADDR 0x0400 /*Decompression mask address (?)*/ | 443 | #define AR5K_DCM_ADDR 0x0400 /*Decompression mask address (index) */ |
433 | #define AR5K_DCM_DATA 0x0404 /*Decompression mask data (?)*/ | 444 | #define AR5K_DCM_DATA 0x0404 /*Decompression mask data */ |
445 | |||
446 | /* | ||
447 | * Wake On Wireless pattern control register [5212+] | ||
448 | */ | ||
449 | #define AR5K_WOW_PCFG 0x0410 /* Register Address */ | ||
450 | #define AR5K_WOW_PCFG_PAT_MATCH_EN 0x00000001 /* Pattern match enable */ | ||
451 | #define AR5K_WOW_PCFG_LONG_FRAME_POL 0x00000002 /* Long frame policy */ | ||
452 | #define AR5K_WOW_PCFG_WOBMISS 0x00000004 /* Wake on bea(con) miss (?) */ | ||
453 | #define AR5K_WOW_PCFG_PAT_0_EN 0x00000100 /* Enable pattern 0 */ | ||
454 | #define AR5K_WOW_PCFG_PAT_1_EN 0x00000200 /* Enable pattern 1 */ | ||
455 | #define AR5K_WOW_PCFG_PAT_2_EN 0x00000400 /* Enable pattern 2 */ | ||
456 | #define AR5K_WOW_PCFG_PAT_3_EN 0x00000800 /* Enable pattern 3 */ | ||
457 | #define AR5K_WOW_PCFG_PAT_4_EN 0x00001000 /* Enable pattern 4 */ | ||
458 | #define AR5K_WOW_PCFG_PAT_5_EN 0x00002000 /* Enable pattern 5 */ | ||
459 | |||
460 | /* | ||
461 | * Wake On Wireless pattern index register (?) [5212+] | ||
462 | */ | ||
463 | #define AR5K_WOW_PAT_IDX 0x0414 | ||
464 | |||
465 | /* | ||
466 | * Wake On Wireless pattern data register [5212+] | ||
467 | */ | ||
468 | #define AR5K_WOW_PAT_DATA 0x0418 /* Register Address */ | ||
469 | #define AR5K_WOW_PAT_DATA_0_3_V 0x00000001 /* Pattern 0, 3 value */ | ||
470 | #define AR5K_WOW_PAT_DATA_1_4_V 0x00000100 /* Pattern 1, 4 value */ | ||
471 | #define AR5K_WOW_PAT_DATA_2_5_V 0x00010000 /* Pattern 2, 5 value */ | ||
472 | #define AR5K_WOW_PAT_DATA_0_3_M 0x01000000 /* Pattern 0, 3 mask */ | ||
473 | #define AR5K_WOW_PAT_DATA_1_4_M 0x04000000 /* Pattern 1, 4 mask */ | ||
474 | #define AR5K_WOW_PAT_DATA_2_5_M 0x10000000 /* Pattern 2, 5 mask */ | ||
434 | 475 | ||
435 | /* | 476 | /* |
436 | * Decompression configuration registers [5212+] | 477 | * Decompression configuration registers [5212+] |
437 | */ | 478 | */ |
438 | #define AR5K_DCCFG 0x0420 | 479 | #define AR5K_DCCFG 0x0420 /* Register Address */ |
480 | #define AR5K_DCCFG_GLOBAL_EN 0x00000001 /* Enable decompression on all queues */ | ||
481 | #define AR5K_DCCFG_BYPASS_EN 0x00000002 /* Bypass decompression */ | ||
482 | #define AR5K_DCCFG_BCAST_EN 0x00000004 /* Enable decompression for bcast frames */ | ||
483 | #define AR5K_DCCFG_MCAST_EN 0x00000008 /* Enable decompression for mcast frames */ | ||
439 | 484 | ||
440 | /* | 485 | /* |
441 | * Compression configuration registers [5212+] | 486 | * Compression configuration registers [5212+] |
442 | */ | 487 | */ |
443 | #define AR5K_CCFG 0x0600 | 488 | #define AR5K_CCFG 0x0600 /* Register Address */ |
444 | #define AR5K_CCFG_CUP 0x0604 | 489 | #define AR5K_CCFG_WINDOW_SIZE 0x00000007 /* Compression window size */ |
490 | #define AR5K_CCFG_CPC_EN 0x00000008 /* Enable performance counters */ | ||
491 | |||
492 | #define AR5K_CCFG_CCU 0x0604 /* Register Address */ | ||
493 | #define AR5K_CCFG_CCU_CUP_EN 0x00000001 /* CCU Catchup enable */ | ||
494 | #define AR5K_CCFG_CCU_CREDIT 0x00000002 /* CCU Credit (field) */ | ||
495 | #define AR5K_CCFG_CCU_CD_THRES 0x00000080 /* CCU Cyc(lic?) debt threshold (field) */ | ||
496 | #define AR5K_CCFG_CCU_CUP_LCNT 0x00010000 /* CCU Catchup lit(?) count */ | ||
497 | #define AR5K_CCFG_CCU_INIT 0x00100200 /* Initial value during reset */ | ||
445 | 498 | ||
446 | /* | 499 | /* |
447 | * Compression performance counter registers [5212+] | 500 | * Compression performance counter registers [5212+] |
@@ -450,7 +503,7 @@ | |||
450 | #define AR5K_CPC1 0x0614 /* Compression performance counter 1*/ | 503 | #define AR5K_CPC1 0x0614 /* Compression performance counter 1*/ |
451 | #define AR5K_CPC2 0x0618 /* Compression performance counter 2 */ | 504 | #define AR5K_CPC2 0x0618 /* Compression performance counter 2 */ |
452 | #define AR5K_CPC3 0x061c /* Compression performance counter 3 */ | 505 | #define AR5K_CPC3 0x061c /* Compression performance counter 3 */ |
453 | #define AR5K_CPCORN 0x0620 /* Compression performance overrun (?) */ | 506 | #define AR5K_CPCOVF 0x0620 /* Compression performance overflow */ |
454 | 507 | ||
455 | 508 | ||
456 | /* | 509 | /* |
@@ -466,8 +519,6 @@ | |||
466 | * set/clear, which contain status for all queues (we shift by 1 for each | 519 | * set/clear, which contain status for all queues (we shift by 1 for each |
467 | * queue). To access these registers easily we define some macros here | 520 | * queue). To access these registers easily we define some macros here |
468 | * that are used inside HAL. For more infos check out *_tx_queue functs. | 521 | * that are used inside HAL. For more infos check out *_tx_queue functs. |
469 | * | ||
470 | * TODO: Boundary checking on macros (here?) | ||
471 | */ | 522 | */ |
472 | 523 | ||
473 | /* | 524 | /* |
@@ -513,7 +564,6 @@ | |||
513 | #define AR5K_QCU_RDYTIMECFG_BASE 0x0900 /* Register Address - Queue0 RDYTIMECFG */ | 564 | #define AR5K_QCU_RDYTIMECFG_BASE 0x0900 /* Register Address - Queue0 RDYTIMECFG */ |
514 | #define AR5K_QCU_RDYTIMECFG_INTVAL 0x00ffffff /* Ready time interval mask */ | 565 | #define AR5K_QCU_RDYTIMECFG_INTVAL 0x00ffffff /* Ready time interval mask */ |
515 | #define AR5K_QCU_RDYTIMECFG_INTVAL_S 0 | 566 | #define AR5K_QCU_RDYTIMECFG_INTVAL_S 0 |
516 | #define AR5K_QCU_RDYTIMECFG_DURATION 0x00ffffff /* Ready time duration mask */ | ||
517 | #define AR5K_QCU_RDYTIMECFG_ENABLE 0x01000000 /* Ready time enable mask */ | 567 | #define AR5K_QCU_RDYTIMECFG_ENABLE 0x01000000 /* Ready time enable mask */ |
518 | #define AR5K_QUEUE_RDYTIMECFG(_q) AR5K_QUEUE_REG(AR5K_QCU_RDYTIMECFG_BASE, _q) | 568 | #define AR5K_QUEUE_RDYTIMECFG(_q) AR5K_QUEUE_REG(AR5K_QCU_RDYTIMECFG_BASE, _q) |
519 | 569 | ||
@@ -534,19 +584,20 @@ | |||
534 | */ | 584 | */ |
535 | #define AR5K_QCU_MISC_BASE 0x09c0 /* Register Address -Queue0 MISC */ | 585 | #define AR5K_QCU_MISC_BASE 0x09c0 /* Register Address -Queue0 MISC */ |
536 | #define AR5K_QCU_MISC_FRSHED_M 0x0000000f /* Frame sheduling mask */ | 586 | #define AR5K_QCU_MISC_FRSHED_M 0x0000000f /* Frame sheduling mask */ |
537 | #define AR5K_QCU_MISC_FRSHED_ASAP 0 /* ASAP */ | 587 | #define AR5K_QCU_MISC_FRSHED_ASAP 0 /* ASAP */ |
538 | #define AR5K_QCU_MISC_FRSHED_CBR 1 /* Constant Bit Rate */ | 588 | #define AR5K_QCU_MISC_FRSHED_CBR 1 /* Constant Bit Rate */ |
539 | #define AR5K_QCU_MISC_FRSHED_DBA_GT 2 /* DMA Beacon alert gated (?) */ | 589 | #define AR5K_QCU_MISC_FRSHED_DBA_GT 2 /* DMA Beacon alert gated (?) */ |
540 | #define AR5K_QCU_MISC_FRSHED_TIM_GT 3 /* Time gated (?) */ | 590 | #define AR5K_QCU_MISC_FRSHED_TIM_GT 3 /* Time gated (?) */ |
541 | #define AR5K_QCU_MISC_FRSHED_BCN_SENT_GT 4 /* Beacon sent gated (?) */ | 591 | #define AR5K_QCU_MISC_FRSHED_BCN_SENT_GT 4 /* Beacon sent gated (?) */ |
542 | #define AR5K_QCU_MISC_ONESHOT_ENABLE 0x00000010 /* Oneshot enable */ | 592 | #define AR5K_QCU_MISC_ONESHOT_ENABLE 0x00000010 /* Oneshot enable */ |
543 | #define AR5K_QCU_MISC_CBREXP 0x00000020 /* CBR expired (normal queue) */ | 593 | #define AR5K_QCU_MISC_CBREXP 0x00000020 /* CBR expired (normal queue) */ |
544 | #define AR5K_QCU_MISC_CBREXP_BCN 0x00000040 /* CBR expired (beacon queue) */ | 594 | #define AR5K_QCU_MISC_CBREXP_BCN 0x00000040 /* CBR expired (beacon queue) */ |
545 | #define AR5K_QCU_MISC_BCN_ENABLE 0x00000080 /* Beacons enabled */ | 595 | #define AR5K_QCU_MISC_BCN_ENABLE 0x00000080 /* Enable Beacon use */ |
546 | #define AR5K_QCU_MISC_CBR_THRES_ENABLE 0x00000100 /* CBR threshold enabled (?) */ | 596 | #define AR5K_QCU_MISC_CBR_THRES_ENABLE 0x00000100 /* CBR threshold enabled */ |
547 | #define AR5K_QCU_MISC_TXE 0x00000200 /* TXE reset when RDYTIME enalbed (?) */ | 597 | #define AR5K_QCU_MISC_RDY_VEOL_POLICY 0x00000200 /* TXE reset when RDYTIME enalbed */ |
548 | #define AR5K_QCU_MISC_CBR 0x00000400 /* CBR threshold reset (?) */ | 598 | #define AR5K_QCU_MISC_CBR_RESET_CNT 0x00000400 /* CBR threshold (counter) reset */ |
549 | #define AR5K_QCU_MISC_DCU_EARLY 0x00000800 /* DCU reset (?) */ | 599 | #define AR5K_QCU_MISC_DCU_EARLY 0x00000800 /* DCU early termination */ |
600 | #define AR5K_QCU_MISC_DCU_CMP_EN 0x00001000 /* Enable frame compression */ | ||
550 | #define AR5K_QUEUE_MISC(_q) AR5K_QUEUE_REG(AR5K_QCU_MISC_BASE, _q) | 601 | #define AR5K_QUEUE_MISC(_q) AR5K_QUEUE_REG(AR5K_QCU_MISC_BASE, _q) |
551 | 602 | ||
552 | 603 | ||
@@ -555,7 +606,7 @@ | |||
555 | */ | 606 | */ |
556 | #define AR5K_QCU_STS_BASE 0x0a00 /* Register Address - Queue0 STS */ | 607 | #define AR5K_QCU_STS_BASE 0x0a00 /* Register Address - Queue0 STS */ |
557 | #define AR5K_QCU_STS_FRMPENDCNT 0x00000003 /* Frames pending counter */ | 608 | #define AR5K_QCU_STS_FRMPENDCNT 0x00000003 /* Frames pending counter */ |
558 | #define AR5K_QCU_STS_CBREXPCNT 0x0000ff00 /* CBR expired counter (?) */ | 609 | #define AR5K_QCU_STS_CBREXPCNT 0x0000ff00 /* CBR expired counter */ |
559 | #define AR5K_QUEUE_STATUS(_q) AR5K_QUEUE_REG(AR5K_QCU_STS_BASE, _q) | 610 | #define AR5K_QUEUE_STATUS(_q) AR5K_QUEUE_REG(AR5K_QCU_STS_BASE, _q) |
560 | 611 | ||
561 | /* | 612 | /* |
@@ -569,9 +620,11 @@ | |||
569 | */ | 620 | */ |
570 | #define AR5K_QCU_CBB_SELECT 0x0b00 | 621 | #define AR5K_QCU_CBB_SELECT 0x0b00 |
571 | #define AR5K_QCU_CBB_ADDR 0x0b04 | 622 | #define AR5K_QCU_CBB_ADDR 0x0b04 |
623 | #define AR5K_QCU_CBB_ADDR_S 9 | ||
572 | 624 | ||
573 | /* | 625 | /* |
574 | * QCU compression buffer configuration register [5212+] | 626 | * QCU compression buffer configuration register [5212+] |
627 | * (buffer size) | ||
575 | */ | 628 | */ |
576 | #define AR5K_QCU_CBCFG 0x0b08 | 629 | #define AR5K_QCU_CBCFG 0x0b08 |
577 | 630 | ||
@@ -652,80 +705,100 @@ | |||
652 | * No lockout means there is no special handling. | 705 | * No lockout means there is no special handling. |
653 | */ | 706 | */ |
654 | #define AR5K_DCU_MISC_BASE 0x1100 /* Register Address -Queue0 DCU_MISC */ | 707 | #define AR5K_DCU_MISC_BASE 0x1100 /* Register Address -Queue0 DCU_MISC */ |
655 | #define AR5K_DCU_MISC_BACKOFF 0x000007ff /* Mask for backoff setting (?) */ | 708 | #define AR5K_DCU_MISC_BACKOFF 0x000007ff /* Mask for backoff threshold */ |
656 | #define AR5K_DCU_MISC_BACKOFF_FRAG 0x00000200 /* Enable backoff while bursting */ | 709 | #define AR5K_DCU_MISC_BACKOFF_FRAG 0x00000200 /* Enable backoff while bursting */ |
657 | #define AR5K_DCU_MISC_HCFPOLL_ENABLE 0x00000800 /* CF - Poll (?) */ | 710 | #define AR5K_DCU_MISC_HCFPOLL_ENABLE 0x00000800 /* CF - Poll enable */ |
658 | #define AR5K_DCU_MISC_BACKOFF_PERSIST 0x00001000 /* Persistent backoff (?) */ | 711 | #define AR5K_DCU_MISC_BACKOFF_PERSIST 0x00001000 /* Persistent backoff */ |
659 | #define AR5K_DCU_MISC_FRMPRFTCH_ENABLE 0x00002000 /* Enable frame pre-fetch (?) */ | 712 | #define AR5K_DCU_MISC_FRMPRFTCH_ENABLE 0x00002000 /* Enable frame pre-fetch */ |
660 | #define AR5K_DCU_MISC_VIRTCOL 0x0000c000 /* Mask for Virtual Collision (?) */ | 713 | #define AR5K_DCU_MISC_VIRTCOL 0x0000c000 /* Mask for Virtual Collision (?) */ |
661 | #define AR5K_DCU_MISC_VIRTCOL_NORMAL 0 | 714 | #define AR5K_DCU_MISC_VIRTCOL_NORMAL 0 |
662 | #define AR5K_DCU_MISC_VIRTCOL_MODIFIED 1 | 715 | #define AR5K_DCU_MISC_VIRTCOL_MODIFIED 1 |
663 | #define AR5K_DCU_MISC_VIRTCOL_IGNORE 2 | 716 | #define AR5K_DCU_MISC_VIRTCOL_IGNORE 2 |
664 | #define AR5K_DCU_MISC_BCN_ENABLE 0x00010000 /* Beacon enable (?) */ | 717 | #define AR5K_DCU_MISC_BCN_ENABLE 0x00010000 /* Enable Beacon use */ |
665 | #define AR5K_DCU_MISC_ARBLOCK_CTL 0x00060000 /* Arbiter lockout control mask */ | 718 | #define AR5K_DCU_MISC_ARBLOCK_CTL 0x00060000 /* Arbiter lockout control mask */ |
666 | #define AR5K_DCU_MISC_ARBLOCK_CTL_S 17 | 719 | #define AR5K_DCU_MISC_ARBLOCK_CTL_S 17 |
667 | #define AR5K_DCU_MISC_ARBLOCK_CTL_NONE 0 /* No arbiter lockout */ | 720 | #define AR5K_DCU_MISC_ARBLOCK_CTL_NONE 0 /* No arbiter lockout */ |
668 | #define AR5K_DCU_MISC_ARBLOCK_CTL_INTFRM 1 /* Intra-frame lockout */ | 721 | #define AR5K_DCU_MISC_ARBLOCK_CTL_INTFRM 1 /* Intra-frame lockout */ |
669 | #define AR5K_DCU_MISC_ARBLOCK_CTL_GLOBAL 2 /* Global lockout */ | 722 | #define AR5K_DCU_MISC_ARBLOCK_CTL_GLOBAL 2 /* Global lockout */ |
670 | #define AR5K_DCU_MISC_ARBLOCK_IGNORE 0x00080000 | 723 | #define AR5K_DCU_MISC_ARBLOCK_IGNORE 0x00080000 /* Ignore Arbiter lockout */ |
671 | #define AR5K_DCU_MISC_SEQ_NUM_INCR_DIS 0x00100000 /* Disable sequence number increment (?) */ | 724 | #define AR5K_DCU_MISC_SEQ_NUM_INCR_DIS 0x00100000 /* Disable sequence number increment */ |
672 | #define AR5K_DCU_MISC_POST_FR_BKOFF_DIS 0x00200000 /* Disable post-frame backoff (?) */ | 725 | #define AR5K_DCU_MISC_POST_FR_BKOFF_DIS 0x00200000 /* Disable post-frame backoff */ |
673 | #define AR5K_DCU_MISC_VIRT_COLL_POLICY 0x00400000 /* Virtual Collision policy (?) */ | 726 | #define AR5K_DCU_MISC_VIRT_COLL_POLICY 0x00400000 /* Virtual Collision cw policy */ |
674 | #define AR5K_DCU_MISC_BLOWN_IFS_POLICY 0x00800000 | 727 | #define AR5K_DCU_MISC_BLOWN_IFS_POLICY 0x00800000 /* Blown IFS policy (?) */ |
675 | #define AR5K_DCU_MISC_SEQNUM_CTL 0x01000000 /* Sequence number control (?) */ | 728 | #define AR5K_DCU_MISC_SEQNUM_CTL 0x01000000 /* Sequence number control (?) */ |
676 | #define AR5K_QUEUE_DFS_MISC(_q) AR5K_QUEUE_REG(AR5K_DCU_MISC_BASE, _q) | 729 | #define AR5K_QUEUE_DFS_MISC(_q) AR5K_QUEUE_REG(AR5K_DCU_MISC_BASE, _q) |
677 | 730 | ||
678 | /* | 731 | /* |
679 | * DCU frame sequence number registers | 732 | * DCU frame sequence number registers |
680 | */ | 733 | */ |
681 | #define AR5K_DCU_SEQNUM_BASE 0x1140 | 734 | #define AR5K_DCU_SEQNUM_BASE 0x1140 |
682 | #define AR5K_DCU_SEQNUM_M 0x00000fff | 735 | #define AR5K_DCU_SEQNUM_M 0x00000fff |
683 | #define AR5K_QUEUE_DFS_SEQNUM(_q) AR5K_QUEUE_REG(AR5K_DCU_SEQNUM_BASE, _q) | 736 | #define AR5K_QUEUE_DFS_SEQNUM(_q) AR5K_QUEUE_REG(AR5K_DCU_SEQNUM_BASE, _q) |
684 | 737 | ||
685 | /* | 738 | /* |
686 | * DCU global IFS SIFS registers | 739 | * DCU global IFS SIFS register |
687 | */ | 740 | */ |
688 | #define AR5K_DCU_GBL_IFS_SIFS 0x1030 | 741 | #define AR5K_DCU_GBL_IFS_SIFS 0x1030 |
689 | #define AR5K_DCU_GBL_IFS_SIFS_M 0x0000ffff | 742 | #define AR5K_DCU_GBL_IFS_SIFS_M 0x0000ffff |
690 | 743 | ||
691 | /* | 744 | /* |
692 | * DCU global IFS slot interval registers | 745 | * DCU global IFS slot interval register |
693 | */ | 746 | */ |
694 | #define AR5K_DCU_GBL_IFS_SLOT 0x1070 | 747 | #define AR5K_DCU_GBL_IFS_SLOT 0x1070 |
695 | #define AR5K_DCU_GBL_IFS_SLOT_M 0x0000ffff | 748 | #define AR5K_DCU_GBL_IFS_SLOT_M 0x0000ffff |
696 | 749 | ||
697 | /* | 750 | /* |
698 | * DCU global IFS EIFS registers | 751 | * DCU global IFS EIFS register |
699 | */ | 752 | */ |
700 | #define AR5K_DCU_GBL_IFS_EIFS 0x10b0 | 753 | #define AR5K_DCU_GBL_IFS_EIFS 0x10b0 |
701 | #define AR5K_DCU_GBL_IFS_EIFS_M 0x0000ffff | 754 | #define AR5K_DCU_GBL_IFS_EIFS_M 0x0000ffff |
702 | 755 | ||
703 | /* | 756 | /* |
704 | * DCU global IFS misc registers | 757 | * DCU global IFS misc register |
758 | * | ||
759 | * LFSR stands for Linear Feedback Shift Register | ||
760 | * and it's used for generating pseudo-random | ||
761 | * number sequences. | ||
762 | * | ||
763 | * (If i understand corectly, random numbers are | ||
764 | * used for idle sensing -multiplied with cwmin/max etc-) | ||
705 | */ | 765 | */ |
706 | #define AR5K_DCU_GBL_IFS_MISC 0x10f0 /* Register Address */ | 766 | #define AR5K_DCU_GBL_IFS_MISC 0x10f0 /* Register Address */ |
707 | #define AR5K_DCU_GBL_IFS_MISC_LFSR_SLICE 0x00000007 | 767 | #define AR5K_DCU_GBL_IFS_MISC_LFSR_SLICE 0x00000007 /* LFSR Slice Select */ |
708 | #define AR5K_DCU_GBL_IFS_MISC_TURBO_MODE 0x00000008 /* Turbo mode (?) */ | 768 | #define AR5K_DCU_GBL_IFS_MISC_TURBO_MODE 0x00000008 /* Turbo mode */ |
709 | #define AR5K_DCU_GBL_IFS_MISC_SIFS_DUR_USEC 0x000003f0 /* SIFS Duration mask (?) */ | 769 | #define AR5K_DCU_GBL_IFS_MISC_SIFS_DUR_USEC 0x000003f0 /* SIFS Duration mask */ |
710 | #define AR5K_DCU_GBL_IFS_MISC_USEC_DUR 0x000ffc00 | 770 | #define AR5K_DCU_GBL_IFS_MISC_USEC_DUR 0x000ffc00 /* USEC Duration mask */ |
711 | #define AR5K_DCU_GBL_IFS_MISC_DCU_ARB_DELAY 0x00300000 | 771 | #define AR5K_DCU_GBL_IFS_MISC_DCU_ARB_DELAY 0x00300000 /* DCU Arbiter delay mask */ |
772 | #define AR5K_DCU_GBL_IFS_MISC_SIFS_CNT_RST 0x00400000 /* SIFC cnt reset policy (?) */ | ||
773 | #define AR5K_DCU_GBL_IFS_MISC_AIFS_CNT_RST 0x00800000 /* AIFS cnt reset policy (?) */ | ||
774 | #define AR5K_DCU_GBL_IFS_MISC_RND_LFSR_SL_DIS 0x01000000 /* Disable random LFSR slice */ | ||
712 | 775 | ||
713 | /* | 776 | /* |
714 | * DCU frame prefetch control register | 777 | * DCU frame prefetch control register |
715 | */ | 778 | */ |
716 | #define AR5K_DCU_FP 0x1230 | 779 | #define AR5K_DCU_FP 0x1230 /* Register Address */ |
780 | #define AR5K_DCU_FP_NOBURST_DCU_EN 0x00000001 /* Enable non-burst prefetch on DCU (?) */ | ||
781 | #define AR5K_DCU_FP_NOBURST_EN 0x00000010 /* Enable non-burst prefetch (?) */ | ||
782 | #define AR5K_DCU_FP_BURST_DCU_EN 0x00000020 /* Enable burst prefetch on DCU (?) */ | ||
717 | 783 | ||
718 | /* | 784 | /* |
719 | * DCU transmit pause control/status register | 785 | * DCU transmit pause control/status register |
720 | */ | 786 | */ |
721 | #define AR5K_DCU_TXP 0x1270 /* Register Address */ | 787 | #define AR5K_DCU_TXP 0x1270 /* Register Address */ |
722 | #define AR5K_DCU_TXP_M 0x000003ff /* Tx pause mask (?) */ | 788 | #define AR5K_DCU_TXP_M 0x000003ff /* Tx pause mask */ |
723 | #define AR5K_DCU_TXP_STATUS 0x00010000 /* Tx pause status (?) */ | 789 | #define AR5K_DCU_TXP_STATUS 0x00010000 /* Tx pause status */ |
790 | |||
791 | /* | ||
792 | * DCU transmit filter table 0 (32 entries) | ||
793 | */ | ||
794 | #define AR5K_DCU_TX_FILTER_0_BASE 0x1038 | ||
795 | #define AR5K_DCU_TX_FILTER_0(_n) (AR5K_DCU_TX_FILTER_0_BASE + (_n * 64)) | ||
724 | 796 | ||
725 | /* | 797 | /* |
726 | * DCU transmit filter register | 798 | * DCU transmit filter table 1 (16 entries) |
727 | */ | 799 | */ |
728 | #define AR5K_DCU_TX_FILTER 0x1038 | 800 | #define AR5K_DCU_TX_FILTER_1_BASE 0x103c |
801 | #define AR5K_DCU_TX_FILTER_1(_n) (AR5K_DCU_TX_FILTER_1_BASE + ((_n - 32) * 64)) | ||
729 | 802 | ||
730 | /* | 803 | /* |
731 | * DCU clear transmit filter register | 804 | * DCU clear transmit filter register |
@@ -739,9 +812,6 @@ | |||
739 | 812 | ||
740 | /* | 813 | /* |
741 | * Reset control register | 814 | * Reset control register |
742 | * | ||
743 | * 4 and 8 are not used in 5211/5212 and | ||
744 | * 2 means "baseband reset" on 5211/5212. | ||
745 | */ | 815 | */ |
746 | #define AR5K_RESET_CTL 0x4000 /* Register Address */ | 816 | #define AR5K_RESET_CTL 0x4000 /* Register Address */ |
747 | #define AR5K_RESET_CTL_PCU 0x00000001 /* Protocol Control Unit reset */ | 817 | #define AR5K_RESET_CTL_PCU 0x00000001 /* Protocol Control Unit reset */ |
@@ -765,6 +835,7 @@ | |||
765 | #define AR5K_SLEEP_CTL_SLE_SLP 0x00010000 /* Force chip sleep */ | 835 | #define AR5K_SLEEP_CTL_SLE_SLP 0x00010000 /* Force chip sleep */ |
766 | #define AR5K_SLEEP_CTL_SLE_ALLOW 0x00020000 | 836 | #define AR5K_SLEEP_CTL_SLE_ALLOW 0x00020000 |
767 | #define AR5K_SLEEP_CTL_SLE_UNITS 0x00000008 /* [5211+] */ | 837 | #define AR5K_SLEEP_CTL_SLE_UNITS 0x00000008 /* [5211+] */ |
838 | /* more bits */ | ||
768 | 839 | ||
769 | /* | 840 | /* |
770 | * Interrupt pending register | 841 | * Interrupt pending register |
@@ -776,13 +847,14 @@ | |||
776 | * Sleep force register | 847 | * Sleep force register |
777 | */ | 848 | */ |
778 | #define AR5K_SFR 0x400c | 849 | #define AR5K_SFR 0x400c |
779 | #define AR5K_SFR_M 0x00000001 | 850 | #define AR5K_SFR_EN 0x00000001 |
780 | 851 | ||
781 | /* | 852 | /* |
782 | * PCI configuration register | 853 | * PCI configuration register |
783 | */ | 854 | */ |
784 | #define AR5K_PCICFG 0x4010 /* Register Address */ | 855 | #define AR5K_PCICFG 0x4010 /* Register Address */ |
785 | #define AR5K_PCICFG_EEAE 0x00000001 /* Eeprom access enable [5210] */ | 856 | #define AR5K_PCICFG_EEAE 0x00000001 /* Eeprom access enable [5210] */ |
857 | #define AR5K_PCICFG_SLEEP_CLOCK_EN 0x00000002 /* Enable sleep clock (?) */ | ||
786 | #define AR5K_PCICFG_CLKRUNEN 0x00000004 /* CLKRUN enable [5211+] */ | 858 | #define AR5K_PCICFG_CLKRUNEN 0x00000004 /* CLKRUN enable [5211+] */ |
787 | #define AR5K_PCICFG_EESIZE 0x00000018 /* Mask for EEPROM size [5211+] */ | 859 | #define AR5K_PCICFG_EESIZE 0x00000018 /* Mask for EEPROM size [5211+] */ |
788 | #define AR5K_PCICFG_EESIZE_S 3 | 860 | #define AR5K_PCICFG_EESIZE_S 3 |
@@ -798,19 +870,21 @@ | |||
798 | #define AR5K_PCICFG_CBEFIX_DIS 0x00000400 /* Disable CBE fix (?) */ | 870 | #define AR5K_PCICFG_CBEFIX_DIS 0x00000400 /* Disable CBE fix (?) */ |
799 | #define AR5K_PCICFG_SL_INTEN 0x00000800 /* Enable interrupts when asleep (?) */ | 871 | #define AR5K_PCICFG_SL_INTEN 0x00000800 /* Enable interrupts when asleep (?) */ |
800 | #define AR5K_PCICFG_LED_BCTL 0x00001000 /* Led blink (?) [5210] */ | 872 | #define AR5K_PCICFG_LED_BCTL 0x00001000 /* Led blink (?) [5210] */ |
801 | #define AR5K_PCICFG_SL_INPEN 0x00002800 /* Sleep even whith pending interrupts (?) */ | 873 | #define AR5K_PCICFG_UNK 0x00001000 /* Passed on some parts durring attach (?) */ |
874 | #define AR5K_PCICFG_SL_INPEN 0x00002000 /* Sleep even whith pending interrupts (?) */ | ||
802 | #define AR5K_PCICFG_SPWR_DN 0x00010000 /* Mask for power status */ | 875 | #define AR5K_PCICFG_SPWR_DN 0x00010000 /* Mask for power status */ |
803 | #define AR5K_PCICFG_LEDMODE 0x000e0000 /* Ledmode [5211+] */ | 876 | #define AR5K_PCICFG_LEDMODE 0x000e0000 /* Ledmode [5211+] */ |
804 | #define AR5K_PCICFG_LEDMODE_PROP 0x00000000 /* Blink on standard traffic [5211+] */ | 877 | #define AR5K_PCICFG_LEDMODE_PROP 0x00000000 /* Blink on standard traffic [5211+] */ |
805 | #define AR5K_PCICFG_LEDMODE_PROM 0x00020000 /* Default mode (blink on any traffic) [5211+] */ | 878 | #define AR5K_PCICFG_LEDMODE_PROM 0x00020000 /* Default mode (blink on any traffic) [5211+] */ |
806 | #define AR5K_PCICFG_LEDMODE_PWR 0x00040000 /* Some other blinking mode (?) [5211+] */ | 879 | #define AR5K_PCICFG_LEDMODE_PWR 0x00040000 /* Some other blinking mode (?) [5211+] */ |
807 | #define AR5K_PCICFG_LEDMODE_RAND 0x00060000 /* Random blinking (?) [5211+] */ | 880 | #define AR5K_PCICFG_LEDMODE_RAND 0x00060000 /* Random blinking (?) [5211+] */ |
808 | #define AR5K_PCICFG_LEDBLINK 0x00700000 | 881 | #define AR5K_PCICFG_LEDBLINK 0x00700000 /* Led blink rate */ |
809 | #define AR5K_PCICFG_LEDBLINK_S 20 | 882 | #define AR5K_PCICFG_LEDBLINK_S 20 |
810 | #define AR5K_PCICFG_LEDSLOW 0x00800000 /* Slow led blink rate (?) [5211+] */ | 883 | #define AR5K_PCICFG_LEDSLOW 0x00800000 /* Slowest led blink rate [5211+] */ |
811 | #define AR5K_PCICFG_LEDSTATE \ | 884 | #define AR5K_PCICFG_LEDSTATE \ |
812 | (AR5K_PCICFG_LED | AR5K_PCICFG_LEDMODE | \ | 885 | (AR5K_PCICFG_LED | AR5K_PCICFG_LEDMODE | \ |
813 | AR5K_PCICFG_LEDBLINK | AR5K_PCICFG_LEDSLOW) | 886 | AR5K_PCICFG_LEDBLINK | AR5K_PCICFG_LEDSLOW) |
887 | #define AR5K_PCICFG_SLEEP_CLOCK_RATE 0x03000000 /* Sleep clock rate (field) */ | ||
814 | 888 | ||
815 | /* | 889 | /* |
816 | * "General Purpose Input/Output" (GPIO) control register | 890 | * "General Purpose Input/Output" (GPIO) control register |
@@ -947,7 +1021,7 @@ | |||
947 | #define AR5K_EEPROM_VERSION_4_4 0x4004 | 1021 | #define AR5K_EEPROM_VERSION_4_4 0x4004 |
948 | #define AR5K_EEPROM_VERSION_4_5 0x4005 | 1022 | #define AR5K_EEPROM_VERSION_4_5 0x4005 |
949 | #define AR5K_EEPROM_VERSION_4_6 0x4006 /* has ee_scaled_cck_delta */ | 1023 | #define AR5K_EEPROM_VERSION_4_6 0x4006 /* has ee_scaled_cck_delta */ |
950 | #define AR5K_EEPROM_VERSION_4_7 0x3007 | 1024 | #define AR5K_EEPROM_VERSION_4_7 0x4007 |
951 | 1025 | ||
952 | #define AR5K_EEPROM_MODE_11A 0 | 1026 | #define AR5K_EEPROM_MODE_11A 0 |
953 | #define AR5K_EEPROM_MODE_11B 1 | 1027 | #define AR5K_EEPROM_MODE_11B 1 |
@@ -1023,10 +1097,14 @@ | |||
1023 | #define AR5K_EEPROM_STAT_WRDONE 0x00000008 /* EEPROM write successful */ | 1097 | #define AR5K_EEPROM_STAT_WRDONE 0x00000008 /* EEPROM write successful */ |
1024 | 1098 | ||
1025 | /* | 1099 | /* |
1026 | * EEPROM config register (?) | 1100 | * EEPROM config register |
1027 | */ | 1101 | */ |
1028 | #define AR5K_EEPROM_CFG 0x6010 | 1102 | #define AR5K_EEPROM_CFG 0x6010 /* Register Addres */ |
1029 | 1103 | #define AR5K_EEPROM_CFG_SIZE_OVR 0x00000001 | |
1104 | #define AR5K_EEPROM_CFG_WR_WAIT_DIS 0x00000004 /* Disable write wait */ | ||
1105 | #define AR5K_EEPROM_CFG_CLK_RATE 0x00000018 /* Clock rate */ | ||
1106 | #define AR5K_EEPROM_CFG_PROT_KEY 0x00ffff00 /* Protectio key */ | ||
1107 | #define AR5K_EEPROM_CFG_LIND_EN 0x01000000 /* Enable length indicator (?) */ | ||
1030 | 1108 | ||
1031 | 1109 | ||
1032 | /* | 1110 | /* |
@@ -1050,7 +1128,7 @@ | |||
1050 | #define AR5K_STA_ID1 0x8004 /* Register Address */ | 1128 | #define AR5K_STA_ID1 0x8004 /* Register Address */ |
1051 | #define AR5K_STA_ID1_AP 0x00010000 /* Set AP mode */ | 1129 | #define AR5K_STA_ID1_AP 0x00010000 /* Set AP mode */ |
1052 | #define AR5K_STA_ID1_ADHOC 0x00020000 /* Set Ad-Hoc mode */ | 1130 | #define AR5K_STA_ID1_ADHOC 0x00020000 /* Set Ad-Hoc mode */ |
1053 | #define AR5K_STA_ID1_PWR_SV 0x00040000 /* Power save reporting (?) */ | 1131 | #define AR5K_STA_ID1_PWR_SV 0x00040000 /* Power save reporting */ |
1054 | #define AR5K_STA_ID1_NO_KEYSRCH 0x00080000 /* No key search */ | 1132 | #define AR5K_STA_ID1_NO_KEYSRCH 0x00080000 /* No key search */ |
1055 | #define AR5K_STA_ID1_NO_PSPOLL 0x00100000 /* No power save polling [5210] */ | 1133 | #define AR5K_STA_ID1_NO_PSPOLL 0x00100000 /* No power save polling [5210] */ |
1056 | #define AR5K_STA_ID1_PCF_5211 0x00100000 /* Enable PCF on [5211+] */ | 1134 | #define AR5K_STA_ID1_PCF_5211 0x00100000 /* Enable PCF on [5211+] */ |
@@ -1059,9 +1137,13 @@ | |||
1059 | AR5K_STA_ID1_PCF_5210 : AR5K_STA_ID1_PCF_5211) | 1137 | AR5K_STA_ID1_PCF_5210 : AR5K_STA_ID1_PCF_5211) |
1060 | #define AR5K_STA_ID1_DEFAULT_ANTENNA 0x00200000 /* Use default antenna */ | 1138 | #define AR5K_STA_ID1_DEFAULT_ANTENNA 0x00200000 /* Use default antenna */ |
1061 | #define AR5K_STA_ID1_DESC_ANTENNA 0x00400000 /* Update antenna from descriptor */ | 1139 | #define AR5K_STA_ID1_DESC_ANTENNA 0x00400000 /* Update antenna from descriptor */ |
1062 | #define AR5K_STA_ID1_RTS_DEF_ANTENNA 0x00800000 /* Use default antenna for RTS (?) */ | 1140 | #define AR5K_STA_ID1_RTS_DEF_ANTENNA 0x00800000 /* Use default antenna for RTS */ |
1063 | #define AR5K_STA_ID1_ACKCTS_6MB 0x01000000 /* Use 6Mbit/s for ACK/CTS (?) */ | 1141 | #define AR5K_STA_ID1_ACKCTS_6MB 0x01000000 /* Use 6Mbit/s for ACK/CTS */ |
1064 | #define AR5K_STA_ID1_BASE_RATE_11B 0x02000000 /* Use 11b base rate (for ACK/CTS ?) [5211+] */ | 1142 | #define AR5K_STA_ID1_BASE_RATE_11B 0x02000000 /* Use 11b base rate (for ACK/CTS ?) [5211+] */ |
1143 | #define AR5K_STA_ID1_SELF_GEN_SECTORE 0x04000000 /* Self generate sectore (?) */ | ||
1144 | #define AR5K_STA_ID1_CRYPT_MIC_EN 0x08000000 /* Enable MIC */ | ||
1145 | #define AR5K_STA_ID1_KEYSRCH_MODE 0x10000000 /* Keysearch mode (?) */ | ||
1146 | #define AR5K_STA_ID1_PRESERVE_SEQ_NUM 0x20000000 /* Preserve sequence number */ | ||
1065 | 1147 | ||
1066 | /* | 1148 | /* |
1067 | * First BSSID register (MAC address, lower 32bits) | 1149 | * First BSSID register (MAC address, lower 32bits) |
@@ -1117,7 +1199,7 @@ | |||
1117 | * | 1199 | * |
1118 | * Retry limit register for 5210 (no QCU/DCU so it's done in PCU) | 1200 | * Retry limit register for 5210 (no QCU/DCU so it's done in PCU) |
1119 | */ | 1201 | */ |
1120 | #define AR5K_NODCU_RETRY_LMT 0x801c /*Register Address */ | 1202 | #define AR5K_NODCU_RETRY_LMT 0x801c /* Register Address */ |
1121 | #define AR5K_NODCU_RETRY_LMT_SH_RETRY 0x0000000f /* Short retry limit mask */ | 1203 | #define AR5K_NODCU_RETRY_LMT_SH_RETRY 0x0000000f /* Short retry limit mask */ |
1122 | #define AR5K_NODCU_RETRY_LMT_SH_RETRY_S 0 | 1204 | #define AR5K_NODCU_RETRY_LMT_SH_RETRY_S 0 |
1123 | #define AR5K_NODCU_RETRY_LMT_LG_RETRY 0x000000f0 /* Long retry mask */ | 1205 | #define AR5K_NODCU_RETRY_LMT_LG_RETRY 0x000000f0 /* Long retry mask */ |
@@ -1136,9 +1218,9 @@ | |||
1136 | #define AR5K_USEC_5211 0x801c /* Register Address [5211+] */ | 1218 | #define AR5K_USEC_5211 0x801c /* Register Address [5211+] */ |
1137 | #define AR5K_USEC (ah->ah_version == AR5K_AR5210 ? \ | 1219 | #define AR5K_USEC (ah->ah_version == AR5K_AR5210 ? \ |
1138 | AR5K_USEC_5210 : AR5K_USEC_5211) | 1220 | AR5K_USEC_5210 : AR5K_USEC_5211) |
1139 | #define AR5K_USEC_1 0x0000007f | 1221 | #define AR5K_USEC_1 0x0000007f /* clock cycles for 1us */ |
1140 | #define AR5K_USEC_1_S 0 | 1222 | #define AR5K_USEC_1_S 0 |
1141 | #define AR5K_USEC_32 0x00003f80 | 1223 | #define AR5K_USEC_32 0x00003f80 /* clock cycles for 1us while on 32Mhz clock */ |
1142 | #define AR5K_USEC_32_S 7 | 1224 | #define AR5K_USEC_32_S 7 |
1143 | #define AR5K_USEC_TX_LATENCY_5211 0x007fc000 | 1225 | #define AR5K_USEC_TX_LATENCY_5211 0x007fc000 |
1144 | #define AR5K_USEC_TX_LATENCY_5211_S 14 | 1226 | #define AR5K_USEC_TX_LATENCY_5211_S 14 |
@@ -1152,16 +1234,16 @@ | |||
1152 | /* | 1234 | /* |
1153 | * PCU beacon control register | 1235 | * PCU beacon control register |
1154 | */ | 1236 | */ |
1155 | #define AR5K_BEACON_5210 0x8024 | 1237 | #define AR5K_BEACON_5210 0x8024 /*Register Address [5210] */ |
1156 | #define AR5K_BEACON_5211 0x8020 | 1238 | #define AR5K_BEACON_5211 0x8020 /*Register Address [5211+] */ |
1157 | #define AR5K_BEACON (ah->ah_version == AR5K_AR5210 ? \ | 1239 | #define AR5K_BEACON (ah->ah_version == AR5K_AR5210 ? \ |
1158 | AR5K_BEACON_5210 : AR5K_BEACON_5211) | 1240 | AR5K_BEACON_5210 : AR5K_BEACON_5211) |
1159 | #define AR5K_BEACON_PERIOD 0x0000ffff | 1241 | #define AR5K_BEACON_PERIOD 0x0000ffff /* Mask for beacon period */ |
1160 | #define AR5K_BEACON_PERIOD_S 0 | 1242 | #define AR5K_BEACON_PERIOD_S 0 |
1161 | #define AR5K_BEACON_TIM 0x007f0000 | 1243 | #define AR5K_BEACON_TIM 0x007f0000 /* Mask for TIM offset */ |
1162 | #define AR5K_BEACON_TIM_S 16 | 1244 | #define AR5K_BEACON_TIM_S 16 |
1163 | #define AR5K_BEACON_ENABLE 0x00800000 | 1245 | #define AR5K_BEACON_ENABLE 0x00800000 /* Enable beacons */ |
1164 | #define AR5K_BEACON_RESET_TSF 0x01000000 | 1246 | #define AR5K_BEACON_RESET_TSF 0x01000000 /* Force TSF reset */ |
1165 | 1247 | ||
1166 | /* | 1248 | /* |
1167 | * CFP period register | 1249 | * CFP period register |
@@ -1234,7 +1316,6 @@ | |||
1234 | 1316 | ||
1235 | /* | 1317 | /* |
1236 | * Receive filter register | 1318 | * Receive filter register |
1237 | * TODO: Get these out of ar5xxx.h on ath5k | ||
1238 | */ | 1319 | */ |
1239 | #define AR5K_RX_FILTER_5210 0x804c /* Register Address [5210] */ | 1320 | #define AR5K_RX_FILTER_5210 0x804c /* Register Address [5210] */ |
1240 | #define AR5K_RX_FILTER_5211 0x803c /* Register Address [5211+] */ | 1321 | #define AR5K_RX_FILTER_5211 0x803c /* Register Address [5211+] */ |
@@ -1307,11 +1388,11 @@ | |||
1307 | #define AR5K_DIAG_SW_5211 0x8048 /* Register Address [5211+] */ | 1388 | #define AR5K_DIAG_SW_5211 0x8048 /* Register Address [5211+] */ |
1308 | #define AR5K_DIAG_SW (ah->ah_version == AR5K_AR5210 ? \ | 1389 | #define AR5K_DIAG_SW (ah->ah_version == AR5K_AR5210 ? \ |
1309 | AR5K_DIAG_SW_5210 : AR5K_DIAG_SW_5211) | 1390 | AR5K_DIAG_SW_5210 : AR5K_DIAG_SW_5211) |
1310 | #define AR5K_DIAG_SW_DIS_WEP_ACK 0x00000001 | 1391 | #define AR5K_DIAG_SW_DIS_WEP_ACK 0x00000001 /* Disable ACKs if WEP key is invalid */ |
1311 | #define AR5K_DIAG_SW_DIS_ACK 0x00000002 /* Disable ACKs (?) */ | 1392 | #define AR5K_DIAG_SW_DIS_ACK 0x00000002 /* Disable ACKs */ |
1312 | #define AR5K_DIAG_SW_DIS_CTS 0x00000004 /* Disable CTSs (?) */ | 1393 | #define AR5K_DIAG_SW_DIS_CTS 0x00000004 /* Disable CTSs */ |
1313 | #define AR5K_DIAG_SW_DIS_ENC 0x00000008 /* Disable encryption (?) */ | 1394 | #define AR5K_DIAG_SW_DIS_ENC 0x00000008 /* Disable encryption */ |
1314 | #define AR5K_DIAG_SW_DIS_DEC 0x00000010 /* Disable decryption (?) */ | 1395 | #define AR5K_DIAG_SW_DIS_DEC 0x00000010 /* Disable decryption */ |
1315 | #define AR5K_DIAG_SW_DIS_TX 0x00000020 /* Disable transmit [5210] */ | 1396 | #define AR5K_DIAG_SW_DIS_TX 0x00000020 /* Disable transmit [5210] */ |
1316 | #define AR5K_DIAG_SW_DIS_RX_5210 0x00000040 /* Disable recieve */ | 1397 | #define AR5K_DIAG_SW_DIS_RX_5210 0x00000040 /* Disable recieve */ |
1317 | #define AR5K_DIAG_SW_DIS_RX_5211 0x00000020 | 1398 | #define AR5K_DIAG_SW_DIS_RX_5211 0x00000020 |
@@ -1329,13 +1410,13 @@ | |||
1329 | #define AR5K_DIAG_SW_CHAN_INFO_5211 0x00000100 | 1410 | #define AR5K_DIAG_SW_CHAN_INFO_5211 0x00000100 |
1330 | #define AR5K_DIAG_SW_CHAN_INFO (ah->ah_version == AR5K_AR5210 ? \ | 1411 | #define AR5K_DIAG_SW_CHAN_INFO (ah->ah_version == AR5K_AR5210 ? \ |
1331 | AR5K_DIAG_SW_CHAN_INFO_5210 : AR5K_DIAG_SW_CHAN_INFO_5211) | 1412 | AR5K_DIAG_SW_CHAN_INFO_5210 : AR5K_DIAG_SW_CHAN_INFO_5211) |
1332 | #define AR5K_DIAG_SW_EN_SCRAM_SEED_5211 0x00000200 /* Scrambler seed (?) */ | 1413 | #define AR5K_DIAG_SW_EN_SCRAM_SEED_5211 0x00000200 /* Enable scrambler seed */ |
1333 | #define AR5K_DIAG_SW_EN_SCRAM_SEED_5210 0x00000400 | 1414 | #define AR5K_DIAG_SW_EN_SCRAM_SEED_5210 0x00000400 |
1334 | #define AR5K_DIAG_SW_EN_SCRAM_SEED (ah->ah_version == AR5K_AR5210 ? \ | 1415 | #define AR5K_DIAG_SW_EN_SCRAM_SEED (ah->ah_version == AR5K_AR5210 ? \ |
1335 | AR5K_DIAG_SW_EN_SCRAM_SEED_5210 : AR5K_DIAG_SW_EN_SCRAM_SEED_5211) | 1416 | AR5K_DIAG_SW_EN_SCRAM_SEED_5210 : AR5K_DIAG_SW_EN_SCRAM_SEED_5211) |
1336 | #define AR5K_DIAG_SW_ECO_ENABLE 0x00000400 /* [5211+] */ | 1417 | #define AR5K_DIAG_SW_ECO_ENABLE 0x00000400 /* [5211+] */ |
1337 | #define AR5K_DIAG_SW_SCVRAM_SEED 0x0003f800 /* [5210] */ | 1418 | #define AR5K_DIAG_SW_SCVRAM_SEED 0x0003f800 /* [5210] */ |
1338 | #define AR5K_DIAG_SW_SCRAM_SEED_M 0x0001fc00 /* Scrambler seed mask (?) */ | 1419 | #define AR5K_DIAG_SW_SCRAM_SEED_M 0x0001fc00 /* Scrambler seed mask */ |
1339 | #define AR5K_DIAG_SW_SCRAM_SEED_S 10 | 1420 | #define AR5K_DIAG_SW_SCRAM_SEED_S 10 |
1340 | #define AR5K_DIAG_SW_DIS_SEQ_INC 0x00040000 /* Disable seqnum increment (?)[5210] */ | 1421 | #define AR5K_DIAG_SW_DIS_SEQ_INC 0x00040000 /* Disable seqnum increment (?)[5210] */ |
1341 | #define AR5K_DIAG_SW_FRAME_NV0_5210 0x00080000 | 1422 | #define AR5K_DIAG_SW_FRAME_NV0_5210 0x00080000 |
@@ -1344,6 +1425,7 @@ | |||
1344 | AR5K_DIAG_SW_FRAME_NV0_5210 : AR5K_DIAG_SW_FRAME_NV0_5211) | 1425 | AR5K_DIAG_SW_FRAME_NV0_5210 : AR5K_DIAG_SW_FRAME_NV0_5211) |
1345 | #define AR5K_DIAG_SW_OBSPT_M 0x000c0000 | 1426 | #define AR5K_DIAG_SW_OBSPT_M 0x000c0000 |
1346 | #define AR5K_DIAG_SW_OBSPT_S 18 | 1427 | #define AR5K_DIAG_SW_OBSPT_S 18 |
1428 | /* more bits */ | ||
1347 | 1429 | ||
1348 | /* | 1430 | /* |
1349 | * TSF (clock) register (lower 32 bits) | 1431 | * TSF (clock) register (lower 32 bits) |
@@ -1369,15 +1451,34 @@ | |||
1369 | /* | 1451 | /* |
1370 | * ADDAC test register [5211+] | 1452 | * ADDAC test register [5211+] |
1371 | */ | 1453 | */ |
1372 | #define AR5K_ADDAC_TEST 0x8054 | 1454 | #define AR5K_ADDAC_TEST 0x8054 /* Register Address */ |
1373 | #define AR5K_ADDAC_TEST_TXCONT 0x00000001 | 1455 | #define AR5K_ADDAC_TEST_TXCONT 0x00000001 /* Test continuous tx */ |
1456 | #define AR5K_ADDAC_TEST_TST_MODE 0x00000002 /* Test mode */ | ||
1457 | #define AR5K_ADDAC_TEST_LOOP_EN 0x00000004 /* Enable loop */ | ||
1458 | #define AR5K_ADDAC_TEST_LOOP_LEN 0x00000008 /* Loop length (field) */ | ||
1459 | #define AR5K_ADDAC_TEST_USE_U8 0x00004000 /* Use upper 8 bits */ | ||
1460 | #define AR5K_ADDAC_TEST_MSB 0x00008000 /* State of MSB */ | ||
1461 | #define AR5K_ADDAC_TEST_TRIG_SEL 0x00010000 /* Trigger select */ | ||
1462 | #define AR5K_ADDAC_TEST_TRIG_PTY 0x00020000 /* Trigger polarity */ | ||
1463 | #define AR5K_ADDAC_TEST_RXCONT 0x00040000 /* Continuous capture */ | ||
1464 | #define AR5K_ADDAC_TEST_CAPTURE 0x00080000 /* Begin capture */ | ||
1465 | #define AR5K_ADDAC_TEST_TST_ARM 0x00100000 /* Test ARM (Adaptive Radio Mode ?) */ | ||
1374 | 1466 | ||
1375 | /* | 1467 | /* |
1376 | * Default antenna register [5211+] | 1468 | * Default antenna register [5211+] |
1377 | */ | 1469 | */ |
1378 | #define AR5K_DEFAULT_ANTENNA 0x8058 | 1470 | #define AR5K_DEFAULT_ANTENNA 0x8058 |
1379 | 1471 | ||
1472 | /* | ||
1473 | * Frame control QoS mask register (?) [5211+] | ||
1474 | * (FC_QOS_MASK) | ||
1475 | */ | ||
1476 | #define AR5K_FRAME_CTL_QOSM 0x805c | ||
1380 | 1477 | ||
1478 | /* | ||
1479 | * Seq mask register (?) [5211+] | ||
1480 | */ | ||
1481 | #define AR5K_SEQ_MASK 0x8060 | ||
1381 | 1482 | ||
1382 | /* | 1483 | /* |
1383 | * Retry count register [5210] | 1484 | * Retry count register [5210] |
@@ -1449,124 +1550,242 @@ | |||
1449 | /* | 1550 | /* |
1450 | * XR (eXtended Range) mode register | 1551 | * XR (eXtended Range) mode register |
1451 | */ | 1552 | */ |
1452 | #define AR5K_XRMODE 0x80c0 | 1553 | #define AR5K_XRMODE 0x80c0 /* Register Address */ |
1453 | #define AR5K_XRMODE_POLL_TYPE_M 0x0000003f | 1554 | #define AR5K_XRMODE_POLL_TYPE_M 0x0000003f /* Mask for Poll type (?) */ |
1454 | #define AR5K_XRMODE_POLL_TYPE_S 0 | 1555 | #define AR5K_XRMODE_POLL_TYPE_S 0 |
1455 | #define AR5K_XRMODE_POLL_SUBTYPE_M 0x0000003c | 1556 | #define AR5K_XRMODE_POLL_SUBTYPE_M 0x0000003c /* Mask for Poll subtype (?) */ |
1456 | #define AR5K_XRMODE_POLL_SUBTYPE_S 2 | 1557 | #define AR5K_XRMODE_POLL_SUBTYPE_S 2 |
1457 | #define AR5K_XRMODE_POLL_WAIT_ALL 0x00000080 | 1558 | #define AR5K_XRMODE_POLL_WAIT_ALL 0x00000080 /* Wait for poll */ |
1458 | #define AR5K_XRMODE_SIFS_DELAY 0x000fff00 | 1559 | #define AR5K_XRMODE_SIFS_DELAY 0x000fff00 /* Mask for SIFS delay */ |
1459 | #define AR5K_XRMODE_FRAME_HOLD_M 0xfff00000 | 1560 | #define AR5K_XRMODE_FRAME_HOLD_M 0xfff00000 /* Mask for frame hold (?) */ |
1460 | #define AR5K_XRMODE_FRAME_HOLD_S 20 | 1561 | #define AR5K_XRMODE_FRAME_HOLD_S 20 |
1461 | 1562 | ||
1462 | /* | 1563 | /* |
1463 | * XR delay register | 1564 | * XR delay register |
1464 | */ | 1565 | */ |
1465 | #define AR5K_XRDELAY 0x80c4 | 1566 | #define AR5K_XRDELAY 0x80c4 /* Register Address */ |
1466 | #define AR5K_XRDELAY_SLOT_DELAY_M 0x0000ffff | 1567 | #define AR5K_XRDELAY_SLOT_DELAY_M 0x0000ffff /* Mask for slot delay */ |
1467 | #define AR5K_XRDELAY_SLOT_DELAY_S 0 | 1568 | #define AR5K_XRDELAY_SLOT_DELAY_S 0 |
1468 | #define AR5K_XRDELAY_CHIRP_DELAY_M 0xffff0000 | 1569 | #define AR5K_XRDELAY_CHIRP_DELAY_M 0xffff0000 /* Mask for CHIRP data delay */ |
1469 | #define AR5K_XRDELAY_CHIRP_DELAY_S 16 | 1570 | #define AR5K_XRDELAY_CHIRP_DELAY_S 16 |
1470 | 1571 | ||
1471 | /* | 1572 | /* |
1472 | * XR timeout register | 1573 | * XR timeout register |
1473 | */ | 1574 | */ |
1474 | #define AR5K_XRTIMEOUT 0x80c8 | 1575 | #define AR5K_XRTIMEOUT 0x80c8 /* Register Address */ |
1475 | #define AR5K_XRTIMEOUT_CHIRP_M 0x0000ffff | 1576 | #define AR5K_XRTIMEOUT_CHIRP_M 0x0000ffff /* Mask for CHIRP timeout */ |
1476 | #define AR5K_XRTIMEOUT_CHIRP_S 0 | 1577 | #define AR5K_XRTIMEOUT_CHIRP_S 0 |
1477 | #define AR5K_XRTIMEOUT_POLL_M 0xffff0000 | 1578 | #define AR5K_XRTIMEOUT_POLL_M 0xffff0000 /* Mask for Poll timeout */ |
1478 | #define AR5K_XRTIMEOUT_POLL_S 16 | 1579 | #define AR5K_XRTIMEOUT_POLL_S 16 |
1479 | 1580 | ||
1480 | /* | 1581 | /* |
1481 | * XR chirp register | 1582 | * XR chirp register |
1482 | */ | 1583 | */ |
1483 | #define AR5K_XRCHIRP 0x80cc | 1584 | #define AR5K_XRCHIRP 0x80cc /* Register Address */ |
1484 | #define AR5K_XRCHIRP_SEND 0x00000001 | 1585 | #define AR5K_XRCHIRP_SEND 0x00000001 /* Send CHIRP */ |
1485 | #define AR5K_XRCHIRP_GAP 0xffff0000 | 1586 | #define AR5K_XRCHIRP_GAP 0xffff0000 /* Mask for CHIRP gap (?) */ |
1486 | 1587 | ||
1487 | /* | 1588 | /* |
1488 | * XR stomp register | 1589 | * XR stomp register |
1489 | */ | 1590 | */ |
1490 | #define AR5K_XRSTOMP 0x80d0 | 1591 | #define AR5K_XRSTOMP 0x80d0 /* Register Address */ |
1491 | #define AR5K_XRSTOMP_TX 0x00000001 | 1592 | #define AR5K_XRSTOMP_TX 0x00000001 /* Stomp Tx (?) */ |
1492 | #define AR5K_XRSTOMP_RX_ABORT 0x00000002 | 1593 | #define AR5K_XRSTOMP_RX 0x00000002 /* Stomp Rx (?) */ |
1493 | #define AR5K_XRSTOMP_RSSI_THRES 0x0000ff00 | 1594 | #define AR5K_XRSTOMP_TX_RSSI 0x00000004 /* Stomp Tx RSSI (?) */ |
1595 | #define AR5K_XRSTOMP_TX_BSSID 0x00000008 /* Stomp Tx BSSID (?) */ | ||
1596 | #define AR5K_XRSTOMP_DATA 0x00000010 /* Stomp data (?)*/ | ||
1597 | #define AR5K_XRSTOMP_RSSI_THRES 0x0000ff00 /* Mask for XR RSSI threshold */ | ||
1494 | 1598 | ||
1495 | /* | 1599 | /* |
1496 | * First enhanced sleep register | 1600 | * First enhanced sleep register |
1497 | */ | 1601 | */ |
1498 | #define AR5K_SLEEP0 0x80d4 | 1602 | #define AR5K_SLEEP0 0x80d4 /* Register Address */ |
1499 | #define AR5K_SLEEP0_NEXT_DTIM 0x0007ffff | 1603 | #define AR5K_SLEEP0_NEXT_DTIM 0x0007ffff /* Mask for next DTIM (?) */ |
1500 | #define AR5K_SLEEP0_NEXT_DTIM_S 0 | 1604 | #define AR5K_SLEEP0_NEXT_DTIM_S 0 |
1501 | #define AR5K_SLEEP0_ASSUME_DTIM 0x00080000 | 1605 | #define AR5K_SLEEP0_ASSUME_DTIM 0x00080000 /* Assume DTIM */ |
1502 | #define AR5K_SLEEP0_ENH_SLEEP_EN 0x00100000 | 1606 | #define AR5K_SLEEP0_ENH_SLEEP_EN 0x00100000 /* Enable enchanced sleep control */ |
1503 | #define AR5K_SLEEP0_CABTO 0xff000000 | 1607 | #define AR5K_SLEEP0_CABTO 0xff000000 /* Mask for CAB Time Out */ |
1504 | #define AR5K_SLEEP0_CABTO_S 24 | 1608 | #define AR5K_SLEEP0_CABTO_S 24 |
1505 | 1609 | ||
1506 | /* | 1610 | /* |
1507 | * Second enhanced sleep register | 1611 | * Second enhanced sleep register |
1508 | */ | 1612 | */ |
1509 | #define AR5K_SLEEP1 0x80d8 | 1613 | #define AR5K_SLEEP1 0x80d8 /* Register Address */ |
1510 | #define AR5K_SLEEP1_NEXT_TIM 0x0007ffff | 1614 | #define AR5K_SLEEP1_NEXT_TIM 0x0007ffff /* Mask for next TIM (?) */ |
1511 | #define AR5K_SLEEP1_NEXT_TIM_S 0 | 1615 | #define AR5K_SLEEP1_NEXT_TIM_S 0 |
1512 | #define AR5K_SLEEP1_BEACON_TO 0xff000000 | 1616 | #define AR5K_SLEEP1_BEACON_TO 0xff000000 /* Mask for Beacon Time Out */ |
1513 | #define AR5K_SLEEP1_BEACON_TO_S 24 | 1617 | #define AR5K_SLEEP1_BEACON_TO_S 24 |
1514 | 1618 | ||
1515 | /* | 1619 | /* |
1516 | * Third enhanced sleep register | 1620 | * Third enhanced sleep register |
1517 | */ | 1621 | */ |
1518 | #define AR5K_SLEEP2 0x80dc | 1622 | #define AR5K_SLEEP2 0x80dc /* Register Address */ |
1519 | #define AR5K_SLEEP2_TIM_PER 0x0000ffff | 1623 | #define AR5K_SLEEP2_TIM_PER 0x0000ffff /* Mask for TIM period (?) */ |
1520 | #define AR5K_SLEEP2_TIM_PER_S 0 | 1624 | #define AR5K_SLEEP2_TIM_PER_S 0 |
1521 | #define AR5K_SLEEP2_DTIM_PER 0xffff0000 | 1625 | #define AR5K_SLEEP2_DTIM_PER 0xffff0000 /* Mask for DTIM period (?) */ |
1522 | #define AR5K_SLEEP2_DTIM_PER_S 16 | 1626 | #define AR5K_SLEEP2_DTIM_PER_S 16 |
1523 | 1627 | ||
1524 | /* | 1628 | /* |
1525 | * BSSID mask registers | 1629 | * BSSID mask registers |
1526 | */ | 1630 | */ |
1527 | #define AR5K_BSS_IDM0 0x80e0 | 1631 | #define AR5K_BSS_IDM0 0x80e0 /* Upper bits */ |
1528 | #define AR5K_BSS_IDM1 0x80e4 | 1632 | #define AR5K_BSS_IDM1 0x80e4 /* Lower bits */ |
1529 | 1633 | ||
1530 | /* | 1634 | /* |
1531 | * TX power control (TPC) register | 1635 | * TX power control (TPC) register |
1636 | * | ||
1637 | * XXX: PCDAC steps (0.5dbm) or DBM ? | ||
1638 | * | ||
1639 | * XXX: Mask changes for newer chips to 7f | ||
1640 | * like tx power table ? | ||
1532 | */ | 1641 | */ |
1533 | #define AR5K_TXPC 0x80e8 | 1642 | #define AR5K_TXPC 0x80e8 /* Register Address */ |
1534 | #define AR5K_TXPC_ACK_M 0x0000003f | 1643 | #define AR5K_TXPC_ACK_M 0x0000003f /* Mask for ACK tx power */ |
1535 | #define AR5K_TXPC_ACK_S 0 | 1644 | #define AR5K_TXPC_ACK_S 0 |
1536 | #define AR5K_TXPC_CTS_M 0x00003f00 | 1645 | #define AR5K_TXPC_CTS_M 0x00003f00 /* Mask for CTS tx power */ |
1537 | #define AR5K_TXPC_CTS_S 8 | 1646 | #define AR5K_TXPC_CTS_S 8 |
1538 | #define AR5K_TXPC_CHIRP_M 0x003f0000 | 1647 | #define AR5K_TXPC_CHIRP_M 0x003f0000 /* Mask for CHIRP tx power */ |
1539 | #define AR5K_TXPC_CHIRP_S 22 | 1648 | #define AR5K_TXPC_CHIRP_S 22 |
1540 | 1649 | ||
1541 | /* | 1650 | /* |
1542 | * Profile count registers | 1651 | * Profile count registers |
1543 | */ | 1652 | */ |
1544 | #define AR5K_PROFCNT_TX 0x80ec | 1653 | #define AR5K_PROFCNT_TX 0x80ec /* Tx count */ |
1545 | #define AR5K_PROFCNT_RX 0x80f0 | 1654 | #define AR5K_PROFCNT_RX 0x80f0 /* Rx count */ |
1546 | #define AR5K_PROFCNT_RXCLR 0x80f4 | 1655 | #define AR5K_PROFCNT_RXCLR 0x80f4 /* Clear Rx count */ |
1547 | #define AR5K_PROFCNT_CYCLE 0x80f8 | 1656 | #define AR5K_PROFCNT_CYCLE 0x80f8 /* Cycle count (?) */ |
1657 | |||
1658 | /* | ||
1659 | * Quiet (period) control registers (?) | ||
1660 | */ | ||
1661 | #define AR5K_QUIET_CTL1 0x80fc /* Register Address */ | ||
1662 | #define AR5K_QUIET_CTL1_NEXT_QT 0x0000ffff /* Mask for next quiet (period?) (?) */ | ||
1663 | #define AR5K_QUIET_CTL1_QT_EN 0x00010000 /* Enable quiet (period?) */ | ||
1664 | #define AR5K_QUIET_CTL2 0x8100 /* Register Address */ | ||
1665 | #define AR5K_QUIET_CTL2_QT_PER 0x0000ffff /* Mask for quiet period (?) */ | ||
1666 | #define AR5K_QUIET_CTL2_QT_DUR 0xffff0000 /* Mask for quiet duration (?) */ | ||
1548 | 1667 | ||
1549 | /* | 1668 | /* |
1550 | * TSF parameter register | 1669 | * TSF parameter register |
1551 | */ | 1670 | */ |
1552 | #define AR5K_TSF_PARM 0x8104 | 1671 | #define AR5K_TSF_PARM 0x8104 /* Register Address */ |
1553 | #define AR5K_TSF_PARM_INC_M 0x000000ff | 1672 | #define AR5K_TSF_PARM_INC_M 0x000000ff /* Mask for TSF increment */ |
1554 | #define AR5K_TSF_PARM_INC_S 0 | 1673 | #define AR5K_TSF_PARM_INC_S 0 |
1555 | 1674 | ||
1556 | /* | 1675 | /* |
1676 | * QoS register (?) | ||
1677 | */ | ||
1678 | #define AR5K_QOS 0x8108 /* Register Address */ | ||
1679 | #define AR5K_QOS_NOACK_2BIT_VALUES 0x00000000 /* (field) */ | ||
1680 | #define AR5K_QOS_NOACK_BIT_OFFSET 0x00000020 /* (field) */ | ||
1681 | #define AR5K_QOS_NOACK_BYTE_OFFSET 0x00000080 /* (field) */ | ||
1682 | |||
1683 | /* | ||
1557 | * PHY error filter register | 1684 | * PHY error filter register |
1558 | */ | 1685 | */ |
1559 | #define AR5K_PHY_ERR_FIL 0x810c | 1686 | #define AR5K_PHY_ERR_FIL 0x810c |
1560 | #define AR5K_PHY_ERR_FIL_RADAR 0x00000020 | 1687 | #define AR5K_PHY_ERR_FIL_RADAR 0x00000020 /* Radar signal */ |
1561 | #define AR5K_PHY_ERR_FIL_OFDM 0x00020000 | 1688 | #define AR5K_PHY_ERR_FIL_OFDM 0x00020000 /* OFDM false detect (ANI) */ |
1562 | #define AR5K_PHY_ERR_FIL_CCK 0x02000000 | 1689 | #define AR5K_PHY_ERR_FIL_CCK 0x02000000 /* CCK false detect (ANI) */ |
1690 | |||
1691 | /* | ||
1692 | * XR latency register | ||
1693 | */ | ||
1694 | #define AR5K_XRLAT_TX 0x8110 | ||
1563 | 1695 | ||
1564 | /* | 1696 | /* |
1565 | * Rate duration register | 1697 | * ACK SIFS register |
1698 | */ | ||
1699 | #define AR5K_ACKSIFS 0x8114 /* Register Address */ | ||
1700 | #define AR5K_ACKSIFS_INC 0x00000000 /* ACK SIFS Increment (field) */ | ||
1701 | |||
1702 | /* | ||
1703 | * MIC QoS control register (?) | ||
1704 | */ | ||
1705 | #define AR5K_MIC_QOS_CTL 0x8118 /* Register Address */ | ||
1706 | #define AR5K_MIC_QOS_CTL_0 0x00000001 /* MIC QoS control 0 (?) */ | ||
1707 | #define AR5K_MIC_QOS_CTL_1 0x00000004 /* MIC QoS control 1 (?) */ | ||
1708 | #define AR5K_MIC_QOS_CTL_2 0x00000010 /* MIC QoS control 2 (?) */ | ||
1709 | #define AR5K_MIC_QOS_CTL_3 0x00000040 /* MIC QoS control 3 (?) */ | ||
1710 | #define AR5K_MIC_QOS_CTL_4 0x00000100 /* MIC QoS control 4 (?) */ | ||
1711 | #define AR5K_MIC_QOS_CTL_5 0x00000400 /* MIC QoS control 5 (?) */ | ||
1712 | #define AR5K_MIC_QOS_CTL_6 0x00001000 /* MIC QoS control 6 (?) */ | ||
1713 | #define AR5K_MIC_QOS_CTL_7 0x00004000 /* MIC QoS control 7 (?) */ | ||
1714 | #define AR5K_MIC_QOS_CTL_MQ_EN 0x00010000 /* Enable MIC QoS */ | ||
1715 | |||
1716 | /* | ||
1717 | * MIC QoS select register (?) | ||
1718 | */ | ||
1719 | #define AR5K_MIC_QOS_SEL 0x811c | ||
1720 | #define AR5K_MIC_QOS_SEL_0 0x00000001 | ||
1721 | #define AR5K_MIC_QOS_SEL_1 0x00000010 | ||
1722 | #define AR5K_MIC_QOS_SEL_2 0x00000100 | ||
1723 | #define AR5K_MIC_QOS_SEL_3 0x00001000 | ||
1724 | #define AR5K_MIC_QOS_SEL_4 0x00010000 | ||
1725 | #define AR5K_MIC_QOS_SEL_5 0x00100000 | ||
1726 | #define AR5K_MIC_QOS_SEL_6 0x01000000 | ||
1727 | #define AR5K_MIC_QOS_SEL_7 0x10000000 | ||
1728 | |||
1729 | /* | ||
1730 | * Misc mode control register (?) | ||
1731 | */ | ||
1732 | #define AR5K_MISC_MODE 0x8120 /* Register Address */ | ||
1733 | #define AR5K_MISC_MODE_FBSSID_MATCH 0x00000001 /* Force BSSID match */ | ||
1734 | #define AR5K_MISC_MODE_ACKSIFS_MEM 0x00000002 /* ACK SIFS memory (?) */ | ||
1735 | /* more bits */ | ||
1736 | |||
1737 | /* | ||
1738 | * OFDM Filter counter | ||
1739 | */ | ||
1740 | #define AR5K_OFDM_FIL_CNT 0x8124 | ||
1741 | |||
1742 | /* | ||
1743 | * CCK Filter counter | ||
1744 | */ | ||
1745 | #define AR5K_CCK_FIL_CNT 0x8128 | ||
1746 | |||
1747 | /* | ||
1748 | * PHY Error Counters (?) | ||
1749 | */ | ||
1750 | #define AR5K_PHYERR_CNT1 0x812c | ||
1751 | #define AR5K_PHYERR_CNT1_MASK 0x8130 | ||
1752 | |||
1753 | #define AR5K_PHYERR_CNT2 0x8134 | ||
1754 | #define AR5K_PHYERR_CNT2_MASK 0x8138 | ||
1755 | |||
1756 | /* | ||
1757 | * TSF Threshold register (?) | ||
1758 | */ | ||
1759 | #define AR5K_TSF_THRES 0x813c | ||
1760 | |||
1761 | /* | ||
1762 | * Rate -> ACK SIFS mapping table (32 entries) | ||
1763 | */ | ||
1764 | #define AR5K_RATE_ACKSIFS_BASE 0x8680 /* Register Address */ | ||
1765 | #define AR5K_RATE_ACKSIFS(_n) (AR5K_RATE_ACKSIFS_BSE + ((_n) << 2)) | ||
1766 | #define AR5K_RATE_ACKSIFS_NORMAL 0x00000001 /* Normal SIFS (field) */ | ||
1767 | #define AR5K_RATE_ACKSIFS_TURBO 0x00000400 /* Turbo SIFS (field) */ | ||
1768 | |||
1769 | /* | ||
1770 | * Rate -> duration mapping table (32 entries) | ||
1566 | */ | 1771 | */ |
1567 | #define AR5K_RATE_DUR_BASE 0x8700 | 1772 | #define AR5K_RATE_DUR_BASE 0x8700 |
1568 | #define AR5K_RATE_DUR(_n) (AR5K_RATE_DUR_BASE + ((_n) << 2)) | 1773 | #define AR5K_RATE_DUR(_n) (AR5K_RATE_DUR_BASE + ((_n) << 2)) |
1569 | 1774 | ||
1775 | /* | ||
1776 | * Rate -> db mapping table | ||
1777 | * (8 entries, each one has 4 8bit fields) | ||
1778 | */ | ||
1779 | #define AR5K_RATE2DB_BASE 0x87c0 | ||
1780 | #define AR5K_RATE2DB(_n) (AR5K_RATE2DB_BASE + ((_n) << 2)) | ||
1781 | |||
1782 | /* | ||
1783 | * db -> Rate mapping table | ||
1784 | * (8 entries, each one has 4 8bit fields) | ||
1785 | */ | ||
1786 | #define AR5K_DB2RATE_BASE 0x87e0 | ||
1787 | #define AR5K_DB2RATE(_n) (AR5K_DB2RATE_BASE + ((_n) << 2)) | ||
1788 | |||
1570 | /*===5212 end===*/ | 1789 | /*===5212 end===*/ |
1571 | 1790 | ||
1572 | /* | 1791 | /* |
@@ -1613,12 +1832,34 @@ | |||
1613 | /*===PHY REGISTERS===*/ | 1832 | /*===PHY REGISTERS===*/ |
1614 | 1833 | ||
1615 | /* | 1834 | /* |
1616 | * PHY register | 1835 | * PHY registers start |
1617 | */ | 1836 | */ |
1618 | #define AR5K_PHY_BASE 0x9800 | 1837 | #define AR5K_PHY_BASE 0x9800 |
1619 | #define AR5K_PHY(_n) (AR5K_PHY_BASE + ((_n) << 2)) | 1838 | #define AR5K_PHY(_n) (AR5K_PHY_BASE + ((_n) << 2)) |
1620 | #define AR5K_PHY_SHIFT_2GHZ 0x00004007 | 1839 | |
1621 | #define AR5K_PHY_SHIFT_5GHZ 0x00000007 | 1840 | /* |
1841 | * TST_2 (Misc config parameters) | ||
1842 | */ | ||
1843 | #define AR5K_PHY_TST2 0x9800 /* Register Address */ | ||
1844 | #define AR5K_PHY_TST2_TRIG_SEL 0x00000001 /* Trigger select (?) (field ?) */ | ||
1845 | #define AR5K_PHY_TST2_TRIG 0x00000010 /* Trigger (?) (field ?) */ | ||
1846 | #define AR5K_PHY_TST2_CBUS_MODE 0x00000100 /* Cardbus mode (?) */ | ||
1847 | /* bit reserved */ | ||
1848 | #define AR5K_PHY_TST2_CLK32 0x00000400 /* CLK_OUT is CLK32 (32Khz external) */ | ||
1849 | #define AR5K_PHY_TST2_CHANCOR_DUMP_EN 0x00000800 /* Enable Chancor dump (?) */ | ||
1850 | #define AR5K_PHY_TST2_EVEN_CHANCOR_DUMP 0x00001000 /* Even Chancor dump (?) */ | ||
1851 | #define AR5K_PHY_TST2_RFSILENT_EN 0x00002000 /* Enable RFSILENT */ | ||
1852 | #define AR5K_PHY_TST2_ALT_RFDATA 0x00004000 /* Alternate RFDATA (5-2GHz switch) */ | ||
1853 | #define AR5K_PHY_TST2_MINI_OBS_EN 0x00008000 /* Enable mini OBS (?) */ | ||
1854 | #define AR5K_PHY_TST2_RX2_IS_RX5_INV 0x00010000 /* 2GHz rx path is the 5GHz path inverted (?) */ | ||
1855 | #define AR5K_PHY_TST2_SLOW_CLK160 0x00020000 /* Slow CLK160 (?) */ | ||
1856 | #define AR5K_PHY_TST2_AGC_OBS_SEL_3 0x00040000 /* AGC OBS Select 3 (?) */ | ||
1857 | #define AR5K_PHY_TST2_BBB_OBS_SEL 0x00080000 /* BB OBS Select (field ?) */ | ||
1858 | #define AR5K_PHY_TST2_ADC_OBS_SEL 0x00800000 /* ADC OBS Select (field ?) */ | ||
1859 | #define AR5K_PHY_TST2_RX_CLR_SEL 0x08000000 /* RX Clear Select (?) */ | ||
1860 | #define AR5K_PHY_TST2_FORCE_AGC_CLR 0x10000000 /* Force AGC clear (?) */ | ||
1861 | #define AR5K_PHY_SHIFT_2GHZ 0x00004007 /* Used to access 2GHz radios */ | ||
1862 | #define AR5K_PHY_SHIFT_5GHZ 0x00000007 /* Used to access 5GHz radios (default) */ | ||
1622 | 1863 | ||
1623 | /* | 1864 | /* |
1624 | * PHY frame control register [5110] /turbo mode register [5111+] | 1865 | * PHY frame control register [5110] /turbo mode register [5111+] |
@@ -1630,18 +1871,21 @@ | |||
1630 | * a "turbo mode register" for 5110. We treat this one as | 1871 | * a "turbo mode register" for 5110. We treat this one as |
1631 | * a frame control register for 5110 below. | 1872 | * a frame control register for 5110 below. |
1632 | */ | 1873 | */ |
1633 | #define AR5K_PHY_TURBO 0x9804 | 1874 | #define AR5K_PHY_TURBO 0x9804 /* Register Address */ |
1634 | #define AR5K_PHY_TURBO_MODE 0x00000001 | 1875 | #define AR5K_PHY_TURBO_MODE 0x00000001 /* Enable turbo mode */ |
1635 | #define AR5K_PHY_TURBO_SHORT 0x00000002 | 1876 | #define AR5K_PHY_TURBO_SHORT 0x00000002 /* Short mode (20Mhz channels) (?) */ |
1636 | 1877 | ||
1637 | /* | 1878 | /* |
1638 | * PHY agility command register | 1879 | * PHY agility command register |
1880 | * (aka TST_1) | ||
1639 | */ | 1881 | */ |
1640 | #define AR5K_PHY_AGC 0x9808 | 1882 | #define AR5K_PHY_AGC 0x9808 /* Register Address */ |
1641 | #define AR5K_PHY_AGC_DISABLE 0x08000000 | 1883 | #define AR5K_PHY_TST1 0x9808 |
1884 | #define AR5K_PHY_AGC_DISABLE 0x08000000 /* Disable AGC to A2 (?)*/ | ||
1885 | #define AR5K_PHY_TST1_TXHOLD 0x00003800 /* Set tx hold (?) */ | ||
1642 | 1886 | ||
1643 | /* | 1887 | /* |
1644 | * PHY timing register [5112+] | 1888 | * PHY timing register 3 [5112+] |
1645 | */ | 1889 | */ |
1646 | #define AR5K_PHY_TIMING_3 0x9814 | 1890 | #define AR5K_PHY_TIMING_3 0x9814 |
1647 | #define AR5K_PHY_TIMING_3_DSC_MAN 0xfffe0000 | 1891 | #define AR5K_PHY_TIMING_3_DSC_MAN 0xfffe0000 |
@@ -1657,26 +1901,81 @@ | |||
1657 | /* | 1901 | /* |
1658 | * PHY activation register | 1902 | * PHY activation register |
1659 | */ | 1903 | */ |
1660 | #define AR5K_PHY_ACT 0x981c | 1904 | #define AR5K_PHY_ACT 0x981c /* Register Address */ |
1661 | #define AR5K_PHY_ACT_ENABLE 0x00000001 | 1905 | #define AR5K_PHY_ACT_ENABLE 0x00000001 /* Activate PHY */ |
1662 | #define AR5K_PHY_ACT_DISABLE 0x00000002 | 1906 | #define AR5K_PHY_ACT_DISABLE 0x00000002 /* Deactivate PHY */ |
1907 | |||
1908 | /* | ||
1909 | * PHY RF control registers | ||
1910 | * (i think these are delay times, | ||
1911 | * these calibration values exist | ||
1912 | * in EEPROM) | ||
1913 | */ | ||
1914 | #define AR5K_PHY_RF_CTL2 0x9824 /* Register Address */ | ||
1915 | #define AR5K_PHY_RF_CTL2_TXF2TXD_START 0x0000000f /* Mask for TX frame to TX d(esc?) start */ | ||
1916 | |||
1917 | #define AR5K_PHY_RF_CTL3 0x9828 /* Register Address */ | ||
1918 | #define AR5K_PHY_RF_CTL3_TXE2XLNA_ON 0x0000000f /* Mask for TX end to XLNA on */ | ||
1919 | |||
1920 | #define AR5K_PHY_RF_CTL4 0x9834 /* Register Address */ | ||
1921 | #define AR5K_PHY_RF_CTL4_TXF2XPA_A_ON 0x00000001 /* TX frame to XPA A on (field) */ | ||
1922 | #define AR5K_PHY_RF_CTL4_TXF2XPA_B_ON 0x00000100 /* TX frame to XPA B on (field) */ | ||
1923 | #define AR5K_PHY_RF_CTL4_TXE2XPA_A_OFF 0x00010000 /* TX end to XPA A off (field) */ | ||
1924 | #define AR5K_PHY_RF_CTL4_TXE2XPA_B_OFF 0x01000000 /* TX end to XPA B off (field) */ | ||
1925 | |||
1926 | /* | ||
1927 | * Pre-Amplifier control register | ||
1928 | * (XPA -> external pre-amplifier) | ||
1929 | */ | ||
1930 | #define AR5K_PHY_PA_CTL 0x9838 /* Register Address */ | ||
1931 | #define AR5K_PHY_PA_CTL_XPA_A_HI 0x00000001 /* XPA A high (?) */ | ||
1932 | #define AR5K_PHY_PA_CTL_XPA_B_HI 0x00000002 /* XPA B high (?) */ | ||
1933 | #define AR5K_PHY_PA_CTL_XPA_A_EN 0x00000004 /* Enable XPA A */ | ||
1934 | #define AR5K_PHY_PA_CTL_XPA_B_EN 0x00000008 /* Enable XPA B */ | ||
1935 | |||
1936 | /* | ||
1937 | * PHY settling register | ||
1938 | */ | ||
1939 | #define AR5K_PHY_SETTLING 0x9844 /* Register Address */ | ||
1940 | #define AR5K_PHY_SETTLING_AGC 0x0000007f /* Mask for AGC settling time */ | ||
1941 | #define AR5K_PHY_SETTLING_SWITCH 0x00003f80 /* Mask for Switch settlig time */ | ||
1942 | |||
1943 | /* | ||
1944 | * PHY Gain registers | ||
1945 | */ | ||
1946 | #define AR5K_PHY_GAIN 0x9848 /* Register Address */ | ||
1947 | #define AR5K_PHY_GAIN_TXRX_ATTEN 0x0003f000 /* Mask for TX-RX Attenuation */ | ||
1948 | |||
1949 | #define AR5K_PHY_GAIN_OFFSET 0x984c /* Register Address */ | ||
1950 | #define AR5K_PHY_GAIN_OFFSET_RXTX_FLAG 0x00020000 /* RX-TX flag (?) */ | ||
1951 | |||
1952 | /* | ||
1953 | * Desired size register | ||
1954 | * (for more infos read ANI patent) | ||
1955 | */ | ||
1956 | #define AR5K_PHY_DESIRED_SIZE 0x9850 /* Register Address */ | ||
1957 | #define AR5K_PHY_DESIRED_SIZE_ADC 0x000000ff /* Mask for ADC desired size */ | ||
1958 | #define AR5K_PHY_DESIRED_SIZE_PGA 0x0000ff00 /* Mask for PGA desired size */ | ||
1959 | #define AR5K_PHY_DESIRED_SIZE_TOT 0x0ff00000 /* Mask for Total desired size (?) */ | ||
1663 | 1960 | ||
1664 | /* | 1961 | /* |
1665 | * PHY signal register | 1962 | * PHY signal register |
1963 | * (for more infos read ANI patent) | ||
1666 | */ | 1964 | */ |
1667 | #define AR5K_PHY_SIG 0x9858 | 1965 | #define AR5K_PHY_SIG 0x9858 /* Register Address */ |
1668 | #define AR5K_PHY_SIG_FIRSTEP 0x0003f000 | 1966 | #define AR5K_PHY_SIG_FIRSTEP 0x0003f000 /* Mask for FIRSTEP */ |
1669 | #define AR5K_PHY_SIG_FIRSTEP_S 12 | 1967 | #define AR5K_PHY_SIG_FIRSTEP_S 12 |
1670 | #define AR5K_PHY_SIG_FIRPWR 0x03fc0000 | 1968 | #define AR5K_PHY_SIG_FIRPWR 0x03fc0000 /* Mask for FIPWR */ |
1671 | #define AR5K_PHY_SIG_FIRPWR_S 18 | 1969 | #define AR5K_PHY_SIG_FIRPWR_S 18 |
1672 | 1970 | ||
1673 | /* | 1971 | /* |
1674 | * PHY coarse agility control register | 1972 | * PHY coarse agility control register |
1973 | * (for more infos read ANI patent) | ||
1675 | */ | 1974 | */ |
1676 | #define AR5K_PHY_AGCCOARSE 0x985c | 1975 | #define AR5K_PHY_AGCCOARSE 0x985c /* Register Address */ |
1677 | #define AR5K_PHY_AGCCOARSE_LO 0x00007f80 | 1976 | #define AR5K_PHY_AGCCOARSE_LO 0x00007f80 /* Mask for AGC Coarse low */ |
1678 | #define AR5K_PHY_AGCCOARSE_LO_S 7 | 1977 | #define AR5K_PHY_AGCCOARSE_LO_S 7 |
1679 | #define AR5K_PHY_AGCCOARSE_HI 0x003f8000 | 1978 | #define AR5K_PHY_AGCCOARSE_HI 0x003f8000 /* Mask for AGC Coarse high */ |
1680 | #define AR5K_PHY_AGCCOARSE_HI_S 15 | 1979 | #define AR5K_PHY_AGCCOARSE_HI_S 15 |
1681 | 1980 | ||
1682 | /* | 1981 | /* |
@@ -1689,12 +1988,13 @@ | |||
1689 | /* | 1988 | /* |
1690 | * PHY noise floor status register | 1989 | * PHY noise floor status register |
1691 | */ | 1990 | */ |
1692 | #define AR5K_PHY_NF 0x9864 | 1991 | #define AR5K_PHY_NF 0x9864 /* Register address */ |
1693 | #define AR5K_PHY_NF_M 0x000001ff | 1992 | #define AR5K_PHY_NF_M 0x000001ff /* Noise floor mask */ |
1694 | #define AR5K_PHY_NF_ACTIVE 0x00000100 | 1993 | #define AR5K_PHY_NF_ACTIVE 0x00000100 /* Noise floor calibration still active */ |
1695 | #define AR5K_PHY_NF_RVAL(_n) (((_n) >> 19) & AR5K_PHY_NF_M) | 1994 | #define AR5K_PHY_NF_RVAL(_n) (((_n) >> 19) & AR5K_PHY_NF_M) |
1696 | #define AR5K_PHY_NF_AVAL(_n) (-((_n) ^ AR5K_PHY_NF_M) + 1) | 1995 | #define AR5K_PHY_NF_AVAL(_n) (-((_n) ^ AR5K_PHY_NF_M) + 1) |
1697 | #define AR5K_PHY_NF_SVAL(_n) (((_n) & AR5K_PHY_NF_M) | (1 << 9)) | 1996 | #define AR5K_PHY_NF_SVAL(_n) (((_n) & AR5K_PHY_NF_M) | (1 << 9)) |
1997 | #define AR5K_PHY_NF_THRESH62 0x00001000 /* Thresh62 -check ANI patent- (field) */ | ||
1698 | 1998 | ||
1699 | /* | 1999 | /* |
1700 | * PHY ADC saturation register [5110] | 2000 | * PHY ADC saturation register [5110] |
@@ -1706,6 +2006,30 @@ | |||
1706 | #define AR5K_PHY_ADCSAT_THR_S 5 | 2006 | #define AR5K_PHY_ADCSAT_THR_S 5 |
1707 | 2007 | ||
1708 | /* | 2008 | /* |
2009 | * PHY Weak ofdm signal detection threshold registers (ANI) [5212+] | ||
2010 | */ | ||
2011 | |||
2012 | /* High thresholds */ | ||
2013 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR 0x9868 | ||
2014 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_COUNT 0x0000001f | ||
2015 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_COUNT_S 0 | ||
2016 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR_M1 0x00fe0000 | ||
2017 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR_M1_S 17 | ||
2018 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2 0x7f000000 | ||
2019 | #define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_S 24 | ||
2020 | |||
2021 | /* Low thresholds */ | ||
2022 | #define AR5K_PHY_WEAK_OFDM_LOW_THR 0x986c | ||
2023 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_SELFCOR_EN 0x00000001 | ||
2024 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_M2_COUNT 0x00003f00 | ||
2025 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_M2_COUNT_S 8 | ||
2026 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_M1 0x001fc000 | ||
2027 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_M1_S 14 | ||
2028 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_M2 0x0fe00000 | ||
2029 | #define AR5K_PHY_WEAK_OFDM_LOW_THR_M2_S 21 | ||
2030 | |||
2031 | |||
2032 | /* | ||
1709 | * PHY sleep registers [5112+] | 2033 | * PHY sleep registers [5112+] |
1710 | */ | 2034 | */ |
1711 | #define AR5K_PHY_SCR 0x9870 | 2035 | #define AR5K_PHY_SCR 0x9870 |
@@ -1730,6 +2054,8 @@ | |||
1730 | AR5K_PHY_PLL_44MHZ_5211 : AR5K_PHY_PLL_44MHZ_5212) | 2054 | AR5K_PHY_PLL_44MHZ_5211 : AR5K_PHY_PLL_44MHZ_5212) |
1731 | #define AR5K_PHY_PLL_RF5111 0x00000000 | 2055 | #define AR5K_PHY_PLL_RF5111 0x00000000 |
1732 | #define AR5K_PHY_PLL_RF5112 0x00000040 | 2056 | #define AR5K_PHY_PLL_RF5112 0x00000040 |
2057 | #define AR5K_PHY_PLL_HALF_RATE 0x00000100 | ||
2058 | #define AR5K_PHY_PLL_QUARTER_RATE 0x00000200 | ||
1733 | 2059 | ||
1734 | /* | 2060 | /* |
1735 | * RF Buffer register | 2061 | * RF Buffer register |
@@ -1792,23 +2118,74 @@ | |||
1792 | #define AR5K_PHY_RFSTG_DISABLE 0x00000021 | 2118 | #define AR5K_PHY_RFSTG_DISABLE 0x00000021 |
1793 | 2119 | ||
1794 | /* | 2120 | /* |
2121 | * PHY Antenna control register | ||
2122 | */ | ||
2123 | #define AR5K_PHY_ANT_CTL 0x9910 /* Register Address */ | ||
2124 | #define AR5K_PHY_ANT_CTL_TXRX_EN 0x00000001 /* Enable TX/RX (?) */ | ||
2125 | #define AR5K_PHY_ANT_CTL_SECTORED_ANT 0x00000004 /* Sectored Antenna */ | ||
2126 | #define AR5K_PHY_ANT_CTL_HITUNE5 0x00000008 /* Hitune5 (?) */ | ||
2127 | #define AR5K_PHY_ANT_CTL_SWTABLE_IDLE 0x00000010 /* Switch table idle (?) */ | ||
2128 | |||
2129 | /* | ||
1795 | * PHY receiver delay register [5111+] | 2130 | * PHY receiver delay register [5111+] |
1796 | */ | 2131 | */ |
1797 | #define AR5K_PHY_RX_DELAY 0x9914 | 2132 | #define AR5K_PHY_RX_DELAY 0x9914 /* Register Address */ |
1798 | #define AR5K_PHY_RX_DELAY_M 0x00003fff | 2133 | #define AR5K_PHY_RX_DELAY_M 0x00003fff /* Mask for RX activate to receive delay (/100ns) */ |
2134 | |||
2135 | /* | ||
2136 | * PHY max rx length register (?) [5111] | ||
2137 | */ | ||
2138 | #define AR5K_PHY_MAX_RX_LEN 0x991c | ||
1799 | 2139 | ||
1800 | /* | 2140 | /* |
1801 | * PHY timing I(nphase) Q(adrature) control register [5111+] | 2141 | * PHY timing register 4 |
2142 | * I(nphase)/Q(adrature) calibration register [5111+] | ||
1802 | */ | 2143 | */ |
1803 | #define AR5K_PHY_IQ 0x9920 /* Register address */ | 2144 | #define AR5K_PHY_IQ 0x9920 /* Register Address */ |
1804 | #define AR5K_PHY_IQ_CORR_Q_Q_COFF 0x0000001f /* Mask for q correction info */ | 2145 | #define AR5K_PHY_IQ_CORR_Q_Q_COFF 0x0000001f /* Mask for q correction info */ |
1805 | #define AR5K_PHY_IQ_CORR_Q_I_COFF 0x000007e0 /* Mask for i correction info */ | 2146 | #define AR5K_PHY_IQ_CORR_Q_I_COFF 0x000007e0 /* Mask for i correction info */ |
1806 | #define AR5K_PHY_IQ_CORR_Q_I_COFF_S 5 | 2147 | #define AR5K_PHY_IQ_CORR_Q_I_COFF_S 5 |
1807 | #define AR5K_PHY_IQ_CORR_ENABLE 0x00000800 /* Enable i/q correction */ | 2148 | #define AR5K_PHY_IQ_CORR_ENABLE 0x00000800 /* Enable i/q correction */ |
1808 | #define AR5K_PHY_IQ_CAL_NUM_LOG_MAX 0x0000f000 | 2149 | #define AR5K_PHY_IQ_CAL_NUM_LOG_MAX 0x0000f000 /* Mask for max number of samples in log scale */ |
1809 | #define AR5K_PHY_IQ_CAL_NUM_LOG_MAX_S 12 | 2150 | #define AR5K_PHY_IQ_CAL_NUM_LOG_MAX_S 12 |
1810 | #define AR5K_PHY_IQ_RUN 0x00010000 /* Run i/q calibration */ | 2151 | #define AR5K_PHY_IQ_RUN 0x00010000 /* Run i/q calibration */ |
2152 | #define AR5K_PHY_IQ_USE_PT_DF 0x00020000 /* Use pilot track df (?) */ | ||
2153 | #define AR5K_PHY_IQ_EARLY_TRIG_THR 0x00200000 /* Early trigger threshold (?) (field) */ | ||
2154 | #define AR5K_PHY_IQ_PILOT_MASK_EN 0x10000000 /* Enable pilot mask (?) */ | ||
2155 | #define AR5K_PHY_IQ_CHAN_MASK_EN 0x20000000 /* Enable channel mask (?) */ | ||
2156 | #define AR5K_PHY_IQ_SPUR_FILT_EN 0x40000000 /* Enable spur filter */ | ||
2157 | #define AR5K_PHY_IQ_SPUR_RSSI_EN 0x80000000 /* Enable spur rssi */ | ||
1811 | 2158 | ||
2159 | /* | ||
2160 | * PHY timing register 5 | ||
2161 | * OFDM Self-correlator Cyclic RSSI threshold params | ||
2162 | * (Check out bb_cycpwr_thr1 on ANI patent) | ||
2163 | */ | ||
2164 | #define AR5K_PHY_OFDM_SELFCORR 0x9924 /* Register Address */ | ||
2165 | #define AR5K_PHY_OFDM_SELFCORR_CYPWR_THR1_EN 0x00000001 /* Enable cyclic RSSI thr 1 */ | ||
2166 | #define AR5K_PHY_OFDM_SELFCORR_CYPWR_THR1 0x000000fe /* Mask for Cyclic RSSI threshold 1 */ | ||
2167 | #define AR5K_PHY_OFDM_SELFCORR_CYPWR_THR3 0x00000100 /* Cyclic RSSI threshold 3 (field) (?) */ | ||
2168 | #define AR5K_PHY_OFDM_SELFCORR_RSSI_1ATHR_EN 0x00008000 /* Enable 1A RSSI threshold (?) */ | ||
2169 | #define AR5K_PHY_OFDM_SELFCORR_RSSI_1ATHR 0x00010000 /* 1A RSSI threshold (field) (?) */ | ||
2170 | #define AR5K_PHY_OFDM_SELFCORR_LSCTHR_HIRSSI 0x00800000 /* Long sc threshold hi rssi (?) */ | ||
2171 | |||
2172 | /* | ||
2173 | * PHY-only warm reset register | ||
2174 | */ | ||
2175 | #define AR5K_PHY_WARM_RESET 0x9928 | ||
2176 | |||
2177 | /* | ||
2178 | * PHY-only control register | ||
2179 | */ | ||
2180 | #define AR5K_PHY_CTL 0x992c /* Register Address */ | ||
2181 | #define AR5K_PHY_CTL_RX_DRAIN_RATE 0x00000001 /* RX drain rate (?) */ | ||
2182 | #define AR5K_PHY_CTL_LATE_TX_SIG_SYM 0x00000002 /* Late tx signal symbol (?) */ | ||
2183 | #define AR5K_PHY_CTL_GEN_SCRAMBLER 0x00000004 /* Generate scrambler */ | ||
2184 | #define AR5K_PHY_CTL_TX_ANT_SEL 0x00000008 /* TX antenna select */ | ||
2185 | #define AR5K_PHY_CTL_TX_ANT_STATIC 0x00000010 /* Static TX antenna */ | ||
2186 | #define AR5K_PHY_CTL_RX_ANT_SEL 0x00000020 /* RX antenna select */ | ||
2187 | #define AR5K_PHY_CTL_RX_ANT_STATIC 0x00000040 /* Static RX antenna */ | ||
2188 | #define AR5K_PHY_CTL_LOW_FREQ_SLE_EN 0x00000080 /* Enable low freq sleep */ | ||
1812 | 2189 | ||
1813 | /* | 2190 | /* |
1814 | * PHY PAPD probe register [5111+ (?)] | 2191 | * PHY PAPD probe register [5111+ (?)] |
@@ -1816,9 +2193,13 @@ | |||
1816 | * Because it's always 0 in 5211 initialization code | 2193 | * Because it's always 0 in 5211 initialization code |
1817 | */ | 2194 | */ |
1818 | #define AR5K_PHY_PAPD_PROBE 0x9930 | 2195 | #define AR5K_PHY_PAPD_PROBE 0x9930 |
2196 | #define AR5K_PHY_PAPD_PROBE_SH_HI_PAR 0x00000001 | ||
2197 | #define AR5K_PHY_PAPD_PROBE_PCDAC_BIAS 0x00000002 | ||
2198 | #define AR5K_PHY_PAPD_PROBE_COMP_GAIN 0x00000040 | ||
1819 | #define AR5K_PHY_PAPD_PROBE_TXPOWER 0x00007e00 | 2199 | #define AR5K_PHY_PAPD_PROBE_TXPOWER 0x00007e00 |
1820 | #define AR5K_PHY_PAPD_PROBE_TXPOWER_S 9 | 2200 | #define AR5K_PHY_PAPD_PROBE_TXPOWER_S 9 |
1821 | #define AR5K_PHY_PAPD_PROBE_TX_NEXT 0x00008000 | 2201 | #define AR5K_PHY_PAPD_PROBE_TX_NEXT 0x00008000 |
2202 | #define AR5K_PHY_PAPD_PROBE_PREDIST_EN 0x00010000 | ||
1822 | #define AR5K_PHY_PAPD_PROBE_TYPE 0x01800000 /* [5112+] */ | 2203 | #define AR5K_PHY_PAPD_PROBE_TYPE 0x01800000 /* [5112+] */ |
1823 | #define AR5K_PHY_PAPD_PROBE_TYPE_S 23 | 2204 | #define AR5K_PHY_PAPD_PROBE_TYPE_S 23 |
1824 | #define AR5K_PHY_PAPD_PROBE_TYPE_OFDM 0 | 2205 | #define AR5K_PHY_PAPD_PROBE_TYPE_OFDM 0 |
@@ -1848,15 +2229,16 @@ | |||
1848 | #define AR5K_PHY_FRAME_CTL (ah->ah_version == AR5K_AR5210 ? \ | 2229 | #define AR5K_PHY_FRAME_CTL (ah->ah_version == AR5K_AR5210 ? \ |
1849 | AR5K_PHY_FRAME_CTL_5210 : AR5K_PHY_FRAME_CTL_5211) | 2230 | AR5K_PHY_FRAME_CTL_5210 : AR5K_PHY_FRAME_CTL_5211) |
1850 | /*---[5111+]---*/ | 2231 | /*---[5111+]---*/ |
1851 | #define AR5K_PHY_FRAME_CTL_TX_CLIP 0x00000038 | 2232 | #define AR5K_PHY_FRAME_CTL_TX_CLIP 0x00000038 /* Mask for tx clip (?) */ |
1852 | #define AR5K_PHY_FRAME_CTL_TX_CLIP_S 3 | 2233 | #define AR5K_PHY_FRAME_CTL_TX_CLIP_S 3 |
2234 | #define AR5K_PHY_FRAME_CTL_PREP_CHINFO 0x00010000 /* Prepend chan info */ | ||
1853 | /*---[5110/5111]---*/ | 2235 | /*---[5110/5111]---*/ |
1854 | #define AR5K_PHY_FRAME_CTL_TIMING_ERR 0x01000000 | 2236 | #define AR5K_PHY_FRAME_CTL_TIMING_ERR 0x01000000 /* PHY timing error */ |
1855 | #define AR5K_PHY_FRAME_CTL_PARITY_ERR 0x02000000 | 2237 | #define AR5K_PHY_FRAME_CTL_PARITY_ERR 0x02000000 /* Parity error */ |
1856 | #define AR5K_PHY_FRAME_CTL_ILLRATE_ERR 0x04000000 /* illegal rate */ | 2238 | #define AR5K_PHY_FRAME_CTL_ILLRATE_ERR 0x04000000 /* Illegal rate */ |
1857 | #define AR5K_PHY_FRAME_CTL_ILLLEN_ERR 0x08000000 /* illegal length */ | 2239 | #define AR5K_PHY_FRAME_CTL_ILLLEN_ERR 0x08000000 /* Illegal length */ |
1858 | #define AR5K_PHY_FRAME_CTL_SERVICE_ERR 0x20000000 | 2240 | #define AR5K_PHY_FRAME_CTL_SERVICE_ERR 0x20000000 |
1859 | #define AR5K_PHY_FRAME_CTL_TXURN_ERR 0x40000000 /* tx underrun */ | 2241 | #define AR5K_PHY_FRAME_CTL_TXURN_ERR 0x40000000 /* TX underrun */ |
1860 | #define AR5K_PHY_FRAME_CTL_INI AR5K_PHY_FRAME_CTL_SERVICE_ERR | \ | 2242 | #define AR5K_PHY_FRAME_CTL_INI AR5K_PHY_FRAME_CTL_SERVICE_ERR | \ |
1861 | AR5K_PHY_FRAME_CTL_TXURN_ERR | \ | 2243 | AR5K_PHY_FRAME_CTL_TXURN_ERR | \ |
1862 | AR5K_PHY_FRAME_CTL_ILLLEN_ERR | \ | 2244 | AR5K_PHY_FRAME_CTL_ILLLEN_ERR | \ |
@@ -1915,6 +2297,11 @@ after DFS is enabled */ | |||
1915 | #define AR5K_PHY_ANT_SWITCH_TABLE_1 0x9964 | 2297 | #define AR5K_PHY_ANT_SWITCH_TABLE_1 0x9964 |
1916 | 2298 | ||
1917 | /* | 2299 | /* |
2300 | * PHY Noise floor threshold | ||
2301 | */ | ||
2302 | #define AR5K_PHY_NFTHRES 0x9968 | ||
2303 | |||
2304 | /* | ||
1918 | * PHY clock sleep registers [5112+] | 2305 | * PHY clock sleep registers [5112+] |
1919 | */ | 2306 | */ |
1920 | #define AR5K_PHY_SCLOCK 0x99f0 | 2307 | #define AR5K_PHY_SCLOCK 0x99f0 |
@@ -1922,56 +2309,116 @@ after DFS is enabled */ | |||
1922 | #define AR5K_PHY_SDELAY 0x99f4 | 2309 | #define AR5K_PHY_SDELAY 0x99f4 |
1923 | #define AR5K_PHY_SDELAY_32MHZ 0x000000ff | 2310 | #define AR5K_PHY_SDELAY_32MHZ 0x000000ff |
1924 | #define AR5K_PHY_SPENDING 0x99f8 | 2311 | #define AR5K_PHY_SPENDING 0x99f8 |
2312 | #define AR5K_PHY_SPENDING_14 0x00000014 | ||
2313 | #define AR5K_PHY_SPENDING_18 0x00000018 | ||
1925 | #define AR5K_PHY_SPENDING_RF5111 0x00000018 | 2314 | #define AR5K_PHY_SPENDING_RF5111 0x00000018 |
1926 | #define AR5K_PHY_SPENDING_RF5112 0x00000014 /* <- i 've only seen this on 2425 dumps ! */ | 2315 | #define AR5K_PHY_SPENDING_RF5112 0x00000014 |
1927 | #define AR5K_PHY_SPENDING_RF5112A 0x0000000e /* but since i only have 5112A-based chips */ | 2316 | /* #define AR5K_PHY_SPENDING_RF5112A 0x0000000e */ |
1928 | #define AR5K_PHY_SPENDING_RF5424 0x00000012 /* to test it might be also for old 5112. */ | 2317 | /* #define AR5K_PHY_SPENDING_RF5424 0x00000012 */ |
2318 | #define AR5K_PHY_SPENDING_RF5413 0x00000014 | ||
2319 | #define AR5K_PHY_SPENDING_RF2413 0x00000014 | ||
2320 | #define AR5K_PHY_SPENDING_RF2425 0x00000018 | ||
1929 | 2321 | ||
1930 | /* | 2322 | /* |
1931 | * Misc PHY/radio registers [5110 - 5111] | 2323 | * Misc PHY/radio registers [5110 - 5111] |
1932 | */ | 2324 | */ |
1933 | #define AR5K_BB_GAIN_BASE 0x9b00 /* BaseBand Amplifier Gain table base address */ | 2325 | #define AR5K_BB_GAIN_BASE 0x9b00 /* BaseBand Amplifier Gain table base address */ |
1934 | #define AR5K_BB_GAIN(_n) (AR5K_BB_GAIN_BASE + ((_n) << 2)) | 2326 | #define AR5K_BB_GAIN(_n) (AR5K_BB_GAIN_BASE + ((_n) << 2)) |
1935 | #define AR5K_RF_GAIN_BASE 0x9a00 /* RF Amplrifier Gain table base address */ | 2327 | #define AR5K_RF_GAIN_BASE 0x9a00 /* RF Amplrifier Gain table base address */ |
1936 | #define AR5K_RF_GAIN(_n) (AR5K_RF_GAIN_BASE + ((_n) << 2)) | 2328 | #define AR5K_RF_GAIN(_n) (AR5K_RF_GAIN_BASE + ((_n) << 2)) |
1937 | 2329 | ||
1938 | /* | 2330 | /* |
1939 | * PHY timing IQ calibration result register [5111+] | 2331 | * PHY timing IQ calibration result register [5111+] |
1940 | */ | 2332 | */ |
1941 | #define AR5K_PHY_IQRES_CAL_PWR_I 0x9c10 /* I (Inphase) power value */ | 2333 | #define AR5K_PHY_IQRES_CAL_PWR_I 0x9c10 /* I (Inphase) power value */ |
1942 | #define AR5K_PHY_IQRES_CAL_PWR_Q 0x9c14 /* Q (Quadrature) power value */ | 2334 | #define AR5K_PHY_IQRES_CAL_PWR_Q 0x9c14 /* Q (Quadrature) power value */ |
1943 | #define AR5K_PHY_IQRES_CAL_CORR 0x9c18 /* I/Q Correlation */ | 2335 | #define AR5K_PHY_IQRES_CAL_CORR 0x9c18 /* I/Q Correlation */ |
1944 | 2336 | ||
1945 | /* | 2337 | /* |
1946 | * PHY current RSSI register [5111+] | 2338 | * PHY current RSSI register [5111+] |
1947 | */ | 2339 | */ |
1948 | #define AR5K_PHY_CURRENT_RSSI 0x9c1c | 2340 | #define AR5K_PHY_CURRENT_RSSI 0x9c1c |
2341 | |||
2342 | /* | ||
2343 | * PHY RF Bus grant register (?) | ||
2344 | */ | ||
2345 | #define AR5K_PHY_RFBUS_GRANT 0x9c20 | ||
2346 | |||
2347 | /* | ||
2348 | * PHY ADC test register | ||
2349 | */ | ||
2350 | #define AR5K_PHY_ADC_TEST 0x9c24 | ||
2351 | #define AR5K_PHY_ADC_TEST_I 0x00000001 | ||
2352 | #define AR5K_PHY_ADC_TEST_Q 0x00000200 | ||
2353 | |||
2354 | /* | ||
2355 | * PHY DAC test register | ||
2356 | */ | ||
2357 | #define AR5K_PHY_DAC_TEST 0x9c28 | ||
2358 | #define AR5K_PHY_DAC_TEST_I 0x00000001 | ||
2359 | #define AR5K_PHY_DAC_TEST_Q 0x00000200 | ||
2360 | |||
2361 | /* | ||
2362 | * PHY PTAT register (?) | ||
2363 | */ | ||
2364 | #define AR5K_PHY_PTAT 0x9c2c | ||
2365 | |||
2366 | /* | ||
2367 | * PHY Illegal TX rate register [5112+] | ||
2368 | */ | ||
2369 | #define AR5K_PHY_BAD_TX_RATE 0x9c30 | ||
2370 | |||
2371 | /* | ||
2372 | * PHY SPUR Power register [5112+] | ||
2373 | */ | ||
2374 | #define AR5K_PHY_SPUR_PWR 0x9c34 /* Register Address */ | ||
2375 | #define AR5K_PHY_SPUR_PWR_I 0x00000001 /* SPUR Power estimate for I (field) */ | ||
2376 | #define AR5K_PHY_SPUR_PWR_Q 0x00000100 /* SPUR Power estimate for Q (field) */ | ||
2377 | #define AR5K_PHY_SPUR_PWR_FILT 0x00010000 /* Power with SPUR removed (field) */ | ||
2378 | |||
2379 | /* | ||
2380 | * PHY Channel status register [5112+] (?) | ||
2381 | */ | ||
2382 | #define AR5K_PHY_CHAN_STATUS 0x9c38 | ||
2383 | #define AR5K_PHY_CHAN_STATUS_BT_ACT 0x00000001 | ||
2384 | #define AR5K_PHY_CHAN_STATUS_RX_CLR_RAW 0x00000002 | ||
2385 | #define AR5K_PHY_CHAN_STATUS_RX_CLR_MAC 0x00000004 | ||
2386 | #define AR5K_PHY_CHAN_STATUS_RX_CLR_PAP 0x00000008 | ||
2387 | |||
2388 | /* | ||
2389 | * PHY PAPD I (power?) table (?) | ||
2390 | * (92! entries) | ||
2391 | */ | ||
2392 | #define AR5K_PHY_PAPD_I_BASE 0xa000 | ||
2393 | #define AR5K_PHY_PAPD_I(_n) (AR5K_PHY_PAPD_I_BASE + ((_n) << 2)) | ||
1949 | 2394 | ||
1950 | /* | 2395 | /* |
1951 | * PHY PCDAC TX power table | 2396 | * PHY PCDAC TX power table |
1952 | */ | 2397 | */ |
1953 | #define AR5K_PHY_PCDAC_TXPOWER_BASE_5211 0xa180 | 2398 | #define AR5K_PHY_PCDAC_TXPOWER_BASE_5211 0xa180 |
1954 | #define AR5K_PHY_PCDAC_TXPOWER_BASE_5413 0xa280 | 2399 | #define AR5K_PHY_PCDAC_TXPOWER_BASE_2413 0xa280 |
1955 | #define AR5K_PHY_PCDAC_TXPOWER_BASE (ah->ah_radio >= AR5K_RF5413 ? \ | 2400 | #define AR5K_PHY_PCDAC_TXPOWER_BASE (ah->ah_radio >= AR5K_RF2413 ? \ |
1956 | AR5K_PHY_PCDAC_TXPOWER_BASE_5413 :\ | 2401 | AR5K_PHY_PCDAC_TXPOWER_BASE_2413 :\ |
1957 | AR5K_PHY_PCDAC_TXPOWER_BASE_5211) | 2402 | AR5K_PHY_PCDAC_TXPOWER_BASE_5211) |
1958 | #define AR5K_PHY_PCDAC_TXPOWER(_n) (AR5K_PHY_PCDAC_TXPOWER_BASE + ((_n) << 2)) | 2403 | #define AR5K_PHY_PCDAC_TXPOWER(_n) (AR5K_PHY_PCDAC_TXPOWER_BASE + ((_n) << 2)) |
1959 | 2404 | ||
1960 | /* | 2405 | /* |
1961 | * PHY mode register [5111+] | 2406 | * PHY mode register [5111+] |
1962 | */ | 2407 | */ |
1963 | #define AR5K_PHY_MODE 0x0a200 /* Register address */ | 2408 | #define AR5K_PHY_MODE 0x0a200 /* Register Address */ |
1964 | #define AR5K_PHY_MODE_MOD 0x00000001 /* PHY Modulation mask*/ | 2409 | #define AR5K_PHY_MODE_MOD 0x00000001 /* PHY Modulation bit */ |
1965 | #define AR5K_PHY_MODE_MOD_OFDM 0 | 2410 | #define AR5K_PHY_MODE_MOD_OFDM 0 |
1966 | #define AR5K_PHY_MODE_MOD_CCK 1 | 2411 | #define AR5K_PHY_MODE_MOD_CCK 1 |
1967 | #define AR5K_PHY_MODE_FREQ 0x00000002 /* Freq mode mask */ | 2412 | #define AR5K_PHY_MODE_FREQ 0x00000002 /* Freq mode bit */ |
1968 | #define AR5K_PHY_MODE_FREQ_5GHZ 0 | 2413 | #define AR5K_PHY_MODE_FREQ_5GHZ 0 |
1969 | #define AR5K_PHY_MODE_FREQ_2GHZ 2 | 2414 | #define AR5K_PHY_MODE_FREQ_2GHZ 2 |
1970 | #define AR5K_PHY_MODE_MOD_DYN 0x00000004 /* Dynamic OFDM/CCK mode mask [5112+] */ | 2415 | #define AR5K_PHY_MODE_MOD_DYN 0x00000004 /* Enable Dynamic OFDM/CCK mode [5112+] */ |
1971 | #define AR5K_PHY_MODE_RAD 0x00000008 /* [5212+] */ | 2416 | #define AR5K_PHY_MODE_RAD 0x00000008 /* [5212+] */ |
1972 | #define AR5K_PHY_MODE_RAD_RF5111 0 | 2417 | #define AR5K_PHY_MODE_RAD_RF5111 0 |
1973 | #define AR5K_PHY_MODE_RAD_RF5112 8 | 2418 | #define AR5K_PHY_MODE_RAD_RF5112 8 |
1974 | #define AR5K_PHY_MODE_XR 0x00000010 /* [5112+] */ | 2419 | #define AR5K_PHY_MODE_XR 0x00000010 /* Enable XR mode [5112+] */ |
2420 | #define AR5K_PHY_MODE_HALF_RATE 0x00000020 /* Enable Half rate (test) */ | ||
2421 | #define AR5K_PHY_MODE_QUARTER_RATE 0x00000040 /* Enable Quarter rat (test) */ | ||
1975 | 2422 | ||
1976 | /* | 2423 | /* |
1977 | * PHY CCK transmit control register [5111+ (?)] | 2424 | * PHY CCK transmit control register [5111+ (?)] |
@@ -1979,6 +2426,15 @@ after DFS is enabled */ | |||
1979 | #define AR5K_PHY_CCKTXCTL 0xa204 | 2426 | #define AR5K_PHY_CCKTXCTL 0xa204 |
1980 | #define AR5K_PHY_CCKTXCTL_WORLD 0x00000000 | 2427 | #define AR5K_PHY_CCKTXCTL_WORLD 0x00000000 |
1981 | #define AR5K_PHY_CCKTXCTL_JAPAN 0x00000010 | 2428 | #define AR5K_PHY_CCKTXCTL_JAPAN 0x00000010 |
2429 | #define AR5K_PHY_CCKTXCTL_SCRAMBLER_DIS 0x00000001 | ||
2430 | #define AR5K_PHY_CCKTXCTK_DAC_SCALE 0x00000004 | ||
2431 | |||
2432 | /* | ||
2433 | * PHY CCK Cross-correlator Barker RSSI threshold register [5212+] | ||
2434 | */ | ||
2435 | #define AR5K_PHY_CCK_CROSSCORR 0xa208 | ||
2436 | #define AR5K_PHY_CCK_CROSSCORR_WEAK_SIG_THR 0x0000000f | ||
2437 | #define AR5K_PHY_CCK_CROSSCORR_WEAK_SIG_THR_S 0 | ||
1982 | 2438 | ||
1983 | /* | 2439 | /* |
1984 | * PHY 2GHz gain register [5111+] | 2440 | * PHY 2GHz gain register [5111+] |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 846a7d051851..36e8d2f6e7b4 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -305,9 +305,10 @@ static inline void ipw_write_reg32(struct ipw_priv *a, u32 b, u32 c) | |||
305 | #define _ipw_write8(ipw, ofs, val) writeb((val), (ipw)->hw_base + (ofs)) | 305 | #define _ipw_write8(ipw, ofs, val) writeb((val), (ipw)->hw_base + (ofs)) |
306 | 306 | ||
307 | /* 8-bit direct write (for low 4K of SRAM/regs), with debug wrapper */ | 307 | /* 8-bit direct write (for low 4K of SRAM/regs), with debug wrapper */ |
308 | #define ipw_write8(ipw, ofs, val) \ | 308 | #define ipw_write8(ipw, ofs, val) do { \ |
309 | IPW_DEBUG_IO("%s %d: write_direct8(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(ofs), (u32)(val)); \ | 309 | IPW_DEBUG_IO("%s %d: write_direct8(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(ofs), (u32)(val)); \ |
310 | _ipw_write8(ipw, ofs, val) | 310 | _ipw_write8(ipw, ofs, val); \ |
311 | } while (0) | ||
311 | 312 | ||
312 | /* 16-bit direct write (low 4K) */ | 313 | /* 16-bit direct write (low 4K) */ |
313 | #define _ipw_write16(ipw, ofs, val) writew((val), (ipw)->hw_base + (ofs)) | 314 | #define _ipw_write16(ipw, ofs, val) writew((val), (ipw)->hw_base + (ofs)) |
diff --git a/drivers/net/wireless/iwlwifi/Kconfig b/drivers/net/wireless/iwlwifi/Kconfig index 82b66a3d3a5d..b0ac0ce3fb9f 100644 --- a/drivers/net/wireless/iwlwifi/Kconfig +++ b/drivers/net/wireless/iwlwifi/Kconfig | |||
@@ -14,18 +14,49 @@ config IWLWIFI_LEDS | |||
14 | default n | 14 | default n |
15 | 15 | ||
16 | config IWLWIFI_RFKILL | 16 | config IWLWIFI_RFKILL |
17 | boolean "IWLWIFI RF kill support" | 17 | boolean "Iwlwifi RF kill support" |
18 | depends on IWLCORE | 18 | depends on IWLCORE |
19 | 19 | ||
20 | config IWL4965 | 20 | config IWLWIFI_DEBUG |
21 | tristate "Intel Wireless WiFi 4965AGN" | 21 | bool "Enable full debugging output in iwlagn driver" |
22 | depends on IWLCORE | ||
23 | ---help--- | ||
24 | This option will enable debug tracing output for the iwlwifi drivers | ||
25 | |||
26 | This will result in the kernel module being ~100k larger. You can | ||
27 | control which debug output is sent to the kernel log by setting the | ||
28 | value in | ||
29 | |||
30 | /sys/class/net/wlan0/device/debug_level | ||
31 | |||
32 | This entry will only exist if this option is enabled. | ||
33 | |||
34 | To set a value, simply echo an 8-byte hex value to the same file: | ||
35 | |||
36 | % echo 0x43fff > /sys/class/net/wlan0/device/debug_level | ||
37 | |||
38 | You can find the list of debug mask values in: | ||
39 | drivers/net/wireless/iwlwifi/iwl-debug.h | ||
40 | |||
41 | If this is your first time using this driver, you should say Y here | ||
42 | as the debug information can assist others in helping you resolve | ||
43 | any problems you may encounter. | ||
44 | |||
45 | config IWLWIFI_DEBUGFS | ||
46 | bool "Iwlwifi debugfs support" | ||
47 | depends on IWLCORE && IWLWIFI_DEBUG && MAC80211_DEBUGFS | ||
48 | ---help--- | ||
49 | Enable creation of debugfs files for the iwlwifi drivers. | ||
50 | |||
51 | config IWLAGN | ||
52 | tristate "Intel Wireless WiFi Next Gen AGN" | ||
22 | depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL | 53 | depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL |
23 | select FW_LOADER | 54 | select FW_LOADER |
24 | select IWLCORE | 55 | select IWLCORE |
25 | ---help--- | 56 | ---help--- |
26 | Select to build the driver supporting the: | 57 | Select to build the driver supporting the: |
27 | 58 | ||
28 | Intel Wireless WiFi Link 4965AGN | 59 | Intel Wireless WiFi Link Next-Gen AGN |
29 | 60 | ||
30 | This driver uses the kernel's mac80211 subsystem. | 61 | This driver uses the kernel's mac80211 subsystem. |
31 | 62 | ||
@@ -42,60 +73,33 @@ config IWL4965 | |||
42 | If you want to compile the driver as a module ( = code which can be | 73 | If you want to compile the driver as a module ( = code which can be |
43 | inserted in and removed from the running kernel whenever you want), | 74 | inserted in and removed from the running kernel whenever you want), |
44 | say M here and read <file:Documentation/kbuild/modules.txt>. The | 75 | say M here and read <file:Documentation/kbuild/modules.txt>. The |
45 | module will be called iwl4965.ko. | 76 | module will be called iwlagn.ko. |
46 | |||
47 | config IWL4965_LEDS | ||
48 | bool "Enable LEDS features in iwl4965 driver" | ||
49 | depends on IWL4965 | ||
50 | select IWLWIFI_LEDS | ||
51 | ---help--- | ||
52 | This option enables LEDS for the iwlwifi drivers | ||
53 | 77 | ||
54 | 78 | config IWLAGN_SPECTRUM_MEASUREMENT | |
55 | config IWL4965_SPECTRUM_MEASUREMENT | 79 | bool "Enable Spectrum Measurement in iwlagn driver" |
56 | bool "Enable Spectrum Measurement in iwl4965 driver" | 80 | depends on IWLAGN |
57 | depends on IWL4965 | ||
58 | ---help--- | 81 | ---help--- |
59 | This option will enable spectrum measurement for the iwl4965 driver. | 82 | This option will enable spectrum measurement for the iwlagn driver. |
60 | 83 | ||
61 | config IWLWIFI_DEBUG | 84 | config IWLAGN_LEDS |
62 | bool "Enable full debugging output in iwl4965 driver" | 85 | bool "Enable LEDS features in iwlagn driver" |
63 | depends on IWL4965 | 86 | depends on IWLAGN |
87 | select IWLWIFI_LEDS | ||
64 | ---help--- | 88 | ---help--- |
65 | This option will enable debug tracing output for the iwl4965 | 89 | This option enables LEDS for the iwlagn drivers |
66 | driver. | ||
67 | |||
68 | This will result in the kernel module being ~100k larger. You can | ||
69 | control which debug output is sent to the kernel log by setting the | ||
70 | value in | ||
71 | |||
72 | /sys/class/net/wlan0/device/debug_level | ||
73 | |||
74 | This entry will only exist if this option is enabled. | ||
75 | |||
76 | To set a value, simply echo an 8-byte hex value to the same file: | ||
77 | |||
78 | % echo 0x43fff > /sys/class/net/wlan0/device/debug_level | ||
79 | 90 | ||
80 | You can find the list of debug mask values in: | ||
81 | drivers/net/wireless/iwlwifi/iwl-4965-debug.h | ||
82 | 91 | ||
83 | If this is your first time using this driver, you should say Y here | 92 | config IWL4965 |
84 | as the debug information can assist others in helping you resolve | 93 | bool "Intel Wireless WiFi 4965AGN" |
85 | any problems you may encounter. | 94 | depends on IWLAGN |
95 | ---help--- | ||
96 | This option enables support for Intel Wireless WiFi Link 4965AGN | ||
86 | 97 | ||
87 | config IWL5000 | 98 | config IWL5000 |
88 | bool "Intel Wireless WiFi 5000AGN" | 99 | bool "Intel Wireless WiFi 5000AGN" |
89 | depends on IWL4965 | 100 | depends on IWLAGN |
90 | ---help--- | 101 | ---help--- |
91 | This option enables support for Intel Wireless WiFi Link 5000AGN Family | 102 | This option enables support for Intel Wireless WiFi Link 5000AGN Family |
92 | Dependency on 4965 is temporary | ||
93 | |||
94 | config IWLWIFI_DEBUGFS | ||
95 | bool "Iwlwifi debugfs support" | ||
96 | depends on IWLCORE && IWLWIFI_DEBUG && MAC80211_DEBUGFS | ||
97 | ---help--- | ||
98 | Enable creation of debugfs files for the iwlwifi drivers. | ||
99 | 103 | ||
100 | config IWL3945 | 104 | config IWL3945 |
101 | tristate "Intel PRO/Wireless 3945ABG/BG Network Connection" | 105 | tristate "Intel PRO/Wireless 3945ABG/BG Network Connection" |
diff --git a/drivers/net/wireless/iwlwifi/Makefile b/drivers/net/wireless/iwlwifi/Makefile index 1f52b92f08b5..47aa28f6a513 100644 --- a/drivers/net/wireless/iwlwifi/Makefile +++ b/drivers/net/wireless/iwlwifi/Makefile | |||
@@ -6,15 +6,14 @@ iwlcore-$(CONFIG_IWLWIFI_DEBUGFS) += iwl-debugfs.o | |||
6 | iwlcore-$(CONFIG_IWLWIFI_LEDS) += iwl-led.o | 6 | iwlcore-$(CONFIG_IWLWIFI_LEDS) += iwl-led.o |
7 | iwlcore-$(CONFIG_IWLWIFI_RFKILL) += iwl-rfkill.o | 7 | iwlcore-$(CONFIG_IWLWIFI_RFKILL) += iwl-rfkill.o |
8 | 8 | ||
9 | obj-$(CONFIG_IWLAGN) += iwlagn.o | ||
10 | iwlagn-objs := iwl-agn.o iwl-agn-rs.o | ||
11 | |||
12 | iwlagn-$(CONFIG_IWL4965) += iwl-4965.o | ||
13 | iwlagn-$(CONFIG_IWL5000) += iwl-5000.o | ||
14 | |||
9 | obj-$(CONFIG_IWL3945) += iwl3945.o | 15 | obj-$(CONFIG_IWL3945) += iwl3945.o |
10 | iwl3945-objs := iwl3945-base.o iwl-3945.o iwl-3945-rs.o | 16 | iwl3945-objs := iwl3945-base.o iwl-3945.o iwl-3945-rs.o |
11 | iwl3945-$(CONFIG_IWL3945_LEDS) += iwl-3945-led.o | 17 | iwl3945-$(CONFIG_IWL3945_LEDS) += iwl-3945-led.o |
12 | 18 | ||
13 | obj-$(CONFIG_IWL4965) += iwl4965.o | ||
14 | iwl4965-objs := iwl4965-base.o iwl-4965.o iwl-4965-rs.o | ||
15 | |||
16 | ifeq ($(CONFIG_IWL5000),y) | ||
17 | iwl4965-objs += iwl-5000.o | ||
18 | endif | ||
19 | |||
20 | 19 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.c b/drivers/net/wireless/iwlwifi/iwl-3945-led.c index 6be1fe13fa57..d3336966b6b5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-led.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945-led.c | |||
@@ -206,12 +206,12 @@ static void iwl3945_led_brightness_set(struct led_classdev *led_cdev, | |||
206 | static int iwl3945_led_register_led(struct iwl3945_priv *priv, | 206 | static int iwl3945_led_register_led(struct iwl3945_priv *priv, |
207 | struct iwl3945_led *led, | 207 | struct iwl3945_led *led, |
208 | enum led_type type, u8 set_led, | 208 | enum led_type type, u8 set_led, |
209 | const char *name, char *trigger) | 209 | char *trigger) |
210 | { | 210 | { |
211 | struct device *device = wiphy_dev(priv->hw->wiphy); | 211 | struct device *device = wiphy_dev(priv->hw->wiphy); |
212 | int ret; | 212 | int ret; |
213 | 213 | ||
214 | led->led_dev.name = name; | 214 | led->led_dev.name = led->name; |
215 | led->led_dev.brightness_set = iwl3945_led_brightness_set; | 215 | led->led_dev.brightness_set = iwl3945_led_brightness_set; |
216 | led->led_dev.default_trigger = trigger; | 216 | led->led_dev.default_trigger = trigger; |
217 | 217 | ||
@@ -308,7 +308,6 @@ void iwl3945_led_background(struct iwl3945_priv *priv) | |||
308 | int iwl3945_led_register(struct iwl3945_priv *priv) | 308 | int iwl3945_led_register(struct iwl3945_priv *priv) |
309 | { | 309 | { |
310 | char *trigger; | 310 | char *trigger; |
311 | char name[32]; | ||
312 | int ret; | 311 | int ret; |
313 | 312 | ||
314 | priv->last_blink_rate = 0; | 313 | priv->last_blink_rate = 0; |
@@ -318,7 +317,8 @@ int iwl3945_led_register(struct iwl3945_priv *priv) | |||
318 | priv->allow_blinking = 0; | 317 | priv->allow_blinking = 0; |
319 | 318 | ||
320 | trigger = ieee80211_get_radio_led_name(priv->hw); | 319 | trigger = ieee80211_get_radio_led_name(priv->hw); |
321 | snprintf(name, sizeof(name), "iwl-%s:radio", | 320 | snprintf(priv->led[IWL_LED_TRG_RADIO].name, |
321 | sizeof(priv->led[IWL_LED_TRG_RADIO].name), "iwl-%s:radio", | ||
322 | wiphy_name(priv->hw->wiphy)); | 322 | wiphy_name(priv->hw->wiphy)); |
323 | 323 | ||
324 | priv->led[IWL_LED_TRG_RADIO].led_on = iwl3945_led_on; | 324 | priv->led[IWL_LED_TRG_RADIO].led_on = iwl3945_led_on; |
@@ -327,19 +327,20 @@ int iwl3945_led_register(struct iwl3945_priv *priv) | |||
327 | 327 | ||
328 | ret = iwl3945_led_register_led(priv, | 328 | ret = iwl3945_led_register_led(priv, |
329 | &priv->led[IWL_LED_TRG_RADIO], | 329 | &priv->led[IWL_LED_TRG_RADIO], |
330 | IWL_LED_TRG_RADIO, 1, | 330 | IWL_LED_TRG_RADIO, 1, trigger); |
331 | name, trigger); | 331 | |
332 | if (ret) | 332 | if (ret) |
333 | goto exit_fail; | 333 | goto exit_fail; |
334 | 334 | ||
335 | trigger = ieee80211_get_assoc_led_name(priv->hw); | 335 | trigger = ieee80211_get_assoc_led_name(priv->hw); |
336 | snprintf(name, sizeof(name), "iwl-%s:assoc", | 336 | snprintf(priv->led[IWL_LED_TRG_ASSOC].name, |
337 | sizeof(priv->led[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc", | ||
337 | wiphy_name(priv->hw->wiphy)); | 338 | wiphy_name(priv->hw->wiphy)); |
338 | 339 | ||
339 | ret = iwl3945_led_register_led(priv, | 340 | ret = iwl3945_led_register_led(priv, |
340 | &priv->led[IWL_LED_TRG_ASSOC], | 341 | &priv->led[IWL_LED_TRG_ASSOC], |
341 | IWL_LED_TRG_ASSOC, 0, | 342 | IWL_LED_TRG_ASSOC, 0, trigger); |
342 | name, trigger); | 343 | |
343 | /* for assoc always turn led on */ | 344 | /* for assoc always turn led on */ |
344 | priv->led[IWL_LED_TRG_ASSOC].led_on = iwl3945_led_on; | 345 | priv->led[IWL_LED_TRG_ASSOC].led_on = iwl3945_led_on; |
345 | priv->led[IWL_LED_TRG_ASSOC].led_off = iwl3945_led_on; | 346 | priv->led[IWL_LED_TRG_ASSOC].led_off = iwl3945_led_on; |
@@ -349,14 +350,13 @@ int iwl3945_led_register(struct iwl3945_priv *priv) | |||
349 | goto exit_fail; | 350 | goto exit_fail; |
350 | 351 | ||
351 | trigger = ieee80211_get_rx_led_name(priv->hw); | 352 | trigger = ieee80211_get_rx_led_name(priv->hw); |
352 | snprintf(name, sizeof(name), "iwl-%s:RX", | 353 | snprintf(priv->led[IWL_LED_TRG_RX].name, |
354 | sizeof(priv->led[IWL_LED_TRG_RX].name), "iwl-%s:RX", | ||
353 | wiphy_name(priv->hw->wiphy)); | 355 | wiphy_name(priv->hw->wiphy)); |
354 | 356 | ||
355 | |||
356 | ret = iwl3945_led_register_led(priv, | 357 | ret = iwl3945_led_register_led(priv, |
357 | &priv->led[IWL_LED_TRG_RX], | 358 | &priv->led[IWL_LED_TRG_RX], |
358 | IWL_LED_TRG_RX, 0, | 359 | IWL_LED_TRG_RX, 0, trigger); |
359 | name, trigger); | ||
360 | 360 | ||
361 | priv->led[IWL_LED_TRG_RX].led_on = iwl3945_led_associated; | 361 | priv->led[IWL_LED_TRG_RX].led_on = iwl3945_led_associated; |
362 | priv->led[IWL_LED_TRG_RX].led_off = iwl3945_led_associated; | 362 | priv->led[IWL_LED_TRG_RX].led_off = iwl3945_led_associated; |
@@ -366,13 +366,14 @@ int iwl3945_led_register(struct iwl3945_priv *priv) | |||
366 | goto exit_fail; | 366 | goto exit_fail; |
367 | 367 | ||
368 | trigger = ieee80211_get_tx_led_name(priv->hw); | 368 | trigger = ieee80211_get_tx_led_name(priv->hw); |
369 | snprintf(name, sizeof(name), "iwl-%s:TX", | 369 | snprintf(priv->led[IWL_LED_TRG_TX].name, |
370 | sizeof(priv->led[IWL_LED_TRG_TX].name), "iwl-%s:TX", | ||
370 | wiphy_name(priv->hw->wiphy)); | 371 | wiphy_name(priv->hw->wiphy)); |
371 | 372 | ||
372 | ret = iwl3945_led_register_led(priv, | 373 | ret = iwl3945_led_register_led(priv, |
373 | &priv->led[IWL_LED_TRG_TX], | 374 | &priv->led[IWL_LED_TRG_TX], |
374 | IWL_LED_TRG_TX, 0, | 375 | IWL_LED_TRG_TX, 0, trigger); |
375 | name, trigger); | 376 | |
376 | priv->led[IWL_LED_TRG_TX].led_on = iwl3945_led_associated; | 377 | priv->led[IWL_LED_TRG_TX].led_on = iwl3945_led_associated; |
377 | priv->led[IWL_LED_TRG_TX].led_off = iwl3945_led_associated; | 378 | priv->led[IWL_LED_TRG_TX].led_off = iwl3945_led_associated; |
378 | priv->led[IWL_LED_TRG_TX].led_pattern = iwl3945_led_pattern; | 379 | priv->led[IWL_LED_TRG_TX].led_pattern = iwl3945_led_pattern; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.h b/drivers/net/wireless/iwlwifi/iwl-3945-led.h index 47b7e0bac802..2fbd126c1347 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-led.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945-led.h | |||
@@ -50,6 +50,7 @@ enum led_type { | |||
50 | struct iwl3945_led { | 50 | struct iwl3945_led { |
51 | struct iwl3945_priv *priv; | 51 | struct iwl3945_priv *priv; |
52 | struct led_classdev led_dev; | 52 | struct led_classdev led_dev; |
53 | char name[32]; | ||
53 | 54 | ||
54 | int (*led_on) (struct iwl3945_priv *priv, int led_id); | 55 | int (*led_on) (struct iwl3945_priv *priv, int led_id); |
55 | int (*led_off) (struct iwl3945_priv *priv, int led_id); | 56 | int (*led_off) (struct iwl3945_priv *priv, int led_id); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index a51e0eaa1334..b3931f6135a4 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c | |||
@@ -710,10 +710,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv, | |||
710 | return; | 710 | return; |
711 | } | 711 | } |
712 | 712 | ||
713 | if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { | 713 | |
714 | iwl3945_pass_packet_to_mac80211(priv, rxb, &rx_status); | ||
715 | return; | ||
716 | } | ||
717 | 714 | ||
718 | /* Convert 3945's rssi indicator to dBm */ | 715 | /* Convert 3945's rssi indicator to dBm */ |
719 | rx_status.signal = rx_stats->rssi - IWL_RSSI_OFFSET; | 716 | rx_status.signal = rx_stats->rssi - IWL_RSSI_OFFSET; |
@@ -775,6 +772,11 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv, | |||
775 | priv->last_rx_noise = rx_status.noise; | 772 | priv->last_rx_noise = rx_status.noise; |
776 | } | 773 | } |
777 | 774 | ||
775 | if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { | ||
776 | iwl3945_pass_packet_to_mac80211(priv, rxb, &rx_status); | ||
777 | return; | ||
778 | } | ||
779 | |||
778 | switch (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FTYPE) { | 780 | switch (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FTYPE) { |
779 | case IEEE80211_FTYPE_MGMT: | 781 | case IEEE80211_FTYPE_MGMT: |
780 | switch (le16_to_cpu(header->frame_control) & | 782 | switch (le16_to_cpu(header->frame_control) & |
@@ -793,8 +795,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv, | |||
793 | struct ieee80211_mgmt *mgmt = | 795 | struct ieee80211_mgmt *mgmt = |
794 | (struct ieee80211_mgmt *)header; | 796 | (struct ieee80211_mgmt *)header; |
795 | __le32 *pos; | 797 | __le32 *pos; |
796 | pos = | 798 | pos = (__le32 *)&mgmt->u.beacon. |
797 | (__le32 *) & mgmt->u.beacon. | ||
798 | timestamp; | 799 | timestamp; |
799 | priv->timestamp0 = le32_to_cpu(pos[0]); | 800 | priv->timestamp0 = le32_to_cpu(pos[0]); |
800 | priv->timestamp1 = le32_to_cpu(pos[1]); | 801 | priv->timestamp1 = le32_to_cpu(pos[1]); |
@@ -1507,7 +1508,7 @@ static int iwl3945_hw_reg_adjust_power_by_temp(int new_reading, int old_reading) | |||
1507 | */ | 1508 | */ |
1508 | static inline int iwl3945_hw_reg_temp_out_of_range(int temperature) | 1509 | static inline int iwl3945_hw_reg_temp_out_of_range(int temperature) |
1509 | { | 1510 | { |
1510 | return (((temperature < -260) || (temperature > 25)) ? 1 : 0); | 1511 | return ((temperature < -260) || (temperature > 25)) ? 1 : 0; |
1511 | } | 1512 | } |
1512 | 1513 | ||
1513 | int iwl3945_hw_get_temperature(struct iwl3945_priv *priv) | 1514 | int iwl3945_hw_get_temperature(struct iwl3945_priv *priv) |
@@ -2628,7 +2629,7 @@ unsigned int iwl3945_hw_get_beacon_cmd(struct iwl3945_priv *priv, | |||
2628 | tx_beacon_cmd->tx.supp_rates[1] = | 2629 | tx_beacon_cmd->tx.supp_rates[1] = |
2629 | (IWL_CCK_BASIC_RATES_MASK & 0xF); | 2630 | (IWL_CCK_BASIC_RATES_MASK & 0xF); |
2630 | 2631 | ||
2631 | return (sizeof(struct iwl3945_tx_beacon_cmd) + frame_size); | 2632 | return sizeof(struct iwl3945_tx_beacon_cmd) + frame_size; |
2632 | } | 2633 | } |
2633 | 2634 | ||
2634 | void iwl3945_hw_rx_handler_setup(struct iwl3945_priv *priv) | 2635 | void iwl3945_hw_rx_handler_setup(struct iwl3945_priv *priv) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index ba2df1ba32d2..22bb26985c2e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -341,39 +341,6 @@ err: | |||
341 | return -EINVAL; | 341 | return -EINVAL; |
342 | 342 | ||
343 | } | 343 | } |
344 | int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src) | ||
345 | { | ||
346 | int ret; | ||
347 | unsigned long flags; | ||
348 | |||
349 | spin_lock_irqsave(&priv->lock, flags); | ||
350 | ret = iwl_grab_nic_access(priv); | ||
351 | if (ret) { | ||
352 | spin_unlock_irqrestore(&priv->lock, flags); | ||
353 | return ret; | ||
354 | } | ||
355 | |||
356 | if (src == IWL_PWR_SRC_VAUX) { | ||
357 | u32 val; | ||
358 | ret = pci_read_config_dword(priv->pci_dev, PCI_POWER_SOURCE, | ||
359 | &val); | ||
360 | |||
361 | if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT) { | ||
362 | iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, | ||
363 | APMG_PS_CTRL_VAL_PWR_SRC_VAUX, | ||
364 | ~APMG_PS_CTRL_MSK_PWR_SRC); | ||
365 | } | ||
366 | } else { | ||
367 | iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, | ||
368 | APMG_PS_CTRL_VAL_PWR_SRC_VMAIN, | ||
369 | ~APMG_PS_CTRL_MSK_PWR_SRC); | ||
370 | } | ||
371 | |||
372 | iwl_release_nic_access(priv); | ||
373 | spin_unlock_irqrestore(&priv->lock, flags); | ||
374 | |||
375 | return ret; | ||
376 | } | ||
377 | 344 | ||
378 | /* | 345 | /* |
379 | * Activate/Deactivat Tx DMA/FIFO channels according tx fifos mask | 346 | * Activate/Deactivat Tx DMA/FIFO channels according tx fifos mask |
@@ -875,18 +842,6 @@ static int iwl4965_hw_set_hw_params(struct iwl_priv *priv) | |||
875 | return 0; | 842 | return 0; |
876 | } | 843 | } |
877 | 844 | ||
878 | /* set card power command */ | ||
879 | static int iwl4965_set_power(struct iwl_priv *priv, | ||
880 | void *cmd) | ||
881 | { | ||
882 | int ret = 0; | ||
883 | |||
884 | ret = iwl_send_cmd_pdu_async(priv, POWER_TABLE_CMD, | ||
885 | sizeof(struct iwl4965_powertable_cmd), | ||
886 | cmd, NULL); | ||
887 | return ret; | ||
888 | } | ||
889 | |||
890 | static s32 iwl4965_math_div_round(s32 num, s32 denom, s32 *res) | 845 | static s32 iwl4965_math_div_round(s32 num, s32 denom, s32 *res) |
891 | { | 846 | { |
892 | s32 sign = 1; | 847 | s32 sign = 1; |
@@ -1560,11 +1515,11 @@ static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u16 channel, | |||
1560 | c, atten_value, power_index, | 1515 | c, atten_value, power_index, |
1561 | tx_power.s.radio_tx_gain[c], | 1516 | tx_power.s.radio_tx_gain[c], |
1562 | tx_power.s.dsp_predis_atten[c]); | 1517 | tx_power.s.dsp_predis_atten[c]); |
1563 | }/* for each chain */ | 1518 | } /* for each chain */ |
1564 | 1519 | ||
1565 | tx_power_tbl->power_tbl[i].dw = cpu_to_le32(tx_power.dw); | 1520 | tx_power_tbl->power_tbl[i].dw = cpu_to_le32(tx_power.dw); |
1566 | 1521 | ||
1567 | }/* for each rate */ | 1522 | } /* for each rate */ |
1568 | 1523 | ||
1569 | return 0; | 1524 | return 0; |
1570 | } | 1525 | } |
@@ -1701,38 +1656,6 @@ static int iwl4965_shared_mem_rx_idx(struct iwl_priv *priv) | |||
1701 | return le32_to_cpu(s->rb_closed) & 0xFFF; | 1656 | return le32_to_cpu(s->rb_closed) & 0xFFF; |
1702 | } | 1657 | } |
1703 | 1658 | ||
1704 | unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv, | ||
1705 | struct iwl_frame *frame, u8 rate) | ||
1706 | { | ||
1707 | struct iwl4965_tx_beacon_cmd *tx_beacon_cmd; | ||
1708 | unsigned int frame_size; | ||
1709 | |||
1710 | tx_beacon_cmd = &frame->u.beacon; | ||
1711 | memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd)); | ||
1712 | |||
1713 | tx_beacon_cmd->tx.sta_id = priv->hw_params.bcast_sta_id; | ||
1714 | tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE; | ||
1715 | |||
1716 | frame_size = iwl4965_fill_beacon_frame(priv, | ||
1717 | tx_beacon_cmd->frame, | ||
1718 | iwl_bcast_addr, | ||
1719 | sizeof(frame->u) - sizeof(*tx_beacon_cmd)); | ||
1720 | |||
1721 | BUG_ON(frame_size > MAX_MPDU_SIZE); | ||
1722 | tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size); | ||
1723 | |||
1724 | if ((rate == IWL_RATE_1M_PLCP) || (rate >= IWL_RATE_2M_PLCP)) | ||
1725 | tx_beacon_cmd->tx.rate_n_flags = | ||
1726 | iwl_hw_set_rate_n_flags(rate, RATE_MCS_CCK_MSK); | ||
1727 | else | ||
1728 | tx_beacon_cmd->tx.rate_n_flags = | ||
1729 | iwl_hw_set_rate_n_flags(rate, 0); | ||
1730 | |||
1731 | tx_beacon_cmd->tx.tx_flags = (TX_CMD_FLG_SEQ_CTL_MSK | | ||
1732 | TX_CMD_FLG_TSF_MSK | TX_CMD_FLG_STA_RATE_MSK); | ||
1733 | return (sizeof(*tx_beacon_cmd) + frame_size); | ||
1734 | } | ||
1735 | |||
1736 | static int iwl4965_alloc_shared_mem(struct iwl_priv *priv) | 1659 | static int iwl4965_alloc_shared_mem(struct iwl_priv *priv) |
1737 | { | 1660 | { |
1738 | priv->shared_virt = pci_alloc_consistent(priv->pci_dev, | 1661 | priv->shared_virt = pci_alloc_consistent(priv->pci_dev, |
@@ -2079,39 +2002,6 @@ static int iwl4965_txq_agg_enable(struct iwl_priv *priv, int txq_id, | |||
2079 | return 0; | 2002 | return 0; |
2080 | } | 2003 | } |
2081 | 2004 | ||
2082 | int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw, | ||
2083 | enum ieee80211_ampdu_mlme_action action, | ||
2084 | const u8 *addr, u16 tid, u16 *ssn) | ||
2085 | { | ||
2086 | struct iwl_priv *priv = hw->priv; | ||
2087 | DECLARE_MAC_BUF(mac); | ||
2088 | |||
2089 | IWL_DEBUG_HT("A-MPDU action on addr %s tid %d\n", | ||
2090 | print_mac(mac, addr), tid); | ||
2091 | |||
2092 | if (!(priv->cfg->sku & IWL_SKU_N)) | ||
2093 | return -EACCES; | ||
2094 | |||
2095 | switch (action) { | ||
2096 | case IEEE80211_AMPDU_RX_START: | ||
2097 | IWL_DEBUG_HT("start Rx\n"); | ||
2098 | return iwl_rx_agg_start(priv, addr, tid, *ssn); | ||
2099 | case IEEE80211_AMPDU_RX_STOP: | ||
2100 | IWL_DEBUG_HT("stop Rx\n"); | ||
2101 | return iwl_rx_agg_stop(priv, addr, tid); | ||
2102 | case IEEE80211_AMPDU_TX_START: | ||
2103 | IWL_DEBUG_HT("start Tx\n"); | ||
2104 | return iwl_tx_agg_start(priv, addr, tid, ssn); | ||
2105 | case IEEE80211_AMPDU_TX_STOP: | ||
2106 | IWL_DEBUG_HT("stop Tx\n"); | ||
2107 | return iwl_tx_agg_stop(priv, addr, tid); | ||
2108 | default: | ||
2109 | IWL_DEBUG_HT("unknown\n"); | ||
2110 | return -EINVAL; | ||
2111 | break; | ||
2112 | } | ||
2113 | return 0; | ||
2114 | } | ||
2115 | 2005 | ||
2116 | static u16 iwl4965_get_hcmd_size(u8 cmd_id, u16 len) | 2006 | static u16 iwl4965_get_hcmd_size(u8 cmd_id, u16 len) |
2117 | { | 2007 | { |
@@ -2240,9 +2130,9 @@ static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv, | |||
2240 | bitmap = bitmap << sh; | 2130 | bitmap = bitmap << sh; |
2241 | sh = 0; | 2131 | sh = 0; |
2242 | } | 2132 | } |
2243 | bitmap |= (1 << sh); | 2133 | bitmap |= 1ULL << sh; |
2244 | IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%x\n", | 2134 | IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%llx\n", |
2245 | start, (u32)(bitmap & 0xFFFFFFFF)); | 2135 | start, (unsigned long long)bitmap); |
2246 | } | 2136 | } |
2247 | 2137 | ||
2248 | agg->bitmap = bitmap; | 2138 | agg->bitmap = bitmap; |
@@ -2368,6 +2258,40 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv, | |||
2368 | IWL_ERROR("TODO: Implement Tx ABORT REQUIRED!!!\n"); | 2258 | IWL_ERROR("TODO: Implement Tx ABORT REQUIRED!!!\n"); |
2369 | } | 2259 | } |
2370 | 2260 | ||
2261 | static int iwl4965_calc_rssi(struct iwl_priv *priv, | ||
2262 | struct iwl_rx_phy_res *rx_resp) | ||
2263 | { | ||
2264 | /* data from PHY/DSP regarding signal strength, etc., | ||
2265 | * contents are always there, not configurable by host. */ | ||
2266 | struct iwl4965_rx_non_cfg_phy *ncphy = | ||
2267 | (struct iwl4965_rx_non_cfg_phy *)rx_resp->non_cfg_phy_buf; | ||
2268 | u32 agc = (le16_to_cpu(ncphy->agc_info) & IWL49_AGC_DB_MASK) | ||
2269 | >> IWL49_AGC_DB_POS; | ||
2270 | |||
2271 | u32 valid_antennae = | ||
2272 | (le16_to_cpu(rx_resp->phy_flags) & IWL49_RX_PHY_FLAGS_ANTENNAE_MASK) | ||
2273 | >> IWL49_RX_PHY_FLAGS_ANTENNAE_OFFSET; | ||
2274 | u8 max_rssi = 0; | ||
2275 | u32 i; | ||
2276 | |||
2277 | /* Find max rssi among 3 possible receivers. | ||
2278 | * These values are measured by the digital signal processor (DSP). | ||
2279 | * They should stay fairly constant even as the signal strength varies, | ||
2280 | * if the radio's automatic gain control (AGC) is working right. | ||
2281 | * AGC value (see below) will provide the "interesting" info. */ | ||
2282 | for (i = 0; i < 3; i++) | ||
2283 | if (valid_antennae & (1 << i)) | ||
2284 | max_rssi = max(ncphy->rssi_info[i << 1], max_rssi); | ||
2285 | |||
2286 | IWL_DEBUG_STATS("Rssi In A %d B %d C %d Max %d AGC dB %d\n", | ||
2287 | ncphy->rssi_info[0], ncphy->rssi_info[2], ncphy->rssi_info[4], | ||
2288 | max_rssi, agc); | ||
2289 | |||
2290 | /* dBm = max_rssi dB - agc dB - constant. | ||
2291 | * Higher AGC (higher radio gain) means lower signal. */ | ||
2292 | return max_rssi - agc - IWL_RSSI_OFFSET; | ||
2293 | } | ||
2294 | |||
2371 | 2295 | ||
2372 | /* Set up 4965-specific Rx frame reply handlers */ | 2296 | /* Set up 4965-specific Rx frame reply handlers */ |
2373 | static void iwl4965_rx_handler_setup(struct iwl_priv *priv) | 2297 | static void iwl4965_rx_handler_setup(struct iwl_priv *priv) |
@@ -2399,6 +2323,7 @@ static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = { | |||
2399 | .chain_noise_reset = iwl4965_chain_noise_reset, | 2323 | .chain_noise_reset = iwl4965_chain_noise_reset, |
2400 | .gain_computation = iwl4965_gain_computation, | 2324 | .gain_computation = iwl4965_gain_computation, |
2401 | .rts_tx_cmd_flag = iwl4965_rts_tx_cmd_flag, | 2325 | .rts_tx_cmd_flag = iwl4965_rts_tx_cmd_flag, |
2326 | .calc_rssi = iwl4965_calc_rssi, | ||
2402 | }; | 2327 | }; |
2403 | 2328 | ||
2404 | static struct iwl_lib_ops iwl4965_lib = { | 2329 | static struct iwl_lib_ops iwl4965_lib = { |
@@ -2440,7 +2365,6 @@ static struct iwl_lib_ops iwl4965_lib = { | |||
2440 | .check_version = iwl4965_eeprom_check_version, | 2365 | .check_version = iwl4965_eeprom_check_version, |
2441 | .query_addr = iwlcore_eeprom_query_addr, | 2366 | .query_addr = iwlcore_eeprom_query_addr, |
2442 | }, | 2367 | }, |
2443 | .set_power = iwl4965_set_power, | ||
2444 | .send_tx_power = iwl4965_send_tx_power, | 2368 | .send_tx_power = iwl4965_send_tx_power, |
2445 | .update_chain_flags = iwl4965_update_chain_flags, | 2369 | .update_chain_flags = iwl4965_update_chain_flags, |
2446 | .temperature = iwl4965_temperature_calib, | 2370 | .temperature = iwl4965_temperature_calib, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 878d6193b232..f3d139b663e6 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -93,6 +93,13 @@ static int iwl5000_apm_init(struct iwl_priv *priv) | |||
93 | iwl_set_bit(priv, CSR_GIO_CHICKEN_BITS, | 93 | iwl_set_bit(priv, CSR_GIO_CHICKEN_BITS, |
94 | CSR_GIO_CHICKEN_BITS_REG_BIT_L1A_NO_L0S_RX); | 94 | CSR_GIO_CHICKEN_BITS_REG_BIT_L1A_NO_L0S_RX); |
95 | 95 | ||
96 | /* Set FH wait treshold to maximum (HW error during stress W/A) */ | ||
97 | iwl_set_bit(priv, CSR_DBG_HPET_MEM_REG, CSR_DBG_HPET_MEM_REG_VAL); | ||
98 | |||
99 | /* enable HAP INTA to move device L1a -> L0s */ | ||
100 | iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, | ||
101 | CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A); | ||
102 | |||
96 | iwl_set_bit(priv, CSR_ANA_PLL_CFG, CSR50_ANA_PLL_CFG_VAL); | 103 | iwl_set_bit(priv, CSR_ANA_PLL_CFG, CSR50_ANA_PLL_CFG_VAL); |
97 | 104 | ||
98 | /* set "initialization complete" bit to move adapter | 105 | /* set "initialization complete" bit to move adapter |
@@ -230,6 +237,16 @@ static void iwl5000_nic_config(struct iwl_priv *priv) | |||
230 | CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI | | 237 | CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI | |
231 | CSR_HW_IF_CONFIG_REG_BIT_MAC_SI); | 238 | CSR_HW_IF_CONFIG_REG_BIT_MAC_SI); |
232 | 239 | ||
240 | /* W/A : NIC is stuck in a reset state after Early PCIe power off | ||
241 | * (PCIe power is lost before PERST# is asserted), | ||
242 | * causing ME FW to lose ownership and not being able to obtain it back. | ||
243 | */ | ||
244 | iwl_grab_nic_access(priv); | ||
245 | iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, | ||
246 | APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS, | ||
247 | ~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS); | ||
248 | iwl_release_nic_access(priv); | ||
249 | |||
233 | spin_unlock_irqrestore(&priv->lock, flags); | 250 | spin_unlock_irqrestore(&priv->lock, flags); |
234 | } | 251 | } |
235 | 252 | ||
@@ -924,8 +941,8 @@ static void iwl5000_txq_update_byte_cnt_tbl(struct iwl_priv *priv, | |||
924 | len = byte_cnt + IWL_TX_CRC_SIZE + IWL_TX_DELIMITER_SIZE; | 941 | len = byte_cnt + IWL_TX_CRC_SIZE + IWL_TX_DELIMITER_SIZE; |
925 | 942 | ||
926 | if (txq_id != IWL_CMD_QUEUE_NUM) { | 943 | if (txq_id != IWL_CMD_QUEUE_NUM) { |
927 | sta = txq->cmd[txq->q.write_ptr].cmd.tx.sta_id; | 944 | sta = txq->cmd[txq->q.write_ptr]->cmd.tx.sta_id; |
928 | sec_ctl = txq->cmd[txq->q.write_ptr].cmd.tx.sec_ctl; | 945 | sec_ctl = txq->cmd[txq->q.write_ptr]->cmd.tx.sec_ctl; |
929 | 946 | ||
930 | switch (sec_ctl & TX_CMD_SEC_MSK) { | 947 | switch (sec_ctl & TX_CMD_SEC_MSK) { |
931 | case TX_CMD_SEC_CCM: | 948 | case TX_CMD_SEC_CCM: |
@@ -964,7 +981,7 @@ static void iwl5000_txq_inval_byte_cnt_tbl(struct iwl_priv *priv, | |||
964 | u8 sta = 0; | 981 | u8 sta = 0; |
965 | 982 | ||
966 | if (txq_id != IWL_CMD_QUEUE_NUM) | 983 | if (txq_id != IWL_CMD_QUEUE_NUM) |
967 | sta = txq->cmd[txq->q.read_ptr].cmd.tx.sta_id; | 984 | sta = txq->cmd[txq->q.read_ptr]->cmd.tx.sta_id; |
968 | 985 | ||
969 | shared_data->queues_byte_cnt_tbls[txq_id].tfd_offset[txq->q.read_ptr]. | 986 | shared_data->queues_byte_cnt_tbls[txq_id].tfd_offset[txq->q.read_ptr]. |
970 | val = cpu_to_le16(1 | (sta << 12)); | 987 | val = cpu_to_le16(1 | (sta << 12)); |
@@ -1131,7 +1148,7 @@ static void iwl5000_txq_set_sched(struct iwl_priv *priv, u32 mask) | |||
1131 | 1148 | ||
1132 | static inline u32 iwl5000_get_scd_ssn(struct iwl5000_tx_resp *tx_resp) | 1149 | static inline u32 iwl5000_get_scd_ssn(struct iwl5000_tx_resp *tx_resp) |
1133 | { | 1150 | { |
1134 | return le32_to_cpup((__le32*)&tx_resp->status + | 1151 | return le32_to_cpup((__le32 *)&tx_resp->status + |
1135 | tx_resp->frame_count) & MAX_SN; | 1152 | tx_resp->frame_count) & MAX_SN; |
1136 | } | 1153 | } |
1137 | 1154 | ||
@@ -1228,9 +1245,9 @@ static int iwl5000_tx_status_reply_tx(struct iwl_priv *priv, | |||
1228 | bitmap = bitmap << sh; | 1245 | bitmap = bitmap << sh; |
1229 | sh = 0; | 1246 | sh = 0; |
1230 | } | 1247 | } |
1231 | bitmap |= (1 << sh); | 1248 | bitmap |= 1ULL << sh; |
1232 | IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%x\n", | 1249 | IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%llx\n", |
1233 | start, (u32)(bitmap & 0xFFFFFFFF)); | 1250 | start, (unsigned long long)bitmap); |
1234 | } | 1251 | } |
1235 | 1252 | ||
1236 | agg->bitmap = bitmap; | 1253 | agg->bitmap = bitmap; |
@@ -1444,6 +1461,44 @@ static void iwl5000_temperature(struct iwl_priv *priv) | |||
1444 | priv->temperature = le32_to_cpu(priv->statistics.general.temperature); | 1461 | priv->temperature = le32_to_cpu(priv->statistics.general.temperature); |
1445 | } | 1462 | } |
1446 | 1463 | ||
1464 | /* Calc max signal level (dBm) among 3 possible receivers */ | ||
1465 | static int iwl5000_calc_rssi(struct iwl_priv *priv, | ||
1466 | struct iwl_rx_phy_res *rx_resp) | ||
1467 | { | ||
1468 | /* data from PHY/DSP regarding signal strength, etc., | ||
1469 | * contents are always there, not configurable by host | ||
1470 | */ | ||
1471 | struct iwl5000_non_cfg_phy *ncphy = | ||
1472 | (struct iwl5000_non_cfg_phy *)rx_resp->non_cfg_phy_buf; | ||
1473 | u32 val, rssi_a, rssi_b, rssi_c, max_rssi; | ||
1474 | u8 agc; | ||
1475 | |||
1476 | val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_AGC_IDX]); | ||
1477 | agc = (val & IWL50_OFDM_AGC_MSK) >> IWL50_OFDM_AGC_BIT_POS; | ||
1478 | |||
1479 | /* Find max rssi among 3 possible receivers. | ||
1480 | * These values are measured by the digital signal processor (DSP). | ||
1481 | * They should stay fairly constant even as the signal strength varies, | ||
1482 | * if the radio's automatic gain control (AGC) is working right. | ||
1483 | * AGC value (see below) will provide the "interesting" info. | ||
1484 | */ | ||
1485 | val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_RSSI_AB_IDX]); | ||
1486 | rssi_a = (val & IWL50_OFDM_RSSI_A_MSK) >> IWL50_OFDM_RSSI_A_BIT_POS; | ||
1487 | rssi_b = (val & IWL50_OFDM_RSSI_B_MSK) >> IWL50_OFDM_RSSI_B_BIT_POS; | ||
1488 | val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_RSSI_C_IDX]); | ||
1489 | rssi_c = (val & IWL50_OFDM_RSSI_C_MSK) >> IWL50_OFDM_RSSI_C_BIT_POS; | ||
1490 | |||
1491 | max_rssi = max_t(u32, rssi_a, rssi_b); | ||
1492 | max_rssi = max_t(u32, max_rssi, rssi_c); | ||
1493 | |||
1494 | IWL_DEBUG_STATS("Rssi In A %d B %d C %d Max %d AGC dB %d\n", | ||
1495 | rssi_a, rssi_b, rssi_c, max_rssi, agc); | ||
1496 | |||
1497 | /* dBm = max_rssi dB - agc dB - constant. | ||
1498 | * Higher AGC (higher radio gain) means lower signal. */ | ||
1499 | return max_rssi - agc - IWL_RSSI_OFFSET; | ||
1500 | } | ||
1501 | |||
1447 | static struct iwl_hcmd_ops iwl5000_hcmd = { | 1502 | static struct iwl_hcmd_ops iwl5000_hcmd = { |
1448 | .rxon_assoc = iwl5000_send_rxon_assoc, | 1503 | .rxon_assoc = iwl5000_send_rxon_assoc, |
1449 | }; | 1504 | }; |
@@ -1454,6 +1509,7 @@ static struct iwl_hcmd_utils_ops iwl5000_hcmd_utils = { | |||
1454 | .gain_computation = iwl5000_gain_computation, | 1509 | .gain_computation = iwl5000_gain_computation, |
1455 | .chain_noise_reset = iwl5000_chain_noise_reset, | 1510 | .chain_noise_reset = iwl5000_chain_noise_reset, |
1456 | .rts_tx_cmd_flag = iwl5000_rts_tx_cmd_flag, | 1511 | .rts_tx_cmd_flag = iwl5000_rts_tx_cmd_flag, |
1512 | .calc_rssi = iwl5000_calc_rssi, | ||
1457 | }; | 1513 | }; |
1458 | 1514 | ||
1459 | static struct iwl_lib_ops iwl5000_lib = { | 1515 | static struct iwl_lib_ops iwl5000_lib = { |
@@ -1474,6 +1530,7 @@ static struct iwl_lib_ops iwl5000_lib = { | |||
1474 | .alive_notify = iwl5000_alive_notify, | 1530 | .alive_notify = iwl5000_alive_notify, |
1475 | .send_tx_power = iwl5000_send_tx_power, | 1531 | .send_tx_power = iwl5000_send_tx_power, |
1476 | .temperature = iwl5000_temperature, | 1532 | .temperature = iwl5000_temperature, |
1533 | .update_chain_flags = iwl4965_update_chain_flags, | ||
1477 | .apm_ops = { | 1534 | .apm_ops = { |
1478 | .init = iwl5000_apm_init, | 1535 | .init = iwl5000_apm_init, |
1479 | .reset = iwl5000_apm_reset, | 1536 | .reset = iwl5000_apm_reset, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index 3ccb84aa5dbc..754fef5b592f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c | |||
@@ -42,7 +42,7 @@ | |||
42 | #include "iwl-core.h" | 42 | #include "iwl-core.h" |
43 | #include "iwl-helpers.h" | 43 | #include "iwl-helpers.h" |
44 | 44 | ||
45 | #define RS_NAME "iwl-4965-rs" | 45 | #define RS_NAME "iwl-agn-rs" |
46 | 46 | ||
47 | #define NUM_TRY_BEFORE_ANT_TOGGLE 1 | 47 | #define NUM_TRY_BEFORE_ANT_TOGGLE 1 |
48 | #define IWL_NUMBER_TRY 1 | 48 | #define IWL_NUMBER_TRY 1 |
@@ -77,9 +77,9 @@ static const u8 ant_toggle_lookup[] = { | |||
77 | }; | 77 | }; |
78 | 78 | ||
79 | /** | 79 | /** |
80 | * struct iwl4965_rate_scale_data -- tx success history for one rate | 80 | * struct iwl_rate_scale_data -- tx success history for one rate |
81 | */ | 81 | */ |
82 | struct iwl4965_rate_scale_data { | 82 | struct iwl_rate_scale_data { |
83 | u64 data; /* bitmap of successful frames */ | 83 | u64 data; /* bitmap of successful frames */ |
84 | s32 success_counter; /* number of frames successful */ | 84 | s32 success_counter; /* number of frames successful */ |
85 | s32 success_ratio; /* per-cent * 128 */ | 85 | s32 success_ratio; /* per-cent * 128 */ |
@@ -89,12 +89,12 @@ struct iwl4965_rate_scale_data { | |||
89 | }; | 89 | }; |
90 | 90 | ||
91 | /** | 91 | /** |
92 | * struct iwl4965_scale_tbl_info -- tx params and success history for all rates | 92 | * struct iwl_scale_tbl_info -- tx params and success history for all rates |
93 | * | 93 | * |
94 | * There are two of these in struct iwl4965_lq_sta, | 94 | * There are two of these in struct iwl_lq_sta, |
95 | * one for "active", and one for "search". | 95 | * one for "active", and one for "search". |
96 | */ | 96 | */ |
97 | struct iwl4965_scale_tbl_info { | 97 | struct iwl_scale_tbl_info { |
98 | enum iwl_table_type lq_type; | 98 | enum iwl_table_type lq_type; |
99 | u8 ant_type; | 99 | u8 ant_type; |
100 | u8 is_SGI; /* 1 = short guard interval */ | 100 | u8 is_SGI; /* 1 = short guard interval */ |
@@ -103,10 +103,10 @@ struct iwl4965_scale_tbl_info { | |||
103 | u8 action; /* change modulation; IWL_[LEGACY/SISO/MIMO]_SWITCH_* */ | 103 | u8 action; /* change modulation; IWL_[LEGACY/SISO/MIMO]_SWITCH_* */ |
104 | s32 *expected_tpt; /* throughput metrics; expected_tpt_G, etc. */ | 104 | s32 *expected_tpt; /* throughput metrics; expected_tpt_G, etc. */ |
105 | u32 current_rate; /* rate_n_flags, uCode API format */ | 105 | u32 current_rate; /* rate_n_flags, uCode API format */ |
106 | struct iwl4965_rate_scale_data win[IWL_RATE_COUNT]; /* rate histories */ | 106 | struct iwl_rate_scale_data win[IWL_RATE_COUNT]; /* rate histories */ |
107 | }; | 107 | }; |
108 | 108 | ||
109 | struct iwl4965_traffic_load { | 109 | struct iwl_traffic_load { |
110 | unsigned long time_stamp; /* age of the oldest statistics */ | 110 | unsigned long time_stamp; /* age of the oldest statistics */ |
111 | u32 packet_count[TID_QUEUE_MAX_SIZE]; /* packet count in this time | 111 | u32 packet_count[TID_QUEUE_MAX_SIZE]; /* packet count in this time |
112 | * slice */ | 112 | * slice */ |
@@ -118,11 +118,11 @@ struct iwl4965_traffic_load { | |||
118 | }; | 118 | }; |
119 | 119 | ||
120 | /** | 120 | /** |
121 | * struct iwl4965_lq_sta -- driver's rate scaling private structure | 121 | * struct iwl_lq_sta -- driver's rate scaling private structure |
122 | * | 122 | * |
123 | * Pointer to this gets passed back and forth between driver and mac80211. | 123 | * Pointer to this gets passed back and forth between driver and mac80211. |
124 | */ | 124 | */ |
125 | struct iwl4965_lq_sta { | 125 | struct iwl_lq_sta { |
126 | u8 active_tbl; /* index of active table, range 0-1 */ | 126 | u8 active_tbl; /* index of active table, range 0-1 */ |
127 | u8 enable_counter; /* indicates HT mode */ | 127 | u8 enable_counter; /* indicates HT mode */ |
128 | u8 stay_in_tbl; /* 1: disallow, 0: allow search for new mode */ | 128 | u8 stay_in_tbl; /* 1: disallow, 0: allow search for new mode */ |
@@ -153,8 +153,8 @@ struct iwl4965_lq_sta { | |||
153 | u16 active_rate_basic; | 153 | u16 active_rate_basic; |
154 | 154 | ||
155 | struct iwl_link_quality_cmd lq; | 155 | struct iwl_link_quality_cmd lq; |
156 | struct iwl4965_scale_tbl_info lq_info[LQ_SIZE]; /* "active", "search" */ | 156 | struct iwl_scale_tbl_info lq_info[LQ_SIZE]; /* "active", "search" */ |
157 | struct iwl4965_traffic_load load[TID_MAX_LOAD_COUNT]; | 157 | struct iwl_traffic_load load[TID_MAX_LOAD_COUNT]; |
158 | u8 tx_agg_tid_en; | 158 | u8 tx_agg_tid_en; |
159 | #ifdef CONFIG_MAC80211_DEBUGFS | 159 | #ifdef CONFIG_MAC80211_DEBUGFS |
160 | struct dentry *rs_sta_dbgfs_scale_table_file; | 160 | struct dentry *rs_sta_dbgfs_scale_table_file; |
@@ -170,16 +170,15 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
170 | struct ieee80211_hdr *hdr, | 170 | struct ieee80211_hdr *hdr, |
171 | struct sta_info *sta); | 171 | struct sta_info *sta); |
172 | static void rs_fill_link_cmd(const struct iwl_priv *priv, | 172 | static void rs_fill_link_cmd(const struct iwl_priv *priv, |
173 | struct iwl4965_lq_sta *lq_sta, | 173 | struct iwl_lq_sta *lq_sta, u32 rate_n_flags); |
174 | u32 rate_n_flags); | ||
175 | 174 | ||
176 | 175 | ||
177 | #ifdef CONFIG_MAC80211_DEBUGFS | 176 | #ifdef CONFIG_MAC80211_DEBUGFS |
178 | static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, | 177 | static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, |
179 | u32 *rate_n_flags, int index); | 178 | u32 *rate_n_flags, int index); |
180 | #else | 179 | #else |
181 | static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, | 180 | static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, |
182 | u32 *rate_n_flags, int index) | 181 | u32 *rate_n_flags, int index) |
183 | {} | 182 | {} |
184 | #endif | 183 | #endif |
185 | 184 | ||
@@ -234,7 +233,7 @@ static inline u8 rs_extract_rate(u32 rate_n_flags) | |||
234 | return (u8)(rate_n_flags & 0xFF); | 233 | return (u8)(rate_n_flags & 0xFF); |
235 | } | 234 | } |
236 | 235 | ||
237 | static void rs_rate_scale_clear_window(struct iwl4965_rate_scale_data *window) | 236 | static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window) |
238 | { | 237 | { |
239 | window->data = 0; | 238 | window->data = 0; |
240 | window->success_counter = 0; | 239 | window->success_counter = 0; |
@@ -246,14 +245,14 @@ static void rs_rate_scale_clear_window(struct iwl4965_rate_scale_data *window) | |||
246 | 245 | ||
247 | static inline u8 rs_is_valid_ant(u8 valid_antenna, u8 ant_type) | 246 | static inline u8 rs_is_valid_ant(u8 valid_antenna, u8 ant_type) |
248 | { | 247 | { |
249 | return ((ant_type & valid_antenna) == ant_type); | 248 | return (ant_type & valid_antenna) == ant_type; |
250 | } | 249 | } |
251 | 250 | ||
252 | /* | 251 | /* |
253 | * removes the old data from the statistics. All data that is older than | 252 | * removes the old data from the statistics. All data that is older than |
254 | * TID_MAX_TIME_DIFF, will be deleted. | 253 | * TID_MAX_TIME_DIFF, will be deleted. |
255 | */ | 254 | */ |
256 | static void rs_tl_rm_old_stats(struct iwl4965_traffic_load *tl, u32 curr_time) | 255 | static void rs_tl_rm_old_stats(struct iwl_traffic_load *tl, u32 curr_time) |
257 | { | 256 | { |
258 | /* The oldest age we want to keep */ | 257 | /* The oldest age we want to keep */ |
259 | u32 oldest_time = curr_time - TID_MAX_TIME_DIFF; | 258 | u32 oldest_time = curr_time - TID_MAX_TIME_DIFF; |
@@ -274,13 +273,13 @@ static void rs_tl_rm_old_stats(struct iwl4965_traffic_load *tl, u32 curr_time) | |||
274 | * increment traffic load value for tid and also remove | 273 | * increment traffic load value for tid and also remove |
275 | * any old values if passed the certain time period | 274 | * any old values if passed the certain time period |
276 | */ | 275 | */ |
277 | static u8 rs_tl_add_packet(struct iwl4965_lq_sta *lq_data, | 276 | static u8 rs_tl_add_packet(struct iwl_lq_sta *lq_data, |
278 | struct ieee80211_hdr *hdr) | 277 | struct ieee80211_hdr *hdr) |
279 | { | 278 | { |
280 | u32 curr_time = jiffies_to_msecs(jiffies); | 279 | u32 curr_time = jiffies_to_msecs(jiffies); |
281 | u32 time_diff; | 280 | u32 time_diff; |
282 | s32 index; | 281 | s32 index; |
283 | struct iwl4965_traffic_load *tl = NULL; | 282 | struct iwl_traffic_load *tl = NULL; |
284 | __le16 fc = hdr->frame_control; | 283 | __le16 fc = hdr->frame_control; |
285 | u8 tid; | 284 | u8 tid; |
286 | 285 | ||
@@ -325,12 +324,12 @@ static u8 rs_tl_add_packet(struct iwl4965_lq_sta *lq_data, | |||
325 | /* | 324 | /* |
326 | get the traffic load value for tid | 325 | get the traffic load value for tid |
327 | */ | 326 | */ |
328 | static u32 rs_tl_get_load(struct iwl4965_lq_sta *lq_data, u8 tid) | 327 | static u32 rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid) |
329 | { | 328 | { |
330 | u32 curr_time = jiffies_to_msecs(jiffies); | 329 | u32 curr_time = jiffies_to_msecs(jiffies); |
331 | u32 time_diff; | 330 | u32 time_diff; |
332 | s32 index; | 331 | s32 index; |
333 | struct iwl4965_traffic_load *tl = NULL; | 332 | struct iwl_traffic_load *tl = NULL; |
334 | 333 | ||
335 | if (tid >= TID_MAX_LOAD_COUNT) | 334 | if (tid >= TID_MAX_LOAD_COUNT) |
336 | return 0; | 335 | return 0; |
@@ -354,8 +353,8 @@ static u32 rs_tl_get_load(struct iwl4965_lq_sta *lq_data, u8 tid) | |||
354 | } | 353 | } |
355 | 354 | ||
356 | static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv, | 355 | static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv, |
357 | struct iwl4965_lq_sta *lq_data, u8 tid, | 356 | struct iwl_lq_sta *lq_data, u8 tid, |
358 | struct sta_info *sta) | 357 | struct sta_info *sta) |
359 | { | 358 | { |
360 | unsigned long state; | 359 | unsigned long state; |
361 | DECLARE_MAC_BUF(mac); | 360 | DECLARE_MAC_BUF(mac); |
@@ -373,8 +372,8 @@ static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv, | |||
373 | } | 372 | } |
374 | 373 | ||
375 | static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid, | 374 | static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid, |
376 | struct iwl4965_lq_sta *lq_data, | 375 | struct iwl_lq_sta *lq_data, |
377 | struct sta_info *sta) | 376 | struct sta_info *sta) |
378 | { | 377 | { |
379 | if ((tid < TID_MAX_LOAD_COUNT)) | 378 | if ((tid < TID_MAX_LOAD_COUNT)) |
380 | rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta); | 379 | rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta); |
@@ -385,9 +384,9 @@ static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid, | |||
385 | 384 | ||
386 | static inline int get_num_of_ant_from_rate(u32 rate_n_flags) | 385 | static inline int get_num_of_ant_from_rate(u32 rate_n_flags) |
387 | { | 386 | { |
388 | return (!!(rate_n_flags & RATE_MCS_ANT_A_MSK) + | 387 | return !!(rate_n_flags & RATE_MCS_ANT_A_MSK) + |
389 | !!(rate_n_flags & RATE_MCS_ANT_B_MSK) + | 388 | !!(rate_n_flags & RATE_MCS_ANT_B_MSK) + |
390 | !!(rate_n_flags & RATE_MCS_ANT_C_MSK)); | 389 | !!(rate_n_flags & RATE_MCS_ANT_C_MSK); |
391 | } | 390 | } |
392 | 391 | ||
393 | /** | 392 | /** |
@@ -397,11 +396,11 @@ static inline int get_num_of_ant_from_rate(u32 rate_n_flags) | |||
397 | * at this rate. window->data contains the bitmask of successful | 396 | * at this rate. window->data contains the bitmask of successful |
398 | * packets. | 397 | * packets. |
399 | */ | 398 | */ |
400 | static int rs_collect_tx_data(struct iwl4965_rate_scale_data *windows, | 399 | static int rs_collect_tx_data(struct iwl_rate_scale_data *windows, |
401 | int scale_index, s32 tpt, int retries, | 400 | int scale_index, s32 tpt, int retries, |
402 | int successes) | 401 | int successes) |
403 | { | 402 | { |
404 | struct iwl4965_rate_scale_data *window = NULL; | 403 | struct iwl_rate_scale_data *window = NULL; |
405 | static const u64 mask = (((u64)1) << (IWL_RATE_MAX_WINDOW - 1)); | 404 | static const u64 mask = (((u64)1) << (IWL_RATE_MAX_WINDOW - 1)); |
406 | s32 fail_count; | 405 | s32 fail_count; |
407 | 406 | ||
@@ -473,7 +472,7 @@ static int rs_collect_tx_data(struct iwl4965_rate_scale_data *windows, | |||
473 | * Fill uCode API rate_n_flags field, based on "search" or "active" table. | 472 | * Fill uCode API rate_n_flags field, based on "search" or "active" table. |
474 | */ | 473 | */ |
475 | /* FIXME:RS:remove this function and put the flags statically in the table */ | 474 | /* FIXME:RS:remove this function and put the flags statically in the table */ |
476 | static u32 rate_n_flags_from_tbl(struct iwl4965_scale_tbl_info *tbl, | 475 | static u32 rate_n_flags_from_tbl(struct iwl_scale_tbl_info *tbl, |
477 | int index, u8 use_green) | 476 | int index, u8 use_green) |
478 | { | 477 | { |
479 | u32 rate_n_flags = 0; | 478 | u32 rate_n_flags = 0; |
@@ -530,7 +529,7 @@ static u32 rate_n_flags_from_tbl(struct iwl4965_scale_tbl_info *tbl, | |||
530 | */ | 529 | */ |
531 | static int rs_get_tbl_info_from_mcs(const u32 rate_n_flags, | 530 | static int rs_get_tbl_info_from_mcs(const u32 rate_n_flags, |
532 | enum ieee80211_band band, | 531 | enum ieee80211_band band, |
533 | struct iwl4965_scale_tbl_info *tbl, | 532 | struct iwl_scale_tbl_info *tbl, |
534 | int *rate_idx) | 533 | int *rate_idx) |
535 | { | 534 | { |
536 | u32 ant_msk = (rate_n_flags & RATE_MCS_ANT_ABC_MSK); | 535 | u32 ant_msk = (rate_n_flags & RATE_MCS_ANT_ABC_MSK); |
@@ -591,7 +590,7 @@ static int rs_get_tbl_info_from_mcs(const u32 rate_n_flags, | |||
591 | /* switch to another antenna/antennas and return 1 */ | 590 | /* switch to another antenna/antennas and return 1 */ |
592 | /* if no other valid antenna found, return 0 */ | 591 | /* if no other valid antenna found, return 0 */ |
593 | static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags, | 592 | static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags, |
594 | struct iwl4965_scale_tbl_info *tbl) | 593 | struct iwl_scale_tbl_info *tbl) |
595 | { | 594 | { |
596 | u8 new_ant_type; | 595 | u8 new_ant_type; |
597 | 596 | ||
@@ -621,9 +620,9 @@ static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags, | |||
621 | #if 0 | 620 | #if 0 |
622 | static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) | 621 | static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) |
623 | { | 622 | { |
624 | return ((conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) && | 623 | return (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) && |
625 | priv->current_ht_config.is_green_field && | 624 | priv->current_ht_config.is_green_field && |
626 | !priv->current_ht_config.non_GF_STA_present); | 625 | !priv->current_ht_config.non_GF_STA_present; |
627 | } | 626 | } |
628 | #endif | 627 | #endif |
629 | static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) | 628 | static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) |
@@ -638,9 +637,9 @@ static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf | |||
638 | * basic available rates. | 637 | * basic available rates. |
639 | * | 638 | * |
640 | */ | 639 | */ |
641 | static u16 rs_get_supported_rates(struct iwl4965_lq_sta *lq_sta, | 640 | static u16 rs_get_supported_rates(struct iwl_lq_sta *lq_sta, |
642 | struct ieee80211_hdr *hdr, | 641 | struct ieee80211_hdr *hdr, |
643 | enum iwl_table_type rate_type) | 642 | enum iwl_table_type rate_type) |
644 | { | 643 | { |
645 | if (hdr && is_multicast_ether_addr(hdr->addr1) && | 644 | if (hdr && is_multicast_ether_addr(hdr->addr1) && |
646 | lq_sta->active_rate_basic) | 645 | lq_sta->active_rate_basic) |
@@ -714,9 +713,9 @@ static u16 rs_get_adjacent_rate(struct iwl_priv *priv, u8 index, u16 rate_mask, | |||
714 | return (high << 8) | low; | 713 | return (high << 8) | low; |
715 | } | 714 | } |
716 | 715 | ||
717 | static u32 rs_get_lower_rate(struct iwl4965_lq_sta *lq_sta, | 716 | static u32 rs_get_lower_rate(struct iwl_lq_sta *lq_sta, |
718 | struct iwl4965_scale_tbl_info *tbl, u8 scale_index, | 717 | struct iwl_scale_tbl_info *tbl, |
719 | u8 ht_possible) | 718 | u8 scale_index, u8 ht_possible) |
720 | { | 719 | { |
721 | s32 low; | 720 | s32 low; |
722 | u16 rate_mask; | 721 | u16 rate_mask; |
@@ -780,7 +779,7 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev, | |||
780 | int status; | 779 | int status; |
781 | u8 retries; | 780 | u8 retries; |
782 | int rs_index, index = 0; | 781 | int rs_index, index = 0; |
783 | struct iwl4965_lq_sta *lq_sta; | 782 | struct iwl_lq_sta *lq_sta; |
784 | struct iwl_link_quality_cmd *table; | 783 | struct iwl_link_quality_cmd *table; |
785 | struct sta_info *sta; | 784 | struct sta_info *sta; |
786 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; | 785 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; |
@@ -788,11 +787,11 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev, | |||
788 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); | 787 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); |
789 | struct ieee80211_hw *hw = local_to_hw(local); | 788 | struct ieee80211_hw *hw = local_to_hw(local); |
790 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 789 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
791 | struct iwl4965_rate_scale_data *window = NULL; | 790 | struct iwl_rate_scale_data *window = NULL; |
792 | struct iwl4965_rate_scale_data *search_win = NULL; | 791 | struct iwl_rate_scale_data *search_win = NULL; |
793 | u32 tx_rate; | 792 | u32 tx_rate; |
794 | struct iwl4965_scale_tbl_info tbl_type; | 793 | struct iwl_scale_tbl_info tbl_type; |
795 | struct iwl4965_scale_tbl_info *curr_tbl, *search_tbl; | 794 | struct iwl_scale_tbl_info *curr_tbl, *search_tbl; |
796 | u8 active_index = 0; | 795 | u8 active_index = 0; |
797 | __le16 fc = hdr->frame_control; | 796 | __le16 fc = hdr->frame_control; |
798 | s32 tpt = 0; | 797 | s32 tpt = 0; |
@@ -820,7 +819,7 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev, | |||
820 | goto out; | 819 | goto out; |
821 | 820 | ||
822 | 821 | ||
823 | lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; | 822 | lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv; |
824 | 823 | ||
825 | if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) && | 824 | if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) && |
826 | !lq_sta->ibss_sta_added) | 825 | !lq_sta->ibss_sta_added) |
@@ -831,10 +830,8 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev, | |||
831 | 830 | ||
832 | curr_tbl = &(lq_sta->lq_info[active_index]); | 831 | curr_tbl = &(lq_sta->lq_info[active_index]); |
833 | search_tbl = &(lq_sta->lq_info[(1 - active_index)]); | 832 | search_tbl = &(lq_sta->lq_info[(1 - active_index)]); |
834 | window = (struct iwl4965_rate_scale_data *) | 833 | window = (struct iwl_rate_scale_data *)&(curr_tbl->win[0]); |
835 | &(curr_tbl->win[0]); | 834 | search_win = (struct iwl_rate_scale_data *)&(search_tbl->win[0]); |
836 | search_win = (struct iwl4965_rate_scale_data *) | ||
837 | &(search_tbl->win[0]); | ||
838 | 835 | ||
839 | /* | 836 | /* |
840 | * Ignore this Tx frame response if its initial rate doesn't match | 837 | * Ignore this Tx frame response if its initial rate doesn't match |
@@ -983,7 +980,7 @@ out: | |||
983 | * searching for a new mode. | 980 | * searching for a new mode. |
984 | */ | 981 | */ |
985 | static void rs_set_stay_in_table(struct iwl_priv *priv, u8 is_legacy, | 982 | static void rs_set_stay_in_table(struct iwl_priv *priv, u8 is_legacy, |
986 | struct iwl4965_lq_sta *lq_sta) | 983 | struct iwl_lq_sta *lq_sta) |
987 | { | 984 | { |
988 | IWL_DEBUG_RATE("we are staying in the same table\n"); | 985 | IWL_DEBUG_RATE("we are staying in the same table\n"); |
989 | lq_sta->stay_in_tbl = 1; /* only place this gets set */ | 986 | lq_sta->stay_in_tbl = 1; /* only place this gets set */ |
@@ -1004,8 +1001,8 @@ static void rs_set_stay_in_table(struct iwl_priv *priv, u8 is_legacy, | |||
1004 | /* | 1001 | /* |
1005 | * Find correct throughput table for given mode of modulation | 1002 | * Find correct throughput table for given mode of modulation |
1006 | */ | 1003 | */ |
1007 | static void rs_set_expected_tpt_table(struct iwl4965_lq_sta *lq_sta, | 1004 | static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta, |
1008 | struct iwl4965_scale_tbl_info *tbl) | 1005 | struct iwl_scale_tbl_info *tbl) |
1009 | { | 1006 | { |
1010 | if (is_legacy(tbl->lq_type)) { | 1007 | if (is_legacy(tbl->lq_type)) { |
1011 | if (!is_a_band(tbl->lq_type)) | 1008 | if (!is_a_band(tbl->lq_type)) |
@@ -1050,12 +1047,12 @@ static void rs_set_expected_tpt_table(struct iwl4965_lq_sta *lq_sta, | |||
1050 | * bit rate will typically need to increase, but not if performance was bad. | 1047 | * bit rate will typically need to increase, but not if performance was bad. |
1051 | */ | 1048 | */ |
1052 | static s32 rs_get_best_rate(struct iwl_priv *priv, | 1049 | static s32 rs_get_best_rate(struct iwl_priv *priv, |
1053 | struct iwl4965_lq_sta *lq_sta, | 1050 | struct iwl_lq_sta *lq_sta, |
1054 | struct iwl4965_scale_tbl_info *tbl, /* "search" */ | 1051 | struct iwl_scale_tbl_info *tbl, /* "search" */ |
1055 | u16 rate_mask, s8 index) | 1052 | u16 rate_mask, s8 index) |
1056 | { | 1053 | { |
1057 | /* "active" values */ | 1054 | /* "active" values */ |
1058 | struct iwl4965_scale_tbl_info *active_tbl = | 1055 | struct iwl_scale_tbl_info *active_tbl = |
1059 | &(lq_sta->lq_info[lq_sta->active_tbl]); | 1056 | &(lq_sta->lq_info[lq_sta->active_tbl]); |
1060 | s32 active_sr = active_tbl->win[index].success_ratio; | 1057 | s32 active_sr = active_tbl->win[index].success_ratio; |
1061 | s32 active_tpt = active_tbl->expected_tpt[index]; | 1058 | s32 active_tpt = active_tbl->expected_tpt[index]; |
@@ -1143,10 +1140,10 @@ static s32 rs_get_best_rate(struct iwl_priv *priv, | |||
1143 | * Set up search table for MIMO | 1140 | * Set up search table for MIMO |
1144 | */ | 1141 | */ |
1145 | static int rs_switch_to_mimo2(struct iwl_priv *priv, | 1142 | static int rs_switch_to_mimo2(struct iwl_priv *priv, |
1146 | struct iwl4965_lq_sta *lq_sta, | 1143 | struct iwl_lq_sta *lq_sta, |
1147 | struct ieee80211_conf *conf, | 1144 | struct ieee80211_conf *conf, |
1148 | struct sta_info *sta, | 1145 | struct sta_info *sta, |
1149 | struct iwl4965_scale_tbl_info *tbl, int index) | 1146 | struct iwl_scale_tbl_info *tbl, int index) |
1150 | { | 1147 | { |
1151 | u16 rate_mask; | 1148 | u16 rate_mask; |
1152 | s32 rate; | 1149 | s32 rate; |
@@ -1210,10 +1207,10 @@ static int rs_switch_to_mimo2(struct iwl_priv *priv, | |||
1210 | * Set up search table for SISO | 1207 | * Set up search table for SISO |
1211 | */ | 1208 | */ |
1212 | static int rs_switch_to_siso(struct iwl_priv *priv, | 1209 | static int rs_switch_to_siso(struct iwl_priv *priv, |
1213 | struct iwl4965_lq_sta *lq_sta, | 1210 | struct iwl_lq_sta *lq_sta, |
1214 | struct ieee80211_conf *conf, | 1211 | struct ieee80211_conf *conf, |
1215 | struct sta_info *sta, | 1212 | struct sta_info *sta, |
1216 | struct iwl4965_scale_tbl_info *tbl, int index) | 1213 | struct iwl_scale_tbl_info *tbl, int index) |
1217 | { | 1214 | { |
1218 | u16 rate_mask; | 1215 | u16 rate_mask; |
1219 | u8 is_green = lq_sta->is_green; | 1216 | u8 is_green = lq_sta->is_green; |
@@ -1270,18 +1267,17 @@ static int rs_switch_to_siso(struct iwl_priv *priv, | |||
1270 | * Try to switch to new modulation mode from legacy | 1267 | * Try to switch to new modulation mode from legacy |
1271 | */ | 1268 | */ |
1272 | static int rs_move_legacy_other(struct iwl_priv *priv, | 1269 | static int rs_move_legacy_other(struct iwl_priv *priv, |
1273 | struct iwl4965_lq_sta *lq_sta, | 1270 | struct iwl_lq_sta *lq_sta, |
1274 | struct ieee80211_conf *conf, | 1271 | struct ieee80211_conf *conf, |
1275 | struct sta_info *sta, | 1272 | struct sta_info *sta, |
1276 | int index) | 1273 | int index) |
1277 | { | 1274 | { |
1278 | struct iwl4965_scale_tbl_info *tbl = | 1275 | struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); |
1279 | &(lq_sta->lq_info[lq_sta->active_tbl]); | 1276 | struct iwl_scale_tbl_info *search_tbl = |
1280 | struct iwl4965_scale_tbl_info *search_tbl = | 1277 | &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); |
1281 | &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); | 1278 | struct iwl_rate_scale_data *window = &(tbl->win[index]); |
1282 | struct iwl4965_rate_scale_data *window = &(tbl->win[index]); | 1279 | u32 sz = (sizeof(struct iwl_scale_tbl_info) - |
1283 | u32 sz = (sizeof(struct iwl4965_scale_tbl_info) - | 1280 | (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT)); |
1284 | (sizeof(struct iwl4965_rate_scale_data) * IWL_RATE_COUNT)); | ||
1285 | u8 start_action = tbl->action; | 1281 | u8 start_action = tbl->action; |
1286 | u8 valid_tx_ant = priv->hw_params.valid_tx_ant; | 1282 | u8 valid_tx_ant = priv->hw_params.valid_tx_ant; |
1287 | int ret = 0; | 1283 | int ret = 0; |
@@ -1360,19 +1356,17 @@ static int rs_move_legacy_other(struct iwl_priv *priv, | |||
1360 | * Try to switch to new modulation mode from SISO | 1356 | * Try to switch to new modulation mode from SISO |
1361 | */ | 1357 | */ |
1362 | static int rs_move_siso_to_other(struct iwl_priv *priv, | 1358 | static int rs_move_siso_to_other(struct iwl_priv *priv, |
1363 | struct iwl4965_lq_sta *lq_sta, | 1359 | struct iwl_lq_sta *lq_sta, |
1364 | struct ieee80211_conf *conf, | 1360 | struct ieee80211_conf *conf, |
1365 | struct sta_info *sta, | 1361 | struct sta_info *sta, int index) |
1366 | int index) | ||
1367 | { | 1362 | { |
1368 | u8 is_green = lq_sta->is_green; | 1363 | u8 is_green = lq_sta->is_green; |
1369 | struct iwl4965_scale_tbl_info *tbl = | 1364 | struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); |
1370 | &(lq_sta->lq_info[lq_sta->active_tbl]); | 1365 | struct iwl_scale_tbl_info *search_tbl = |
1371 | struct iwl4965_scale_tbl_info *search_tbl = | 1366 | &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); |
1372 | &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); | 1367 | struct iwl_rate_scale_data *window = &(tbl->win[index]); |
1373 | struct iwl4965_rate_scale_data *window = &(tbl->win[index]); | 1368 | u32 sz = (sizeof(struct iwl_scale_tbl_info) - |
1374 | u32 sz = (sizeof(struct iwl4965_scale_tbl_info) - | 1369 | (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT)); |
1375 | (sizeof(struct iwl4965_rate_scale_data) * IWL_RATE_COUNT)); | ||
1376 | u8 start_action = tbl->action; | 1370 | u8 start_action = tbl->action; |
1377 | u8 valid_tx_ant = priv->hw_params.valid_tx_ant; | 1371 | u8 valid_tx_ant = priv->hw_params.valid_tx_ant; |
1378 | int ret; | 1372 | int ret; |
@@ -1455,18 +1449,16 @@ static int rs_move_siso_to_other(struct iwl_priv *priv, | |||
1455 | * Try to switch to new modulation mode from MIMO | 1449 | * Try to switch to new modulation mode from MIMO |
1456 | */ | 1450 | */ |
1457 | static int rs_move_mimo_to_other(struct iwl_priv *priv, | 1451 | static int rs_move_mimo_to_other(struct iwl_priv *priv, |
1458 | struct iwl4965_lq_sta *lq_sta, | 1452 | struct iwl_lq_sta *lq_sta, |
1459 | struct ieee80211_conf *conf, | 1453 | struct ieee80211_conf *conf, |
1460 | struct sta_info *sta, | 1454 | struct sta_info *sta, int index) |
1461 | int index) | ||
1462 | { | 1455 | { |
1463 | s8 is_green = lq_sta->is_green; | 1456 | s8 is_green = lq_sta->is_green; |
1464 | struct iwl4965_scale_tbl_info *tbl = | 1457 | struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); |
1465 | &(lq_sta->lq_info[lq_sta->active_tbl]); | 1458 | struct iwl_scale_tbl_info *search_tbl = |
1466 | struct iwl4965_scale_tbl_info *search_tbl = | 1459 | &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); |
1467 | &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); | 1460 | u32 sz = (sizeof(struct iwl_scale_tbl_info) - |
1468 | u32 sz = (sizeof(struct iwl4965_scale_tbl_info) - | 1461 | (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT)); |
1469 | (sizeof(struct iwl4965_rate_scale_data) * IWL_RATE_COUNT)); | ||
1470 | u8 start_action = tbl->action; | 1462 | u8 start_action = tbl->action; |
1471 | /*u8 valid_tx_ant = priv->hw_params.valid_tx_ant;*/ | 1463 | /*u8 valid_tx_ant = priv->hw_params.valid_tx_ant;*/ |
1472 | int ret; | 1464 | int ret; |
@@ -1552,9 +1544,9 @@ static int rs_move_mimo_to_other(struct iwl_priv *priv, | |||
1552 | * 2) # times calling this function | 1544 | * 2) # times calling this function |
1553 | * 3) elapsed time in this mode (not used, for now) | 1545 | * 3) elapsed time in this mode (not used, for now) |
1554 | */ | 1546 | */ |
1555 | static void rs_stay_in_table(struct iwl4965_lq_sta *lq_sta) | 1547 | static void rs_stay_in_table(struct iwl_lq_sta *lq_sta) |
1556 | { | 1548 | { |
1557 | struct iwl4965_scale_tbl_info *tbl; | 1549 | struct iwl_scale_tbl_info *tbl; |
1558 | int i; | 1550 | int i; |
1559 | int active_tbl; | 1551 | int active_tbl; |
1560 | int flush_interval_passed = 0; | 1552 | int flush_interval_passed = 0; |
@@ -1642,7 +1634,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
1642 | int high = IWL_RATE_INVALID; | 1634 | int high = IWL_RATE_INVALID; |
1643 | int index; | 1635 | int index; |
1644 | int i; | 1636 | int i; |
1645 | struct iwl4965_rate_scale_data *window = NULL; | 1637 | struct iwl_rate_scale_data *window = NULL; |
1646 | int current_tpt = IWL_INVALID_VALUE; | 1638 | int current_tpt = IWL_INVALID_VALUE; |
1647 | int low_tpt = IWL_INVALID_VALUE; | 1639 | int low_tpt = IWL_INVALID_VALUE; |
1648 | int high_tpt = IWL_INVALID_VALUE; | 1640 | int high_tpt = IWL_INVALID_VALUE; |
@@ -1651,8 +1643,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
1651 | __le16 fc; | 1643 | __le16 fc; |
1652 | u16 rate_mask; | 1644 | u16 rate_mask; |
1653 | u8 update_lq = 0; | 1645 | u8 update_lq = 0; |
1654 | struct iwl4965_lq_sta *lq_sta; | 1646 | struct iwl_lq_sta *lq_sta; |
1655 | struct iwl4965_scale_tbl_info *tbl, *tbl1; | 1647 | struct iwl_scale_tbl_info *tbl, *tbl1; |
1656 | u16 rate_scale_index_msk = 0; | 1648 | u16 rate_scale_index_msk = 0; |
1657 | u32 rate; | 1649 | u32 rate; |
1658 | u8 is_green = 0; | 1650 | u8 is_green = 0; |
@@ -1675,7 +1667,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
1675 | if (!sta || !sta->rate_ctrl_priv) | 1667 | if (!sta || !sta->rate_ctrl_priv) |
1676 | return; | 1668 | return; |
1677 | 1669 | ||
1678 | lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; | 1670 | lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv; |
1679 | 1671 | ||
1680 | tid = rs_tl_add_packet(lq_sta, hdr); | 1672 | tid = rs_tl_add_packet(lq_sta, hdr); |
1681 | 1673 | ||
@@ -2030,8 +2022,8 @@ static void rs_initialize_lq(struct iwl_priv *priv, | |||
2030 | struct ieee80211_conf *conf, | 2022 | struct ieee80211_conf *conf, |
2031 | struct sta_info *sta) | 2023 | struct sta_info *sta) |
2032 | { | 2024 | { |
2033 | struct iwl4965_lq_sta *lq_sta; | 2025 | struct iwl_lq_sta *lq_sta; |
2034 | struct iwl4965_scale_tbl_info *tbl; | 2026 | struct iwl_scale_tbl_info *tbl; |
2035 | int rate_idx; | 2027 | int rate_idx; |
2036 | int i; | 2028 | int i; |
2037 | u32 rate; | 2029 | u32 rate; |
@@ -2042,7 +2034,7 @@ static void rs_initialize_lq(struct iwl_priv *priv, | |||
2042 | if (!sta || !sta->rate_ctrl_priv) | 2034 | if (!sta || !sta->rate_ctrl_priv) |
2043 | goto out; | 2035 | goto out; |
2044 | 2036 | ||
2045 | lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; | 2037 | lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv; |
2046 | i = sta->last_txrate_idx; | 2038 | i = sta->last_txrate_idx; |
2047 | 2039 | ||
2048 | if ((lq_sta->lq.sta_id == 0xff) && | 2040 | if ((lq_sta->lq.sta_id == 0xff) && |
@@ -2096,7 +2088,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev, | |||
2096 | struct sta_info *sta; | 2088 | struct sta_info *sta; |
2097 | __le16 fc; | 2089 | __le16 fc; |
2098 | struct iwl_priv *priv = (struct iwl_priv *)priv_rate; | 2090 | struct iwl_priv *priv = (struct iwl_priv *)priv_rate; |
2099 | struct iwl4965_lq_sta *lq_sta; | 2091 | struct iwl_lq_sta *lq_sta; |
2100 | 2092 | ||
2101 | IWL_DEBUG_RATE_LIMIT("rate scale calculate new rate for skb\n"); | 2093 | IWL_DEBUG_RATE_LIMIT("rate scale calculate new rate for skb\n"); |
2102 | 2094 | ||
@@ -2113,7 +2105,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev, | |||
2113 | goto out; | 2105 | goto out; |
2114 | } | 2106 | } |
2115 | 2107 | ||
2116 | lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; | 2108 | lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv; |
2117 | i = sta->last_txrate_idx; | 2109 | i = sta->last_txrate_idx; |
2118 | 2110 | ||
2119 | if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) && | 2111 | if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) && |
@@ -2149,14 +2141,14 @@ out: | |||
2149 | 2141 | ||
2150 | static void *rs_alloc_sta(void *priv_rate, gfp_t gfp) | 2142 | static void *rs_alloc_sta(void *priv_rate, gfp_t gfp) |
2151 | { | 2143 | { |
2152 | struct iwl4965_lq_sta *lq_sta; | 2144 | struct iwl_lq_sta *lq_sta; |
2153 | struct iwl_priv *priv; | 2145 | struct iwl_priv *priv; |
2154 | int i, j; | 2146 | int i, j; |
2155 | 2147 | ||
2156 | priv = (struct iwl_priv *)priv_rate; | 2148 | priv = (struct iwl_priv *)priv_rate; |
2157 | IWL_DEBUG_RATE("create station rate scale window\n"); | 2149 | IWL_DEBUG_RATE("create station rate scale window\n"); |
2158 | 2150 | ||
2159 | lq_sta = kzalloc(sizeof(struct iwl4965_lq_sta), gfp); | 2151 | lq_sta = kzalloc(sizeof(struct iwl_lq_sta), gfp); |
2160 | 2152 | ||
2161 | if (lq_sta == NULL) | 2153 | if (lq_sta == NULL) |
2162 | return NULL; | 2154 | return NULL; |
@@ -2165,7 +2157,7 @@ static void *rs_alloc_sta(void *priv_rate, gfp_t gfp) | |||
2165 | 2157 | ||
2166 | for (j = 0; j < LQ_SIZE; j++) | 2158 | for (j = 0; j < LQ_SIZE; j++) |
2167 | for (i = 0; i < IWL_RATE_COUNT; i++) | 2159 | for (i = 0; i < IWL_RATE_COUNT; i++) |
2168 | rs_rate_scale_clear_window(&(lq_sta->lq_info[j].win[i])); | 2160 | rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]); |
2169 | 2161 | ||
2170 | return lq_sta; | 2162 | return lq_sta; |
2171 | } | 2163 | } |
@@ -2178,7 +2170,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta, | |||
2178 | struct ieee80211_conf *conf = &local->hw.conf; | 2170 | struct ieee80211_conf *conf = &local->hw.conf; |
2179 | struct ieee80211_supported_band *sband; | 2171 | struct ieee80211_supported_band *sband; |
2180 | struct iwl_priv *priv = (struct iwl_priv *)priv_rate; | 2172 | struct iwl_priv *priv = (struct iwl_priv *)priv_rate; |
2181 | struct iwl4965_lq_sta *lq_sta = priv_sta; | 2173 | struct iwl_lq_sta *lq_sta = priv_sta; |
2182 | 2174 | ||
2183 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; | 2175 | sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; |
2184 | 2176 | ||
@@ -2187,7 +2179,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta, | |||
2187 | sta->txrate_idx = 3; | 2179 | sta->txrate_idx = 3; |
2188 | for (j = 0; j < LQ_SIZE; j++) | 2180 | for (j = 0; j < LQ_SIZE; j++) |
2189 | for (i = 0; i < IWL_RATE_COUNT; i++) | 2181 | for (i = 0; i < IWL_RATE_COUNT; i++) |
2190 | rs_rate_scale_clear_window(&(lq_sta->lq_info[j].win[i])); | 2182 | rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]); |
2191 | 2183 | ||
2192 | IWL_DEBUG_RATE("LQ: *** rate scale global init ***\n"); | 2184 | IWL_DEBUG_RATE("LQ: *** rate scale global init ***\n"); |
2193 | /* TODO: what is a good starting rate for STA? About middle? Maybe not | 2185 | /* TODO: what is a good starting rate for STA? About middle? Maybe not |
@@ -2271,10 +2263,9 @@ static void rs_rate_init(void *priv_rate, void *priv_sta, | |||
2271 | } | 2263 | } |
2272 | 2264 | ||
2273 | static void rs_fill_link_cmd(const struct iwl_priv *priv, | 2265 | static void rs_fill_link_cmd(const struct iwl_priv *priv, |
2274 | struct iwl4965_lq_sta *lq_sta, | 2266 | struct iwl_lq_sta *lq_sta, u32 new_rate) |
2275 | u32 new_rate) | ||
2276 | { | 2267 | { |
2277 | struct iwl4965_scale_tbl_info tbl_type; | 2268 | struct iwl_scale_tbl_info tbl_type; |
2278 | int index = 0; | 2269 | int index = 0; |
2279 | int rate_idx; | 2270 | int rate_idx; |
2280 | int repeat_rate = 0; | 2271 | int repeat_rate = 0; |
@@ -2402,6 +2393,7 @@ static void rs_free(void *priv_rate) | |||
2402 | 2393 | ||
2403 | static void rs_clear(void *priv_rate) | 2394 | static void rs_clear(void *priv_rate) |
2404 | { | 2395 | { |
2396 | #ifdef CONFIG_IWLWIFI_DEBUG | ||
2405 | struct iwl_priv *priv = (struct iwl_priv *) priv_rate; | 2397 | struct iwl_priv *priv = (struct iwl_priv *) priv_rate; |
2406 | 2398 | ||
2407 | IWL_DEBUG_RATE("enter\n"); | 2399 | IWL_DEBUG_RATE("enter\n"); |
@@ -2409,11 +2401,12 @@ static void rs_clear(void *priv_rate) | |||
2409 | /* TODO - add rate scale state reset */ | 2401 | /* TODO - add rate scale state reset */ |
2410 | 2402 | ||
2411 | IWL_DEBUG_RATE("leave\n"); | 2403 | IWL_DEBUG_RATE("leave\n"); |
2404 | #endif /* CONFIG_IWLWIFI_DEBUG */ | ||
2412 | } | 2405 | } |
2413 | 2406 | ||
2414 | static void rs_free_sta(void *priv_rate, void *priv_sta) | 2407 | static void rs_free_sta(void *priv_rate, void *priv_sta) |
2415 | { | 2408 | { |
2416 | struct iwl4965_lq_sta *lq_sta = priv_sta; | 2409 | struct iwl_lq_sta *lq_sta = priv_sta; |
2417 | struct iwl_priv *priv; | 2410 | struct iwl_priv *priv; |
2418 | 2411 | ||
2419 | priv = (struct iwl_priv *)priv_rate; | 2412 | priv = (struct iwl_priv *)priv_rate; |
@@ -2429,8 +2422,8 @@ static int open_file_generic(struct inode *inode, struct file *file) | |||
2429 | file->private_data = inode->i_private; | 2422 | file->private_data = inode->i_private; |
2430 | return 0; | 2423 | return 0; |
2431 | } | 2424 | } |
2432 | static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, | 2425 | static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, |
2433 | u32 *rate_n_flags, int index) | 2426 | u32 *rate_n_flags, int index) |
2434 | { | 2427 | { |
2435 | struct iwl_priv *priv; | 2428 | struct iwl_priv *priv; |
2436 | 2429 | ||
@@ -2453,7 +2446,7 @@ static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, | |||
2453 | static ssize_t rs_sta_dbgfs_scale_table_write(struct file *file, | 2446 | static ssize_t rs_sta_dbgfs_scale_table_write(struct file *file, |
2454 | const char __user *user_buf, size_t count, loff_t *ppos) | 2447 | const char __user *user_buf, size_t count, loff_t *ppos) |
2455 | { | 2448 | { |
2456 | struct iwl4965_lq_sta *lq_sta = file->private_data; | 2449 | struct iwl_lq_sta *lq_sta = file->private_data; |
2457 | struct iwl_priv *priv; | 2450 | struct iwl_priv *priv; |
2458 | char buf[64]; | 2451 | char buf[64]; |
2459 | int buf_size; | 2452 | int buf_size; |
@@ -2493,7 +2486,7 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file, | |||
2493 | int desc = 0; | 2486 | int desc = 0; |
2494 | int i = 0; | 2487 | int i = 0; |
2495 | 2488 | ||
2496 | struct iwl4965_lq_sta *lq_sta = file->private_data; | 2489 | struct iwl_lq_sta *lq_sta = file->private_data; |
2497 | 2490 | ||
2498 | desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id); | 2491 | desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id); |
2499 | desc += sprintf(buff+desc, "failed=%d success=%d rate=0%X\n", | 2492 | desc += sprintf(buff+desc, "failed=%d success=%d rate=0%X\n", |
@@ -2541,7 +2534,7 @@ static ssize_t rs_sta_dbgfs_stats_table_read(struct file *file, | |||
2541 | int desc = 0; | 2534 | int desc = 0; |
2542 | int i, j; | 2535 | int i, j; |
2543 | 2536 | ||
2544 | struct iwl4965_lq_sta *lq_sta = file->private_data; | 2537 | struct iwl_lq_sta *lq_sta = file->private_data; |
2545 | for (i = 0; i < LQ_SIZE; i++) { | 2538 | for (i = 0; i < LQ_SIZE; i++) { |
2546 | desc += sprintf(buff+desc, "%s type=%d SGI=%d FAT=%d DUP=%d\n" | 2539 | desc += sprintf(buff+desc, "%s type=%d SGI=%d FAT=%d DUP=%d\n" |
2547 | "rate=0x%X\n", | 2540 | "rate=0x%X\n", |
@@ -2570,7 +2563,7 @@ static const struct file_operations rs_sta_dbgfs_stats_table_ops = { | |||
2570 | static void rs_add_debugfs(void *priv, void *priv_sta, | 2563 | static void rs_add_debugfs(void *priv, void *priv_sta, |
2571 | struct dentry *dir) | 2564 | struct dentry *dir) |
2572 | { | 2565 | { |
2573 | struct iwl4965_lq_sta *lq_sta = priv_sta; | 2566 | struct iwl_lq_sta *lq_sta = priv_sta; |
2574 | lq_sta->rs_sta_dbgfs_scale_table_file = | 2567 | lq_sta->rs_sta_dbgfs_scale_table_file = |
2575 | debugfs_create_file("rate_scale_table", 0600, dir, | 2568 | debugfs_create_file("rate_scale_table", 0600, dir, |
2576 | lq_sta, &rs_sta_dbgfs_scale_table_ops); | 2569 | lq_sta, &rs_sta_dbgfs_scale_table_ops); |
@@ -2585,7 +2578,7 @@ static void rs_add_debugfs(void *priv, void *priv_sta, | |||
2585 | 2578 | ||
2586 | static void rs_remove_debugfs(void *priv, void *priv_sta) | 2579 | static void rs_remove_debugfs(void *priv, void *priv_sta) |
2587 | { | 2580 | { |
2588 | struct iwl4965_lq_sta *lq_sta = priv_sta; | 2581 | struct iwl_lq_sta *lq_sta = priv_sta; |
2589 | debugfs_remove(lq_sta->rs_sta_dbgfs_scale_table_file); | 2582 | debugfs_remove(lq_sta->rs_sta_dbgfs_scale_table_file); |
2590 | debugfs_remove(lq_sta->rs_sta_dbgfs_stats_table_file); | 2583 | debugfs_remove(lq_sta->rs_sta_dbgfs_stats_table_file); |
2591 | debugfs_remove(lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file); | 2584 | debugfs_remove(lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file); |
@@ -2609,104 +2602,12 @@ static struct rate_control_ops rs_ops = { | |||
2609 | #endif | 2602 | #endif |
2610 | }; | 2603 | }; |
2611 | 2604 | ||
2612 | int iwl4965_fill_rs_info(struct ieee80211_hw *hw, char *buf, u8 sta_id) | 2605 | int iwlagn_rate_control_register(void) |
2613 | { | ||
2614 | struct ieee80211_local *local = hw_to_local(hw); | ||
2615 | struct iwl_priv *priv = hw->priv; | ||
2616 | struct iwl4965_lq_sta *lq_sta; | ||
2617 | struct sta_info *sta; | ||
2618 | int cnt = 0, i; | ||
2619 | u32 samples = 0, success = 0, good = 0; | ||
2620 | unsigned long now = jiffies; | ||
2621 | u32 max_time = 0; | ||
2622 | u8 lq_type, antenna; | ||
2623 | |||
2624 | rcu_read_lock(); | ||
2625 | |||
2626 | sta = sta_info_get(local, priv->stations[sta_id].sta.sta.addr); | ||
2627 | if (!sta || !sta->rate_ctrl_priv) { | ||
2628 | if (sta) | ||
2629 | IWL_DEBUG_RATE("leave - no private rate data!\n"); | ||
2630 | else | ||
2631 | IWL_DEBUG_RATE("leave - no station!\n"); | ||
2632 | rcu_read_unlock(); | ||
2633 | return sprintf(buf, "station %d not found\n", sta_id); | ||
2634 | } | ||
2635 | |||
2636 | lq_sta = (void *)sta->rate_ctrl_priv; | ||
2637 | |||
2638 | lq_type = lq_sta->lq_info[lq_sta->active_tbl].lq_type; | ||
2639 | antenna = lq_sta->lq_info[lq_sta->active_tbl].ant_type; | ||
2640 | |||
2641 | if (is_legacy(lq_type)) | ||
2642 | i = IWL_RATE_54M_INDEX; | ||
2643 | else | ||
2644 | i = IWL_RATE_60M_INDEX; | ||
2645 | while (1) { | ||
2646 | u64 mask; | ||
2647 | int j; | ||
2648 | int active = lq_sta->active_tbl; | ||
2649 | |||
2650 | cnt += | ||
2651 | sprintf(&buf[cnt], " %2dMbs: ", iwl_rates[i].ieee / 2); | ||
2652 | |||
2653 | mask = (1ULL << (IWL_RATE_MAX_WINDOW - 1)); | ||
2654 | for (j = 0; j < IWL_RATE_MAX_WINDOW; j++, mask >>= 1) | ||
2655 | buf[cnt++] = | ||
2656 | (lq_sta->lq_info[active].win[i].data & mask) | ||
2657 | ? '1' : '0'; | ||
2658 | |||
2659 | samples += lq_sta->lq_info[active].win[i].counter; | ||
2660 | good += lq_sta->lq_info[active].win[i].success_counter; | ||
2661 | success += lq_sta->lq_info[active].win[i].success_counter * | ||
2662 | iwl_rates[i].ieee; | ||
2663 | |||
2664 | if (lq_sta->lq_info[active].win[i].stamp) { | ||
2665 | int delta = | ||
2666 | jiffies_to_msecs(now - | ||
2667 | lq_sta->lq_info[active].win[i].stamp); | ||
2668 | |||
2669 | if (delta > max_time) | ||
2670 | max_time = delta; | ||
2671 | |||
2672 | cnt += sprintf(&buf[cnt], "%5dms\n", delta); | ||
2673 | } else | ||
2674 | buf[cnt++] = '\n'; | ||
2675 | |||
2676 | j = iwl4965_get_prev_ieee_rate(i); | ||
2677 | if (j == i) | ||
2678 | break; | ||
2679 | i = j; | ||
2680 | } | ||
2681 | |||
2682 | /* | ||
2683 | * Display the average rate of all samples taken. | ||
2684 | * NOTE: We multiply # of samples by 2 since the IEEE measurement | ||
2685 | * added from iwl_rates is actually 2X the rate. | ||
2686 | */ | ||
2687 | if (samples) | ||
2688 | cnt += sprintf(&buf[cnt], | ||
2689 | "\nAverage rate is %3d.%02dMbs over last %4dms\n" | ||
2690 | "%3d%% success (%d good packets over %d tries)\n", | ||
2691 | success / (2 * samples), (success * 5 / samples) % 10, | ||
2692 | max_time, good * 100 / samples, good, samples); | ||
2693 | else | ||
2694 | cnt += sprintf(&buf[cnt], "\nAverage rate: 0Mbs\n"); | ||
2695 | |||
2696 | cnt += sprintf(&buf[cnt], "\nrate scale type %d antenna %d " | ||
2697 | "active_search %d rate index %d\n", lq_type, antenna, | ||
2698 | lq_sta->search_better_tbl, sta->last_txrate_idx); | ||
2699 | |||
2700 | rcu_read_unlock(); | ||
2701 | return cnt; | ||
2702 | } | ||
2703 | |||
2704 | int iwl4965_rate_control_register(void) | ||
2705 | { | 2606 | { |
2706 | return ieee80211_rate_control_register(&rs_ops); | 2607 | return ieee80211_rate_control_register(&rs_ops); |
2707 | } | 2608 | } |
2708 | 2609 | ||
2709 | void iwl4965_rate_control_unregister(void) | 2610 | void iwlagn_rate_control_unregister(void) |
2710 | { | 2611 | { |
2711 | ieee80211_rate_control_unregister(&rs_ops); | 2612 | ieee80211_rate_control_unregister(&rs_ops); |
2712 | } | 2613 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.h b/drivers/net/wireless/iwlwifi/iwl-agn-rs.h index 9b9972885aa5..84d4d1e33755 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.h | |||
@@ -24,8 +24,8 @@ | |||
24 | * | 24 | * |
25 | *****************************************************************************/ | 25 | *****************************************************************************/ |
26 | 26 | ||
27 | #ifndef __iwl_4965_rs_h__ | 27 | #ifndef __iwl_agn_rs_h__ |
28 | #define __iwl_4965_rs_h__ | 28 | #define __iwl_agn_rs_h__ |
29 | 29 | ||
30 | #include "iwl-dev.h" | 30 | #include "iwl-dev.h" |
31 | 31 | ||
@@ -88,7 +88,7 @@ enum { | |||
88 | #define IWL_RATE_5M_MASK (1 << IWL_RATE_5M_INDEX) | 88 | #define IWL_RATE_5M_MASK (1 << IWL_RATE_5M_INDEX) |
89 | #define IWL_RATE_11M_MASK (1 << IWL_RATE_11M_INDEX) | 89 | #define IWL_RATE_11M_MASK (1 << IWL_RATE_11M_INDEX) |
90 | 90 | ||
91 | /* 4965 uCode API values for legacy bit rates, both OFDM and CCK */ | 91 | /* uCode API values for legacy bit rates, both OFDM and CCK */ |
92 | enum { | 92 | enum { |
93 | IWL_RATE_6M_PLCP = 13, | 93 | IWL_RATE_6M_PLCP = 13, |
94 | IWL_RATE_9M_PLCP = 15, | 94 | IWL_RATE_9M_PLCP = 15, |
@@ -107,7 +107,7 @@ enum { | |||
107 | /*FIXME:RS:add IWL_RATE_LEGACY_INVM_PLCP = 0,*/ | 107 | /*FIXME:RS:add IWL_RATE_LEGACY_INVM_PLCP = 0,*/ |
108 | }; | 108 | }; |
109 | 109 | ||
110 | /* 4965 uCode API values for OFDM high-throughput (HT) bit rates */ | 110 | /* uCode API values for OFDM high-throughput (HT) bit rates */ |
111 | enum { | 111 | enum { |
112 | IWL_RATE_SISO_6M_PLCP = 0, | 112 | IWL_RATE_SISO_6M_PLCP = 0, |
113 | IWL_RATE_SISO_12M_PLCP = 1, | 113 | IWL_RATE_SISO_12M_PLCP = 1, |
@@ -287,15 +287,6 @@ static inline u8 iwl4965_get_prev_ieee_rate(u8 rate_index) | |||
287 | } | 287 | } |
288 | 288 | ||
289 | /** | 289 | /** |
290 | * iwl4965_fill_rs_info - Fill an output text buffer with the rate representation | ||
291 | * | ||
292 | * NOTE: This is provided as a quick mechanism for a user to visualize | ||
293 | * the performance of the rate control algorithm and is not meant to be | ||
294 | * parsed software. | ||
295 | */ | ||
296 | extern int iwl4965_fill_rs_info(struct ieee80211_hw *, char *buf, u8 sta_id); | ||
297 | |||
298 | /** | ||
299 | * iwl4965_rate_control_register - Register the rate control algorithm callbacks | 290 | * iwl4965_rate_control_register - Register the rate control algorithm callbacks |
300 | * | 291 | * |
301 | * Since the rate control algorithm is hardware specific, there is no need | 292 | * Since the rate control algorithm is hardware specific, there is no need |
@@ -305,7 +296,7 @@ extern int iwl4965_fill_rs_info(struct ieee80211_hw *, char *buf, u8 sta_id); | |||
305 | * ieee80211_register_hw | 296 | * ieee80211_register_hw |
306 | * | 297 | * |
307 | */ | 298 | */ |
308 | extern int iwl4965_rate_control_register(void); | 299 | extern int iwlagn_rate_control_register(void); |
309 | 300 | ||
310 | /** | 301 | /** |
311 | * iwl4965_rate_control_unregister - Unregister the rate control callbacks | 302 | * iwl4965_rate_control_unregister - Unregister the rate control callbacks |
@@ -313,6 +304,6 @@ extern int iwl4965_rate_control_register(void); | |||
313 | * This should be called after calling ieee80211_unregister_hw, but before | 304 | * This should be called after calling ieee80211_unregister_hw, but before |
314 | * the driver is unloaded. | 305 | * the driver is unloaded. |
315 | */ | 306 | */ |
316 | extern void iwl4965_rate_control_unregister(void); | 307 | extern void iwlagn_rate_control_unregister(void); |
317 | 308 | ||
318 | #endif | 309 | #endif /* __iwl_agn__rs__ */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 71f5da3fe5c4..b8407d5704a1 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -65,7 +65,7 @@ | |||
65 | * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk | 65 | * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk |
66 | */ | 66 | */ |
67 | 67 | ||
68 | #define DRV_DESCRIPTION "Intel(R) Wireless WiFi Link 4965AGN driver for Linux" | 68 | #define DRV_DESCRIPTION "Intel(R) Wireless WiFi Link AGN driver for Linux" |
69 | 69 | ||
70 | #ifdef CONFIG_IWLWIFI_DEBUG | 70 | #ifdef CONFIG_IWLWIFI_DEBUG |
71 | #define VD "d" | 71 | #define VD "d" |
@@ -73,7 +73,7 @@ | |||
73 | #define VD | 73 | #define VD |
74 | #endif | 74 | #endif |
75 | 75 | ||
76 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | 76 | #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT |
77 | #define VS "s" | 77 | #define VS "s" |
78 | #else | 78 | #else |
79 | #define VS | 79 | #define VS |
@@ -86,6 +86,7 @@ MODULE_DESCRIPTION(DRV_DESCRIPTION); | |||
86 | MODULE_VERSION(DRV_VERSION); | 86 | MODULE_VERSION(DRV_VERSION); |
87 | MODULE_AUTHOR(DRV_COPYRIGHT); | 87 | MODULE_AUTHOR(DRV_COPYRIGHT); |
88 | MODULE_LICENSE("GPL"); | 88 | MODULE_LICENSE("GPL"); |
89 | MODULE_ALIAS("iwl4965"); | ||
89 | 90 | ||
90 | /*************** STATION TABLE MANAGEMENT **** | 91 | /*************** STATION TABLE MANAGEMENT **** |
91 | * mac80211 should be examined to determine if sta_info is duplicating | 92 | * mac80211 should be examined to determine if sta_info is duplicating |
@@ -444,11 +445,10 @@ static void iwl_free_frame(struct iwl_priv *priv, struct iwl_frame *frame) | |||
444 | list_add(&frame->list, &priv->free_frames); | 445 | list_add(&frame->list, &priv->free_frames); |
445 | } | 446 | } |
446 | 447 | ||
447 | unsigned int iwl4965_fill_beacon_frame(struct iwl_priv *priv, | 448 | static unsigned int iwl_fill_beacon_frame(struct iwl_priv *priv, |
448 | struct ieee80211_hdr *hdr, | 449 | struct ieee80211_hdr *hdr, |
449 | const u8 *dest, int left) | 450 | const u8 *dest, int left) |
450 | { | 451 | { |
451 | |||
452 | if (!iwl_is_associated(priv) || !priv->ibss_beacon || | 452 | if (!iwl_is_associated(priv) || !priv->ibss_beacon || |
453 | ((priv->iw_mode != IEEE80211_IF_TYPE_IBSS) && | 453 | ((priv->iw_mode != IEEE80211_IF_TYPE_IBSS) && |
454 | (priv->iw_mode != IEEE80211_IF_TYPE_AP))) | 454 | (priv->iw_mode != IEEE80211_IF_TYPE_AP))) |
@@ -487,6 +487,38 @@ static u8 iwl4965_rate_get_lowest_plcp(struct iwl_priv *priv) | |||
487 | return IWL_RATE_6M_PLCP; | 487 | return IWL_RATE_6M_PLCP; |
488 | } | 488 | } |
489 | 489 | ||
490 | unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv, | ||
491 | struct iwl_frame *frame, u8 rate) | ||
492 | { | ||
493 | struct iwl_tx_beacon_cmd *tx_beacon_cmd; | ||
494 | unsigned int frame_size; | ||
495 | |||
496 | tx_beacon_cmd = &frame->u.beacon; | ||
497 | memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd)); | ||
498 | |||
499 | tx_beacon_cmd->tx.sta_id = priv->hw_params.bcast_sta_id; | ||
500 | tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE; | ||
501 | |||
502 | frame_size = iwl_fill_beacon_frame(priv, tx_beacon_cmd->frame, | ||
503 | iwl_bcast_addr, | ||
504 | sizeof(frame->u) - sizeof(*tx_beacon_cmd)); | ||
505 | |||
506 | BUG_ON(frame_size > MAX_MPDU_SIZE); | ||
507 | tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size); | ||
508 | |||
509 | if ((rate == IWL_RATE_1M_PLCP) || (rate >= IWL_RATE_2M_PLCP)) | ||
510 | tx_beacon_cmd->tx.rate_n_flags = | ||
511 | iwl_hw_set_rate_n_flags(rate, RATE_MCS_CCK_MSK); | ||
512 | else | ||
513 | tx_beacon_cmd->tx.rate_n_flags = | ||
514 | iwl_hw_set_rate_n_flags(rate, 0); | ||
515 | |||
516 | tx_beacon_cmd->tx.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK | | ||
517 | TX_CMD_FLG_TSF_MSK | | ||
518 | TX_CMD_FLG_STA_RATE_MSK; | ||
519 | |||
520 | return sizeof(*tx_beacon_cmd) + frame_size; | ||
521 | } | ||
490 | static int iwl4965_send_beacon_cmd(struct iwl_priv *priv) | 522 | static int iwl4965_send_beacon_cmd(struct iwl_priv *priv) |
491 | { | 523 | { |
492 | struct iwl_frame *frame; | 524 | struct iwl_frame *frame; |
@@ -608,7 +640,6 @@ static void iwl_activate_qos(struct iwl_priv *priv, u8 force) | |||
608 | } | 640 | } |
609 | 641 | ||
610 | #define MAX_UCODE_BEACON_INTERVAL 4096 | 642 | #define MAX_UCODE_BEACON_INTERVAL 4096 |
611 | #define INTEL_CONN_LISTEN_INTERVAL __constant_cpu_to_le16(0xA) | ||
612 | 643 | ||
613 | static __le16 iwl4965_adjust_beacon_interval(u16 beacon_val) | 644 | static __le16 iwl4965_adjust_beacon_interval(u16 beacon_val) |
614 | { | 645 | { |
@@ -638,7 +669,7 @@ static void iwl4965_setup_rxon_timing(struct iwl_priv *priv) | |||
638 | priv->rxon_timing.timestamp.dw[0] = | 669 | priv->rxon_timing.timestamp.dw[0] = |
639 | cpu_to_le32(priv->timestamp & 0xFFFFFFFF); | 670 | cpu_to_le32(priv->timestamp & 0xFFFFFFFF); |
640 | 671 | ||
641 | priv->rxon_timing.listen_interval = INTEL_CONN_LISTEN_INTERVAL; | 672 | priv->rxon_timing.listen_interval = cpu_to_le16(conf->listen_interval); |
642 | 673 | ||
643 | tsf = priv->timestamp; | 674 | tsf = priv->timestamp; |
644 | 675 | ||
@@ -853,7 +884,7 @@ static void iwl4965_set_rate(struct iwl_priv *priv) | |||
853 | (IWL_OFDM_BASIC_RATES_MASK >> IWL_FIRST_OFDM_RATE) & 0xFF; | 884 | (IWL_OFDM_BASIC_RATES_MASK >> IWL_FIRST_OFDM_RATE) & 0xFF; |
854 | } | 885 | } |
855 | 886 | ||
856 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | 887 | #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT |
857 | 888 | ||
858 | #include "iwl-spectrum.h" | 889 | #include "iwl-spectrum.h" |
859 | 890 | ||
@@ -1057,7 +1088,7 @@ static void iwl4965_rx_csa(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb) | |||
1057 | static void iwl4965_rx_spectrum_measure_notif(struct iwl_priv *priv, | 1088 | static void iwl4965_rx_spectrum_measure_notif(struct iwl_priv *priv, |
1058 | struct iwl_rx_mem_buffer *rxb) | 1089 | struct iwl_rx_mem_buffer *rxb) |
1059 | { | 1090 | { |
1060 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | 1091 | #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT |
1061 | struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; | 1092 | struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; |
1062 | struct iwl4965_spectrum_notification *report = &(pkt->u.spectrum_notif); | 1093 | struct iwl4965_spectrum_notification *report = &(pkt->u.spectrum_notif); |
1063 | 1094 | ||
@@ -1231,6 +1262,37 @@ static void iwl4965_rx_card_state_notif(struct iwl_priv *priv, | |||
1231 | wake_up_interruptible(&priv->wait_command_queue); | 1262 | wake_up_interruptible(&priv->wait_command_queue); |
1232 | } | 1263 | } |
1233 | 1264 | ||
1265 | int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src) | ||
1266 | { | ||
1267 | int ret; | ||
1268 | unsigned long flags; | ||
1269 | |||
1270 | spin_lock_irqsave(&priv->lock, flags); | ||
1271 | ret = iwl_grab_nic_access(priv); | ||
1272 | if (ret) | ||
1273 | goto err; | ||
1274 | |||
1275 | if (src == IWL_PWR_SRC_VAUX) { | ||
1276 | u32 val; | ||
1277 | ret = pci_read_config_dword(priv->pci_dev, PCI_POWER_SOURCE, | ||
1278 | &val); | ||
1279 | |||
1280 | if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT) | ||
1281 | iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, | ||
1282 | APMG_PS_CTRL_VAL_PWR_SRC_VAUX, | ||
1283 | ~APMG_PS_CTRL_MSK_PWR_SRC); | ||
1284 | } else { | ||
1285 | iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, | ||
1286 | APMG_PS_CTRL_VAL_PWR_SRC_VMAIN, | ||
1287 | ~APMG_PS_CTRL_MSK_PWR_SRC); | ||
1288 | } | ||
1289 | |||
1290 | iwl_release_nic_access(priv); | ||
1291 | err: | ||
1292 | spin_unlock_irqrestore(&priv->lock, flags); | ||
1293 | return ret; | ||
1294 | } | ||
1295 | |||
1234 | /** | 1296 | /** |
1235 | * iwl4965_setup_rx_handlers - Initialize Rx handler callbacks | 1297 | * iwl4965_setup_rx_handlers - Initialize Rx handler callbacks |
1236 | * | 1298 | * |
@@ -2170,17 +2232,16 @@ static int __iwl4965_up(struct iwl_priv *priv) | |||
2170 | } | 2232 | } |
2171 | 2233 | ||
2172 | /* If platform's RF_KILL switch is NOT set to KILL */ | 2234 | /* If platform's RF_KILL switch is NOT set to KILL */ |
2173 | if (iwl_read32(priv, CSR_GP_CNTRL) & | 2235 | if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) |
2174 | CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) | ||
2175 | clear_bit(STATUS_RF_KILL_HW, &priv->status); | 2236 | clear_bit(STATUS_RF_KILL_HW, &priv->status); |
2176 | else | 2237 | else |
2177 | set_bit(STATUS_RF_KILL_HW, &priv->status); | 2238 | set_bit(STATUS_RF_KILL_HW, &priv->status); |
2178 | 2239 | ||
2179 | if (!test_bit(STATUS_IN_SUSPEND, &priv->status) && | 2240 | if (iwl_is_rfkill(priv)) { |
2180 | iwl_is_rfkill(priv)) { | 2241 | iwl4965_enable_interrupts(priv); |
2181 | IWL_WARNING("Radio disabled by %s RF Kill switch\n", | 2242 | IWL_WARNING("Radio disabled by %s RF Kill switch\n", |
2182 | test_bit(STATUS_RF_KILL_HW, &priv->status) ? "HW" : "SW"); | 2243 | test_bit(STATUS_RF_KILL_HW, &priv->status) ? "HW" : "SW"); |
2183 | return -ENODEV; | 2244 | return 0; |
2184 | } | 2245 | } |
2185 | 2246 | ||
2186 | iwl_write32(priv, CSR_INT, 0xFFFFFFFF); | 2247 | iwl_write32(priv, CSR_INT, 0xFFFFFFFF); |
@@ -2216,11 +2277,6 @@ static int __iwl4965_up(struct iwl_priv *priv) | |||
2216 | memcpy(priv->ucode_data_backup.v_addr, priv->ucode_data.v_addr, | 2277 | memcpy(priv->ucode_data_backup.v_addr, priv->ucode_data.v_addr, |
2217 | priv->ucode_data.len); | 2278 | priv->ucode_data.len); |
2218 | 2279 | ||
2219 | /* We return success when we resume from suspend and rf_kill is on. */ | ||
2220 | if (test_bit(STATUS_RF_KILL_HW, &priv->status) || | ||
2221 | test_bit(STATUS_RF_KILL_SW, &priv->status)) | ||
2222 | return 0; | ||
2223 | |||
2224 | for (i = 0; i < MAX_HW_RESTARTS; i++) { | 2280 | for (i = 0; i < MAX_HW_RESTARTS; i++) { |
2225 | 2281 | ||
2226 | iwl_clear_stations_table(priv); | 2282 | iwl_clear_stations_table(priv); |
@@ -2415,7 +2471,7 @@ static void iwl4965_post_associate(struct iwl_priv *priv) | |||
2415 | unsigned long flags; | 2471 | unsigned long flags; |
2416 | 2472 | ||
2417 | if (priv->iw_mode == IEEE80211_IF_TYPE_AP) { | 2473 | if (priv->iw_mode == IEEE80211_IF_TYPE_AP) { |
2418 | IWL_ERROR("%s Should not be called in AP mode\n", __FUNCTION__); | 2474 | IWL_ERROR("%s Should not be called in AP mode\n", __func__); |
2419 | return; | 2475 | return; |
2420 | } | 2476 | } |
2421 | 2477 | ||
@@ -2491,7 +2547,7 @@ static void iwl4965_post_associate(struct iwl_priv *priv) | |||
2491 | 2547 | ||
2492 | default: | 2548 | default: |
2493 | IWL_ERROR("%s Should not be called in %d mode\n", | 2549 | IWL_ERROR("%s Should not be called in %d mode\n", |
2494 | __FUNCTION__, priv->iw_mode); | 2550 | __func__, priv->iw_mode); |
2495 | break; | 2551 | break; |
2496 | } | 2552 | } |
2497 | 2553 | ||
@@ -2589,6 +2645,9 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw) | |||
2589 | if (ret) | 2645 | if (ret) |
2590 | goto out_release_irq; | 2646 | goto out_release_irq; |
2591 | 2647 | ||
2648 | if (iwl_is_rfkill(priv)) | ||
2649 | goto out; | ||
2650 | |||
2592 | IWL_DEBUG_INFO("Start UP work done.\n"); | 2651 | IWL_DEBUG_INFO("Start UP work done.\n"); |
2593 | 2652 | ||
2594 | if (test_bit(STATUS_IN_SUSPEND, &priv->status)) | 2653 | if (test_bit(STATUS_IN_SUSPEND, &priv->status)) |
@@ -2608,6 +2667,7 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw) | |||
2608 | } | 2667 | } |
2609 | } | 2668 | } |
2610 | 2669 | ||
2670 | out: | ||
2611 | priv->is_open = 1; | 2671 | priv->is_open = 1; |
2612 | IWL_DEBUG_MAC80211("leave\n"); | 2672 | IWL_DEBUG_MAC80211("leave\n"); |
2613 | return 0; | 2673 | return 0; |
@@ -2773,6 +2833,7 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co | |||
2773 | 2833 | ||
2774 | spin_lock_irqsave(&priv->lock, flags); | 2834 | spin_lock_irqsave(&priv->lock, flags); |
2775 | 2835 | ||
2836 | |||
2776 | /* if we are switching from ht to 2.4 clear flags | 2837 | /* if we are switching from ht to 2.4 clear flags |
2777 | * from any ht related info since 2.4 does not | 2838 | * from any ht related info since 2.4 does not |
2778 | * support ht */ | 2839 | * support ht */ |
@@ -3102,6 +3163,7 @@ static void iwl4965_bss_info_changed(struct ieee80211_hw *hw, | |||
3102 | if (bss_conf->assoc) { | 3163 | if (bss_conf->assoc) { |
3103 | priv->assoc_id = bss_conf->aid; | 3164 | priv->assoc_id = bss_conf->aid; |
3104 | priv->beacon_int = bss_conf->beacon_int; | 3165 | priv->beacon_int = bss_conf->beacon_int; |
3166 | priv->power_data.dtim_period = bss_conf->dtim_period; | ||
3105 | priv->timestamp = bss_conf->timestamp; | 3167 | priv->timestamp = bss_conf->timestamp; |
3106 | priv->assoc_capability = bss_conf->assoc_capability; | 3168 | priv->assoc_capability = bss_conf->assoc_capability; |
3107 | priv->next_scan_jiffies = jiffies + | 3169 | priv->next_scan_jiffies = jiffies + |
@@ -3345,6 +3407,39 @@ static int iwl4965_mac_conf_tx(struct ieee80211_hw *hw, u16 queue, | |||
3345 | return 0; | 3407 | return 0; |
3346 | } | 3408 | } |
3347 | 3409 | ||
3410 | static int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw, | ||
3411 | enum ieee80211_ampdu_mlme_action action, | ||
3412 | const u8 *addr, u16 tid, u16 *ssn) | ||
3413 | { | ||
3414 | struct iwl_priv *priv = hw->priv; | ||
3415 | DECLARE_MAC_BUF(mac); | ||
3416 | |||
3417 | IWL_DEBUG_HT("A-MPDU action on addr %s tid %d\n", | ||
3418 | print_mac(mac, addr), tid); | ||
3419 | |||
3420 | if (!(priv->cfg->sku & IWL_SKU_N)) | ||
3421 | return -EACCES; | ||
3422 | |||
3423 | switch (action) { | ||
3424 | case IEEE80211_AMPDU_RX_START: | ||
3425 | IWL_DEBUG_HT("start Rx\n"); | ||
3426 | return iwl_rx_agg_start(priv, addr, tid, *ssn); | ||
3427 | case IEEE80211_AMPDU_RX_STOP: | ||
3428 | IWL_DEBUG_HT("stop Rx\n"); | ||
3429 | return iwl_rx_agg_stop(priv, addr, tid); | ||
3430 | case IEEE80211_AMPDU_TX_START: | ||
3431 | IWL_DEBUG_HT("start Tx\n"); | ||
3432 | return iwl_tx_agg_start(priv, addr, tid, ssn); | ||
3433 | case IEEE80211_AMPDU_TX_STOP: | ||
3434 | IWL_DEBUG_HT("stop Tx\n"); | ||
3435 | return iwl_tx_agg_stop(priv, addr, tid); | ||
3436 | default: | ||
3437 | IWL_DEBUG_HT("unknown\n"); | ||
3438 | return -EINVAL; | ||
3439 | break; | ||
3440 | } | ||
3441 | return 0; | ||
3442 | } | ||
3348 | static int iwl4965_mac_get_tx_stats(struct ieee80211_hw *hw, | 3443 | static int iwl4965_mac_get_tx_stats(struct ieee80211_hw *hw, |
3349 | struct ieee80211_tx_queue_stats *stats) | 3444 | struct ieee80211_tx_queue_stats *stats) |
3350 | { | 3445 | { |
@@ -3592,15 +3687,6 @@ static ssize_t show_temperature(struct device *d, | |||
3592 | 3687 | ||
3593 | static DEVICE_ATTR(temperature, S_IRUGO, show_temperature, NULL); | 3688 | static DEVICE_ATTR(temperature, S_IRUGO, show_temperature, NULL); |
3594 | 3689 | ||
3595 | static ssize_t show_rs_window(struct device *d, | ||
3596 | struct device_attribute *attr, | ||
3597 | char *buf) | ||
3598 | { | ||
3599 | struct iwl_priv *priv = d->driver_data; | ||
3600 | return iwl4965_fill_rs_info(priv->hw, buf, IWL_AP_ID); | ||
3601 | } | ||
3602 | static DEVICE_ATTR(rs_window, S_IRUGO, show_rs_window, NULL); | ||
3603 | |||
3604 | static ssize_t show_tx_power(struct device *d, | 3690 | static ssize_t show_tx_power(struct device *d, |
3605 | struct device_attribute *attr, char *buf) | 3691 | struct device_attribute *attr, char *buf) |
3606 | { | 3692 | { |
@@ -3699,7 +3785,7 @@ static ssize_t store_filter_flags(struct device *d, | |||
3699 | static DEVICE_ATTR(filter_flags, S_IWUSR | S_IRUGO, show_filter_flags, | 3785 | static DEVICE_ATTR(filter_flags, S_IWUSR | S_IRUGO, show_filter_flags, |
3700 | store_filter_flags); | 3786 | store_filter_flags); |
3701 | 3787 | ||
3702 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | 3788 | #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT |
3703 | 3789 | ||
3704 | static ssize_t show_measurement(struct device *d, | 3790 | static ssize_t show_measurement(struct device *d, |
3705 | struct device_attribute *attr, char *buf) | 3791 | struct device_attribute *attr, char *buf) |
@@ -3707,7 +3793,7 @@ static ssize_t show_measurement(struct device *d, | |||
3707 | struct iwl_priv *priv = dev_get_drvdata(d); | 3793 | struct iwl_priv *priv = dev_get_drvdata(d); |
3708 | struct iwl4965_spectrum_notification measure_report; | 3794 | struct iwl4965_spectrum_notification measure_report; |
3709 | u32 size = sizeof(measure_report), len = 0, ofs = 0; | 3795 | u32 size = sizeof(measure_report), len = 0, ofs = 0; |
3710 | u8 *data = (u8 *) & measure_report; | 3796 | u8 *data = (u8 *)&measure_report; |
3711 | unsigned long flags; | 3797 | unsigned long flags; |
3712 | 3798 | ||
3713 | spin_lock_irqsave(&priv->lock, flags); | 3799 | spin_lock_irqsave(&priv->lock, flags); |
@@ -3770,7 +3856,7 @@ static ssize_t store_measurement(struct device *d, | |||
3770 | 3856 | ||
3771 | static DEVICE_ATTR(measurement, S_IRUSR | S_IWUSR, | 3857 | static DEVICE_ATTR(measurement, S_IRUSR | S_IWUSR, |
3772 | show_measurement, store_measurement); | 3858 | show_measurement, store_measurement); |
3773 | #endif /* CONFIG_IWL4965_SPECTRUM_MEASUREMENT */ | 3859 | #endif /* CONFIG_IWLAGN_SPECTRUM_MEASUREMENT */ |
3774 | 3860 | ||
3775 | static ssize_t store_retry_rate(struct device *d, | 3861 | static ssize_t store_retry_rate(struct device *d, |
3776 | struct device_attribute *attr, | 3862 | struct device_attribute *attr, |
@@ -3800,77 +3886,54 @@ static ssize_t store_power_level(struct device *d, | |||
3800 | const char *buf, size_t count) | 3886 | const char *buf, size_t count) |
3801 | { | 3887 | { |
3802 | struct iwl_priv *priv = dev_get_drvdata(d); | 3888 | struct iwl_priv *priv = dev_get_drvdata(d); |
3803 | int rc; | 3889 | int ret; |
3804 | int mode; | 3890 | int mode; |
3805 | 3891 | ||
3806 | mode = simple_strtoul(buf, NULL, 0); | 3892 | mode = simple_strtoul(buf, NULL, 0); |
3807 | mutex_lock(&priv->mutex); | 3893 | mutex_lock(&priv->mutex); |
3808 | 3894 | ||
3809 | if (!iwl_is_ready(priv)) { | 3895 | if (!iwl_is_ready(priv)) { |
3810 | rc = -EAGAIN; | 3896 | ret = -EAGAIN; |
3811 | goto out; | 3897 | goto out; |
3812 | } | 3898 | } |
3813 | 3899 | ||
3814 | rc = iwl_power_set_user_mode(priv, mode); | 3900 | ret = iwl_power_set_user_mode(priv, mode); |
3815 | if (rc) { | 3901 | if (ret) { |
3816 | IWL_DEBUG_MAC80211("failed setting power mode.\n"); | 3902 | IWL_DEBUG_MAC80211("failed setting power mode.\n"); |
3817 | goto out; | 3903 | goto out; |
3818 | } | 3904 | } |
3819 | rc = count; | 3905 | ret = count; |
3820 | 3906 | ||
3821 | out: | 3907 | out: |
3822 | mutex_unlock(&priv->mutex); | 3908 | mutex_unlock(&priv->mutex); |
3823 | return rc; | 3909 | return ret; |
3824 | } | 3910 | } |
3825 | 3911 | ||
3826 | #define MAX_WX_STRING 80 | ||
3827 | |||
3828 | /* Values are in microsecond */ | ||
3829 | static const s32 timeout_duration[] = { | ||
3830 | 350000, | ||
3831 | 250000, | ||
3832 | 75000, | ||
3833 | 37000, | ||
3834 | 25000, | ||
3835 | }; | ||
3836 | static const s32 period_duration[] = { | ||
3837 | 400000, | ||
3838 | 700000, | ||
3839 | 1000000, | ||
3840 | 1000000, | ||
3841 | 1000000 | ||
3842 | }; | ||
3843 | |||
3844 | static ssize_t show_power_level(struct device *d, | 3912 | static ssize_t show_power_level(struct device *d, |
3845 | struct device_attribute *attr, char *buf) | 3913 | struct device_attribute *attr, char *buf) |
3846 | { | 3914 | { |
3847 | struct iwl_priv *priv = dev_get_drvdata(d); | 3915 | struct iwl_priv *priv = dev_get_drvdata(d); |
3916 | int mode = priv->power_data.user_power_setting; | ||
3917 | int system = priv->power_data.system_power_setting; | ||
3848 | int level = priv->power_data.power_mode; | 3918 | int level = priv->power_data.power_mode; |
3849 | char *p = buf; | 3919 | char *p = buf; |
3850 | 3920 | ||
3851 | p += sprintf(p, "%d ", level); | 3921 | switch (system) { |
3852 | switch (level) { | 3922 | case IWL_POWER_SYS_AUTO: |
3853 | case IWL_POWER_MODE_CAM: | 3923 | p += sprintf(p, "SYSTEM:auto"); |
3854 | case IWL_POWER_AC: | ||
3855 | p += sprintf(p, "(AC)"); | ||
3856 | break; | 3924 | break; |
3857 | case IWL_POWER_BATTERY: | 3925 | case IWL_POWER_SYS_AC: |
3858 | p += sprintf(p, "(BATTERY)"); | 3926 | p += sprintf(p, "SYSTEM:ac"); |
3927 | break; | ||
3928 | case IWL_POWER_SYS_BATTERY: | ||
3929 | p += sprintf(p, "SYSTEM:battery"); | ||
3859 | break; | 3930 | break; |
3860 | default: | ||
3861 | p += sprintf(p, | ||
3862 | "(Timeout %dms, Period %dms)", | ||
3863 | timeout_duration[level - 1] / 1000, | ||
3864 | period_duration[level - 1] / 1000); | ||
3865 | } | 3931 | } |
3866 | /* | 3932 | |
3867 | if (!(priv->power_mode & IWL_POWER_ENABLED)) | 3933 | p += sprintf(p, "\tMODE:%s", (mode < IWL_POWER_AUTO)?"fixed":"auto"); |
3868 | p += sprintf(p, " OFF\n"); | 3934 | p += sprintf(p, "\tINDEX:%d", level); |
3869 | else | 3935 | p += sprintf(p, "\n"); |
3870 | p += sprintf(p, " \n"); | 3936 | return p - buf + 1; |
3871 | */ | ||
3872 | p += sprintf(p, " \n"); | ||
3873 | return (p - buf + 1); | ||
3874 | } | 3937 | } |
3875 | 3938 | ||
3876 | static DEVICE_ATTR(power_level, S_IWUSR | S_IRUSR, show_power_level, | 3939 | static DEVICE_ATTR(power_level, S_IWUSR | S_IRUSR, show_power_level, |
@@ -3945,7 +4008,7 @@ static ssize_t show_statistics(struct device *d, | |||
3945 | struct iwl_priv *priv = dev_get_drvdata(d); | 4008 | struct iwl_priv *priv = dev_get_drvdata(d); |
3946 | u32 size = sizeof(struct iwl_notif_statistics); | 4009 | u32 size = sizeof(struct iwl_notif_statistics); |
3947 | u32 len = 0, ofs = 0; | 4010 | u32 len = 0, ofs = 0; |
3948 | u8 *data = (u8 *) & priv->statistics; | 4011 | u8 *data = (u8 *)&priv->statistics; |
3949 | int rc = 0; | 4012 | int rc = 0; |
3950 | 4013 | ||
3951 | if (!iwl_is_alive(priv)) | 4014 | if (!iwl_is_alive(priv)) |
@@ -4041,12 +4104,11 @@ static struct attribute *iwl4965_sysfs_entries[] = { | |||
4041 | &dev_attr_channels.attr, | 4104 | &dev_attr_channels.attr, |
4042 | &dev_attr_flags.attr, | 4105 | &dev_attr_flags.attr, |
4043 | &dev_attr_filter_flags.attr, | 4106 | &dev_attr_filter_flags.attr, |
4044 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | 4107 | #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT |
4045 | &dev_attr_measurement.attr, | 4108 | &dev_attr_measurement.attr, |
4046 | #endif | 4109 | #endif |
4047 | &dev_attr_power_level.attr, | 4110 | &dev_attr_power_level.attr, |
4048 | &dev_attr_retry_rate.attr, | 4111 | &dev_attr_retry_rate.attr, |
4049 | &dev_attr_rs_window.attr, | ||
4050 | &dev_attr_statistics.attr, | 4112 | &dev_attr_statistics.attr, |
4051 | &dev_attr_status.attr, | 4113 | &dev_attr_status.attr, |
4052 | &dev_attr_temperature.attr, | 4114 | &dev_attr_temperature.attr, |
@@ -4394,8 +4456,10 @@ static int iwl4965_pci_resume(struct pci_dev *pdev) | |||
4394 | 4456 | ||
4395 | /* Hardware specific file defines the PCI IDs table for that hardware module */ | 4457 | /* Hardware specific file defines the PCI IDs table for that hardware module */ |
4396 | static struct pci_device_id iwl_hw_card_ids[] = { | 4458 | static struct pci_device_id iwl_hw_card_ids[] = { |
4459 | #ifdef CONFIG_IWL4965 | ||
4397 | {IWL_PCI_DEVICE(0x4229, PCI_ANY_ID, iwl4965_agn_cfg)}, | 4460 | {IWL_PCI_DEVICE(0x4229, PCI_ANY_ID, iwl4965_agn_cfg)}, |
4398 | {IWL_PCI_DEVICE(0x4230, PCI_ANY_ID, iwl4965_agn_cfg)}, | 4461 | {IWL_PCI_DEVICE(0x4230, PCI_ANY_ID, iwl4965_agn_cfg)}, |
4462 | #endif /* CONFIG_IWL4965 */ | ||
4399 | #ifdef CONFIG_IWL5000 | 4463 | #ifdef CONFIG_IWL5000 |
4400 | {IWL_PCI_DEVICE(0x4232, 0x1205, iwl5100_bg_cfg)}, | 4464 | {IWL_PCI_DEVICE(0x4232, 0x1205, iwl5100_bg_cfg)}, |
4401 | {IWL_PCI_DEVICE(0x4232, 0x1305, iwl5100_bg_cfg)}, | 4465 | {IWL_PCI_DEVICE(0x4232, 0x1305, iwl5100_bg_cfg)}, |
@@ -4431,7 +4495,7 @@ static int __init iwl4965_init(void) | |||
4431 | printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION ", " DRV_VERSION "\n"); | 4495 | printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION ", " DRV_VERSION "\n"); |
4432 | printk(KERN_INFO DRV_NAME ": " DRV_COPYRIGHT "\n"); | 4496 | printk(KERN_INFO DRV_NAME ": " DRV_COPYRIGHT "\n"); |
4433 | 4497 | ||
4434 | ret = iwl4965_rate_control_register(); | 4498 | ret = iwlagn_rate_control_register(); |
4435 | if (ret) { | 4499 | if (ret) { |
4436 | IWL_ERROR("Unable to register rate control algorithm: %d\n", ret); | 4500 | IWL_ERROR("Unable to register rate control algorithm: %d\n", ret); |
4437 | return ret; | 4501 | return ret; |
@@ -4446,14 +4510,14 @@ static int __init iwl4965_init(void) | |||
4446 | return ret; | 4510 | return ret; |
4447 | 4511 | ||
4448 | error_register: | 4512 | error_register: |
4449 | iwl4965_rate_control_unregister(); | 4513 | iwlagn_rate_control_unregister(); |
4450 | return ret; | 4514 | return ret; |
4451 | } | 4515 | } |
4452 | 4516 | ||
4453 | static void __exit iwl4965_exit(void) | 4517 | static void __exit iwl4965_exit(void) |
4454 | { | 4518 | { |
4455 | pci_unregister_driver(&iwl_driver); | 4519 | pci_unregister_driver(&iwl_driver); |
4456 | iwl4965_rate_control_unregister(); | 4520 | iwlagn_rate_control_unregister(); |
4457 | } | 4521 | } |
4458 | 4522 | ||
4459 | module_exit(iwl4965_exit); | 4523 | module_exit(iwl4965_exit); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index e9bb1de0ce3f..28b5b09996ed 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h | |||
@@ -666,8 +666,7 @@ struct iwl4965_rxon_assoc_cmd { | |||
666 | __le16 reserved; | 666 | __le16 reserved; |
667 | } __attribute__ ((packed)); | 667 | } __attribute__ ((packed)); |
668 | 668 | ||
669 | 669 | #define IWL_CONN_MAX_LISTEN_INTERVAL 10 | |
670 | |||
671 | 670 | ||
672 | /* | 671 | /* |
673 | * REPLY_RXON_TIMING = 0x14 (command, has simple generic response) | 672 | * REPLY_RXON_TIMING = 0x14 (command, has simple generic response) |
@@ -1076,10 +1075,12 @@ struct iwl4965_rx_frame { | |||
1076 | } __attribute__ ((packed)); | 1075 | } __attribute__ ((packed)); |
1077 | 1076 | ||
1078 | /* Fixed (non-configurable) rx data from phy */ | 1077 | /* Fixed (non-configurable) rx data from phy */ |
1079 | #define RX_PHY_FLAGS_ANTENNAE_OFFSET (4) | 1078 | |
1080 | #define RX_PHY_FLAGS_ANTENNAE_MASK (0x70) | 1079 | #define IWL49_RX_RES_PHY_CNT 14 |
1081 | #define IWL_AGC_DB_MASK (0x3f80) /* MASK(7,13) */ | 1080 | #define IWL49_RX_PHY_FLAGS_ANTENNAE_OFFSET (4) |
1082 | #define IWL_AGC_DB_POS (7) | 1081 | #define IWL49_RX_PHY_FLAGS_ANTENNAE_MASK (0x70) |
1082 | #define IWL49_AGC_DB_MASK (0x3f80) /* MASK(7,13) */ | ||
1083 | #define IWL49_AGC_DB_POS (7) | ||
1083 | struct iwl4965_rx_non_cfg_phy { | 1084 | struct iwl4965_rx_non_cfg_phy { |
1084 | __le16 ant_selection; /* ant A bit 4, ant B bit 5, ant C bit 6 */ | 1085 | __le16 ant_selection; /* ant A bit 4, ant B bit 5, ant C bit 6 */ |
1085 | __le16 agc_info; /* agc code 0:6, agc dB 7:13, reserved 14:15 */ | 1086 | __le16 agc_info; /* agc code 0:6, agc dB 7:13, reserved 14:15 */ |
@@ -1087,12 +1088,30 @@ struct iwl4965_rx_non_cfg_phy { | |||
1087 | u8 pad[0]; | 1088 | u8 pad[0]; |
1088 | } __attribute__ ((packed)); | 1089 | } __attribute__ ((packed)); |
1089 | 1090 | ||
1091 | |||
1092 | #define IWL50_RX_RES_PHY_CNT 8 | ||
1093 | #define IWL50_RX_RES_AGC_IDX 1 | ||
1094 | #define IWL50_RX_RES_RSSI_AB_IDX 2 | ||
1095 | #define IWL50_RX_RES_RSSI_C_IDX 3 | ||
1096 | #define IWL50_OFDM_AGC_MSK 0xfe00 | ||
1097 | #define IWL50_OFDM_AGC_BIT_POS 9 | ||
1098 | #define IWL50_OFDM_RSSI_A_MSK 0x00ff | ||
1099 | #define IWL50_OFDM_RSSI_A_BIT_POS 0 | ||
1100 | #define IWL50_OFDM_RSSI_B_MSK 0xff0000 | ||
1101 | #define IWL50_OFDM_RSSI_B_BIT_POS 16 | ||
1102 | #define IWL50_OFDM_RSSI_C_MSK 0x00ff | ||
1103 | #define IWL50_OFDM_RSSI_C_BIT_POS 0 | ||
1104 | |||
1105 | struct iwl5000_non_cfg_phy { | ||
1106 | __le32 non_cfg_phy[IWL50_RX_RES_PHY_CNT]; /* upto 8 phy entries */ | ||
1107 | } __attribute__ ((packed)); | ||
1108 | |||
1109 | |||
1090 | /* | 1110 | /* |
1091 | * REPLY_RX = 0xc3 (response only, not a command) | 1111 | * REPLY_RX = 0xc3 (response only, not a command) |
1092 | * Used only for legacy (non 11n) frames. | 1112 | * Used only for legacy (non 11n) frames. |
1093 | */ | 1113 | */ |
1094 | #define RX_RES_PHY_CNT 14 | 1114 | struct iwl_rx_phy_res { |
1095 | struct iwl4965_rx_phy_res { | ||
1096 | u8 non_cfg_phy_cnt; /* non configurable DSP phy data byte count */ | 1115 | u8 non_cfg_phy_cnt; /* non configurable DSP phy data byte count */ |
1097 | u8 cfg_phy_cnt; /* configurable DSP phy data byte count */ | 1116 | u8 cfg_phy_cnt; /* configurable DSP phy data byte count */ |
1098 | u8 stat_id; /* configurable DSP phy data set ID */ | 1117 | u8 stat_id; /* configurable DSP phy data set ID */ |
@@ -1101,8 +1120,7 @@ struct iwl4965_rx_phy_res { | |||
1101 | __le32 beacon_time_stamp; /* beacon at on-air rise */ | 1120 | __le32 beacon_time_stamp; /* beacon at on-air rise */ |
1102 | __le16 phy_flags; /* general phy flags: band, modulation, ... */ | 1121 | __le16 phy_flags; /* general phy flags: band, modulation, ... */ |
1103 | __le16 channel; /* channel number */ | 1122 | __le16 channel; /* channel number */ |
1104 | __le16 non_cfg_phy[RX_RES_PHY_CNT]; /* upto 14 phy entries */ | 1123 | u8 non_cfg_phy_buf[32]; /* for various implementations of non_cfg_phy */ |
1105 | __le32 reserved2; | ||
1106 | __le32 rate_n_flags; /* RATE_MCS_* */ | 1124 | __le32 rate_n_flags; /* RATE_MCS_* */ |
1107 | __le16 byte_count; /* frame's byte-count */ | 1125 | __le16 byte_count; /* frame's byte-count */ |
1108 | __le16 reserved3; | 1126 | __le16 reserved3; |
@@ -1993,7 +2011,7 @@ struct iwl4965_spectrum_notification { | |||
1993 | *****************************************************************************/ | 2011 | *****************************************************************************/ |
1994 | 2012 | ||
1995 | /** | 2013 | /** |
1996 | * struct iwl4965_powertable_cmd - Power Table Command | 2014 | * struct iwl_powertable_cmd - Power Table Command |
1997 | * @flags: See below: | 2015 | * @flags: See below: |
1998 | * | 2016 | * |
1999 | * POWER_TABLE_CMD = 0x77 (command, has simple generic response) | 2017 | * POWER_TABLE_CMD = 0x77 (command, has simple generic response) |
@@ -2027,7 +2045,7 @@ struct iwl4965_spectrum_notification { | |||
2027 | #define IWL_POWER_PCI_PM_MSK __constant_cpu_to_le16(1 << 3) | 2045 | #define IWL_POWER_PCI_PM_MSK __constant_cpu_to_le16(1 << 3) |
2028 | #define IWL_POWER_FAST_PD __constant_cpu_to_le16(1 << 4) | 2046 | #define IWL_POWER_FAST_PD __constant_cpu_to_le16(1 << 4) |
2029 | 2047 | ||
2030 | struct iwl4965_powertable_cmd { | 2048 | struct iwl_powertable_cmd { |
2031 | __le16 flags; | 2049 | __le16 flags; |
2032 | u8 keep_alive_seconds; | 2050 | u8 keep_alive_seconds; |
2033 | u8 debug_flags; | 2051 | u8 debug_flags; |
@@ -2324,7 +2342,7 @@ struct iwl4965_beacon_notif { | |||
2324 | /* | 2342 | /* |
2325 | * REPLY_TX_BEACON = 0x91 (command, has simple generic response) | 2343 | * REPLY_TX_BEACON = 0x91 (command, has simple generic response) |
2326 | */ | 2344 | */ |
2327 | struct iwl4965_tx_beacon_cmd { | 2345 | struct iwl_tx_beacon_cmd { |
2328 | struct iwl_tx_cmd tx; | 2346 | struct iwl_tx_cmd tx; |
2329 | __le16 tim_idx; | 2347 | __le16 tim_idx; |
2330 | u8 tim_size; | 2348 | u8 tim_size; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index e3427c205ccf..9bd61809129f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -383,8 +383,8 @@ void iwl_reset_qos(struct iwl_priv *priv) | |||
383 | } | 383 | } |
384 | EXPORT_SYMBOL(iwl_reset_qos); | 384 | EXPORT_SYMBOL(iwl_reset_qos); |
385 | 385 | ||
386 | #define MAX_BIT_RATE_40_MHZ 0x96; /* 150 Mbps */ | 386 | #define MAX_BIT_RATE_40_MHZ 0x96 /* 150 Mbps */ |
387 | #define MAX_BIT_RATE_20_MHZ 0x48; /* 72 Mbps */ | 387 | #define MAX_BIT_RATE_20_MHZ 0x48 /* 72 Mbps */ |
388 | static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv, | 388 | static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv, |
389 | struct ieee80211_ht_info *ht_info, | 389 | struct ieee80211_ht_info *ht_info, |
390 | enum ieee80211_band band) | 390 | enum ieee80211_band band) |
@@ -815,7 +815,7 @@ int iwl_setup_mac(struct iwl_priv *priv) | |||
815 | { | 815 | { |
816 | int ret; | 816 | int ret; |
817 | struct ieee80211_hw *hw = priv->hw; | 817 | struct ieee80211_hw *hw = priv->hw; |
818 | hw->rate_control_algorithm = "iwl-4965-rs"; | 818 | hw->rate_control_algorithm = "iwl-agn-rs"; |
819 | 819 | ||
820 | /* Tell mac80211 our characteristics */ | 820 | /* Tell mac80211 our characteristics */ |
821 | hw->flags = IEEE80211_HW_SIGNAL_DBM | | 821 | hw->flags = IEEE80211_HW_SIGNAL_DBM | |
@@ -827,6 +827,7 @@ int iwl_setup_mac(struct iwl_priv *priv) | |||
827 | hw->ampdu_queues = priv->cfg->mod_params->num_of_ampdu_queues; | 827 | hw->ampdu_queues = priv->cfg->mod_params->num_of_ampdu_queues; |
828 | 828 | ||
829 | hw->conf.beacon_int = 100; | 829 | hw->conf.beacon_int = 100; |
830 | hw->max_listen_interval = IWL_CONN_MAX_LISTEN_INTERVAL; | ||
830 | 831 | ||
831 | if (priv->bands[IEEE80211_BAND_2GHZ].n_channels) | 832 | if (priv->bands[IEEE80211_BAND_2GHZ].n_channels) |
832 | priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = | 833 | priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index db66114f1e56..64f139e97444 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -95,6 +95,8 @@ struct iwl_hcmd_utils_ops { | |||
95 | void (*chain_noise_reset)(struct iwl_priv *priv); | 95 | void (*chain_noise_reset)(struct iwl_priv *priv); |
96 | void (*rts_tx_cmd_flag)(struct ieee80211_tx_info *info, | 96 | void (*rts_tx_cmd_flag)(struct ieee80211_tx_info *info, |
97 | __le32 *tx_flags); | 97 | __le32 *tx_flags); |
98 | int (*calc_rssi)(struct iwl_priv *priv, | ||
99 | struct iwl_rx_phy_res *rx_resp); | ||
98 | }; | 100 | }; |
99 | 101 | ||
100 | struct iwl_lib_ops { | 102 | struct iwl_lib_ops { |
@@ -139,7 +141,6 @@ struct iwl_lib_ops { | |||
139 | int (*set_pwr_src)(struct iwl_priv *priv, enum iwl_pwr_src src); | 141 | int (*set_pwr_src)(struct iwl_priv *priv, enum iwl_pwr_src src); |
140 | } apm_ops; | 142 | } apm_ops; |
141 | /* power */ | 143 | /* power */ |
142 | int (*set_power)(struct iwl_priv *priv, void *cmd); | ||
143 | int (*send_tx_power) (struct iwl_priv *priv); | 144 | int (*send_tx_power) (struct iwl_priv *priv); |
144 | void (*update_chain_flags)(struct iwl_priv *priv); | 145 | void (*update_chain_flags)(struct iwl_priv *priv); |
145 | void (*temperature) (struct iwl_priv *priv); | 146 | void (*temperature) (struct iwl_priv *priv); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-csr.h b/drivers/net/wireless/iwlwifi/iwl-csr.h index 545ed692d889..52629fbd835a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-csr.h +++ b/drivers/net/wireless/iwlwifi/iwl-csr.h | |||
@@ -104,6 +104,7 @@ | |||
104 | * 3-2: 0 = A, 1 = B, 2 = C, 3 = D step | 104 | * 3-2: 0 = A, 1 = B, 2 = C, 3 = D step |
105 | */ | 105 | */ |
106 | #define CSR_HW_REV_WA_REG (CSR_BASE+0x22C) | 106 | #define CSR_HW_REV_WA_REG (CSR_BASE+0x22C) |
107 | #define CSR_DBG_HPET_MEM_REG (CSR_BASE+0x240) | ||
107 | 108 | ||
108 | /* Bits for CSR_HW_IF_CONFIG_REG */ | 109 | /* Bits for CSR_HW_IF_CONFIG_REG */ |
109 | #define CSR49_HW_IF_CONFIG_REG_BIT_4965_R (0x00000010) | 110 | #define CSR49_HW_IF_CONFIG_REG_BIT_4965_R (0x00000010) |
@@ -118,7 +119,12 @@ | |||
118 | #define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A (0x00000000) | 119 | #define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A (0x00000000) |
119 | #define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B (0x00001000) | 120 | #define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B (0x00001000) |
120 | 121 | ||
121 | #define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM (0x00200000) | 122 | #define CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A (0x00080000) |
123 | #define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM (0x00200000) | ||
124 | #define CSR_HW_IF_CONFIG_REG_BIT_PCI_OWN_SEM (0x00400000) | ||
125 | #define CSR_HW_IF_CONFIG_REG_BIT_ME_OWN (0x02000000) | ||
126 | #define CSR_HW_IF_CONFIG_REG_BIT_WAKE_ME (0x08000000) | ||
127 | |||
122 | 128 | ||
123 | /* interrupt flags in INTA, set by uCode or hardware (e.g. dma), | 129 | /* interrupt flags in INTA, set by uCode or hardware (e.g. dma), |
124 | * acknowledged (reset) by host writing "1" to flagged bits. */ | 130 | * acknowledged (reset) by host writing "1" to flagged bits. */ |
@@ -236,6 +242,8 @@ | |||
236 | #define CSR39_ANA_PLL_CFG_VAL (0x01000000) | 242 | #define CSR39_ANA_PLL_CFG_VAL (0x01000000) |
237 | #define CSR50_ANA_PLL_CFG_VAL (0x00880300) | 243 | #define CSR50_ANA_PLL_CFG_VAL (0x00880300) |
238 | 244 | ||
245 | /* HPET MEM debug */ | ||
246 | #define CSR_DBG_HPET_MEM_REG_VAL (0xFFFF0000) | ||
239 | /*=== HBUS (Host-side Bus) ===*/ | 247 | /*=== HBUS (Host-side Bus) ===*/ |
240 | #define HBUS_BASE (0x400) | 248 | #define HBUS_BASE (0x400) |
241 | /* | 249 | /* |
diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h index d6d729e86bdb..b4ffd33ef98c 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debug.h +++ b/drivers/net/wireless/iwlwifi/iwl-debug.h | |||
@@ -33,12 +33,12 @@ | |||
33 | #define IWL_DEBUG(level, fmt, args...) \ | 33 | #define IWL_DEBUG(level, fmt, args...) \ |
34 | do { if (priv->debug_level & (level)) \ | 34 | do { if (priv->debug_level & (level)) \ |
35 | dev_printk(KERN_ERR, &(priv->hw->wiphy->dev), "%c %s " fmt, \ | 35 | dev_printk(KERN_ERR, &(priv->hw->wiphy->dev), "%c %s " fmt, \ |
36 | in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0) | 36 | in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0) |
37 | 37 | ||
38 | #define IWL_DEBUG_LIMIT(level, fmt, args...) \ | 38 | #define IWL_DEBUG_LIMIT(level, fmt, args...) \ |
39 | do { if ((priv->debug_level & (level)) && net_ratelimit()) \ | 39 | do { if ((priv->debug_level & (level)) && net_ratelimit()) \ |
40 | dev_printk(KERN_ERR, &(priv->hw->wiphy->dev), "%c %s " fmt, \ | 40 | dev_printk(KERN_ERR, &(priv->hw->wiphy->dev), "%c %s " fmt, \ |
41 | in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0) | 41 | in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0) |
42 | 42 | ||
43 | #ifdef CONFIG_IWLWIFI_DEBUGFS | 43 | #ifdef CONFIG_IWLWIFI_DEBUGFS |
44 | struct iwl_debugfs { | 44 | struct iwl_debugfs { |
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c index ed948dc59b3d..20db0eb636a8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c +++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c | |||
@@ -231,7 +231,7 @@ static ssize_t iwl_dbgfs_stations_read(struct file *file, char __user *user_buf, | |||
231 | DECLARE_MAC_BUF(mac); | 231 | DECLARE_MAC_BUF(mac); |
232 | 232 | ||
233 | buf = kmalloc(bufsz, GFP_KERNEL); | 233 | buf = kmalloc(bufsz, GFP_KERNEL); |
234 | if(!buf) | 234 | if (!buf) |
235 | return -ENOMEM; | 235 | return -ENOMEM; |
236 | 236 | ||
237 | pos += scnprintf(buf + pos, bufsz - pos, "num of stations: %d\n\n", | 237 | pos += scnprintf(buf + pos, bufsz - pos, "num of stations: %d\n\n", |
@@ -364,16 +364,19 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name) | |||
364 | { | 364 | { |
365 | struct iwl_debugfs *dbgfs; | 365 | struct iwl_debugfs *dbgfs; |
366 | struct dentry *phyd = priv->hw->wiphy->debugfsdir; | 366 | struct dentry *phyd = priv->hw->wiphy->debugfsdir; |
367 | int ret = 0; | ||
367 | 368 | ||
368 | dbgfs = kzalloc(sizeof(struct iwl_debugfs), GFP_KERNEL); | 369 | dbgfs = kzalloc(sizeof(struct iwl_debugfs), GFP_KERNEL); |
369 | if (!dbgfs) { | 370 | if (!dbgfs) { |
371 | ret = -ENOMEM; | ||
370 | goto err; | 372 | goto err; |
371 | } | 373 | } |
372 | 374 | ||
373 | priv->dbgfs = dbgfs; | 375 | priv->dbgfs = dbgfs; |
374 | dbgfs->name = name; | 376 | dbgfs->name = name; |
375 | dbgfs->dir_drv = debugfs_create_dir(name, phyd); | 377 | dbgfs->dir_drv = debugfs_create_dir(name, phyd); |
376 | if (!dbgfs->dir_drv || IS_ERR(dbgfs->dir_drv)){ | 378 | if (!dbgfs->dir_drv || IS_ERR(dbgfs->dir_drv)) { |
379 | ret = -ENOENT; | ||
377 | goto err; | 380 | goto err; |
378 | } | 381 | } |
379 | 382 | ||
@@ -394,7 +397,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name) | |||
394 | err: | 397 | err: |
395 | IWL_ERROR("Can't open the debugfs directory\n"); | 398 | IWL_ERROR("Can't open the debugfs directory\n"); |
396 | iwl_dbgfs_unregister(priv); | 399 | iwl_dbgfs_unregister(priv); |
397 | return -ENOENT; | 400 | return ret; |
398 | } | 401 | } |
399 | EXPORT_SYMBOL(iwl_dbgfs_register); | 402 | EXPORT_SYMBOL(iwl_dbgfs_register); |
400 | 403 | ||
@@ -404,7 +407,7 @@ EXPORT_SYMBOL(iwl_dbgfs_register); | |||
404 | */ | 407 | */ |
405 | void iwl_dbgfs_unregister(struct iwl_priv *priv) | 408 | void iwl_dbgfs_unregister(struct iwl_priv *priv) |
406 | { | 409 | { |
407 | if (!(priv->dbgfs)) | 410 | if (!priv->dbgfs) |
408 | return; | 411 | return; |
409 | 412 | ||
410 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_eeprom); | 413 | DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_eeprom); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 4d789e353e3a..c19db438306c 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -36,7 +36,7 @@ | |||
36 | #include <linux/kernel.h> | 36 | #include <linux/kernel.h> |
37 | #include <net/ieee80211_radiotap.h> | 37 | #include <net/ieee80211_radiotap.h> |
38 | 38 | ||
39 | #define DRV_NAME "iwl4965" | 39 | #define DRV_NAME "iwlagn" |
40 | #include "iwl-rfkill.h" | 40 | #include "iwl-rfkill.h" |
41 | #include "iwl-eeprom.h" | 41 | #include "iwl-eeprom.h" |
42 | #include "iwl-4965-hw.h" | 42 | #include "iwl-4965-hw.h" |
@@ -45,6 +45,7 @@ | |||
45 | #include "iwl-debug.h" | 45 | #include "iwl-debug.h" |
46 | #include "iwl-led.h" | 46 | #include "iwl-led.h" |
47 | #include "iwl-power.h" | 47 | #include "iwl-power.h" |
48 | #include "iwl-agn-rs.h" | ||
48 | 49 | ||
49 | /* configuration for the iwl4965 */ | 50 | /* configuration for the iwl4965 */ |
50 | extern struct iwl_cfg iwl4965_agn_cfg; | 51 | extern struct iwl_cfg iwl4965_agn_cfg; |
@@ -134,8 +135,7 @@ struct iwl_tx_info { | |||
134 | struct iwl_tx_queue { | 135 | struct iwl_tx_queue { |
135 | struct iwl_queue q; | 136 | struct iwl_queue q; |
136 | struct iwl_tfd_frame *bd; | 137 | struct iwl_tfd_frame *bd; |
137 | struct iwl_cmd *cmd; | 138 | struct iwl_cmd *cmd[TFD_TX_CMD_SLOTS]; |
138 | dma_addr_t dma_addr_cmd; | ||
139 | struct iwl_tx_info *txb; | 139 | struct iwl_tx_info *txb; |
140 | int need_update; | 140 | int need_update; |
141 | int sched_retry; | 141 | int sched_retry; |
@@ -191,7 +191,6 @@ struct iwl4965_clip_group { | |||
191 | const s8 clip_powers[IWL_MAX_RATES]; | 191 | const s8 clip_powers[IWL_MAX_RATES]; |
192 | }; | 192 | }; |
193 | 193 | ||
194 | #include "iwl-4965-rs.h" | ||
195 | 194 | ||
196 | #define IWL_TX_FIFO_AC0 0 | 195 | #define IWL_TX_FIFO_AC0 0 |
197 | #define IWL_TX_FIFO_AC1 1 | 196 | #define IWL_TX_FIFO_AC1 1 |
@@ -219,7 +218,7 @@ enum iwl_pwr_src { | |||
219 | struct iwl_frame { | 218 | struct iwl_frame { |
220 | union { | 219 | union { |
221 | struct ieee80211_hdr frame; | 220 | struct ieee80211_hdr frame; |
222 | struct iwl4965_tx_beacon_cmd beacon; | 221 | struct iwl_tx_beacon_cmd beacon; |
223 | u8 raw[IEEE80211_FRAME_LEN]; | 222 | u8 raw[IEEE80211_FRAME_LEN]; |
224 | u8 cmd[360]; | 223 | u8 cmd[360]; |
225 | } u; | 224 | } u; |
@@ -283,10 +282,9 @@ struct iwl_cmd { | |||
283 | u32 val32; | 282 | u32 val32; |
284 | struct iwl4965_bt_cmd bt; | 283 | struct iwl4965_bt_cmd bt; |
285 | struct iwl4965_rxon_time_cmd rxon_time; | 284 | struct iwl4965_rxon_time_cmd rxon_time; |
286 | struct iwl4965_powertable_cmd powertable; | 285 | struct iwl_powertable_cmd powertable; |
287 | struct iwl_qosparam_cmd qosparam; | 286 | struct iwl_qosparam_cmd qosparam; |
288 | struct iwl_tx_cmd tx; | 287 | struct iwl_tx_cmd tx; |
289 | struct iwl4965_tx_beacon_cmd tx_beacon; | ||
290 | struct iwl4965_rxon_assoc_cmd rxon_assoc; | 288 | struct iwl4965_rxon_assoc_cmd rxon_assoc; |
291 | struct iwl_rem_sta_cmd rm_sta; | 289 | struct iwl_rem_sta_cmd rm_sta; |
292 | u8 *indirect; | 290 | u8 *indirect; |
@@ -590,6 +588,7 @@ extern unsigned int iwl4965_fill_beacon_frame(struct iwl_priv *priv, | |||
590 | const u8 *dest, int left); | 588 | const u8 *dest, int left); |
591 | extern void iwl4965_update_chain_flags(struct iwl_priv *priv); | 589 | extern void iwl4965_update_chain_flags(struct iwl_priv *priv); |
592 | int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src); | 590 | int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src); |
591 | extern int iwl4965_set_power(struct iwl_priv *priv, void *cmd); | ||
593 | 592 | ||
594 | extern const u8 iwl_bcast_addr[ETH_ALEN]; | 593 | extern const u8 iwl_bcast_addr[ETH_ALEN]; |
595 | 594 | ||
@@ -642,10 +641,6 @@ struct iwl_priv; | |||
642 | * Forward declare iwl-4965.c functions for iwl-base.c | 641 | * Forward declare iwl-4965.c functions for iwl-base.c |
643 | */ | 642 | */ |
644 | extern void iwl4965_rf_kill_ct_config(struct iwl_priv *priv); | 643 | extern void iwl4965_rf_kill_ct_config(struct iwl_priv *priv); |
645 | |||
646 | int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw, | ||
647 | enum ieee80211_ampdu_mlme_action action, | ||
648 | const u8 *addr, u16 tid, u16 *ssn); | ||
649 | int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id, | 644 | int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id, |
650 | u8 tid, int txq_id); | 645 | u8 tid, int txq_id); |
651 | 646 | ||
@@ -812,14 +807,11 @@ struct iwl_chain_noise_data { | |||
812 | #define EEPROM_SEM_RETRY_LIMIT 1000 /* number of attempts (not time) */ | 807 | #define EEPROM_SEM_RETRY_LIMIT 1000 /* number of attempts (not time) */ |
813 | 808 | ||
814 | 809 | ||
815 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | ||
816 | |||
817 | enum { | 810 | enum { |
818 | MEASUREMENT_READY = (1 << 0), | 811 | MEASUREMENT_READY = (1 << 0), |
819 | MEASUREMENT_ACTIVE = (1 << 1), | 812 | MEASUREMENT_ACTIVE = (1 << 1), |
820 | }; | 813 | }; |
821 | 814 | ||
822 | #endif | ||
823 | 815 | ||
824 | #define IWL_MAX_NUM_QUEUES 20 /* FIXME: do dynamic allocation */ | 816 | #define IWL_MAX_NUM_QUEUES 20 /* FIXME: do dynamic allocation */ |
825 | 817 | ||
@@ -844,7 +836,7 @@ struct iwl_priv { | |||
844 | 836 | ||
845 | struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; | 837 | struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; |
846 | 838 | ||
847 | #ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT | 839 | #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT |
848 | /* spectrum measurement report caching */ | 840 | /* spectrum measurement report caching */ |
849 | struct iwl4965_spectrum_notification measure_report; | 841 | struct iwl4965_spectrum_notification measure_report; |
850 | u8 measurement_status; | 842 | u8 measurement_status; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c index 4a08a1b50979..bce53830b301 100644 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c | |||
@@ -273,8 +273,7 @@ EXPORT_SYMBOL(iwl_eeprom_init); | |||
273 | 273 | ||
274 | void iwl_eeprom_free(struct iwl_priv *priv) | 274 | void iwl_eeprom_free(struct iwl_priv *priv) |
275 | { | 275 | { |
276 | if(priv->eeprom) | 276 | kfree(priv->eeprom); |
277 | kfree(priv->eeprom); | ||
278 | priv->eeprom = NULL; | 277 | priv->eeprom = NULL; |
279 | } | 278 | } |
280 | EXPORT_SYMBOL(iwl_eeprom_free); | 279 | EXPORT_SYMBOL(iwl_eeprom_free); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-hcmd.c index 8fa991b7202a..6512834bb916 100644 --- a/drivers/net/wireless/iwlwifi/iwl-hcmd.c +++ b/drivers/net/wireless/iwlwifi/iwl-hcmd.c | |||
@@ -228,7 +228,7 @@ cancel: | |||
228 | * TX cmd queue. Otherwise in case the cmd comes | 228 | * TX cmd queue. Otherwise in case the cmd comes |
229 | * in later, it will possibly set an invalid | 229 | * in later, it will possibly set an invalid |
230 | * address (cmd->meta.source). */ | 230 | * address (cmd->meta.source). */ |
231 | qcmd = &priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_idx]; | 231 | qcmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_idx]; |
232 | qcmd->meta.flags &= ~CMD_WANT_SKB; | 232 | qcmd->meta.flags &= ~CMD_WANT_SKB; |
233 | } | 233 | } |
234 | fail: | 234 | fail: |
diff --git a/drivers/net/wireless/iwlwifi/iwl-led.c b/drivers/net/wireless/iwlwifi/iwl-led.c index 61250e6a7d1b..cb11c4a4d691 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.c +++ b/drivers/net/wireless/iwlwifi/iwl-led.c | |||
@@ -161,12 +161,32 @@ int iwl4965_led_off(struct iwl_priv *priv, int led_id) | |||
161 | /* Set led register off */ | 161 | /* Set led register off */ |
162 | static int iwl4965_led_off_reg(struct iwl_priv *priv, int led_id) | 162 | static int iwl4965_led_off_reg(struct iwl_priv *priv, int led_id) |
163 | { | 163 | { |
164 | IWL_DEBUG_LED("radio off\n"); | 164 | IWL_DEBUG_LED("LED Reg off\n"); |
165 | iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_OFF); | 165 | iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_OFF); |
166 | return 0; | 166 | return 0; |
167 | } | 167 | } |
168 | 168 | ||
169 | /* | 169 | /* |
170 | * Set led register in case of disassociation according to rfkill state | ||
171 | */ | ||
172 | static int iwl_led_associate(struct iwl_priv *priv, int led_id) | ||
173 | { | ||
174 | IWL_DEBUG_LED("Associated\n"); | ||
175 | priv->allow_blinking = 1; | ||
176 | return iwl4965_led_on_reg(priv, led_id); | ||
177 | } | ||
178 | static int iwl_led_disassociate(struct iwl_priv *priv, int led_id) | ||
179 | { | ||
180 | priv->allow_blinking = 0; | ||
181 | if (iwl_is_rfkill(priv)) | ||
182 | iwl4965_led_off_reg(priv, led_id); | ||
183 | else | ||
184 | iwl4965_led_on_reg(priv, led_id); | ||
185 | |||
186 | return 0; | ||
187 | } | ||
188 | |||
189 | /* | ||
170 | * brightness call back function for Tx/Rx LED | 190 | * brightness call back function for Tx/Rx LED |
171 | */ | 191 | */ |
172 | static int iwl_led_associated(struct iwl_priv *priv, int led_id) | 192 | static int iwl_led_associated(struct iwl_priv *priv, int led_id) |
@@ -199,16 +219,10 @@ static void iwl_led_brightness_set(struct led_classdev *led_cdev, | |||
199 | led_type_str[led->type], brightness); | 219 | led_type_str[led->type], brightness); |
200 | switch (brightness) { | 220 | switch (brightness) { |
201 | case LED_FULL: | 221 | case LED_FULL: |
202 | if (led->type == IWL_LED_TRG_ASSOC) | ||
203 | priv->allow_blinking = 1; | ||
204 | |||
205 | if (led->led_on) | 222 | if (led->led_on) |
206 | led->led_on(priv, IWL_LED_LINK); | 223 | led->led_on(priv, IWL_LED_LINK); |
207 | break; | 224 | break; |
208 | case LED_OFF: | 225 | case LED_OFF: |
209 | if (led->type == IWL_LED_TRG_ASSOC) | ||
210 | priv->allow_blinking = 0; | ||
211 | |||
212 | if (led->led_off) | 226 | if (led->led_off) |
213 | led->led_off(priv, IWL_LED_LINK); | 227 | led->led_off(priv, IWL_LED_LINK); |
214 | break; | 228 | break; |
@@ -228,12 +242,12 @@ static void iwl_led_brightness_set(struct led_classdev *led_cdev, | |||
228 | */ | 242 | */ |
229 | static int iwl_leds_register_led(struct iwl_priv *priv, struct iwl_led *led, | 243 | static int iwl_leds_register_led(struct iwl_priv *priv, struct iwl_led *led, |
230 | enum led_type type, u8 set_led, | 244 | enum led_type type, u8 set_led, |
231 | const char *name, char *trigger) | 245 | char *trigger) |
232 | { | 246 | { |
233 | struct device *device = wiphy_dev(priv->hw->wiphy); | 247 | struct device *device = wiphy_dev(priv->hw->wiphy); |
234 | int ret; | 248 | int ret; |
235 | 249 | ||
236 | led->led_dev.name = name; | 250 | led->led_dev.name = led->name; |
237 | led->led_dev.brightness_set = iwl_led_brightness_set; | 251 | led->led_dev.brightness_set = iwl_led_brightness_set; |
238 | led->led_dev.default_trigger = trigger; | 252 | led->led_dev.default_trigger = trigger; |
239 | 253 | ||
@@ -284,12 +298,6 @@ static int iwl_get_blink_rate(struct iwl_priv *priv) | |||
284 | return i; | 298 | return i; |
285 | } | 299 | } |
286 | 300 | ||
287 | static inline int is_rf_kill(struct iwl_priv *priv) | ||
288 | { | ||
289 | return test_bit(STATUS_RF_KILL_HW, &priv->status) || | ||
290 | test_bit(STATUS_RF_KILL_SW, &priv->status); | ||
291 | } | ||
292 | |||
293 | /* | 301 | /* |
294 | * this function called from handler. Since setting Led command can | 302 | * this function called from handler. Since setting Led command can |
295 | * happen very frequent we postpone led command to be called from | 303 | * happen very frequent we postpone led command to be called from |
@@ -303,7 +311,7 @@ void iwl_leds_background(struct iwl_priv *priv) | |||
303 | priv->last_blink_time = 0; | 311 | priv->last_blink_time = 0; |
304 | return; | 312 | return; |
305 | } | 313 | } |
306 | if (is_rf_kill(priv)) { | 314 | if (iwl_is_rfkill(priv)) { |
307 | priv->last_blink_time = 0; | 315 | priv->last_blink_time = 0; |
308 | return; | 316 | return; |
309 | } | 317 | } |
@@ -337,7 +345,6 @@ EXPORT_SYMBOL(iwl_leds_background); | |||
337 | int iwl_leds_register(struct iwl_priv *priv) | 345 | int iwl_leds_register(struct iwl_priv *priv) |
338 | { | 346 | { |
339 | char *trigger; | 347 | char *trigger; |
340 | char name[32]; | ||
341 | int ret; | 348 | int ret; |
342 | 349 | ||
343 | priv->last_blink_rate = 0; | 350 | priv->last_blink_rate = 0; |
@@ -346,7 +353,8 @@ int iwl_leds_register(struct iwl_priv *priv) | |||
346 | priv->allow_blinking = 0; | 353 | priv->allow_blinking = 0; |
347 | 354 | ||
348 | trigger = ieee80211_get_radio_led_name(priv->hw); | 355 | trigger = ieee80211_get_radio_led_name(priv->hw); |
349 | snprintf(name, sizeof(name), "iwl-%s:radio", | 356 | snprintf(priv->led[IWL_LED_TRG_RADIO].name, |
357 | sizeof(priv->led[IWL_LED_TRG_RADIO].name), "iwl-%s:radio", | ||
350 | wiphy_name(priv->hw->wiphy)); | 358 | wiphy_name(priv->hw->wiphy)); |
351 | 359 | ||
352 | priv->led[IWL_LED_TRG_RADIO].led_on = iwl4965_led_on_reg; | 360 | priv->led[IWL_LED_TRG_RADIO].led_on = iwl4965_led_on_reg; |
@@ -354,31 +362,33 @@ int iwl_leds_register(struct iwl_priv *priv) | |||
354 | priv->led[IWL_LED_TRG_RADIO].led_pattern = NULL; | 362 | priv->led[IWL_LED_TRG_RADIO].led_pattern = NULL; |
355 | 363 | ||
356 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RADIO], | 364 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RADIO], |
357 | IWL_LED_TRG_RADIO, 1, name, trigger); | 365 | IWL_LED_TRG_RADIO, 1, trigger); |
358 | if (ret) | 366 | if (ret) |
359 | goto exit_fail; | 367 | goto exit_fail; |
360 | 368 | ||
361 | trigger = ieee80211_get_assoc_led_name(priv->hw); | 369 | trigger = ieee80211_get_assoc_led_name(priv->hw); |
362 | snprintf(name, sizeof(name), "iwl-%s:assoc", | 370 | snprintf(priv->led[IWL_LED_TRG_ASSOC].name, |
371 | sizeof(priv->led[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc", | ||
363 | wiphy_name(priv->hw->wiphy)); | 372 | wiphy_name(priv->hw->wiphy)); |
364 | 373 | ||
365 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_ASSOC], | 374 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_ASSOC], |
366 | IWL_LED_TRG_ASSOC, 0, name, trigger); | 375 | IWL_LED_TRG_ASSOC, 0, trigger); |
367 | 376 | ||
368 | /* for assoc always turn led on */ | 377 | /* for assoc always turn led on */ |
369 | priv->led[IWL_LED_TRG_ASSOC].led_on = iwl4965_led_on_reg; | 378 | priv->led[IWL_LED_TRG_ASSOC].led_on = iwl_led_associate; |
370 | priv->led[IWL_LED_TRG_ASSOC].led_off = iwl4965_led_on_reg; | 379 | priv->led[IWL_LED_TRG_ASSOC].led_off = iwl_led_disassociate; |
371 | priv->led[IWL_LED_TRG_ASSOC].led_pattern = NULL; | 380 | priv->led[IWL_LED_TRG_ASSOC].led_pattern = NULL; |
372 | 381 | ||
373 | if (ret) | 382 | if (ret) |
374 | goto exit_fail; | 383 | goto exit_fail; |
375 | 384 | ||
376 | trigger = ieee80211_get_rx_led_name(priv->hw); | 385 | trigger = ieee80211_get_rx_led_name(priv->hw); |
377 | snprintf(name, sizeof(name), "iwl-%s:RX", wiphy_name(priv->hw->wiphy)); | 386 | snprintf(priv->led[IWL_LED_TRG_RX].name, |
378 | 387 | sizeof(priv->led[IWL_LED_TRG_RX].name), "iwl-%s:RX", | |
388 | wiphy_name(priv->hw->wiphy)); | ||
379 | 389 | ||
380 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RX], | 390 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RX], |
381 | IWL_LED_TRG_RX, 0, name, trigger); | 391 | IWL_LED_TRG_RX, 0, trigger); |
382 | 392 | ||
383 | priv->led[IWL_LED_TRG_RX].led_on = iwl_led_associated; | 393 | priv->led[IWL_LED_TRG_RX].led_on = iwl_led_associated; |
384 | priv->led[IWL_LED_TRG_RX].led_off = iwl_led_associated; | 394 | priv->led[IWL_LED_TRG_RX].led_off = iwl_led_associated; |
@@ -388,9 +398,12 @@ int iwl_leds_register(struct iwl_priv *priv) | |||
388 | goto exit_fail; | 398 | goto exit_fail; |
389 | 399 | ||
390 | trigger = ieee80211_get_tx_led_name(priv->hw); | 400 | trigger = ieee80211_get_tx_led_name(priv->hw); |
391 | snprintf(name, sizeof(name), "iwl-%s:TX", wiphy_name(priv->hw->wiphy)); | 401 | snprintf(priv->led[IWL_LED_TRG_TX].name, |
402 | sizeof(priv->led[IWL_LED_TRG_TX].name), "iwl-%s:TX", | ||
403 | wiphy_name(priv->hw->wiphy)); | ||
404 | |||
392 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_TX], | 405 | ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_TX], |
393 | IWL_LED_TRG_TX, 0, name, trigger); | 406 | IWL_LED_TRG_TX, 0, trigger); |
394 | 407 | ||
395 | priv->led[IWL_LED_TRG_TX].led_on = iwl_led_associated; | 408 | priv->led[IWL_LED_TRG_TX].led_on = iwl_led_associated; |
396 | priv->led[IWL_LED_TRG_TX].led_off = iwl_led_associated; | 409 | priv->led[IWL_LED_TRG_TX].led_off = iwl_led_associated; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-led.h b/drivers/net/wireless/iwlwifi/iwl-led.h index 1980ae5a7e82..588c9ad20e83 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.h +++ b/drivers/net/wireless/iwlwifi/iwl-led.h | |||
@@ -52,6 +52,7 @@ enum led_type { | |||
52 | struct iwl_led { | 52 | struct iwl_led { |
53 | struct iwl_priv *priv; | 53 | struct iwl_priv *priv; |
54 | struct led_classdev led_dev; | 54 | struct led_classdev led_dev; |
55 | char name[32]; | ||
55 | 56 | ||
56 | int (*led_on) (struct iwl_priv *priv, int led_id); | 57 | int (*led_on) (struct iwl_priv *priv, int led_id); |
57 | int (*led_off) (struct iwl_priv *priv, int led_id); | 58 | int (*led_off) (struct iwl_priv *priv, int led_id); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c b/drivers/net/wireless/iwlwifi/iwl-power.c index 2e71803e09ba..028e3053c0ca 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.c +++ b/drivers/net/wireless/iwlwifi/iwl-power.c | |||
@@ -82,7 +82,7 @@ | |||
82 | 82 | ||
83 | /* default power management (not Tx power) table values */ | 83 | /* default power management (not Tx power) table values */ |
84 | /* for tim 0-10 */ | 84 | /* for tim 0-10 */ |
85 | static struct iwl_power_vec_entry range_0[IWL_POWER_AC] = { | 85 | static struct iwl_power_vec_entry range_0[IWL_POWER_MAX] = { |
86 | {{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0}, | 86 | {{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0}, |
87 | {{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 2, 2, 0xFF)}, 0}, | 87 | {{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 2, 2, 0xFF)}, 0}, |
88 | {{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(1, 2, 2, 2, 0xFF)}, 0}, | 88 | {{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(1, 2, 2, 2, 0xFF)}, 0}, |
@@ -93,7 +93,7 @@ static struct iwl_power_vec_entry range_0[IWL_POWER_AC] = { | |||
93 | 93 | ||
94 | 94 | ||
95 | /* for tim = 3-10 */ | 95 | /* for tim = 3-10 */ |
96 | static struct iwl_power_vec_entry range_1[IWL_POWER_AC] = { | 96 | static struct iwl_power_vec_entry range_1[IWL_POWER_MAX] = { |
97 | {{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0}, | 97 | {{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0}, |
98 | {{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 3, 4, 4)}, 0}, | 98 | {{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 3, 4, 4)}, 0}, |
99 | {{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(1, 2, 3, 4, 7)}, 0}, | 99 | {{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(1, 2, 3, 4, 7)}, 0}, |
@@ -103,7 +103,7 @@ static struct iwl_power_vec_entry range_1[IWL_POWER_AC] = { | |||
103 | }; | 103 | }; |
104 | 104 | ||
105 | /* for tim > 11 */ | 105 | /* for tim > 11 */ |
106 | static struct iwl_power_vec_entry range_2[IWL_POWER_AC] = { | 106 | static struct iwl_power_vec_entry range_2[IWL_POWER_MAX] = { |
107 | {{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0}, | 107 | {{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0}, |
108 | {{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 3, 4, 0xFF)}, 0}, | 108 | {{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 3, 4, 0xFF)}, 0}, |
109 | {{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(2, 4, 6, 7, 0xFF)}, 0}, | 109 | {{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(2, 4, 6, 7, 0xFF)}, 0}, |
@@ -112,12 +112,19 @@ static struct iwl_power_vec_entry range_2[IWL_POWER_AC] = { | |||
112 | {{SLP, SLP_TOUT(25), SLP_TOUT(25), SLP_VEC(4, 7, 10, 10, 0xFF)}, 0} | 112 | {{SLP, SLP_TOUT(25), SLP_TOUT(25), SLP_VEC(4, 7, 10, 10, 0xFF)}, 0} |
113 | }; | 113 | }; |
114 | 114 | ||
115 | /* set card power command */ | ||
116 | static int iwl_set_power(struct iwl_priv *priv, void *cmd) | ||
117 | { | ||
118 | return iwl_send_cmd_pdu_async(priv, POWER_TABLE_CMD, | ||
119 | sizeof(struct iwl_powertable_cmd), | ||
120 | cmd, NULL); | ||
121 | } | ||
115 | /* decide the right power level according to association status | 122 | /* decide the right power level according to association status |
116 | * and battery status | 123 | * and battery status |
117 | */ | 124 | */ |
118 | static u16 iwl_get_auto_power_mode(struct iwl_priv *priv) | 125 | static u16 iwl_get_auto_power_mode(struct iwl_priv *priv) |
119 | { | 126 | { |
120 | u16 mode = priv->power_data.user_power_setting; | 127 | u16 mode; |
121 | 128 | ||
122 | switch (priv->power_data.user_power_setting) { | 129 | switch (priv->power_data.user_power_setting) { |
123 | case IWL_POWER_AUTO: | 130 | case IWL_POWER_AUTO: |
@@ -129,12 +136,16 @@ static u16 iwl_get_auto_power_mode(struct iwl_priv *priv) | |||
129 | else | 136 | else |
130 | mode = IWL_POWER_ON_AC_DISASSOC; | 137 | mode = IWL_POWER_ON_AC_DISASSOC; |
131 | break; | 138 | break; |
139 | /* FIXME: remove battery and ac from here */ | ||
132 | case IWL_POWER_BATTERY: | 140 | case IWL_POWER_BATTERY: |
133 | mode = IWL_POWER_INDEX_3; | 141 | mode = IWL_POWER_INDEX_3; |
134 | break; | 142 | break; |
135 | case IWL_POWER_AC: | 143 | case IWL_POWER_AC: |
136 | mode = IWL_POWER_MODE_CAM; | 144 | mode = IWL_POWER_MODE_CAM; |
137 | break; | 145 | break; |
146 | default: | ||
147 | mode = priv->power_data.user_power_setting; | ||
148 | break; | ||
138 | } | 149 | } |
139 | return mode; | 150 | return mode; |
140 | } | 151 | } |
@@ -144,7 +155,7 @@ static int iwl_power_init_handle(struct iwl_priv *priv) | |||
144 | { | 155 | { |
145 | int ret = 0, i; | 156 | int ret = 0, i; |
146 | struct iwl_power_mgr *pow_data; | 157 | struct iwl_power_mgr *pow_data; |
147 | int size = sizeof(struct iwl_power_vec_entry) * IWL_POWER_AC; | 158 | int size = sizeof(struct iwl_power_vec_entry) * IWL_POWER_MAX; |
148 | u16 pci_pm; | 159 | u16 pci_pm; |
149 | 160 | ||
150 | IWL_DEBUG_POWER("Initialize power \n"); | 161 | IWL_DEBUG_POWER("Initialize power \n"); |
@@ -162,11 +173,11 @@ static int iwl_power_init_handle(struct iwl_priv *priv) | |||
162 | if (ret != 0) | 173 | if (ret != 0) |
163 | return 0; | 174 | return 0; |
164 | else { | 175 | else { |
165 | struct iwl4965_powertable_cmd *cmd; | 176 | struct iwl_powertable_cmd *cmd; |
166 | 177 | ||
167 | IWL_DEBUG_POWER("adjust power command flags\n"); | 178 | IWL_DEBUG_POWER("adjust power command flags\n"); |
168 | 179 | ||
169 | for (i = 0; i < IWL_POWER_AC; i++) { | 180 | for (i = 0; i < IWL_POWER_MAX; i++) { |
170 | cmd = &pow_data->pwr_range_0[i].cmd; | 181 | cmd = &pow_data->pwr_range_0[i].cmd; |
171 | 182 | ||
172 | if (pci_pm & 0x1) | 183 | if (pci_pm & 0x1) |
@@ -180,7 +191,7 @@ static int iwl_power_init_handle(struct iwl_priv *priv) | |||
180 | 191 | ||
181 | /* adjust power command according to dtim period and power level*/ | 192 | /* adjust power command according to dtim period and power level*/ |
182 | static int iwl_update_power_command(struct iwl_priv *priv, | 193 | static int iwl_update_power_command(struct iwl_priv *priv, |
183 | struct iwl4965_powertable_cmd *cmd, | 194 | struct iwl_powertable_cmd *cmd, |
184 | u16 mode) | 195 | u16 mode) |
185 | { | 196 | { |
186 | int ret = 0, i; | 197 | int ret = 0, i; |
@@ -204,7 +215,7 @@ static int iwl_update_power_command(struct iwl_priv *priv, | |||
204 | range = &pow_data->pwr_range_2[0]; | 215 | range = &pow_data->pwr_range_2[0]; |
205 | 216 | ||
206 | period = pow_data->dtim_period; | 217 | period = pow_data->dtim_period; |
207 | memcpy(cmd, &range[mode].cmd, sizeof(struct iwl4965_powertable_cmd)); | 218 | memcpy(cmd, &range[mode].cmd, sizeof(struct iwl_powertable_cmd)); |
208 | 219 | ||
209 | if (period == 0) { | 220 | if (period == 0) { |
210 | period = 1; | 221 | period = 1; |
@@ -258,17 +269,18 @@ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh) | |||
258 | * else user level */ | 269 | * else user level */ |
259 | 270 | ||
260 | switch (setting->system_power_setting) { | 271 | switch (setting->system_power_setting) { |
261 | case IWL_POWER_AUTO: | 272 | case IWL_POWER_SYS_AUTO: |
262 | final_mode = iwl_get_auto_power_mode(priv); | 273 | final_mode = iwl_get_auto_power_mode(priv); |
263 | break; | 274 | break; |
264 | case IWL_POWER_BATTERY: | 275 | case IWL_POWER_SYS_BATTERY: |
265 | final_mode = IWL_POWER_INDEX_3; | 276 | final_mode = IWL_POWER_INDEX_3; |
266 | break; | 277 | break; |
267 | case IWL_POWER_AC: | 278 | case IWL_POWER_SYS_AC: |
268 | final_mode = IWL_POWER_MODE_CAM; | 279 | final_mode = IWL_POWER_MODE_CAM; |
269 | break; | 280 | break; |
270 | default: | 281 | default: |
271 | final_mode = setting->system_power_setting; | 282 | final_mode = IWL_POWER_INDEX_3; |
283 | WARN_ON(1); | ||
272 | } | 284 | } |
273 | 285 | ||
274 | if (setting->critical_power_setting > final_mode) | 286 | if (setting->critical_power_setting > final_mode) |
@@ -280,7 +292,7 @@ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh) | |||
280 | 292 | ||
281 | if (!iwl_is_rfkill(priv) && !setting->power_disabled && | 293 | if (!iwl_is_rfkill(priv) && !setting->power_disabled && |
282 | ((setting->power_mode != final_mode) || refresh)) { | 294 | ((setting->power_mode != final_mode) || refresh)) { |
283 | struct iwl4965_powertable_cmd cmd; | 295 | struct iwl_powertable_cmd cmd; |
284 | 296 | ||
285 | if (final_mode != IWL_POWER_MODE_CAM) | 297 | if (final_mode != IWL_POWER_MODE_CAM) |
286 | set_bit(STATUS_POWER_PMI, &priv->status); | 298 | set_bit(STATUS_POWER_PMI, &priv->status); |
@@ -291,8 +303,7 @@ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh) | |||
291 | if (final_mode == IWL_POWER_INDEX_5) | 303 | if (final_mode == IWL_POWER_INDEX_5) |
292 | cmd.flags |= IWL_POWER_FAST_PD; | 304 | cmd.flags |= IWL_POWER_FAST_PD; |
293 | 305 | ||
294 | if (priv->cfg->ops->lib->set_power) | 306 | ret = iwl_set_power(priv, &cmd); |
295 | ret = priv->cfg->ops->lib->set_power(priv, &cmd); | ||
296 | 307 | ||
297 | if (final_mode == IWL_POWER_MODE_CAM) | 308 | if (final_mode == IWL_POWER_MODE_CAM) |
298 | clear_bit(STATUS_POWER_PMI, &priv->status); | 309 | clear_bit(STATUS_POWER_PMI, &priv->status); |
@@ -388,7 +399,7 @@ void iwl_power_initialize(struct iwl_priv *priv) | |||
388 | iwl_power_init_handle(priv); | 399 | iwl_power_init_handle(priv); |
389 | priv->power_data.user_power_setting = IWL_POWER_AUTO; | 400 | priv->power_data.user_power_setting = IWL_POWER_AUTO; |
390 | priv->power_data.power_disabled = 0; | 401 | priv->power_data.power_disabled = 0; |
391 | priv->power_data.system_power_setting = IWL_POWER_AUTO; | 402 | priv->power_data.system_power_setting = IWL_POWER_SYS_AUTO; |
392 | priv->power_data.is_battery_active = 0; | 403 | priv->power_data.is_battery_active = 0; |
393 | priv->power_data.power_disabled = 0; | 404 | priv->power_data.power_disabled = 0; |
394 | priv->power_data.critical_power_setting = 0; | 405 | priv->power_data.critical_power_setting = 0; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.h b/drivers/net/wireless/iwlwifi/iwl-power.h index b066724a1c2b..abcbbf96a84e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.h +++ b/drivers/net/wireless/iwlwifi/iwl-power.h | |||
@@ -33,12 +33,25 @@ | |||
33 | 33 | ||
34 | struct iwl_priv; | 34 | struct iwl_priv; |
35 | 35 | ||
36 | #define IWL_POWER_MODE_CAM 0x00 /* Continuously Aware Mode, always on */ | 36 | enum { |
37 | #define IWL_POWER_INDEX_3 0x03 | 37 | IWL_POWER_MODE_CAM, /* Continuously Aware Mode, always on */ |
38 | #define IWL_POWER_INDEX_5 0x05 | 38 | IWL_POWER_INDEX_1, |
39 | #define IWL_POWER_AC 0x06 | 39 | IWL_POWER_INDEX_2, |
40 | #define IWL_POWER_BATTERY 0x07 | 40 | IWL_POWER_INDEX_3, |
41 | #define IWL_POWER_AUTO 0x08 | 41 | IWL_POWER_INDEX_4, |
42 | IWL_POWER_INDEX_5, | ||
43 | IWL_POWER_AUTO, | ||
44 | IWL_POWER_MAX = IWL_POWER_AUTO, | ||
45 | IWL_POWER_AC, | ||
46 | IWL_POWER_BATTERY, | ||
47 | }; | ||
48 | |||
49 | enum { | ||
50 | IWL_POWER_SYS_AUTO, | ||
51 | IWL_POWER_SYS_AC, | ||
52 | IWL_POWER_SYS_BATTERY, | ||
53 | }; | ||
54 | |||
42 | #define IWL_POWER_LIMIT 0x08 | 55 | #define IWL_POWER_LIMIT 0x08 |
43 | #define IWL_POWER_MASK 0x0F | 56 | #define IWL_POWER_MASK 0x0F |
44 | #define IWL_POWER_ENABLED 0x10 | 57 | #define IWL_POWER_ENABLED 0x10 |
@@ -46,15 +59,15 @@ struct iwl_priv; | |||
46 | /* Power management (not Tx power) structures */ | 59 | /* Power management (not Tx power) structures */ |
47 | 60 | ||
48 | struct iwl_power_vec_entry { | 61 | struct iwl_power_vec_entry { |
49 | struct iwl4965_powertable_cmd cmd; | 62 | struct iwl_powertable_cmd cmd; |
50 | u8 no_dtim; | 63 | u8 no_dtim; |
51 | }; | 64 | }; |
52 | 65 | ||
53 | struct iwl_power_mgr { | 66 | struct iwl_power_mgr { |
54 | spinlock_t lock; | 67 | spinlock_t lock; |
55 | struct iwl_power_vec_entry pwr_range_0[IWL_POWER_AC]; | 68 | struct iwl_power_vec_entry pwr_range_0[IWL_POWER_MAX]; |
56 | struct iwl_power_vec_entry pwr_range_1[IWL_POWER_AC]; | 69 | struct iwl_power_vec_entry pwr_range_1[IWL_POWER_MAX]; |
57 | struct iwl_power_vec_entry pwr_range_2[IWL_POWER_AC]; | 70 | struct iwl_power_vec_entry pwr_range_2[IWL_POWER_MAX]; |
58 | u32 dtim_period; | 71 | u32 dtim_period; |
59 | /* final power level that used to calculate final power command */ | 72 | /* final power level that used to calculate final power command */ |
60 | u8 power_mode; | 73 | u8 power_mode; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h index 70d9c7568b98..ee5afd48d3af 100644 --- a/drivers/net/wireless/iwlwifi/iwl-prph.h +++ b/drivers/net/wireless/iwlwifi/iwl-prph.h | |||
@@ -84,14 +84,16 @@ | |||
84 | #define APMG_CLK_VAL_DMA_CLK_RQT (0x00000200) | 84 | #define APMG_CLK_VAL_DMA_CLK_RQT (0x00000200) |
85 | #define APMG_CLK_VAL_BSM_CLK_RQT (0x00000800) | 85 | #define APMG_CLK_VAL_BSM_CLK_RQT (0x00000800) |
86 | 86 | ||
87 | #define APMG_PS_CTRL_VAL_RESET_REQ (0x04000000) | ||
88 | 87 | ||
89 | #define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800) | 88 | #define APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS (0x00400000) |
89 | #define APMG_PS_CTRL_VAL_RESET_REQ (0x04000000) | ||
90 | #define APMG_PS_CTRL_MSK_PWR_SRC (0x03000000) | ||
91 | #define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN (0x00000000) | ||
92 | #define APMG_PS_CTRL_VAL_PWR_SRC_MAX (0x01000000) /* 3945 only */ | ||
93 | #define APMG_PS_CTRL_VAL_PWR_SRC_VAUX (0x02000000) | ||
90 | 94 | ||
91 | #define APMG_PS_CTRL_MSK_PWR_SRC (0x03000000) | ||
92 | #define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN (0x00000000) | ||
93 | #define APMG_PS_CTRL_VAL_PWR_SRC_VAUX (0x01000000) | ||
94 | 95 | ||
96 | #define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800) | ||
95 | 97 | ||
96 | /** | 98 | /** |
97 | * BSM (Bootstrap State Machine) | 99 | * BSM (Bootstrap State Machine) |
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c index e2d9afba38a5..f3f6ea49fdd2 100644 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c | |||
@@ -791,7 +791,7 @@ static inline void iwl_dbg_report_frame(struct iwl_priv *priv, | |||
791 | 791 | ||
792 | static void iwl_add_radiotap(struct iwl_priv *priv, | 792 | static void iwl_add_radiotap(struct iwl_priv *priv, |
793 | struct sk_buff *skb, | 793 | struct sk_buff *skb, |
794 | struct iwl4965_rx_phy_res *rx_start, | 794 | struct iwl_rx_phy_res *rx_start, |
795 | struct ieee80211_rx_status *stats, | 795 | struct ieee80211_rx_status *stats, |
796 | u32 ampdu_status) | 796 | u32 ampdu_status) |
797 | { | 797 | { |
@@ -1010,8 +1010,8 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv, | |||
1010 | struct ieee80211_rx_status *stats) | 1010 | struct ieee80211_rx_status *stats) |
1011 | { | 1011 | { |
1012 | struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; | 1012 | struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; |
1013 | struct iwl4965_rx_phy_res *rx_start = (include_phy) ? | 1013 | struct iwl_rx_phy_res *rx_start = (include_phy) ? |
1014 | (struct iwl4965_rx_phy_res *)&(pkt->u.raw[0]) : NULL; | 1014 | (struct iwl_rx_phy_res *)&(pkt->u.raw[0]) : NULL; |
1015 | struct ieee80211_hdr *hdr; | 1015 | struct ieee80211_hdr *hdr; |
1016 | u16 len; | 1016 | u16 len; |
1017 | __le32 *rx_end; | 1017 | __le32 *rx_end; |
@@ -1020,7 +1020,7 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv, | |||
1020 | u32 ampdu_status_legacy; | 1020 | u32 ampdu_status_legacy; |
1021 | 1021 | ||
1022 | if (!include_phy && priv->last_phy_res[0]) | 1022 | if (!include_phy && priv->last_phy_res[0]) |
1023 | rx_start = (struct iwl4965_rx_phy_res *)&priv->last_phy_res[1]; | 1023 | rx_start = (struct iwl_rx_phy_res *)&priv->last_phy_res[1]; |
1024 | 1024 | ||
1025 | if (!rx_start) { | 1025 | if (!rx_start) { |
1026 | IWL_ERROR("MPDU frame without a PHY data\n"); | 1026 | IWL_ERROR("MPDU frame without a PHY data\n"); |
@@ -1032,8 +1032,8 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv, | |||
1032 | 1032 | ||
1033 | len = le16_to_cpu(rx_start->byte_count); | 1033 | len = le16_to_cpu(rx_start->byte_count); |
1034 | 1034 | ||
1035 | rx_end = (__le32 *) ((u8 *) &pkt->u.raw[0] + | 1035 | rx_end = (__le32 *)((u8 *) &pkt->u.raw[0] + |
1036 | sizeof(struct iwl4965_rx_phy_res) + | 1036 | sizeof(struct iwl_rx_phy_res) + |
1037 | rx_start->cfg_phy_cnt + len); | 1037 | rx_start->cfg_phy_cnt + len); |
1038 | 1038 | ||
1039 | } else { | 1039 | } else { |
@@ -1084,40 +1084,13 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv, | |||
1084 | } | 1084 | } |
1085 | 1085 | ||
1086 | /* Calc max signal level (dBm) among 3 possible receivers */ | 1086 | /* Calc max signal level (dBm) among 3 possible receivers */ |
1087 | static int iwl_calc_rssi(struct iwl_priv *priv, | 1087 | static inline int iwl_calc_rssi(struct iwl_priv *priv, |
1088 | struct iwl4965_rx_phy_res *rx_resp) | 1088 | struct iwl_rx_phy_res *rx_resp) |
1089 | { | 1089 | { |
1090 | /* data from PHY/DSP regarding signal strength, etc., | 1090 | return priv->cfg->ops->utils->calc_rssi(priv, rx_resp); |
1091 | * contents are always there, not configurable by host. */ | ||
1092 | struct iwl4965_rx_non_cfg_phy *ncphy = | ||
1093 | (struct iwl4965_rx_non_cfg_phy *)rx_resp->non_cfg_phy; | ||
1094 | u32 agc = (le16_to_cpu(ncphy->agc_info) & IWL_AGC_DB_MASK) | ||
1095 | >> IWL_AGC_DB_POS; | ||
1096 | |||
1097 | u32 valid_antennae = | ||
1098 | (le16_to_cpu(rx_resp->phy_flags) & RX_PHY_FLAGS_ANTENNAE_MASK) | ||
1099 | >> RX_PHY_FLAGS_ANTENNAE_OFFSET; | ||
1100 | u8 max_rssi = 0; | ||
1101 | u32 i; | ||
1102 | |||
1103 | /* Find max rssi among 3 possible receivers. | ||
1104 | * These values are measured by the digital signal processor (DSP). | ||
1105 | * They should stay fairly constant even as the signal strength varies, | ||
1106 | * if the radio's automatic gain control (AGC) is working right. | ||
1107 | * AGC value (see below) will provide the "interesting" info. */ | ||
1108 | for (i = 0; i < 3; i++) | ||
1109 | if (valid_antennae & (1 << i)) | ||
1110 | max_rssi = max(ncphy->rssi_info[i << 1], max_rssi); | ||
1111 | |||
1112 | IWL_DEBUG_STATS("Rssi In A %d B %d C %d Max %d AGC dB %d\n", | ||
1113 | ncphy->rssi_info[0], ncphy->rssi_info[2], ncphy->rssi_info[4], | ||
1114 | max_rssi, agc); | ||
1115 | |||
1116 | /* dBm = max_rssi dB - agc dB - constant. | ||
1117 | * Higher AGC (higher radio gain) means lower signal. */ | ||
1118 | return max_rssi - agc - IWL_RSSI_OFFSET; | ||
1119 | } | 1091 | } |
1120 | 1092 | ||
1093 | |||
1121 | static void iwl_sta_modify_ps_wake(struct iwl_priv *priv, int sta_id) | 1094 | static void iwl_sta_modify_ps_wake(struct iwl_priv *priv, int sta_id) |
1122 | { | 1095 | { |
1123 | unsigned long flags; | 1096 | unsigned long flags; |
@@ -1180,9 +1153,9 @@ void iwl_rx_reply_rx(struct iwl_priv *priv, | |||
1180 | * this rx packet for legacy frames, | 1153 | * this rx packet for legacy frames, |
1181 | * or phy data cached from REPLY_RX_PHY_CMD for HT frames. */ | 1154 | * or phy data cached from REPLY_RX_PHY_CMD for HT frames. */ |
1182 | int include_phy = (pkt->hdr.cmd == REPLY_RX); | 1155 | int include_phy = (pkt->hdr.cmd == REPLY_RX); |
1183 | struct iwl4965_rx_phy_res *rx_start = (include_phy) ? | 1156 | struct iwl_rx_phy_res *rx_start = (include_phy) ? |
1184 | (struct iwl4965_rx_phy_res *)&(pkt->u.raw[0]) : | 1157 | (struct iwl_rx_phy_res *)&(pkt->u.raw[0]) : |
1185 | (struct iwl4965_rx_phy_res *)&priv->last_phy_res[1]; | 1158 | (struct iwl_rx_phy_res *)&priv->last_phy_res[1]; |
1186 | __le32 *rx_end; | 1159 | __le32 *rx_end; |
1187 | unsigned int len = 0; | 1160 | unsigned int len = 0; |
1188 | u16 fc; | 1161 | u16 fc; |
@@ -1210,7 +1183,7 @@ void iwl_rx_reply_rx(struct iwl_priv *priv, | |||
1210 | 1183 | ||
1211 | if (!include_phy) { | 1184 | if (!include_phy) { |
1212 | if (priv->last_phy_res[0]) | 1185 | if (priv->last_phy_res[0]) |
1213 | rx_start = (struct iwl4965_rx_phy_res *) | 1186 | rx_start = (struct iwl_rx_phy_res *) |
1214 | &priv->last_phy_res[1]; | 1187 | &priv->last_phy_res[1]; |
1215 | else | 1188 | else |
1216 | rx_start = NULL; | 1189 | rx_start = NULL; |
@@ -1227,7 +1200,7 @@ void iwl_rx_reply_rx(struct iwl_priv *priv, | |||
1227 | 1200 | ||
1228 | len = le16_to_cpu(rx_start->byte_count); | 1201 | len = le16_to_cpu(rx_start->byte_count); |
1229 | rx_end = (__le32 *)(pkt->u.raw + rx_start->cfg_phy_cnt + | 1202 | rx_end = (__le32 *)(pkt->u.raw + rx_start->cfg_phy_cnt + |
1230 | sizeof(struct iwl4965_rx_phy_res) + len); | 1203 | sizeof(struct iwl_rx_phy_res) + len); |
1231 | } else { | 1204 | } else { |
1232 | struct iwl4965_rx_mpdu_res_start *amsdu = | 1205 | struct iwl4965_rx_mpdu_res_start *amsdu = |
1233 | (struct iwl4965_rx_mpdu_res_start *)pkt->u.raw; | 1206 | (struct iwl4965_rx_mpdu_res_start *)pkt->u.raw; |
@@ -1316,6 +1289,6 @@ void iwl_rx_reply_rx_phy(struct iwl_priv *priv, | |||
1316 | struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; | 1289 | struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; |
1317 | priv->last_phy_res[0] = 1; | 1290 | priv->last_phy_res[0] = 1; |
1318 | memcpy(&priv->last_phy_res[1], &(pkt->u.raw[0]), | 1291 | memcpy(&priv->last_phy_res[1], &(pkt->u.raw[0]), |
1319 | sizeof(struct iwl4965_rx_phy_res)); | 1292 | sizeof(struct iwl_rx_phy_res)); |
1320 | } | 1293 | } |
1321 | EXPORT_SYMBOL(iwl_rx_reply_rx_phy); | 1294 | EXPORT_SYMBOL(iwl_rx_reply_rx_phy); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c index 5a00ac23e2d0..9bb6adb28b73 100644 --- a/drivers/net/wireless/iwlwifi/iwl-scan.c +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c | |||
@@ -202,6 +202,7 @@ static int iwl_send_scan_abort(struct iwl_priv *priv) | |||
202 | clear_bit(STATUS_SCAN_HW, &priv->status); | 202 | clear_bit(STATUS_SCAN_HW, &priv->status); |
203 | } | 203 | } |
204 | 204 | ||
205 | priv->alloc_rxb_skb--; | ||
205 | dev_kfree_skb_any(cmd.meta.u.skb); | 206 | dev_kfree_skb_any(cmd.meta.u.skb); |
206 | 207 | ||
207 | return ret; | 208 | return ret; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c index 6d1467d0bd9d..60a6e0106036 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c | |||
@@ -823,7 +823,7 @@ int iwl_send_lq_cmd(struct iwl_priv *priv, | |||
823 | if (lq->sta_id == 0xFF) | 823 | if (lq->sta_id == 0xFF) |
824 | lq->sta_id = IWL_AP_ID; | 824 | lq->sta_id = IWL_AP_ID; |
825 | 825 | ||
826 | iwl_dump_lq_cmd(priv,lq); | 826 | iwl_dump_lq_cmd(priv, lq); |
827 | 827 | ||
828 | if (iwl_is_associated(priv) && priv->assoc_station_added) | 828 | if (iwl_is_associated(priv) && priv->assoc_station_added) |
829 | return iwl_send_cmd(priv, &cmd); | 829 | return iwl_send_cmd(priv, &cmd); |
@@ -839,7 +839,7 @@ EXPORT_SYMBOL(iwl_send_lq_cmd); | |||
839 | * for automatic fallback during transmission. | 839 | * for automatic fallback during transmission. |
840 | * | 840 | * |
841 | * NOTE: This sets up a default set of values. These will be replaced later | 841 | * NOTE: This sets up a default set of values. These will be replaced later |
842 | * if the driver's iwl-4965-rs rate scaling algorithm is used, instead of | 842 | * if the driver's iwl-agn-rs rate scaling algorithm is used, instead of |
843 | * rc80211_simple. | 843 | * rc80211_simple. |
844 | * | 844 | * |
845 | * NOTE: Run REPLY_ADD_STA command to set up station table entry, before | 845 | * NOTE: Run REPLY_ADD_STA command to set up station table entry, before |
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index f72cd0bf6aa3..aa98c76d8195 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c | |||
@@ -208,11 +208,12 @@ EXPORT_SYMBOL(iwl_txq_update_write_ptr); | |||
208 | * Free all buffers. | 208 | * Free all buffers. |
209 | * 0-fill, but do not free "txq" descriptor structure. | 209 | * 0-fill, but do not free "txq" descriptor structure. |
210 | */ | 210 | */ |
211 | static void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq) | 211 | static void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id) |
212 | { | 212 | { |
213 | struct iwl_tx_queue *txq = &priv->txq[txq_id]; | ||
213 | struct iwl_queue *q = &txq->q; | 214 | struct iwl_queue *q = &txq->q; |
214 | struct pci_dev *dev = priv->pci_dev; | 215 | struct pci_dev *dev = priv->pci_dev; |
215 | int len; | 216 | int i, slots_num, len; |
216 | 217 | ||
217 | if (q->n_bd == 0) | 218 | if (q->n_bd == 0) |
218 | return; | 219 | return; |
@@ -227,7 +228,12 @@ static void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq) | |||
227 | len += IWL_MAX_SCAN_SIZE; | 228 | len += IWL_MAX_SCAN_SIZE; |
228 | 229 | ||
229 | /* De-alloc array of command/tx buffers */ | 230 | /* De-alloc array of command/tx buffers */ |
230 | pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd); | 231 | slots_num = (txq_id == IWL_CMD_QUEUE_NUM) ? |
232 | TFD_CMD_SLOTS : TFD_TX_CMD_SLOTS; | ||
233 | for (i = 0; i < slots_num; i++) | ||
234 | kfree(txq->cmd[i]); | ||
235 | if (txq_id == IWL_CMD_QUEUE_NUM) | ||
236 | kfree(txq->cmd[slots_num]); | ||
231 | 237 | ||
232 | /* De-alloc circular buffer of TFDs */ | 238 | /* De-alloc circular buffer of TFDs */ |
233 | if (txq->q.n_bd) | 239 | if (txq->q.n_bd) |
@@ -400,8 +406,7 @@ static int iwl_tx_queue_init(struct iwl_priv *priv, | |||
400 | struct iwl_tx_queue *txq, | 406 | struct iwl_tx_queue *txq, |
401 | int slots_num, u32 txq_id) | 407 | int slots_num, u32 txq_id) |
402 | { | 408 | { |
403 | struct pci_dev *dev = priv->pci_dev; | 409 | int i, len; |
404 | int len; | ||
405 | int rc = 0; | 410 | int rc = 0; |
406 | 411 | ||
407 | /* | 412 | /* |
@@ -412,17 +417,25 @@ static int iwl_tx_queue_init(struct iwl_priv *priv, | |||
412 | * For normal Tx queues (all other queues), no super-size command | 417 | * For normal Tx queues (all other queues), no super-size command |
413 | * space is needed. | 418 | * space is needed. |
414 | */ | 419 | */ |
415 | len = sizeof(struct iwl_cmd) * slots_num; | 420 | len = sizeof(struct iwl_cmd); |
416 | if (txq_id == IWL_CMD_QUEUE_NUM) | 421 | for (i = 0; i <= slots_num; i++) { |
417 | len += IWL_MAX_SCAN_SIZE; | 422 | if (i == slots_num) { |
418 | txq->cmd = pci_alloc_consistent(dev, len, &txq->dma_addr_cmd); | 423 | if (txq_id == IWL_CMD_QUEUE_NUM) |
419 | if (!txq->cmd) | 424 | len += IWL_MAX_SCAN_SIZE; |
420 | return -ENOMEM; | 425 | else |
426 | continue; | ||
427 | } | ||
428 | |||
429 | txq->cmd[i] = kmalloc(len, GFP_KERNEL | GFP_DMA); | ||
430 | if (!txq->cmd[i]) | ||
431 | return -ENOMEM; | ||
432 | } | ||
421 | 433 | ||
422 | /* Alloc driver data array and TFD circular buffer */ | 434 | /* Alloc driver data array and TFD circular buffer */ |
423 | rc = iwl_tx_queue_alloc(priv, txq, txq_id); | 435 | rc = iwl_tx_queue_alloc(priv, txq, txq_id); |
424 | if (rc) { | 436 | if (rc) { |
425 | pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd); | 437 | for (i = 0; i < slots_num; i++) |
438 | kfree(txq->cmd[i]); | ||
426 | 439 | ||
427 | return -ENOMEM; | 440 | return -ENOMEM; |
428 | } | 441 | } |
@@ -451,7 +464,7 @@ void iwl_hw_txq_ctx_free(struct iwl_priv *priv) | |||
451 | 464 | ||
452 | /* Tx queues */ | 465 | /* Tx queues */ |
453 | for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++) | 466 | for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++) |
454 | iwl_tx_queue_free(priv, &priv->txq[txq_id]); | 467 | iwl_tx_queue_free(priv, txq_id); |
455 | 468 | ||
456 | /* Keep-warm buffer */ | 469 | /* Keep-warm buffer */ |
457 | iwl_kw_free(priv); | 470 | iwl_kw_free(priv); |
@@ -859,7 +872,7 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb) | |||
859 | txq->txb[q->write_ptr].skb[0] = skb; | 872 | txq->txb[q->write_ptr].skb[0] = skb; |
860 | 873 | ||
861 | /* Set up first empty entry in queue's array of Tx/cmd buffers */ | 874 | /* Set up first empty entry in queue's array of Tx/cmd buffers */ |
862 | out_cmd = &txq->cmd[idx]; | 875 | out_cmd = txq->cmd[idx]; |
863 | tx_cmd = &out_cmd->cmd.tx; | 876 | tx_cmd = &out_cmd->cmd.tx; |
864 | memset(&out_cmd->hdr, 0, sizeof(out_cmd->hdr)); | 877 | memset(&out_cmd->hdr, 0, sizeof(out_cmd->hdr)); |
865 | memset(tx_cmd, 0, sizeof(struct iwl_tx_cmd)); | 878 | memset(tx_cmd, 0, sizeof(struct iwl_tx_cmd)); |
@@ -899,8 +912,9 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb) | |||
899 | 912 | ||
900 | /* Physical address of this Tx command's header (not MAC header!), | 913 | /* Physical address of this Tx command's header (not MAC header!), |
901 | * within command buffer array. */ | 914 | * within command buffer array. */ |
902 | txcmd_phys = txq->dma_addr_cmd + sizeof(struct iwl_cmd) * idx + | 915 | txcmd_phys = pci_map_single(priv->pci_dev, out_cmd, |
903 | offsetof(struct iwl_cmd, hdr); | 916 | sizeof(struct iwl_cmd), PCI_DMA_TODEVICE); |
917 | txcmd_phys += offsetof(struct iwl_cmd, hdr); | ||
904 | 918 | ||
905 | /* Add buffer containing Tx command and MAC(!) header to TFD's | 919 | /* Add buffer containing Tx command and MAC(!) header to TFD's |
906 | * first entry */ | 920 | * first entry */ |
@@ -962,16 +976,16 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb) | |||
962 | if (ret) | 976 | if (ret) |
963 | return ret; | 977 | return ret; |
964 | 978 | ||
965 | if ((iwl_queue_space(q) < q->high_mark) | 979 | if ((iwl_queue_space(q) < q->high_mark) && priv->mac80211_registered) { |
966 | && priv->mac80211_registered) { | ||
967 | if (wait_write_ptr) { | 980 | if (wait_write_ptr) { |
968 | spin_lock_irqsave(&priv->lock, flags); | 981 | spin_lock_irqsave(&priv->lock, flags); |
969 | txq->need_update = 1; | 982 | txq->need_update = 1; |
970 | iwl_txq_update_write_ptr(priv, txq); | 983 | iwl_txq_update_write_ptr(priv, txq); |
971 | spin_unlock_irqrestore(&priv->lock, flags); | 984 | spin_unlock_irqrestore(&priv->lock, flags); |
985 | } else { | ||
986 | ieee80211_stop_queue(priv->hw, | ||
987 | skb_get_queue_mapping(skb)); | ||
972 | } | 988 | } |
973 | |||
974 | ieee80211_stop_queue(priv->hw, skb_get_queue_mapping(skb)); | ||
975 | } | 989 | } |
976 | 990 | ||
977 | return 0; | 991 | return 0; |
@@ -1004,7 +1018,7 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
1004 | u32 idx; | 1018 | u32 idx; |
1005 | u16 fix_size; | 1019 | u16 fix_size; |
1006 | dma_addr_t phys_addr; | 1020 | dma_addr_t phys_addr; |
1007 | int ret; | 1021 | int len, ret; |
1008 | unsigned long flags; | 1022 | unsigned long flags; |
1009 | 1023 | ||
1010 | cmd->len = priv->cfg->ops->utils->get_hcmd_size(cmd->id, cmd->len); | 1024 | cmd->len = priv->cfg->ops->utils->get_hcmd_size(cmd->id, cmd->len); |
@@ -1034,7 +1048,7 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
1034 | control_flags = (u32 *) tfd; | 1048 | control_flags = (u32 *) tfd; |
1035 | 1049 | ||
1036 | idx = get_cmd_index(q, q->write_ptr, cmd->meta.flags & CMD_SIZE_HUGE); | 1050 | idx = get_cmd_index(q, q->write_ptr, cmd->meta.flags & CMD_SIZE_HUGE); |
1037 | out_cmd = &txq->cmd[idx]; | 1051 | out_cmd = txq->cmd[idx]; |
1038 | 1052 | ||
1039 | out_cmd->hdr.cmd = cmd->id; | 1053 | out_cmd->hdr.cmd = cmd->id; |
1040 | memcpy(&out_cmd->meta, &cmd->meta, sizeof(cmd->meta)); | 1054 | memcpy(&out_cmd->meta, &cmd->meta, sizeof(cmd->meta)); |
@@ -1048,9 +1062,11 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd) | |||
1048 | INDEX_TO_SEQ(q->write_ptr)); | 1062 | INDEX_TO_SEQ(q->write_ptr)); |
1049 | if (out_cmd->meta.flags & CMD_SIZE_HUGE) | 1063 | if (out_cmd->meta.flags & CMD_SIZE_HUGE) |
1050 | out_cmd->hdr.sequence |= cpu_to_le16(SEQ_HUGE_FRAME); | 1064 | out_cmd->hdr.sequence |= cpu_to_le16(SEQ_HUGE_FRAME); |
1051 | 1065 | len = (idx == TFD_CMD_SLOTS) ? | |
1052 | phys_addr = txq->dma_addr_cmd + sizeof(txq->cmd[0]) * idx + | 1066 | IWL_MAX_SCAN_SIZE : sizeof(struct iwl_cmd); |
1053 | offsetof(struct iwl_cmd, hdr); | 1067 | phys_addr = pci_map_single(priv->pci_dev, out_cmd, len, |
1068 | PCI_DMA_TODEVICE); | ||
1069 | phys_addr += offsetof(struct iwl_cmd, hdr); | ||
1054 | iwl_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, fix_size); | 1070 | iwl_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, fix_size); |
1055 | 1071 | ||
1056 | IWL_DEBUG_HC("Sending command %s (#%x), seq: 0x%04X, " | 1072 | IWL_DEBUG_HC("Sending command %s (#%x), seq: 0x%04X, " |
@@ -1115,6 +1131,9 @@ static void iwl_hcmd_queue_reclaim(struct iwl_priv *priv, int txq_id, int index) | |||
1115 | { | 1131 | { |
1116 | struct iwl_tx_queue *txq = &priv->txq[txq_id]; | 1132 | struct iwl_tx_queue *txq = &priv->txq[txq_id]; |
1117 | struct iwl_queue *q = &txq->q; | 1133 | struct iwl_queue *q = &txq->q; |
1134 | struct iwl_tfd_frame *bd = &txq->bd[index]; | ||
1135 | dma_addr_t dma_addr; | ||
1136 | int is_odd, buf_len; | ||
1118 | int nfreed = 0; | 1137 | int nfreed = 0; |
1119 | 1138 | ||
1120 | if ((index >= q->n_bd) || (iwl_queue_used(q, index) == 0)) { | 1139 | if ((index >= q->n_bd) || (iwl_queue_used(q, index) == 0)) { |
@@ -1132,6 +1151,19 @@ static void iwl_hcmd_queue_reclaim(struct iwl_priv *priv, int txq_id, int index) | |||
1132 | q->write_ptr, q->read_ptr); | 1151 | q->write_ptr, q->read_ptr); |
1133 | queue_work(priv->workqueue, &priv->restart); | 1152 | queue_work(priv->workqueue, &priv->restart); |
1134 | } | 1153 | } |
1154 | is_odd = (index/2) & 0x1; | ||
1155 | if (is_odd) { | ||
1156 | dma_addr = IWL_GET_BITS(bd->pa[index], tb2_addr_lo16) | | ||
1157 | (IWL_GET_BITS(bd->pa[index], | ||
1158 | tb2_addr_hi20) << 16); | ||
1159 | buf_len = IWL_GET_BITS(bd->pa[index], tb2_len); | ||
1160 | } else { | ||
1161 | dma_addr = le32_to_cpu(bd->pa[index].tb1_addr); | ||
1162 | buf_len = IWL_GET_BITS(bd->pa[index], tb1_len); | ||
1163 | } | ||
1164 | |||
1165 | pci_unmap_single(priv->pci_dev, dma_addr, buf_len, | ||
1166 | PCI_DMA_TODEVICE); | ||
1135 | nfreed++; | 1167 | nfreed++; |
1136 | } | 1168 | } |
1137 | } | 1169 | } |
@@ -1163,7 +1195,7 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb) | |||
1163 | BUG_ON(txq_id != IWL_CMD_QUEUE_NUM); | 1195 | BUG_ON(txq_id != IWL_CMD_QUEUE_NUM); |
1164 | 1196 | ||
1165 | cmd_index = get_cmd_index(&priv->txq[IWL_CMD_QUEUE_NUM].q, index, huge); | 1197 | cmd_index = get_cmd_index(&priv->txq[IWL_CMD_QUEUE_NUM].q, index, huge); |
1166 | cmd = &priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_index]; | 1198 | cmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_index]; |
1167 | 1199 | ||
1168 | /* Input error checking is done when commands are added to queue. */ | 1200 | /* Input error checking is done when commands are added to queue. */ |
1169 | if (cmd->meta.flags & CMD_WANT_SKB) { | 1201 | if (cmd->meta.flags & CMD_WANT_SKB) { |
@@ -1391,7 +1423,7 @@ static int iwl_tx_status_reply_compressed_ba(struct iwl_priv *priv, | |||
1391 | /* For each frame attempted in aggregation, | 1423 | /* For each frame attempted in aggregation, |
1392 | * update driver's record of tx frame's status. */ | 1424 | * update driver's record of tx frame's status. */ |
1393 | for (i = 0; i < agg->frame_count ; i++) { | 1425 | for (i = 0; i < agg->frame_count ; i++) { |
1394 | ack = bitmap & (1 << i); | 1426 | ack = bitmap & (1ULL << i); |
1395 | successes += !!ack; | 1427 | successes += !!ack; |
1396 | IWL_DEBUG_TX_REPLY("%s ON i=%d idx=%d raw=%d\n", | 1428 | IWL_DEBUG_TX_REPLY("%s ON i=%d idx=%d raw=%d\n", |
1397 | ack? "ACK":"NACK", i, (agg->start_idx + i) & 0xff, | 1429 | ack? "ACK":"NACK", i, (agg->start_idx + i) & 0xff, |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 7c82ecfa30a4..444847ab1b5a 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -275,10 +275,8 @@ static int iwl3945_tx_queue_alloc(struct iwl3945_priv *priv, | |||
275 | return 0; | 275 | return 0; |
276 | 276 | ||
277 | error: | 277 | error: |
278 | if (txq->txb) { | 278 | kfree(txq->txb); |
279 | kfree(txq->txb); | 279 | txq->txb = NULL; |
280 | txq->txb = NULL; | ||
281 | } | ||
282 | 280 | ||
283 | return -ENOMEM; | 281 | return -ENOMEM; |
284 | } | 282 | } |
@@ -365,10 +363,8 @@ void iwl3945_tx_queue_free(struct iwl3945_priv *priv, struct iwl3945_tx_queue *t | |||
365 | txq->q.n_bd, txq->bd, txq->q.dma_addr); | 363 | txq->q.n_bd, txq->bd, txq->q.dma_addr); |
366 | 364 | ||
367 | /* De-alloc array of per-TFD driver data */ | 365 | /* De-alloc array of per-TFD driver data */ |
368 | if (txq->txb) { | 366 | kfree(txq->txb); |
369 | kfree(txq->txb); | 367 | txq->txb = NULL; |
370 | txq->txb = NULL; | ||
371 | } | ||
372 | 368 | ||
373 | /* 0-fill queue descriptor structure */ | 369 | /* 0-fill queue descriptor structure */ |
374 | memset(txq, 0, sizeof(*txq)); | 370 | memset(txq, 0, sizeof(*txq)); |
@@ -2703,9 +2699,8 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv, struct sk_buff *skb) | |||
2703 | 2699 | ||
2704 | if (!ieee80211_has_morefrags(hdr->frame_control)) { | 2700 | if (!ieee80211_has_morefrags(hdr->frame_control)) { |
2705 | txq->need_update = 1; | 2701 | txq->need_update = 1; |
2706 | if (qc) { | 2702 | if (qc) |
2707 | priv->stations[sta_id].tid[tid].seq_number = seq_number; | 2703 | priv->stations[sta_id].tid[tid].seq_number = seq_number; |
2708 | } | ||
2709 | } else { | 2704 | } else { |
2710 | wait_write_ptr = 1; | 2705 | wait_write_ptr = 1; |
2711 | txq->need_update = 0; | 2706 | txq->need_update = 0; |
@@ -3813,7 +3808,7 @@ int iwl3945_calc_db_from_ratio(int sig_ratio) | |||
3813 | /* 100:1 or higher, divide by 10 and use table, | 3808 | /* 100:1 or higher, divide by 10 and use table, |
3814 | * add 20 dB to make up for divide by 10 */ | 3809 | * add 20 dB to make up for divide by 10 */ |
3815 | if (sig_ratio >= 100) | 3810 | if (sig_ratio >= 100) |
3816 | return (20 + (int)ratio2dB[sig_ratio/10]); | 3811 | return 20 + (int)ratio2dB[sig_ratio/10]; |
3817 | 3812 | ||
3818 | /* We shouldn't see this */ | 3813 | /* We shouldn't see this */ |
3819 | if (sig_ratio < 1) | 3814 | if (sig_ratio < 1) |
@@ -5088,7 +5083,7 @@ static void iwl3945_dealloc_ucode_pci(struct iwl3945_priv *priv) | |||
5088 | * iwl3945_verify_inst_full - verify runtime uCode image in card vs. host, | 5083 | * iwl3945_verify_inst_full - verify runtime uCode image in card vs. host, |
5089 | * looking at all data. | 5084 | * looking at all data. |
5090 | */ | 5085 | */ |
5091 | static int iwl3945_verify_inst_full(struct iwl3945_priv *priv, __le32 * image, u32 len) | 5086 | static int iwl3945_verify_inst_full(struct iwl3945_priv *priv, __le32 *image, u32 len) |
5092 | { | 5087 | { |
5093 | u32 val; | 5088 | u32 val; |
5094 | u32 save_len = len; | 5089 | u32 save_len = len; |
@@ -5237,7 +5232,7 @@ static int iwl3945_verify_bsm(struct iwl3945_priv *priv) | |||
5237 | val = iwl3945_read_prph(priv, BSM_WR_DWCOUNT_REG); | 5232 | val = iwl3945_read_prph(priv, BSM_WR_DWCOUNT_REG); |
5238 | for (reg = BSM_SRAM_LOWER_BOUND; | 5233 | for (reg = BSM_SRAM_LOWER_BOUND; |
5239 | reg < BSM_SRAM_LOWER_BOUND + len; | 5234 | reg < BSM_SRAM_LOWER_BOUND + len; |
5240 | reg += sizeof(u32), image ++) { | 5235 | reg += sizeof(u32), image++) { |
5241 | val = iwl3945_read_prph(priv, reg); | 5236 | val = iwl3945_read_prph(priv, reg); |
5242 | if (val != le32_to_cpu(*image)) { | 5237 | if (val != le32_to_cpu(*image)) { |
5243 | IWL_ERROR("BSM uCode verification failed at " | 5238 | IWL_ERROR("BSM uCode verification failed at " |
@@ -6336,7 +6331,7 @@ static void iwl3945_bg_post_associate(struct work_struct *data) | |||
6336 | DECLARE_MAC_BUF(mac); | 6331 | DECLARE_MAC_BUF(mac); |
6337 | 6332 | ||
6338 | if (priv->iw_mode == IEEE80211_IF_TYPE_AP) { | 6333 | if (priv->iw_mode == IEEE80211_IF_TYPE_AP) { |
6339 | IWL_ERROR("%s Should not be called in AP mode\n", __FUNCTION__); | 6334 | IWL_ERROR("%s Should not be called in AP mode\n", __func__); |
6340 | return; | 6335 | return; |
6341 | } | 6336 | } |
6342 | 6337 | ||
@@ -6417,7 +6412,7 @@ static void iwl3945_bg_post_associate(struct work_struct *data) | |||
6417 | 6412 | ||
6418 | default: | 6413 | default: |
6419 | IWL_ERROR("%s Should not be called in %d mode\n", | 6414 | IWL_ERROR("%s Should not be called in %d mode\n", |
6420 | __FUNCTION__, priv->iw_mode); | 6415 | __func__, priv->iw_mode); |
6421 | break; | 6416 | break; |
6422 | } | 6417 | } |
6423 | 6418 | ||
@@ -6594,12 +6589,6 @@ static int iwl3945_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
6594 | 6589 | ||
6595 | IWL_DEBUG_MAC80211("enter\n"); | 6590 | IWL_DEBUG_MAC80211("enter\n"); |
6596 | 6591 | ||
6597 | if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { | ||
6598 | IWL_DEBUG_MAC80211("leave - monitor\n"); | ||
6599 | dev_kfree_skb_any(skb); | ||
6600 | return 0; | ||
6601 | } | ||
6602 | |||
6603 | IWL_DEBUG_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len, | 6592 | IWL_DEBUG_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len, |
6604 | ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate); | 6593 | ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate); |
6605 | 6594 | ||
@@ -7456,7 +7445,7 @@ static ssize_t show_measurement(struct device *d, | |||
7456 | struct iwl3945_priv *priv = dev_get_drvdata(d); | 7445 | struct iwl3945_priv *priv = dev_get_drvdata(d); |
7457 | struct iwl3945_spectrum_notification measure_report; | 7446 | struct iwl3945_spectrum_notification measure_report; |
7458 | u32 size = sizeof(measure_report), len = 0, ofs = 0; | 7447 | u32 size = sizeof(measure_report), len = 0, ofs = 0; |
7459 | u8 *data = (u8 *) & measure_report; | 7448 | u8 *data = (u8 *)&measure_report; |
7460 | unsigned long flags; | 7449 | unsigned long flags; |
7461 | 7450 | ||
7462 | spin_lock_irqsave(&priv->lock, flags); | 7451 | spin_lock_irqsave(&priv->lock, flags); |
@@ -7627,7 +7616,7 @@ static ssize_t show_power_level(struct device *d, | |||
7627 | else | 7616 | else |
7628 | p += sprintf(p, " \n"); | 7617 | p += sprintf(p, " \n"); |
7629 | 7618 | ||
7630 | return (p - buf + 1); | 7619 | return p - buf + 1; |
7631 | 7620 | ||
7632 | } | 7621 | } |
7633 | 7622 | ||
@@ -7649,7 +7638,7 @@ static ssize_t show_statistics(struct device *d, | |||
7649 | struct iwl3945_priv *priv = dev_get_drvdata(d); | 7638 | struct iwl3945_priv *priv = dev_get_drvdata(d); |
7650 | u32 size = sizeof(struct iwl3945_notif_statistics); | 7639 | u32 size = sizeof(struct iwl3945_notif_statistics); |
7651 | u32 len = 0, ofs = 0; | 7640 | u32 len = 0, ofs = 0; |
7652 | u8 *data = (u8 *) & priv->statistics; | 7641 | u8 *data = (u8 *)&priv->statistics; |
7653 | int rc = 0; | 7642 | int rc = 0; |
7654 | 7643 | ||
7655 | if (!iwl3945_is_alive(priv)) | 7644 | if (!iwl3945_is_alive(priv)) |
@@ -8003,16 +7992,16 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e | |||
8003 | 7992 | ||
8004 | /* nic init */ | 7993 | /* nic init */ |
8005 | iwl3945_set_bit(priv, CSR_GIO_CHICKEN_BITS, | 7994 | iwl3945_set_bit(priv, CSR_GIO_CHICKEN_BITS, |
8006 | CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER); | 7995 | CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER); |
8007 | 7996 | ||
8008 | iwl3945_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); | 7997 | iwl3945_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); |
8009 | err = iwl3945_poll_bit(priv, CSR_GP_CNTRL, | 7998 | err = iwl3945_poll_bit(priv, CSR_GP_CNTRL, |
8010 | CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, | 7999 | CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, |
8011 | CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000); | 8000 | CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000); |
8012 | if (err < 0) { | 8001 | if (err < 0) { |
8013 | IWL_DEBUG_INFO("Failed to init the card\n"); | 8002 | IWL_DEBUG_INFO("Failed to init the card\n"); |
8014 | goto out_remove_sysfs; | 8003 | goto out_remove_sysfs; |
8015 | } | 8004 | } |
8016 | /* Read the EEPROM */ | 8005 | /* Read the EEPROM */ |
8017 | err = iwl3945_eeprom_init(priv); | 8006 | err = iwl3945_eeprom_init(priv); |
8018 | if (err) { | 8007 | if (err) { |
@@ -8114,9 +8103,8 @@ static void __devexit iwl3945_pci_remove(struct pci_dev *pdev) | |||
8114 | iwl3945_unset_hw_setting(priv); | 8103 | iwl3945_unset_hw_setting(priv); |
8115 | iwl3945_clear_stations_table(priv); | 8104 | iwl3945_clear_stations_table(priv); |
8116 | 8105 | ||
8117 | if (priv->mac80211_registered) { | 8106 | if (priv->mac80211_registered) |
8118 | ieee80211_unregister_hw(priv->hw); | 8107 | ieee80211_unregister_hw(priv->hw); |
8119 | } | ||
8120 | 8108 | ||
8121 | /*netif_stop_queue(dev); */ | 8109 | /*netif_stop_queue(dev); */ |
8122 | flush_workqueue(priv->workqueue); | 8110 | flush_workqueue(priv->workqueue); |
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 14d5d61cec4c..bd32ac0b4e07 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
@@ -297,9 +297,7 @@ static ssize_t lbs_rtap_set(struct device *dev, | |||
297 | lbs_add_rtap(priv); | 297 | lbs_add_rtap(priv); |
298 | } | 298 | } |
299 | priv->monitormode = monitor_mode; | 299 | priv->monitormode = monitor_mode; |
300 | } | 300 | } else { |
301 | |||
302 | else { | ||
303 | if (!priv->monitormode) | 301 | if (!priv->monitormode) |
304 | return strlen(buf); | 302 | return strlen(buf); |
305 | priv->monitormode = 0; | 303 | priv->monitormode = 0; |
@@ -1242,8 +1240,6 @@ int lbs_start_card(struct lbs_private *priv) | |||
1242 | lbs_pr_err("cannot register ethX device\n"); | 1240 | lbs_pr_err("cannot register ethX device\n"); |
1243 | goto done; | 1241 | goto done; |
1244 | } | 1242 | } |
1245 | if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) | ||
1246 | lbs_pr_err("cannot register lbs_rtap attribute\n"); | ||
1247 | 1243 | ||
1248 | lbs_update_channel(priv); | 1244 | lbs_update_channel(priv); |
1249 | 1245 | ||
@@ -1275,6 +1271,13 @@ int lbs_start_card(struct lbs_private *priv) | |||
1275 | 1271 | ||
1276 | if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) | 1272 | if (device_create_file(&dev->dev, &dev_attr_lbs_mesh)) |
1277 | lbs_pr_err("cannot register lbs_mesh attribute\n"); | 1273 | lbs_pr_err("cannot register lbs_mesh attribute\n"); |
1274 | |||
1275 | /* While rtap isn't related to mesh, only mesh-enabled | ||
1276 | * firmware implements the rtap functionality via | ||
1277 | * CMD_802_11_MONITOR_MODE. | ||
1278 | */ | ||
1279 | if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) | ||
1280 | lbs_pr_err("cannot register lbs_rtap attribute\n"); | ||
1278 | } | 1281 | } |
1279 | } | 1282 | } |
1280 | 1283 | ||
@@ -1306,9 +1309,9 @@ void lbs_stop_card(struct lbs_private *priv) | |||
1306 | netif_carrier_off(priv->dev); | 1309 | netif_carrier_off(priv->dev); |
1307 | 1310 | ||
1308 | lbs_debugfs_remove_one(priv); | 1311 | lbs_debugfs_remove_one(priv); |
1309 | device_remove_file(&dev->dev, &dev_attr_lbs_rtap); | ||
1310 | if (priv->mesh_tlv) { | 1312 | if (priv->mesh_tlv) { |
1311 | device_remove_file(&dev->dev, &dev_attr_lbs_mesh); | 1313 | device_remove_file(&dev->dev, &dev_attr_lbs_mesh); |
1314 | device_remove_file(&dev->dev, &dev_attr_lbs_rtap); | ||
1312 | } | 1315 | } |
1313 | 1316 | ||
1314 | /* Flush pending command nodes */ | 1317 | /* Flush pending command nodes */ |
diff --git a/drivers/net/wireless/p54/p54.h b/drivers/net/wireless/p54/p54.h index c6f27b9022f9..cac9a515b82d 100644 --- a/drivers/net/wireless/p54/p54.h +++ b/drivers/net/wireless/p54/p54.h | |||
@@ -52,6 +52,7 @@ struct p54_common { | |||
52 | int (*open)(struct ieee80211_hw *dev); | 52 | int (*open)(struct ieee80211_hw *dev); |
53 | void (*stop)(struct ieee80211_hw *dev); | 53 | void (*stop)(struct ieee80211_hw *dev); |
54 | int mode; | 54 | int mode; |
55 | struct mutex conf_mutex; | ||
55 | u8 mac_addr[ETH_ALEN]; | 56 | u8 mac_addr[ETH_ALEN]; |
56 | u8 bssid[ETH_ALEN]; | 57 | u8 bssid[ETH_ALEN]; |
57 | struct pda_iq_autocal_entry *iq_autocal; | 58 | struct pda_iq_autocal_entry *iq_autocal; |
diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c index ffaf7a6b6810..4da89ea9b561 100644 --- a/drivers/net/wireless/p54/p54common.c +++ b/drivers/net/wireless/p54/p54common.c | |||
@@ -886,9 +886,12 @@ static void p54_remove_interface(struct ieee80211_hw *dev, | |||
886 | static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | 886 | static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) |
887 | { | 887 | { |
888 | int ret; | 888 | int ret; |
889 | struct p54_common *priv = dev->priv; | ||
889 | 890 | ||
891 | mutex_lock(&priv->conf_mutex); | ||
890 | ret = p54_set_freq(dev, cpu_to_le16(conf->channel->center_freq)); | 892 | ret = p54_set_freq(dev, cpu_to_le16(conf->channel->center_freq)); |
891 | p54_set_vdcf(dev); | 893 | p54_set_vdcf(dev); |
894 | mutex_unlock(&priv->conf_mutex); | ||
892 | return ret; | 895 | return ret; |
893 | } | 896 | } |
894 | 897 | ||
@@ -898,10 +901,12 @@ static int p54_config_interface(struct ieee80211_hw *dev, | |||
898 | { | 901 | { |
899 | struct p54_common *priv = dev->priv; | 902 | struct p54_common *priv = dev->priv; |
900 | 903 | ||
904 | mutex_lock(&priv->conf_mutex); | ||
901 | p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 0, 1, 0, 0xF642); | 905 | p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 0, 1, 0, 0xF642); |
902 | p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 2, 0, 0, 0); | 906 | p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 2, 0, 0, 0); |
903 | p54_set_leds(dev, 1, !is_multicast_ether_addr(conf->bssid), 0); | 907 | p54_set_leds(dev, 1, !is_multicast_ether_addr(conf->bssid), 0); |
904 | memcpy(priv->bssid, conf->bssid, ETH_ALEN); | 908 | memcpy(priv->bssid, conf->bssid, ETH_ALEN); |
909 | mutex_unlock(&priv->conf_mutex); | ||
905 | return 0; | 910 | return 0; |
906 | } | 911 | } |
907 | 912 | ||
@@ -1009,6 +1014,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len) | |||
1009 | } | 1014 | } |
1010 | 1015 | ||
1011 | p54_init_vdcf(dev); | 1016 | p54_init_vdcf(dev); |
1017 | mutex_init(&priv->conf_mutex); | ||
1012 | 1018 | ||
1013 | return dev; | 1019 | return dev; |
1014 | } | 1020 | } |
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c index 97fa14e0a479..3d75a7137d3c 100644 --- a/drivers/net/wireless/prism54/isl_ioctl.c +++ b/drivers/net/wireless/prism54/isl_ioctl.c | |||
@@ -2518,7 +2518,7 @@ enum { | |||
2518 | 2518 | ||
2519 | #define PRISM2_HOSTAPD_MAX_BUF_SIZE 1024 | 2519 | #define PRISM2_HOSTAPD_MAX_BUF_SIZE 1024 |
2520 | #define PRISM2_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \ | 2520 | #define PRISM2_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \ |
2521 | ((int) (&((struct prism2_hostapd_param *) 0)->u.generic_elem.data)) | 2521 | offsetof(struct prism2_hostapd_param, u.generic_elem.data) |
2522 | 2522 | ||
2523 | /* Maximum length for algorithm names (-1 for nul termination) | 2523 | /* Maximum length for algorithm names (-1 for nul termination) |
2524 | * used in ioctl() */ | 2524 | * used in ioctl() */ |
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c index aa6dfb811c71..181a146b4768 100644 --- a/drivers/net/wireless/rt2x00/rt2500pci.c +++ b/drivers/net/wireless/rt2x00/rt2500pci.c | |||
@@ -1220,6 +1220,7 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, | |||
1220 | rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); | 1220 | rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); |
1221 | rt2x00_set_field32(&word, TXD_W0_RETRY_MODE, | 1221 | rt2x00_set_field32(&word, TXD_W0_RETRY_MODE, |
1222 | test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags)); | 1222 | test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags)); |
1223 | rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skb->len); | ||
1223 | rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, CIPHER_NONE); | 1224 | rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, CIPHER_NONE); |
1224 | rt2x00_desc_write(txd, 0, word); | 1225 | rt2x00_desc_write(txd, 0, word); |
1225 | } | 1226 | } |
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index 3078417b326b..cd5af656932d 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c | |||
@@ -633,6 +633,16 @@ static void rt2500usb_reset_tuner(struct rt2x00_dev *rt2x00dev) | |||
633 | rt2x00dev->link.vgc_level = value; | 633 | rt2x00dev->link.vgc_level = value; |
634 | } | 634 | } |
635 | 635 | ||
636 | /* | ||
637 | * NOTE: This function is directly ported from legacy driver, but | ||
638 | * despite it being declared it was never called. Although link tuning | ||
639 | * sounds like a good idea, and usually works well for the other drivers, | ||
640 | * it does _not_ work with rt2500usb. Enabling this function will result | ||
641 | * in TX capabilities only until association kicks in. Immediately | ||
642 | * after the successful association all TX frames will be kept in the | ||
643 | * hardware queue and never transmitted. | ||
644 | */ | ||
645 | #if 0 | ||
636 | static void rt2500usb_link_tuner(struct rt2x00_dev *rt2x00dev) | 646 | static void rt2500usb_link_tuner(struct rt2x00_dev *rt2x00dev) |
637 | { | 647 | { |
638 | int rssi = rt2x00_get_link_rssi(&rt2x00dev->link); | 648 | int rssi = rt2x00_get_link_rssi(&rt2x00dev->link); |
@@ -752,6 +762,9 @@ dynamic_cca_tune: | |||
752 | rt2x00dev->link.vgc_level = r17; | 762 | rt2x00dev->link.vgc_level = r17; |
753 | } | 763 | } |
754 | } | 764 | } |
765 | #else | ||
766 | #define rt2500usb_link_tuner NULL | ||
767 | #endif | ||
755 | 768 | ||
756 | /* | 769 | /* |
757 | * Initialization functions. | 770 | * Initialization functions. |
@@ -1376,6 +1389,9 @@ static int rt2500usb_validate_eeprom(struct rt2x00_dev *rt2x00dev) | |||
1376 | rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp); | 1389 | rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp); |
1377 | rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word); | 1390 | rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word); |
1378 | EEPROM(rt2x00dev, "BBPtune vgc: 0x%04x\n", word); | 1391 | EEPROM(rt2x00dev, "BBPtune vgc: 0x%04x\n", word); |
1392 | } else { | ||
1393 | rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp); | ||
1394 | rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word); | ||
1379 | } | 1395 | } |
1380 | 1396 | ||
1381 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R17, &word); | 1397 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R17, &word); |
@@ -1384,9 +1400,6 @@ static int rt2500usb_validate_eeprom(struct rt2x00_dev *rt2x00dev) | |||
1384 | rt2x00_set_field16(&word, EEPROM_BBPTUNE_R17_HIGH, 0x41); | 1400 | rt2x00_set_field16(&word, EEPROM_BBPTUNE_R17_HIGH, 0x41); |
1385 | rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_R17, word); | 1401 | rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_R17, word); |
1386 | EEPROM(rt2x00dev, "BBPtune r17: 0x%04x\n", word); | 1402 | EEPROM(rt2x00dev, "BBPtune r17: 0x%04x\n", word); |
1387 | } else { | ||
1388 | rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp); | ||
1389 | rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word); | ||
1390 | } | 1403 | } |
1391 | 1404 | ||
1392 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R24, &word); | 1405 | rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R24, &word); |
@@ -1737,6 +1750,7 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev) | |||
1737 | __set_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags); | 1750 | __set_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags); |
1738 | __set_bit(DRIVER_REQUIRE_BEACON_GUARD, &rt2x00dev->flags); | 1751 | __set_bit(DRIVER_REQUIRE_BEACON_GUARD, &rt2x00dev->flags); |
1739 | __set_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags); | 1752 | __set_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags); |
1753 | __set_bit(CONFIG_DISABLE_LINK_TUNING, &rt2x00dev->flags); | ||
1740 | 1754 | ||
1741 | /* | 1755 | /* |
1742 | * Set the rssi offset. | 1756 | * Set the rssi offset. |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index db2dc976d831..8b10ea41b204 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -368,6 +368,12 @@ struct rt2x00_intf { | |||
368 | #define DELAYED_CONFIG_ERP 0x00000002 | 368 | #define DELAYED_CONFIG_ERP 0x00000002 |
369 | #define DELAYED_LED_ASSOC 0x00000004 | 369 | #define DELAYED_LED_ASSOC 0x00000004 |
370 | 370 | ||
371 | /* | ||
372 | * Software sequence counter, this is only required | ||
373 | * for hardware which doesn't support hardware | ||
374 | * sequence counting. | ||
375 | */ | ||
376 | spinlock_t seqlock; | ||
371 | u16 seqno; | 377 | u16 seqno; |
372 | }; | 378 | }; |
373 | 379 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c index 3f89516e8332..d134c3be539a 100644 --- a/drivers/net/wireless/rt2x00/rt2x00config.c +++ b/drivers/net/wireless/rt2x00/rt2x00config.c | |||
@@ -254,6 +254,8 @@ config: | |||
254 | libconf.ant.rx = default_ant->rx; | 254 | libconf.ant.rx = default_ant->rx; |
255 | else if (active_ant->rx == ANTENNA_SW_DIVERSITY) | 255 | else if (active_ant->rx == ANTENNA_SW_DIVERSITY) |
256 | libconf.ant.rx = ANTENNA_B; | 256 | libconf.ant.rx = ANTENNA_B; |
257 | else | ||
258 | libconf.ant.rx = active_ant->rx; | ||
257 | 259 | ||
258 | if (conf->antenna_sel_tx) | 260 | if (conf->antenna_sel_tx) |
259 | libconf.ant.tx = conf->antenna_sel_tx; | 261 | libconf.ant.tx = conf->antenna_sel_tx; |
@@ -261,6 +263,8 @@ config: | |||
261 | libconf.ant.tx = default_ant->tx; | 263 | libconf.ant.tx = default_ant->tx; |
262 | else if (active_ant->tx == ANTENNA_SW_DIVERSITY) | 264 | else if (active_ant->tx == ANTENNA_SW_DIVERSITY) |
263 | libconf.ant.tx = ANTENNA_B; | 265 | libconf.ant.tx = ANTENNA_B; |
266 | else | ||
267 | libconf.ant.tx = active_ant->tx; | ||
264 | } | 268 | } |
265 | 269 | ||
266 | if (flags & CONFIG_UPDATE_SLOT_TIME) { | 270 | if (flags & CONFIG_UPDATE_SLOT_TIME) { |
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c index 300cf061035f..6bee1d611bbf 100644 --- a/drivers/net/wireless/rt2x00/rt2x00debug.c +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c | |||
@@ -372,9 +372,6 @@ static ssize_t rt2x00debug_write_##__name(struct file *file, \ | |||
372 | if (*offset) \ | 372 | if (*offset) \ |
373 | return 0; \ | 373 | return 0; \ |
374 | \ | 374 | \ |
375 | if (!capable(CAP_NET_ADMIN)) \ | ||
376 | return -EPERM; \ | ||
377 | \ | ||
378 | if (intf->offset_##__name >= debug->__name.word_count) \ | 375 | if (intf->offset_##__name >= debug->__name.word_count) \ |
379 | return -EINVAL; \ | 376 | return -EINVAL; \ |
380 | \ | 377 | \ |
@@ -454,7 +451,7 @@ static struct dentry *rt2x00debug_create_file_driver(const char *name, | |||
454 | data += sprintf(data, "compiled: %s %s\n", __DATE__, __TIME__); | 451 | data += sprintf(data, "compiled: %s %s\n", __DATE__, __TIME__); |
455 | blob->size = strlen(blob->data); | 452 | blob->size = strlen(blob->data); |
456 | 453 | ||
457 | return debugfs_create_blob(name, S_IRUGO, intf->driver_folder, blob); | 454 | return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob); |
458 | } | 455 | } |
459 | 456 | ||
460 | static struct dentry *rt2x00debug_create_file_chipset(const char *name, | 457 | static struct dentry *rt2x00debug_create_file_chipset(const char *name, |
@@ -482,7 +479,7 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name, | |||
482 | data += sprintf(data, "rf length: %d\n", debug->rf.word_count); | 479 | data += sprintf(data, "rf length: %d\n", debug->rf.word_count); |
483 | blob->size = strlen(blob->data); | 480 | blob->size = strlen(blob->data); |
484 | 481 | ||
485 | return debugfs_create_blob(name, S_IRUGO, intf->driver_folder, blob); | 482 | return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob); |
486 | } | 483 | } |
487 | 484 | ||
488 | void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | 485 | void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) |
@@ -517,7 +514,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | |||
517 | if (IS_ERR(intf->chipset_entry)) | 514 | if (IS_ERR(intf->chipset_entry)) |
518 | goto exit; | 515 | goto exit; |
519 | 516 | ||
520 | intf->dev_flags = debugfs_create_file("dev_flags", S_IRUGO, | 517 | intf->dev_flags = debugfs_create_file("dev_flags", S_IRUSR, |
521 | intf->driver_folder, intf, | 518 | intf->driver_folder, intf, |
522 | &rt2x00debug_fop_dev_flags); | 519 | &rt2x00debug_fop_dev_flags); |
523 | if (IS_ERR(intf->dev_flags)) | 520 | if (IS_ERR(intf->dev_flags)) |
@@ -532,7 +529,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | |||
532 | ({ \ | 529 | ({ \ |
533 | (__intf)->__name##_off_entry = \ | 530 | (__intf)->__name##_off_entry = \ |
534 | debugfs_create_u32(__stringify(__name) "_offset", \ | 531 | debugfs_create_u32(__stringify(__name) "_offset", \ |
535 | S_IRUGO | S_IWUSR, \ | 532 | S_IRUSR | S_IWUSR, \ |
536 | (__intf)->register_folder, \ | 533 | (__intf)->register_folder, \ |
537 | &(__intf)->offset_##__name); \ | 534 | &(__intf)->offset_##__name); \ |
538 | if (IS_ERR((__intf)->__name##_off_entry)) \ | 535 | if (IS_ERR((__intf)->__name##_off_entry)) \ |
@@ -540,7 +537,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | |||
540 | \ | 537 | \ |
541 | (__intf)->__name##_val_entry = \ | 538 | (__intf)->__name##_val_entry = \ |
542 | debugfs_create_file(__stringify(__name) "_value", \ | 539 | debugfs_create_file(__stringify(__name) "_value", \ |
543 | S_IRUGO | S_IWUSR, \ | 540 | S_IRUSR | S_IWUSR, \ |
544 | (__intf)->register_folder, \ | 541 | (__intf)->register_folder, \ |
545 | (__intf), &rt2x00debug_fop_##__name);\ | 542 | (__intf), &rt2x00debug_fop_##__name);\ |
546 | if (IS_ERR((__intf)->__name##_val_entry)) \ | 543 | if (IS_ERR((__intf)->__name##_val_entry)) \ |
@@ -560,7 +557,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | |||
560 | goto exit; | 557 | goto exit; |
561 | 558 | ||
562 | intf->queue_frame_dump_entry = | 559 | intf->queue_frame_dump_entry = |
563 | debugfs_create_file("dump", S_IRUGO, intf->queue_folder, | 560 | debugfs_create_file("dump", S_IRUSR, intf->queue_folder, |
564 | intf, &rt2x00debug_fop_queue_dump); | 561 | intf, &rt2x00debug_fop_queue_dump); |
565 | if (IS_ERR(intf->queue_frame_dump_entry)) | 562 | if (IS_ERR(intf->queue_frame_dump_entry)) |
566 | goto exit; | 563 | goto exit; |
@@ -569,7 +566,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | |||
569 | init_waitqueue_head(&intf->frame_dump_waitqueue); | 566 | init_waitqueue_head(&intf->frame_dump_waitqueue); |
570 | 567 | ||
571 | intf->queue_stats_entry = | 568 | intf->queue_stats_entry = |
572 | debugfs_create_file("queue", S_IRUGO, intf->queue_folder, | 569 | debugfs_create_file("queue", S_IRUSR, intf->queue_folder, |
573 | intf, &rt2x00debug_fop_queue_stats); | 570 | intf, &rt2x00debug_fop_queue_stats); |
574 | 571 | ||
575 | return; | 572 | return; |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index c3ee4ecba792..bd422fd6a894 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
@@ -247,6 +247,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
247 | rt2x00dev->intf_sta_count++; | 247 | rt2x00dev->intf_sta_count++; |
248 | 248 | ||
249 | spin_lock_init(&intf->lock); | 249 | spin_lock_init(&intf->lock); |
250 | spin_lock_init(&intf->seqlock); | ||
250 | intf->beacon = entry; | 251 | intf->beacon = entry; |
251 | 252 | ||
252 | if (conf->type == IEEE80211_IF_TYPE_AP) | 253 | if (conf->type == IEEE80211_IF_TYPE_AP) |
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index 3b27f6aa860c..898cdd7f57d9 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c | |||
@@ -128,6 +128,7 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry, | |||
128 | unsigned int data_length; | 128 | unsigned int data_length; |
129 | unsigned int duration; | 129 | unsigned int duration; |
130 | unsigned int residual; | 130 | unsigned int residual; |
131 | unsigned long irqflags; | ||
131 | 132 | ||
132 | memset(txdesc, 0, sizeof(*txdesc)); | 133 | memset(txdesc, 0, sizeof(*txdesc)); |
133 | 134 | ||
@@ -213,14 +214,14 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry, | |||
213 | * sequence counter given by mac80211. | 214 | * sequence counter given by mac80211. |
214 | */ | 215 | */ |
215 | if (tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { | 216 | if (tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { |
216 | spin_lock(&intf->lock); | 217 | spin_lock_irqsave(&intf->seqlock, irqflags); |
217 | 218 | ||
218 | if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)) | 219 | if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags)) |
219 | intf->seqno += 0x10; | 220 | intf->seqno += 0x10; |
220 | hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); | 221 | hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); |
221 | hdr->seq_ctrl |= cpu_to_le16(intf->seqno); | 222 | hdr->seq_ctrl |= cpu_to_le16(intf->seqno); |
222 | 223 | ||
223 | spin_unlock(&intf->lock); | 224 | spin_unlock_irqrestore(&intf->seqlock, irqflags); |
224 | 225 | ||
225 | __set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags); | 226 | __set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags); |
226 | } | 227 | } |
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c index 933e6cc9359d..8d76bb2e0312 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c | |||
@@ -124,7 +124,7 @@ EXPORT_SYMBOL_GPL(rt2x00usb_vendor_request_buff); | |||
124 | 124 | ||
125 | int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev, | 125 | int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev, |
126 | const u8 request, const u8 requesttype, | 126 | const u8 request, const u8 requesttype, |
127 | const u16 offset, void *buffer, | 127 | const u16 offset, const void *buffer, |
128 | const u16 buffer_length, | 128 | const u16 buffer_length, |
129 | const int timeout) | 129 | const int timeout) |
130 | { | 130 | { |
@@ -134,7 +134,7 @@ int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev, | |||
134 | 134 | ||
135 | mutex_lock(&rt2x00dev->usb_cache_mutex); | 135 | mutex_lock(&rt2x00dev->usb_cache_mutex); |
136 | 136 | ||
137 | tb = buffer; | 137 | tb = (char *)buffer; |
138 | off = offset; | 138 | off = offset; |
139 | len = buffer_length; | 139 | len = buffer_length; |
140 | while (len && !status) { | 140 | while (len && !status) { |
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.h b/drivers/net/wireless/rt2x00/rt2x00usb.h index ee3875f894aa..3b4a67417f95 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.h +++ b/drivers/net/wireless/rt2x00/rt2x00usb.h | |||
@@ -185,7 +185,7 @@ int rt2x00usb_vendor_req_buff_lock(struct rt2x00_dev *rt2x00dev, | |||
185 | */ | 185 | */ |
186 | int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev, | 186 | int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev, |
187 | const u8 request, const u8 requesttype, | 187 | const u8 request, const u8 requesttype, |
188 | const u16 offset, void *buffer, | 188 | const u16 offset, const void *buffer, |
189 | const u16 buffer_length, | 189 | const u16 buffer_length, |
190 | const int timeout); | 190 | const int timeout); |
191 | 191 | ||
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index fbe2a652e014..087e90b328cd 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -1004,6 +1004,11 @@ static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data, | |||
1004 | } | 1004 | } |
1005 | 1005 | ||
1006 | /* | 1006 | /* |
1007 | * Hardware needs another millisecond before it is ready. | ||
1008 | */ | ||
1009 | msleep(1); | ||
1010 | |||
1011 | /* | ||
1007 | * Reset MAC and BBP registers. | 1012 | * Reset MAC and BBP registers. |
1008 | */ | 1013 | */ |
1009 | reg = 0; | 1014 | reg = 0; |
diff --git a/drivers/net/wireless/rtl8187.h b/drivers/net/wireless/rtl8187.h index 1b0d750f6623..5a9515c99960 100644 --- a/drivers/net/wireless/rtl8187.h +++ b/drivers/net/wireless/rtl8187.h | |||
@@ -94,6 +94,10 @@ struct rtl8187_priv { | |||
94 | const struct rtl818x_rf_ops *rf; | 94 | const struct rtl818x_rf_ops *rf; |
95 | struct ieee80211_vif *vif; | 95 | struct ieee80211_vif *vif; |
96 | int mode; | 96 | int mode; |
97 | /* The mutex protects the TX loopback state. | ||
98 | * Any attempt to set channels concurrently locks the device. | ||
99 | */ | ||
100 | struct mutex conf_mutex; | ||
97 | 101 | ||
98 | /* rtl8187 specific */ | 102 | /* rtl8187 specific */ |
99 | struct ieee80211_channel channels[14]; | 103 | struct ieee80211_channel channels[14]; |
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index 177988efd660..57376fb993ed 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c | |||
@@ -31,6 +31,8 @@ MODULE_DESCRIPTION("RTL8187/RTL8187B USB wireless driver"); | |||
31 | MODULE_LICENSE("GPL"); | 31 | MODULE_LICENSE("GPL"); |
32 | 32 | ||
33 | static struct usb_device_id rtl8187_table[] __devinitdata = { | 33 | static struct usb_device_id rtl8187_table[] __devinitdata = { |
34 | /* Asus */ | ||
35 | {USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187}, | ||
34 | /* Realtek */ | 36 | /* Realtek */ |
35 | {USB_DEVICE(0x0bda, 0x8187), .driver_info = DEVICE_RTL8187}, | 37 | {USB_DEVICE(0x0bda, 0x8187), .driver_info = DEVICE_RTL8187}, |
36 | {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, | 38 | {USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, |
@@ -726,6 +728,7 @@ static int rtl8187_start(struct ieee80211_hw *dev) | |||
726 | if (ret) | 728 | if (ret) |
727 | return ret; | 729 | return ret; |
728 | 730 | ||
731 | mutex_lock(&priv->conf_mutex); | ||
729 | if (priv->is_rtl8187b) { | 732 | if (priv->is_rtl8187b) { |
730 | reg = RTL818X_RX_CONF_MGMT | | 733 | reg = RTL818X_RX_CONF_MGMT | |
731 | RTL818X_RX_CONF_DATA | | 734 | RTL818X_RX_CONF_DATA | |
@@ -747,6 +750,7 @@ static int rtl8187_start(struct ieee80211_hw *dev) | |||
747 | (7 << 0 /* long retry limit */) | | 750 | (7 << 0 /* long retry limit */) | |
748 | (7 << 21 /* MAX TX DMA */)); | 751 | (7 << 21 /* MAX TX DMA */)); |
749 | rtl8187_init_urbs(dev); | 752 | rtl8187_init_urbs(dev); |
753 | mutex_unlock(&priv->conf_mutex); | ||
750 | return 0; | 754 | return 0; |
751 | } | 755 | } |
752 | 756 | ||
@@ -790,6 +794,7 @@ static int rtl8187_start(struct ieee80211_hw *dev) | |||
790 | reg |= RTL818X_CMD_TX_ENABLE; | 794 | reg |= RTL818X_CMD_TX_ENABLE; |
791 | reg |= RTL818X_CMD_RX_ENABLE; | 795 | reg |= RTL818X_CMD_RX_ENABLE; |
792 | rtl818x_iowrite8(priv, &priv->map->CMD, reg); | 796 | rtl818x_iowrite8(priv, &priv->map->CMD, reg); |
797 | mutex_unlock(&priv->conf_mutex); | ||
793 | 798 | ||
794 | return 0; | 799 | return 0; |
795 | } | 800 | } |
@@ -801,6 +806,7 @@ static void rtl8187_stop(struct ieee80211_hw *dev) | |||
801 | struct sk_buff *skb; | 806 | struct sk_buff *skb; |
802 | u32 reg; | 807 | u32 reg; |
803 | 808 | ||
809 | mutex_lock(&priv->conf_mutex); | ||
804 | rtl818x_iowrite16(priv, &priv->map->INT_MASK, 0); | 810 | rtl818x_iowrite16(priv, &priv->map->INT_MASK, 0); |
805 | 811 | ||
806 | reg = rtl818x_ioread8(priv, &priv->map->CMD); | 812 | reg = rtl818x_ioread8(priv, &priv->map->CMD); |
@@ -820,7 +826,7 @@ static void rtl8187_stop(struct ieee80211_hw *dev) | |||
820 | usb_kill_urb(info->urb); | 826 | usb_kill_urb(info->urb); |
821 | kfree_skb(skb); | 827 | kfree_skb(skb); |
822 | } | 828 | } |
823 | return; | 829 | mutex_unlock(&priv->conf_mutex); |
824 | } | 830 | } |
825 | 831 | ||
826 | static int rtl8187_add_interface(struct ieee80211_hw *dev, | 832 | static int rtl8187_add_interface(struct ieee80211_hw *dev, |
@@ -840,6 +846,7 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev, | |||
840 | return -EOPNOTSUPP; | 846 | return -EOPNOTSUPP; |
841 | } | 847 | } |
842 | 848 | ||
849 | mutex_lock(&priv->conf_mutex); | ||
843 | priv->vif = conf->vif; | 850 | priv->vif = conf->vif; |
844 | 851 | ||
845 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); | 852 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); |
@@ -848,6 +855,7 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev, | |||
848 | ((u8 *)conf->mac_addr)[i]); | 855 | ((u8 *)conf->mac_addr)[i]); |
849 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); | 856 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); |
850 | 857 | ||
858 | mutex_unlock(&priv->conf_mutex); | ||
851 | return 0; | 859 | return 0; |
852 | } | 860 | } |
853 | 861 | ||
@@ -855,8 +863,10 @@ static void rtl8187_remove_interface(struct ieee80211_hw *dev, | |||
855 | struct ieee80211_if_init_conf *conf) | 863 | struct ieee80211_if_init_conf *conf) |
856 | { | 864 | { |
857 | struct rtl8187_priv *priv = dev->priv; | 865 | struct rtl8187_priv *priv = dev->priv; |
866 | mutex_lock(&priv->conf_mutex); | ||
858 | priv->mode = IEEE80211_IF_TYPE_MNTR; | 867 | priv->mode = IEEE80211_IF_TYPE_MNTR; |
859 | priv->vif = NULL; | 868 | priv->vif = NULL; |
869 | mutex_unlock(&priv->conf_mutex); | ||
860 | } | 870 | } |
861 | 871 | ||
862 | static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | 872 | static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) |
@@ -864,6 +874,7 @@ static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | |||
864 | struct rtl8187_priv *priv = dev->priv; | 874 | struct rtl8187_priv *priv = dev->priv; |
865 | u32 reg; | 875 | u32 reg; |
866 | 876 | ||
877 | mutex_lock(&priv->conf_mutex); | ||
867 | reg = rtl818x_ioread32(priv, &priv->map->TX_CONF); | 878 | reg = rtl818x_ioread32(priv, &priv->map->TX_CONF); |
868 | /* Enable TX loopback on MAC level to avoid TX during channel | 879 | /* Enable TX loopback on MAC level to avoid TX during channel |
869 | * changes, as this has be seen to causes problems and the | 880 | * changes, as this has be seen to causes problems and the |
@@ -896,6 +907,7 @@ static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | |||
896 | rtl818x_iowrite16(priv, &priv->map->ATIMTR_INTERVAL, 100); | 907 | rtl818x_iowrite16(priv, &priv->map->ATIMTR_INTERVAL, 100); |
897 | rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL, 100); | 908 | rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL, 100); |
898 | rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL_TIME, 100); | 909 | rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL_TIME, 100); |
910 | mutex_unlock(&priv->conf_mutex); | ||
899 | return 0; | 911 | return 0; |
900 | } | 912 | } |
901 | 913 | ||
@@ -907,6 +919,7 @@ static int rtl8187_config_interface(struct ieee80211_hw *dev, | |||
907 | int i; | 919 | int i; |
908 | u8 reg; | 920 | u8 reg; |
909 | 921 | ||
922 | mutex_lock(&priv->conf_mutex); | ||
910 | for (i = 0; i < ETH_ALEN; i++) | 923 | for (i = 0; i < ETH_ALEN; i++) |
911 | rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); | 924 | rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); |
912 | 925 | ||
@@ -920,6 +933,7 @@ static int rtl8187_config_interface(struct ieee80211_hw *dev, | |||
920 | rtl818x_iowrite8(priv, &priv->map->MSR, reg); | 933 | rtl818x_iowrite8(priv, &priv->map->MSR, reg); |
921 | } | 934 | } |
922 | 935 | ||
936 | mutex_unlock(&priv->conf_mutex); | ||
923 | return 0; | 937 | return 0; |
924 | } | 938 | } |
925 | 939 | ||
@@ -1187,6 +1201,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1187 | printk(KERN_ERR "rtl8187: Cannot register device\n"); | 1201 | printk(KERN_ERR "rtl8187: Cannot register device\n"); |
1188 | goto err_free_dev; | 1202 | goto err_free_dev; |
1189 | } | 1203 | } |
1204 | mutex_init(&priv->conf_mutex); | ||
1190 | 1205 | ||
1191 | printk(KERN_INFO "%s: hwaddr %s, %s V%d + %s\n", | 1206 | printk(KERN_INFO "%s: hwaddr %s, %s V%d + %s\n", |
1192 | wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr), | 1207 | wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr), |
diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c index 684968558c19..a0ffb8ebfe00 100644 --- a/drivers/pcmcia/at91_cf.c +++ b/drivers/pcmcia/at91_cf.c | |||
@@ -18,13 +18,13 @@ | |||
18 | 18 | ||
19 | #include <pcmcia/ss.h> | 19 | #include <pcmcia/ss.h> |
20 | 20 | ||
21 | #include <asm/hardware.h> | 21 | #include <mach/hardware.h> |
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | #include <asm/sizes.h> | 23 | #include <asm/sizes.h> |
24 | #include <asm/gpio.h> | 24 | #include <asm/gpio.h> |
25 | 25 | ||
26 | #include <asm/arch/board.h> | 26 | #include <mach/board.h> |
27 | #include <asm/arch/at91rm9200_mc.h> | 27 | #include <mach/at91rm9200_mc.h> |
28 | 28 | ||
29 | 29 | ||
30 | /* | 30 | /* |
diff --git a/drivers/pcmcia/omap_cf.c b/drivers/pcmcia/omap_cf.c index 569b746b5731..f3736398900e 100644 --- a/drivers/pcmcia/omap_cf.c +++ b/drivers/pcmcia/omap_cf.c | |||
@@ -19,12 +19,12 @@ | |||
19 | 19 | ||
20 | #include <pcmcia/ss.h> | 20 | #include <pcmcia/ss.h> |
21 | 21 | ||
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/sizes.h> | 24 | #include <asm/sizes.h> |
25 | 25 | ||
26 | #include <asm/arch/mux.h> | 26 | #include <mach/mux.h> |
27 | #include <asm/arch/tc.h> | 27 | #include <mach/tc.h> |
28 | 28 | ||
29 | 29 | ||
30 | /* NOTE: don't expect this to support many I/O cards. The 16xx chips have | 30 | /* NOTE: don't expect this to support many I/O cards. The 16xx chips have |
diff --git a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c index ccfdf1969a7f..1b07af5a2ed3 100644 --- a/drivers/pcmcia/pxa2xx_base.c +++ b/drivers/pcmcia/pxa2xx_base.c | |||
@@ -24,12 +24,12 @@ | |||
24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
25 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
26 | 26 | ||
27 | #include <asm/hardware.h> | 27 | #include <mach/hardware.h> |
28 | #include <asm/io.h> | 28 | #include <asm/io.h> |
29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
30 | #include <asm/system.h> | 30 | #include <asm/system.h> |
31 | #include <asm/arch/pxa-regs.h> | 31 | #include <mach/pxa-regs.h> |
32 | #include <asm/arch/pxa2xx-regs.h> | 32 | #include <mach/pxa2xx-regs.h> |
33 | 33 | ||
34 | #include <pcmcia/cs_types.h> | 34 | #include <pcmcia/cs_types.h> |
35 | #include <pcmcia/ss.h> | 35 | #include <pcmcia/ss.h> |
diff --git a/drivers/pcmcia/pxa2xx_cm_x270.c b/drivers/pcmcia/pxa2xx_cm_x270.c index bb95db7d2b76..bcff5cfed051 100644 --- a/drivers/pcmcia/pxa2xx_cm_x270.c +++ b/drivers/pcmcia/pxa2xx_cm_x270.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
17 | 17 | ||
18 | #include <asm/mach-types.h> | 18 | #include <asm/mach-types.h> |
19 | #include <asm/arch/pxa-regs.h> | 19 | #include <mach/pxa-regs.h> |
20 | 20 | ||
21 | #include "soc_common.h" | 21 | #include "soc_common.h" |
22 | 22 | ||
diff --git a/drivers/pcmcia/pxa2xx_lubbock.c b/drivers/pcmcia/pxa2xx_lubbock.c index 881ec8a8e389..37ec55df086e 100644 --- a/drivers/pcmcia/pxa2xx_lubbock.c +++ b/drivers/pcmcia/pxa2xx_lubbock.c | |||
@@ -21,11 +21,11 @@ | |||
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | 23 | ||
24 | #include <asm/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/hardware/sa1111.h> | 25 | #include <asm/hardware/sa1111.h> |
26 | #include <asm/mach-types.h> | 26 | #include <asm/mach-types.h> |
27 | #include <asm/arch/pxa-regs.h> | 27 | #include <mach/pxa-regs.h> |
28 | #include <asm/arch/lubbock.h> | 28 | #include <mach/lubbock.h> |
29 | 29 | ||
30 | #include "sa1111_generic.h" | 30 | #include "sa1111_generic.h" |
31 | 31 | ||
diff --git a/drivers/pcmcia/pxa2xx_mainstone.c b/drivers/pcmcia/pxa2xx_mainstone.c index 92d1cc33808c..877001db4916 100644 --- a/drivers/pcmcia/pxa2xx_mainstone.c +++ b/drivers/pcmcia/pxa2xx_mainstone.c | |||
@@ -21,12 +21,12 @@ | |||
21 | 21 | ||
22 | #include <pcmcia/ss.h> | 22 | #include <pcmcia/ss.h> |
23 | 23 | ||
24 | #include <asm/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
27 | 27 | ||
28 | #include <asm/arch/pxa-regs.h> | 28 | #include <mach/pxa-regs.h> |
29 | #include <asm/arch/mainstone.h> | 29 | #include <mach/mainstone.h> |
30 | 30 | ||
31 | #include "soc_common.h" | 31 | #include "soc_common.h" |
32 | 32 | ||
diff --git a/drivers/pcmcia/pxa2xx_palmtx.c b/drivers/pcmcia/pxa2xx_palmtx.c index 4abde190c1f5..a8771ffc61e8 100644 --- a/drivers/pcmcia/pxa2xx_palmtx.c +++ b/drivers/pcmcia/pxa2xx_palmtx.c | |||
@@ -16,8 +16,8 @@ | |||
16 | 16 | ||
17 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
18 | 18 | ||
19 | #include <asm/arch/gpio.h> | 19 | #include <mach/gpio.h> |
20 | #include <asm/arch/palmtx.h> | 20 | #include <mach/palmtx.h> |
21 | 21 | ||
22 | #include "soc_common.h" | 22 | #include "soc_common.h" |
23 | 23 | ||
diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c index d71f93d45833..1cd02f5a23a0 100644 --- a/drivers/pcmcia/pxa2xx_sharpsl.c +++ b/drivers/pcmcia/pxa2xx_sharpsl.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | 20 | ||
21 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/irq.h> | 23 | #include <asm/irq.h> |
24 | #include <asm/hardware/scoop.h> | 24 | #include <asm/hardware/scoop.h> |
25 | 25 | ||
diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index d0c1d63d1891..203e579ebbd2 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c | |||
@@ -275,7 +275,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res, | |||
275 | destroy_cis_cache(s); | 275 | destroy_cis_cache(s); |
276 | } | 276 | } |
277 | s->cis_mem.res = NULL; | 277 | s->cis_mem.res = NULL; |
278 | if ((ret != 0) || (count == 0)) | 278 | if ((ret != 0) || (*count == 0)) |
279 | return 0; | 279 | return 0; |
280 | return 1; | 280 | return 1; |
281 | } | 281 | } |
diff --git a/drivers/pcmcia/sa1100_assabet.c b/drivers/pcmcia/sa1100_assabet.c index ce133ce81c10..f424146a2bc9 100644 --- a/drivers/pcmcia/sa1100_assabet.c +++ b/drivers/pcmcia/sa1100_assabet.c | |||
@@ -11,11 +11,11 @@ | |||
11 | #include <linux/device.h> | 11 | #include <linux/device.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | 13 | ||
14 | #include <asm/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include <asm/mach-types.h> | 15 | #include <asm/mach-types.h> |
16 | #include <asm/irq.h> | 16 | #include <asm/irq.h> |
17 | #include <asm/signal.h> | 17 | #include <asm/signal.h> |
18 | #include <asm/arch/assabet.h> | 18 | #include <mach/assabet.h> |
19 | 19 | ||
20 | #include "sa1100_generic.h" | 20 | #include "sa1100_generic.h" |
21 | 21 | ||
diff --git a/drivers/pcmcia/sa1100_badge4.c b/drivers/pcmcia/sa1100_badge4.c index 607c3f326eca..1ca9737ea79e 100644 --- a/drivers/pcmcia/sa1100_badge4.c +++ b/drivers/pcmcia/sa1100_badge4.c | |||
@@ -18,9 +18,9 @@ | |||
18 | #include <linux/errno.h> | 18 | #include <linux/errno.h> |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | 20 | ||
21 | #include <asm/hardware.h> | 21 | #include <mach/hardware.h> |
22 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
23 | #include <asm/arch/badge4.h> | 23 | #include <mach/badge4.h> |
24 | #include <asm/hardware/sa1111.h> | 24 | #include <asm/hardware/sa1111.h> |
25 | 25 | ||
26 | #include "sa1111_generic.h" | 26 | #include "sa1111_generic.h" |
diff --git a/drivers/pcmcia/sa1100_cerf.c b/drivers/pcmcia/sa1100_cerf.c index 7c3951a2675d..63e6bc431a0d 100644 --- a/drivers/pcmcia/sa1100_cerf.c +++ b/drivers/pcmcia/sa1100_cerf.c | |||
@@ -11,10 +11,10 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/delay.h> | 12 | #include <linux/delay.h> |
13 | 13 | ||
14 | #include <asm/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include <asm/mach-types.h> | 15 | #include <asm/mach-types.h> |
16 | #include <asm/irq.h> | 16 | #include <asm/irq.h> |
17 | #include <asm/arch/cerf.h> | 17 | #include <mach/cerf.h> |
18 | #include "sa1100_generic.h" | 18 | #include "sa1100_generic.h" |
19 | 19 | ||
20 | #define CERF_SOCKET 1 | 20 | #define CERF_SOCKET 1 |
diff --git a/drivers/pcmcia/sa1100_h3600.c b/drivers/pcmcia/sa1100_h3600.c index e5491879acd9..6de4e1b41d60 100644 --- a/drivers/pcmcia/sa1100_h3600.c +++ b/drivers/pcmcia/sa1100_h3600.c | |||
@@ -11,10 +11,10 @@ | |||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/delay.h> | 12 | #include <linux/delay.h> |
13 | 13 | ||
14 | #include <asm/hardware.h> | 14 | #include <mach/hardware.h> |
15 | #include <asm/irq.h> | 15 | #include <asm/irq.h> |
16 | #include <asm/mach-types.h> | 16 | #include <asm/mach-types.h> |
17 | #include <asm/arch/h3600.h> | 17 | #include <mach/h3600.h> |
18 | 18 | ||
19 | #include "sa1100_generic.h" | 19 | #include "sa1100_generic.h" |
20 | 20 | ||
diff --git a/drivers/pcmcia/sa1100_jornada720.c b/drivers/pcmcia/sa1100_jornada720.c index 2167e6714d2d..57ca085473d5 100644 --- a/drivers/pcmcia/sa1100_jornada720.c +++ b/drivers/pcmcia/sa1100_jornada720.c | |||
@@ -10,7 +10,7 @@ | |||
10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | 12 | ||
13 | #include <asm/hardware.h> | 13 | #include <mach/hardware.h> |
14 | #include <asm/hardware/sa1111.h> | 14 | #include <asm/hardware/sa1111.h> |
15 | #include <asm/mach-types.h> | 15 | #include <asm/mach-types.h> |
16 | 16 | ||
diff --git a/drivers/pcmcia/sa1100_neponset.c b/drivers/pcmcia/sa1100_neponset.c index 687492fcd5b4..4c41e86ccff9 100644 --- a/drivers/pcmcia/sa1100_neponset.c +++ b/drivers/pcmcia/sa1100_neponset.c | |||
@@ -9,9 +9,9 @@ | |||
9 | #include <linux/errno.h> | 9 | #include <linux/errno.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | 11 | ||
12 | #include <asm/hardware.h> | 12 | #include <mach/hardware.h> |
13 | #include <asm/mach-types.h> | 13 | #include <asm/mach-types.h> |
14 | #include <asm/arch/neponset.h> | 14 | #include <mach/neponset.h> |
15 | #include <asm/hardware/sa1111.h> | 15 | #include <asm/hardware/sa1111.h> |
16 | 16 | ||
17 | #include "sa1111_generic.h" | 17 | #include "sa1111_generic.h" |
diff --git a/drivers/pcmcia/sa1100_shannon.c b/drivers/pcmcia/sa1100_shannon.c index 494912fccc0d..46d8c1977c2a 100644 --- a/drivers/pcmcia/sa1100_shannon.c +++ b/drivers/pcmcia/sa1100_shannon.c | |||
@@ -9,9 +9,9 @@ | |||
9 | #include <linux/device.h> | 9 | #include <linux/device.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | 11 | ||
12 | #include <asm/hardware.h> | 12 | #include <mach/hardware.h> |
13 | #include <asm/mach-types.h> | 13 | #include <asm/mach-types.h> |
14 | #include <asm/arch/shannon.h> | 14 | #include <mach/shannon.h> |
15 | #include <asm/irq.h> | 15 | #include <asm/irq.h> |
16 | #include "sa1100_generic.h" | 16 | #include "sa1100_generic.h" |
17 | 17 | ||
diff --git a/drivers/pcmcia/sa1100_simpad.c b/drivers/pcmcia/sa1100_simpad.c index 42567de894b9..33a08ae09fdf 100644 --- a/drivers/pcmcia/sa1100_simpad.c +++ b/drivers/pcmcia/sa1100_simpad.c | |||
@@ -9,10 +9,10 @@ | |||
9 | #include <linux/device.h> | 9 | #include <linux/device.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | 11 | ||
12 | #include <asm/hardware.h> | 12 | #include <mach/hardware.h> |
13 | #include <asm/mach-types.h> | 13 | #include <asm/mach-types.h> |
14 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
15 | #include <asm/arch/simpad.h> | 15 | #include <mach/simpad.h> |
16 | #include "sa1100_generic.h" | 16 | #include "sa1100_generic.h" |
17 | 17 | ||
18 | extern long get_cs3_shadow(void); | 18 | extern long get_cs3_shadow(void); |
diff --git a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c index 658cddfbcf29..6924d0ea8d32 100644 --- a/drivers/pcmcia/sa1111_generic.c +++ b/drivers/pcmcia/sa1111_generic.c | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #include <pcmcia/ss.h> | 15 | #include <pcmcia/ss.h> |
16 | 16 | ||
17 | #include <asm/hardware.h> | 17 | #include <mach/hardware.h> |
18 | #include <asm/hardware/sa1111.h> | 18 | #include <asm/hardware/sa1111.h> |
19 | #include <asm/io.h> | 19 | #include <asm/io.h> |
20 | #include <asm/irq.h> | 20 | #include <asm/irq.h> |
diff --git a/drivers/pcmcia/sa11xx_base.c b/drivers/pcmcia/sa11xx_base.c index 31a7abc55b23..7cb1273202cc 100644 --- a/drivers/pcmcia/sa11xx_base.c +++ b/drivers/pcmcia/sa11xx_base.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <linux/kernel.h> | 37 | #include <linux/kernel.h> |
38 | #include <linux/spinlock.h> | 38 | #include <linux/spinlock.h> |
39 | 39 | ||
40 | #include <asm/hardware.h> | 40 | #include <mach/hardware.h> |
41 | #include <asm/io.h> | 41 | #include <asm/io.h> |
42 | #include <asm/irq.h> | 42 | #include <asm/irq.h> |
43 | #include <asm/system.h> | 43 | #include <asm/system.h> |
diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c index 8c21446996f2..c48f3f69bdaf 100644 --- a/drivers/pcmcia/soc_common.c +++ b/drivers/pcmcia/soc_common.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #include <linux/spinlock.h> | 43 | #include <linux/spinlock.h> |
44 | #include <linux/cpufreq.h> | 44 | #include <linux/cpufreq.h> |
45 | 45 | ||
46 | #include <asm/hardware.h> | 46 | #include <mach/hardware.h> |
47 | #include <asm/io.h> | 47 | #include <asm/io.h> |
48 | #include <asm/system.h> | 48 | #include <asm/system.h> |
49 | 49 | ||
@@ -51,7 +51,7 @@ | |||
51 | 51 | ||
52 | /* FIXME: platform dependent resource declaration has to move out of this file */ | 52 | /* FIXME: platform dependent resource declaration has to move out of this file */ |
53 | #ifdef CONFIG_ARCH_PXA | 53 | #ifdef CONFIG_ARCH_PXA |
54 | #include <asm/arch/pxa-regs.h> | 54 | #include <mach/pxa-regs.h> |
55 | #endif | 55 | #endif |
56 | 56 | ||
57 | #ifdef DEBUG | 57 | #ifdef DEBUG |
diff --git a/drivers/power/palmtx_battery.c b/drivers/power/palmtx_battery.c index 244bb273a637..7035bfa41c62 100644 --- a/drivers/power/palmtx_battery.c +++ b/drivers/power/palmtx_battery.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
23 | 23 | ||
24 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
25 | #include <asm/arch/palmtx.h> | 25 | #include <mach/palmtx.h> |
26 | 26 | ||
27 | static DEFINE_MUTEX(bat_lock); | 27 | static DEFINE_MUTEX(bat_lock); |
28 | static struct work_struct bat_work; | 28 | static struct work_struct bat_work; |
diff --git a/drivers/power/tosa_battery.c b/drivers/power/tosa_battery.c index bf664fbd6610..2eab35aab311 100644 --- a/drivers/power/tosa_battery.c +++ b/drivers/power/tosa_battery.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/gpio.h> | 19 | #include <linux/gpio.h> |
20 | 20 | ||
21 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
22 | #include <asm/arch/tosa.h> | 22 | #include <mach/tosa.h> |
23 | 23 | ||
24 | static DEFINE_MUTEX(bat_lock); /* protects gpio pins */ | 24 | static DEFINE_MUTEX(bat_lock); /* protects gpio pins */ |
25 | static struct work_struct bat_work; | 25 | static struct work_struct bat_work; |
diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c index cd32d05db773..4e888cc8be5b 100644 --- a/drivers/rtc/rtc-at91rm9200.c +++ b/drivers/rtc/rtc-at91rm9200.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/completion.h> | 29 | #include <linux/completion.h> |
30 | 30 | ||
31 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
32 | #include <asm/arch/at91_rtc.h> | 32 | #include <mach/at91_rtc.h> |
33 | 33 | ||
34 | 34 | ||
35 | #define AT91_RTC_FREQ 1 | 35 | #define AT91_RTC_FREQ 1 |
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c index f0246ef413a4..2133f37906f2 100644 --- a/drivers/rtc/rtc-at91sam9.c +++ b/drivers/rtc/rtc-at91sam9.c | |||
@@ -19,8 +19,8 @@ | |||
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/ioctl.h> | 20 | #include <linux/ioctl.h> |
21 | 21 | ||
22 | #include <asm/arch/board.h> | 22 | #include <mach/board.h> |
23 | #include <asm/arch/at91_rtt.h> | 23 | #include <mach/at91_rtt.h> |
24 | 24 | ||
25 | 25 | ||
26 | /* | 26 | /* |
diff --git a/drivers/rtc/rtc-bfin.c b/drivers/rtc/rtc-bfin.c index 8624f55d0560..a1af4c27939b 100644 --- a/drivers/rtc/rtc-bfin.c +++ b/drivers/rtc/rtc-bfin.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * Blackfin On-Chip Real Time Clock Driver | 2 | * Blackfin On-Chip Real Time Clock Driver |
3 | * Supports BF52[257]/BF53[123]/BF53[467]/BF54[24789] | 3 | * Supports BF52[257]/BF53[123]/BF53[467]/BF54[24789] |
4 | * | 4 | * |
5 | * Copyright 2004-2007 Analog Devices Inc. | 5 | * Copyright 2004-2008 Analog Devices Inc. |
6 | * | 6 | * |
7 | * Enter bugs at http://blackfin.uclinux.org/ | 7 | * Enter bugs at http://blackfin.uclinux.org/ |
8 | * | 8 | * |
@@ -32,6 +32,15 @@ | |||
32 | * writes to clear status registers complete immediately. | 32 | * writes to clear status registers complete immediately. |
33 | */ | 33 | */ |
34 | 34 | ||
35 | /* It may seem odd that there is no SWCNT code in here (which would be exposed | ||
36 | * via the periodic interrupt event, or PIE). Since the Blackfin RTC peripheral | ||
37 | * runs in units of seconds (N/HZ) but the Linux framework runs in units of HZ | ||
38 | * (2^N HZ), there is no point in keeping code that only provides 1 HZ PIEs. | ||
39 | * The same exact behavior can be accomplished by using the update interrupt | ||
40 | * event (UIE). Maybe down the line the RTC peripheral will suck less in which | ||
41 | * case we can re-introduce PIE support. | ||
42 | */ | ||
43 | |||
35 | #include <linux/bcd.h> | 44 | #include <linux/bcd.h> |
36 | #include <linux/completion.h> | 45 | #include <linux/completion.h> |
37 | #include <linux/delay.h> | 46 | #include <linux/delay.h> |
@@ -144,14 +153,13 @@ static void bfin_rtc_sync_pending(struct device *dev) | |||
144 | * Initialize the RTC. Enable pre-scaler to scale RTC clock | 153 | * Initialize the RTC. Enable pre-scaler to scale RTC clock |
145 | * to 1Hz and clear interrupt/status registers. | 154 | * to 1Hz and clear interrupt/status registers. |
146 | */ | 155 | */ |
147 | static void bfin_rtc_reset(struct device *dev) | 156 | static void bfin_rtc_reset(struct device *dev, u16 rtc_ictl) |
148 | { | 157 | { |
149 | struct bfin_rtc *rtc = dev_get_drvdata(dev); | 158 | struct bfin_rtc *rtc = dev_get_drvdata(dev); |
150 | dev_dbg_stamp(dev); | 159 | dev_dbg_stamp(dev); |
151 | bfin_rtc_sync_pending(dev); | 160 | bfin_rtc_sync_pending(dev); |
152 | bfin_write_RTC_PREN(0x1); | 161 | bfin_write_RTC_PREN(0x1); |
153 | bfin_write_RTC_ICTL(RTC_ISTAT_WRITE_COMPLETE); | 162 | bfin_write_RTC_ICTL(rtc_ictl); |
154 | bfin_write_RTC_SWCNT(0); | ||
155 | bfin_write_RTC_ALARM(0); | 163 | bfin_write_RTC_ALARM(0); |
156 | bfin_write_RTC_ISTAT(0xFFFF); | 164 | bfin_write_RTC_ISTAT(0xFFFF); |
157 | rtc->rtc_wrote_regs = 0; | 165 | rtc->rtc_wrote_regs = 0; |
@@ -194,14 +202,6 @@ static irqreturn_t bfin_rtc_interrupt(int irq, void *dev_id) | |||
194 | } | 202 | } |
195 | } | 203 | } |
196 | 204 | ||
197 | if (rtc_ictl & RTC_ISTAT_STOPWATCH) { | ||
198 | if (rtc_istat & RTC_ISTAT_STOPWATCH) { | ||
199 | bfin_write_RTC_ISTAT(RTC_ISTAT_STOPWATCH); | ||
200 | events |= RTC_PF | RTC_IRQF; | ||
201 | bfin_write_RTC_SWCNT(rtc->rtc_dev->irq_freq); | ||
202 | } | ||
203 | } | ||
204 | |||
205 | if (rtc_ictl & RTC_ISTAT_SEC) { | 205 | if (rtc_ictl & RTC_ISTAT_SEC) { |
206 | if (rtc_istat & RTC_ISTAT_SEC) { | 206 | if (rtc_istat & RTC_ISTAT_SEC) { |
207 | bfin_write_RTC_ISTAT(RTC_ISTAT_SEC); | 207 | bfin_write_RTC_ISTAT(RTC_ISTAT_SEC); |
@@ -226,7 +226,7 @@ static int bfin_rtc_open(struct device *dev) | |||
226 | 226 | ||
227 | ret = request_irq(IRQ_RTC, bfin_rtc_interrupt, IRQF_SHARED, to_platform_device(dev)->name, dev); | 227 | ret = request_irq(IRQ_RTC, bfin_rtc_interrupt, IRQF_SHARED, to_platform_device(dev)->name, dev); |
228 | if (!ret) | 228 | if (!ret) |
229 | bfin_rtc_reset(dev); | 229 | bfin_rtc_reset(dev, RTC_ISTAT_WRITE_COMPLETE); |
230 | 230 | ||
231 | return ret; | 231 | return ret; |
232 | } | 232 | } |
@@ -234,16 +234,16 @@ static int bfin_rtc_open(struct device *dev) | |||
234 | static void bfin_rtc_release(struct device *dev) | 234 | static void bfin_rtc_release(struct device *dev) |
235 | { | 235 | { |
236 | dev_dbg_stamp(dev); | 236 | dev_dbg_stamp(dev); |
237 | bfin_rtc_reset(dev); | 237 | bfin_rtc_reset(dev, 0); |
238 | free_irq(IRQ_RTC, dev); | 238 | free_irq(IRQ_RTC, dev); |
239 | } | 239 | } |
240 | 240 | ||
241 | static void bfin_rtc_int_set(struct bfin_rtc *rtc, u16 rtc_int) | 241 | static void bfin_rtc_int_set(u16 rtc_int) |
242 | { | 242 | { |
243 | bfin_write_RTC_ISTAT(rtc_int); | 243 | bfin_write_RTC_ISTAT(rtc_int); |
244 | bfin_write_RTC_ICTL(bfin_read_RTC_ICTL() | rtc_int); | 244 | bfin_write_RTC_ICTL(bfin_read_RTC_ICTL() | rtc_int); |
245 | } | 245 | } |
246 | static void bfin_rtc_int_clear(struct bfin_rtc *rtc, u16 rtc_int) | 246 | static void bfin_rtc_int_clear(u16 rtc_int) |
247 | { | 247 | { |
248 | bfin_write_RTC_ICTL(bfin_read_RTC_ICTL() & rtc_int); | 248 | bfin_write_RTC_ICTL(bfin_read_RTC_ICTL() & rtc_int); |
249 | } | 249 | } |
@@ -252,7 +252,7 @@ static void bfin_rtc_int_set_alarm(struct bfin_rtc *rtc) | |||
252 | /* Blackfin has different bits for whether the alarm is | 252 | /* Blackfin has different bits for whether the alarm is |
253 | * more than 24 hours away. | 253 | * more than 24 hours away. |
254 | */ | 254 | */ |
255 | bfin_rtc_int_set(rtc, (rtc->rtc_alarm.tm_yday == -1 ? RTC_ISTAT_ALARM : RTC_ISTAT_ALARM_DAY)); | 255 | bfin_rtc_int_set(rtc->rtc_alarm.tm_yday == -1 ? RTC_ISTAT_ALARM : RTC_ISTAT_ALARM_DAY); |
256 | } | 256 | } |
257 | static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | 257 | static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) |
258 | { | 258 | { |
@@ -264,23 +264,13 @@ static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long ar | |||
264 | bfin_rtc_sync_pending(dev); | 264 | bfin_rtc_sync_pending(dev); |
265 | 265 | ||
266 | switch (cmd) { | 266 | switch (cmd) { |
267 | case RTC_PIE_ON: | ||
268 | dev_dbg_stamp(dev); | ||
269 | bfin_rtc_int_set(rtc, RTC_ISTAT_STOPWATCH); | ||
270 | bfin_write_RTC_SWCNT(rtc->rtc_dev->irq_freq); | ||
271 | break; | ||
272 | case RTC_PIE_OFF: | ||
273 | dev_dbg_stamp(dev); | ||
274 | bfin_rtc_int_clear(rtc, ~RTC_ISTAT_STOPWATCH); | ||
275 | break; | ||
276 | |||
277 | case RTC_UIE_ON: | 267 | case RTC_UIE_ON: |
278 | dev_dbg_stamp(dev); | 268 | dev_dbg_stamp(dev); |
279 | bfin_rtc_int_set(rtc, RTC_ISTAT_SEC); | 269 | bfin_rtc_int_set(RTC_ISTAT_SEC); |
280 | break; | 270 | break; |
281 | case RTC_UIE_OFF: | 271 | case RTC_UIE_OFF: |
282 | dev_dbg_stamp(dev); | 272 | dev_dbg_stamp(dev); |
283 | bfin_rtc_int_clear(rtc, ~RTC_ISTAT_SEC); | 273 | bfin_rtc_int_clear(~RTC_ISTAT_SEC); |
284 | break; | 274 | break; |
285 | 275 | ||
286 | case RTC_AIE_ON: | 276 | case RTC_AIE_ON: |
@@ -289,7 +279,7 @@ static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long ar | |||
289 | break; | 279 | break; |
290 | case RTC_AIE_OFF: | 280 | case RTC_AIE_OFF: |
291 | dev_dbg_stamp(dev); | 281 | dev_dbg_stamp(dev); |
292 | bfin_rtc_int_clear(rtc, ~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY)); | 282 | bfin_rtc_int_clear(~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY)); |
293 | break; | 283 | break; |
294 | 284 | ||
295 | default: | 285 | default: |
@@ -371,30 +361,14 @@ static int bfin_rtc_proc(struct device *dev, struct seq_file *seq) | |||
371 | seq_printf(seq, | 361 | seq_printf(seq, |
372 | "alarm_IRQ\t: %s\n" | 362 | "alarm_IRQ\t: %s\n" |
373 | "wkalarm_IRQ\t: %s\n" | 363 | "wkalarm_IRQ\t: %s\n" |
374 | "seconds_IRQ\t: %s\n" | 364 | "seconds_IRQ\t: %s\n", |
375 | "periodic_IRQ\t: %s\n", | ||
376 | yesno(ictl & RTC_ISTAT_ALARM), | 365 | yesno(ictl & RTC_ISTAT_ALARM), |
377 | yesno(ictl & RTC_ISTAT_ALARM_DAY), | 366 | yesno(ictl & RTC_ISTAT_ALARM_DAY), |
378 | yesno(ictl & RTC_ISTAT_SEC), | 367 | yesno(ictl & RTC_ISTAT_SEC)); |
379 | yesno(ictl & RTC_ISTAT_STOPWATCH)); | ||
380 | return 0; | 368 | return 0; |
381 | #undef yesno | 369 | #undef yesno |
382 | } | 370 | } |
383 | 371 | ||
384 | /** | ||
385 | * bfin_irq_set_freq - make sure hardware supports requested freq | ||
386 | * @dev: pointer to RTC device structure | ||
387 | * @freq: requested frequency rate | ||
388 | * | ||
389 | * The Blackfin RTC can only generate periodic events at 1 per | ||
390 | * second (1 Hz), so reject any attempt at changing it. | ||
391 | */ | ||
392 | static int bfin_irq_set_freq(struct device *dev, int freq) | ||
393 | { | ||
394 | dev_dbg_stamp(dev); | ||
395 | return -ENOTTY; | ||
396 | } | ||
397 | |||
398 | static struct rtc_class_ops bfin_rtc_ops = { | 372 | static struct rtc_class_ops bfin_rtc_ops = { |
399 | .open = bfin_rtc_open, | 373 | .open = bfin_rtc_open, |
400 | .release = bfin_rtc_release, | 374 | .release = bfin_rtc_release, |
@@ -404,7 +378,6 @@ static struct rtc_class_ops bfin_rtc_ops = { | |||
404 | .read_alarm = bfin_rtc_read_alarm, | 378 | .read_alarm = bfin_rtc_read_alarm, |
405 | .set_alarm = bfin_rtc_set_alarm, | 379 | .set_alarm = bfin_rtc_set_alarm, |
406 | .proc = bfin_rtc_proc, | 380 | .proc = bfin_rtc_proc, |
407 | .irq_set_freq = bfin_irq_set_freq, | ||
408 | }; | 381 | }; |
409 | 382 | ||
410 | static int __devinit bfin_rtc_probe(struct platform_device *pdev) | 383 | static int __devinit bfin_rtc_probe(struct platform_device *pdev) |
@@ -423,10 +396,14 @@ static int __devinit bfin_rtc_probe(struct platform_device *pdev) | |||
423 | ret = PTR_ERR(rtc->rtc_dev); | 396 | ret = PTR_ERR(rtc->rtc_dev); |
424 | goto err; | 397 | goto err; |
425 | } | 398 | } |
426 | rtc->rtc_dev->irq_freq = 1; | 399 | |
400 | /* see comment at top of file about stopwatch/PIE */ | ||
401 | bfin_write_RTC_SWCNT(0); | ||
427 | 402 | ||
428 | platform_set_drvdata(pdev, rtc); | 403 | platform_set_drvdata(pdev, rtc); |
429 | 404 | ||
405 | device_init_wakeup(&pdev->dev, 1); | ||
406 | |||
430 | return 0; | 407 | return 0; |
431 | 408 | ||
432 | err: | 409 | err: |
@@ -445,6 +422,32 @@ static int __devexit bfin_rtc_remove(struct platform_device *pdev) | |||
445 | return 0; | 422 | return 0; |
446 | } | 423 | } |
447 | 424 | ||
425 | #ifdef CONFIG_PM | ||
426 | static int bfin_rtc_suspend(struct platform_device *pdev, pm_message_t state) | ||
427 | { | ||
428 | if (device_may_wakeup(&pdev->dev)) { | ||
429 | enable_irq_wake(IRQ_RTC); | ||
430 | bfin_rtc_sync_pending(&pdev->dev); | ||
431 | } else | ||
432 | bfin_rtc_int_clear(-1); | ||
433 | |||
434 | return 0; | ||
435 | } | ||
436 | |||
437 | static int bfin_rtc_resume(struct platform_device *pdev) | ||
438 | { | ||
439 | if (device_may_wakeup(&pdev->dev)) | ||
440 | disable_irq_wake(IRQ_RTC); | ||
441 | else | ||
442 | bfin_write_RTC_ISTAT(-1); | ||
443 | |||
444 | return 0; | ||
445 | } | ||
446 | #else | ||
447 | # define bfin_rtc_suspend NULL | ||
448 | # define bfin_rtc_resume NULL | ||
449 | #endif | ||
450 | |||
448 | static struct platform_driver bfin_rtc_driver = { | 451 | static struct platform_driver bfin_rtc_driver = { |
449 | .driver = { | 452 | .driver = { |
450 | .name = "rtc-bfin", | 453 | .name = "rtc-bfin", |
@@ -452,6 +455,8 @@ static struct platform_driver bfin_rtc_driver = { | |||
452 | }, | 455 | }, |
453 | .probe = bfin_rtc_probe, | 456 | .probe = bfin_rtc_probe, |
454 | .remove = __devexit_p(bfin_rtc_remove), | 457 | .remove = __devexit_p(bfin_rtc_remove), |
458 | .suspend = bfin_rtc_suspend, | ||
459 | .resume = bfin_rtc_resume, | ||
455 | }; | 460 | }; |
456 | 461 | ||
457 | static int __init bfin_rtc_init(void) | 462 | static int __init bfin_rtc_init(void) |
diff --git a/drivers/rtc/rtc-ep93xx.c b/drivers/rtc/rtc-ep93xx.c index 1e99325270df..36e4ac0bd69c 100644 --- a/drivers/rtc/rtc-ep93xx.c +++ b/drivers/rtc/rtc-ep93xx.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/rtc.h> | 13 | #include <linux/rtc.h> |
14 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
15 | #include <asm/hardware.h> | 15 | #include <mach/hardware.h> |
16 | 16 | ||
17 | #define EP93XX_RTC_REG(x) (EP93XX_RTC_BASE + (x)) | 17 | #define EP93XX_RTC_REG(x) (EP93XX_RTC_BASE + (x)) |
18 | #define EP93XX_RTC_DATA EP93XX_RTC_REG(0x0000) | 18 | #define EP93XX_RTC_DATA EP93XX_RTC_REG(0x0000) |
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index 54b1ebb01502..e7d19b6c265a 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/log2.h> | 23 | #include <linux/log2.h> |
24 | 24 | ||
25 | #include <asm/hardware.h> | 25 | #include <mach/hardware.h> |
26 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
27 | #include <asm/io.h> | 27 | #include <asm/io.h> |
28 | #include <asm/irq.h> | 28 | #include <asm/irq.h> |
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index f47294c60148..66a9bb85bbe8 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
@@ -31,11 +31,11 @@ | |||
31 | #include <linux/pm.h> | 31 | #include <linux/pm.h> |
32 | #include <linux/bitops.h> | 32 | #include <linux/bitops.h> |
33 | 33 | ||
34 | #include <asm/hardware.h> | 34 | #include <mach/hardware.h> |
35 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
36 | 36 | ||
37 | #ifdef CONFIG_ARCH_PXA | 37 | #ifdef CONFIG_ARCH_PXA |
38 | #include <asm/arch/pxa-regs.h> | 38 | #include <mach/pxa-regs.h> |
39 | #endif | 39 | #endif |
40 | 40 | ||
41 | #define TIMER_FREQ CLOCK_TICK_RATE | 41 | #define TIMER_FREQ CLOCK_TICK_RATE |
diff --git a/drivers/scsi/arm/acornscsi-io.S b/drivers/scsi/arm/acornscsi-io.S index 5cebe3105260..22171b2110a8 100644 --- a/drivers/scsi/arm/acornscsi-io.S +++ b/drivers/scsi/arm/acornscsi-io.S | |||
@@ -8,7 +8,7 @@ | |||
8 | #include <linux/linkage.h> | 8 | #include <linux/linkage.h> |
9 | 9 | ||
10 | #include <asm/assembler.h> | 10 | #include <asm/assembler.h> |
11 | #include <asm/hardware.h> | 11 | #include <mach/hardware.h> |
12 | 12 | ||
13 | #if defined(__APCS_32__) | 13 | #if defined(__APCS_32__) |
14 | #define LOADREGS(t,r,l...) ldm##t r, l | 14 | #define LOADREGS(t,r,l...) ldm##t r, l |
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c index da876d3924be..a48e4990fe12 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <linux/delay.h> | 25 | #include <linux/delay.h> |
26 | #include <linux/timer.h> | 26 | #include <linux/timer.h> |
27 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
28 | #include <linux/hdreg.h> | ||
29 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
30 | #include <asm/io.h> | 29 | #include <asm/io.h> |
31 | #include <asm/div64.h> | 30 | #include <asm/div64.h> |
@@ -1249,6 +1248,13 @@ static struct pci_device_id hptiop_id_table[] = { | |||
1249 | { PCI_VDEVICE(TTI, 0x3522), (kernel_ulong_t)&hptiop_itl_ops }, | 1248 | { PCI_VDEVICE(TTI, 0x3522), (kernel_ulong_t)&hptiop_itl_ops }, |
1250 | { PCI_VDEVICE(TTI, 0x3410), (kernel_ulong_t)&hptiop_itl_ops }, | 1249 | { PCI_VDEVICE(TTI, 0x3410), (kernel_ulong_t)&hptiop_itl_ops }, |
1251 | { PCI_VDEVICE(TTI, 0x3540), (kernel_ulong_t)&hptiop_itl_ops }, | 1250 | { PCI_VDEVICE(TTI, 0x3540), (kernel_ulong_t)&hptiop_itl_ops }, |
1251 | { PCI_VDEVICE(TTI, 0x3530), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1252 | { PCI_VDEVICE(TTI, 0x3560), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1253 | { PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1254 | { PCI_VDEVICE(TTI, 0x4210), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1255 | { PCI_VDEVICE(TTI, 0x4211), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1256 | { PCI_VDEVICE(TTI, 0x4310), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1257 | { PCI_VDEVICE(TTI, 0x4311), (kernel_ulong_t)&hptiop_itl_ops }, | ||
1252 | { PCI_VDEVICE(TTI, 0x3120), (kernel_ulong_t)&hptiop_mv_ops }, | 1258 | { PCI_VDEVICE(TTI, 0x3120), (kernel_ulong_t)&hptiop_mv_ops }, |
1253 | { PCI_VDEVICE(TTI, 0x3122), (kernel_ulong_t)&hptiop_mv_ops }, | 1259 | { PCI_VDEVICE(TTI, 0x3122), (kernel_ulong_t)&hptiop_mv_ops }, |
1254 | { PCI_VDEVICE(TTI, 0x3020), (kernel_ulong_t)&hptiop_mv_ops }, | 1260 | { PCI_VDEVICE(TTI, 0x3020), (kernel_ulong_t)&hptiop_mv_ops }, |
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c index b40a673985aa..461331d3dc45 100644 --- a/drivers/scsi/ide-scsi.c +++ b/drivers/scsi/ide-scsi.c | |||
@@ -102,11 +102,10 @@ static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk) | |||
102 | mutex_lock(&idescsi_ref_mutex); | 102 | mutex_lock(&idescsi_ref_mutex); |
103 | scsi = ide_scsi_g(disk); | 103 | scsi = ide_scsi_g(disk); |
104 | if (scsi) { | 104 | if (scsi) { |
105 | scsi_host_get(scsi->host); | 105 | if (ide_device_get(scsi->drive)) |
106 | if (ide_device_get(scsi->drive)) { | ||
107 | scsi_host_put(scsi->host); | ||
108 | scsi = NULL; | 106 | scsi = NULL; |
109 | } | 107 | else |
108 | scsi_host_get(scsi->host); | ||
110 | } | 109 | } |
111 | mutex_unlock(&idescsi_ref_mutex); | 110 | mutex_unlock(&idescsi_ref_mutex); |
112 | return scsi; | 111 | return scsi; |
@@ -114,9 +113,11 @@ static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk) | |||
114 | 113 | ||
115 | static void ide_scsi_put(struct ide_scsi_obj *scsi) | 114 | static void ide_scsi_put(struct ide_scsi_obj *scsi) |
116 | { | 115 | { |
116 | ide_drive_t *drive = scsi->drive; | ||
117 | |||
117 | mutex_lock(&idescsi_ref_mutex); | 118 | mutex_lock(&idescsi_ref_mutex); |
118 | ide_device_put(scsi->drive); | ||
119 | scsi_host_put(scsi->host); | 119 | scsi_host_put(scsi->host); |
120 | ide_device_put(drive); | ||
120 | mutex_unlock(&idescsi_ref_mutex); | 121 | mutex_unlock(&idescsi_ref_mutex); |
121 | } | 122 | } |
122 | 123 | ||
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c index 75a64a6cae8c..b29360ed0bdc 100644 --- a/drivers/scsi/scsi_transport_spi.c +++ b/drivers/scsi/scsi_transport_spi.c | |||
@@ -366,12 +366,14 @@ spi_transport_rd_attr(rti, "%d\n"); | |||
366 | spi_transport_rd_attr(pcomp_en, "%d\n"); | 366 | spi_transport_rd_attr(pcomp_en, "%d\n"); |
367 | spi_transport_rd_attr(hold_mcs, "%d\n"); | 367 | spi_transport_rd_attr(hold_mcs, "%d\n"); |
368 | 368 | ||
369 | /* we only care about the first child device so we return 1 */ | 369 | /* we only care about the first child device that's a real SCSI device |
370 | * so we return 1 to terminate the iteration when we find it */ | ||
370 | static int child_iter(struct device *dev, void *data) | 371 | static int child_iter(struct device *dev, void *data) |
371 | { | 372 | { |
372 | struct scsi_device *sdev = to_scsi_device(dev); | 373 | if (!scsi_is_sdev_device(dev)) |
374 | return 0; | ||
373 | 375 | ||
374 | spi_dv_device(sdev); | 376 | spi_dv_device(to_scsi_device(dev)); |
375 | return 1; | 377 | return 1; |
376 | } | 378 | } |
377 | 379 | ||
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index 0fe031f003e7..1bcf3c33d7ff 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c | |||
@@ -345,14 +345,14 @@ static int ses_enclosure_find_by_addr(struct enclosure_device *edev, | |||
345 | return 0; | 345 | return 0; |
346 | } | 346 | } |
347 | 347 | ||
348 | #define VPD_INQUIRY_SIZE 512 | 348 | #define VPD_INQUIRY_SIZE 36 |
349 | 349 | ||
350 | static void ses_match_to_enclosure(struct enclosure_device *edev, | 350 | static void ses_match_to_enclosure(struct enclosure_device *edev, |
351 | struct scsi_device *sdev) | 351 | struct scsi_device *sdev) |
352 | { | 352 | { |
353 | unsigned char *buf = kmalloc(VPD_INQUIRY_SIZE, GFP_KERNEL); | 353 | unsigned char *buf = kmalloc(VPD_INQUIRY_SIZE, GFP_KERNEL); |
354 | unsigned char *desc; | 354 | unsigned char *desc; |
355 | int len; | 355 | u16 vpd_len; |
356 | struct efd efd = { | 356 | struct efd efd = { |
357 | .addr = 0, | 357 | .addr = 0, |
358 | }; | 358 | }; |
@@ -372,9 +372,19 @@ static void ses_match_to_enclosure(struct enclosure_device *edev, | |||
372 | VPD_INQUIRY_SIZE, NULL, SES_TIMEOUT, SES_RETRIES)) | 372 | VPD_INQUIRY_SIZE, NULL, SES_TIMEOUT, SES_RETRIES)) |
373 | goto free; | 373 | goto free; |
374 | 374 | ||
375 | len = (buf[2] << 8) + buf[3]; | 375 | vpd_len = (buf[2] << 8) + buf[3]; |
376 | kfree(buf); | ||
377 | buf = kmalloc(vpd_len, GFP_KERNEL); | ||
378 | if (!buf) | ||
379 | return; | ||
380 | cmd[3] = vpd_len >> 8; | ||
381 | cmd[4] = vpd_len & 0xff; | ||
382 | if (scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, | ||
383 | vpd_len, NULL, SES_TIMEOUT, SES_RETRIES)) | ||
384 | goto free; | ||
385 | |||
376 | desc = buf + 4; | 386 | desc = buf + 4; |
377 | while (desc < buf + len) { | 387 | while (desc < buf + vpd_len) { |
378 | enum scsi_protocol proto = desc[0] >> 4; | 388 | enum scsi_protocol proto = desc[0] >> 4; |
379 | u8 code_set = desc[0] & 0x0f; | 389 | u8 code_set = desc[0] & 0x0f; |
380 | u8 piv = desc[1] & 0x80; | 390 | u8 piv = desc[1] & 0x80; |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index d3b8ebb83776..3d36270a8b4d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
@@ -1747,7 +1747,7 @@ st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages, | |||
1747 | */ | 1747 | */ |
1748 | flush_dcache_page(pages[i]); | 1748 | flush_dcache_page(pages[i]); |
1749 | /* ?? Is locking needed? I don't think so */ | 1749 | /* ?? Is locking needed? I don't think so */ |
1750 | /* if (TestSetPageLocked(pages[i])) | 1750 | /* if (!trylock_page(pages[i])) |
1751 | goto out_unlock; */ | 1751 | goto out_unlock; */ |
1752 | } | 1752 | } |
1753 | 1753 | ||
diff --git a/drivers/serial/21285.c b/drivers/serial/21285.c index 6558a4037806..f31c6698419c 100644 --- a/drivers/serial/21285.c +++ b/drivers/serial/21285.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <asm/irq.h> | 19 | #include <asm/irq.h> |
20 | #include <asm/mach-types.h> | 20 | #include <asm/mach-types.h> |
21 | #include <asm/hardware/dec21285.h> | 21 | #include <asm/hardware/dec21285.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | 23 | ||
24 | #define BAUD_BASE (mem_fclk_21285/64) | 24 | #define BAUD_BASE (mem_fclk_21285/64) |
25 | 25 | ||
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index 1fee12c1f4f8..3a6da80b081c 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c | |||
@@ -42,11 +42,11 @@ | |||
42 | #include <asm/io.h> | 42 | #include <asm/io.h> |
43 | 43 | ||
44 | #include <asm/mach/serial_at91.h> | 44 | #include <asm/mach/serial_at91.h> |
45 | #include <asm/arch/board.h> | 45 | #include <mach/board.h> |
46 | 46 | ||
47 | #ifdef CONFIG_ARM | 47 | #ifdef CONFIG_ARM |
48 | #include <asm/arch/cpu.h> | 48 | #include <mach/cpu.h> |
49 | #include <asm/arch/gpio.h> | 49 | #include <mach/gpio.h> |
50 | #endif | 50 | #endif |
51 | 51 | ||
52 | #define PDC_BUFFER_SIZE 512 | 52 | #define PDC_BUFFER_SIZE 512 |
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 9d8543762a30..efcd44344fb1 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c | |||
@@ -817,7 +817,7 @@ static void bfin_serial_set_ldisc(struct uart_port *port) | |||
817 | if (line >= port->info->port.tty->driver->num) | 817 | if (line >= port->info->port.tty->driver->num) |
818 | return; | 818 | return; |
819 | 819 | ||
820 | switch (port->info->port.tty->ldisc.num) { | 820 | switch (port->info->port.tty->termios->c_line) { |
821 | case N_IRDA: | 821 | case N_IRDA: |
822 | val = UART_GET_GCTL(&bfin_serial_ports[line]); | 822 | val = UART_GET_GCTL(&bfin_serial_ports[line]); |
823 | val |= (IREN | RPOLC); | 823 | val |= (IREN | RPOLC); |
diff --git a/drivers/serial/clps711x.c b/drivers/serial/clps711x.c index fc1fa9267c59..459f3420a429 100644 --- a/drivers/serial/clps711x.c +++ b/drivers/serial/clps711x.c | |||
@@ -39,7 +39,7 @@ | |||
39 | #include <linux/serial_core.h> | 39 | #include <linux/serial_core.h> |
40 | #include <linux/serial.h> | 40 | #include <linux/serial.h> |
41 | 41 | ||
42 | #include <asm/hardware.h> | 42 | #include <mach/hardware.h> |
43 | #include <asm/io.h> | 43 | #include <asm/io.h> |
44 | #include <asm/irq.h> | 44 | #include <asm/irq.h> |
45 | #include <asm/hardware/clps7111.h> | 45 | #include <asm/hardware/clps7111.h> |
diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c index 8249ac490559..bf94a770bb44 100644 --- a/drivers/serial/crisv10.c +++ b/drivers/serial/crisv10.c | |||
@@ -234,7 +234,7 @@ unsigned long r_alt_ser_baudrate_shadow = 0; | |||
234 | 234 | ||
235 | static struct e100_serial rs_table[] = { | 235 | static struct e100_serial rs_table[] = { |
236 | { .baud = DEF_BAUD, | 236 | { .baud = DEF_BAUD, |
237 | .port = (unsigned char *)R_SERIAL0_CTRL, | 237 | .ioport = (unsigned char *)R_SERIAL0_CTRL, |
238 | .irq = 1U << 12, /* uses DMA 6 and 7 */ | 238 | .irq = 1U << 12, /* uses DMA 6 and 7 */ |
239 | .oclrintradr = R_DMA_CH6_CLR_INTR, | 239 | .oclrintradr = R_DMA_CH6_CLR_INTR, |
240 | .ofirstadr = R_DMA_CH6_FIRST, | 240 | .ofirstadr = R_DMA_CH6_FIRST, |
@@ -288,7 +288,7 @@ static struct e100_serial rs_table[] = { | |||
288 | }, /* ttyS0 */ | 288 | }, /* ttyS0 */ |
289 | #ifndef CONFIG_SVINTO_SIM | 289 | #ifndef CONFIG_SVINTO_SIM |
290 | { .baud = DEF_BAUD, | 290 | { .baud = DEF_BAUD, |
291 | .port = (unsigned char *)R_SERIAL1_CTRL, | 291 | .ioport = (unsigned char *)R_SERIAL1_CTRL, |
292 | .irq = 1U << 16, /* uses DMA 8 and 9 */ | 292 | .irq = 1U << 16, /* uses DMA 8 and 9 */ |
293 | .oclrintradr = R_DMA_CH8_CLR_INTR, | 293 | .oclrintradr = R_DMA_CH8_CLR_INTR, |
294 | .ofirstadr = R_DMA_CH8_FIRST, | 294 | .ofirstadr = R_DMA_CH8_FIRST, |
@@ -344,7 +344,7 @@ static struct e100_serial rs_table[] = { | |||
344 | }, /* ttyS1 */ | 344 | }, /* ttyS1 */ |
345 | 345 | ||
346 | { .baud = DEF_BAUD, | 346 | { .baud = DEF_BAUD, |
347 | .port = (unsigned char *)R_SERIAL2_CTRL, | 347 | .ioport = (unsigned char *)R_SERIAL2_CTRL, |
348 | .irq = 1U << 4, /* uses DMA 2 and 3 */ | 348 | .irq = 1U << 4, /* uses DMA 2 and 3 */ |
349 | .oclrintradr = R_DMA_CH2_CLR_INTR, | 349 | .oclrintradr = R_DMA_CH2_CLR_INTR, |
350 | .ofirstadr = R_DMA_CH2_FIRST, | 350 | .ofirstadr = R_DMA_CH2_FIRST, |
@@ -398,7 +398,7 @@ static struct e100_serial rs_table[] = { | |||
398 | }, /* ttyS2 */ | 398 | }, /* ttyS2 */ |
399 | 399 | ||
400 | { .baud = DEF_BAUD, | 400 | { .baud = DEF_BAUD, |
401 | .port = (unsigned char *)R_SERIAL3_CTRL, | 401 | .ioport = (unsigned char *)R_SERIAL3_CTRL, |
402 | .irq = 1U << 8, /* uses DMA 4 and 5 */ | 402 | .irq = 1U << 8, /* uses DMA 4 and 5 */ |
403 | .oclrintradr = R_DMA_CH4_CLR_INTR, | 403 | .oclrintradr = R_DMA_CH4_CLR_INTR, |
404 | .ofirstadr = R_DMA_CH4_FIRST, | 404 | .ofirstadr = R_DMA_CH4_FIRST, |
@@ -939,7 +939,7 @@ static const struct control_pins e100_modem_pins[NR_PORTS] = | |||
939 | /* Output */ | 939 | /* Output */ |
940 | #define E100_RTS_GET(info) ((info)->rx_ctrl & E100_RTS_MASK) | 940 | #define E100_RTS_GET(info) ((info)->rx_ctrl & E100_RTS_MASK) |
941 | /* Input */ | 941 | /* Input */ |
942 | #define E100_CTS_GET(info) ((info)->port[REG_STATUS] & E100_CTS_MASK) | 942 | #define E100_CTS_GET(info) ((info)->ioport[REG_STATUS] & E100_CTS_MASK) |
943 | 943 | ||
944 | /* These are typically PA or PB and 0 means 0V, 1 means 3.3V */ | 944 | /* These are typically PA or PB and 0 means 0V, 1 means 3.3V */ |
945 | /* Is an output */ | 945 | /* Is an output */ |
@@ -1092,7 +1092,7 @@ e100_rts(struct e100_serial *info, int set) | |||
1092 | local_irq_save(flags); | 1092 | local_irq_save(flags); |
1093 | info->rx_ctrl &= ~E100_RTS_MASK; | 1093 | info->rx_ctrl &= ~E100_RTS_MASK; |
1094 | info->rx_ctrl |= (set ? 0 : E100_RTS_MASK); /* RTS is active low */ | 1094 | info->rx_ctrl |= (set ? 0 : E100_RTS_MASK); /* RTS is active low */ |
1095 | info->port[REG_REC_CTRL] = info->rx_ctrl; | 1095 | info->ioport[REG_REC_CTRL] = info->rx_ctrl; |
1096 | local_irq_restore(flags); | 1096 | local_irq_restore(flags); |
1097 | #ifdef SERIAL_DEBUG_IO | 1097 | #ifdef SERIAL_DEBUG_IO |
1098 | printk("ser%i rts %i\n", info->line, set); | 1098 | printk("ser%i rts %i\n", info->line, set); |
@@ -1142,7 +1142,7 @@ e100_disable_rx(struct e100_serial *info) | |||
1142 | { | 1142 | { |
1143 | #ifndef CONFIG_SVINTO_SIM | 1143 | #ifndef CONFIG_SVINTO_SIM |
1144 | /* disable the receiver */ | 1144 | /* disable the receiver */ |
1145 | info->port[REG_REC_CTRL] = | 1145 | info->ioport[REG_REC_CTRL] = |
1146 | (info->rx_ctrl &= ~IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); | 1146 | (info->rx_ctrl &= ~IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); |
1147 | #endif | 1147 | #endif |
1148 | } | 1148 | } |
@@ -1152,7 +1152,7 @@ e100_enable_rx(struct e100_serial *info) | |||
1152 | { | 1152 | { |
1153 | #ifndef CONFIG_SVINTO_SIM | 1153 | #ifndef CONFIG_SVINTO_SIM |
1154 | /* enable the receiver */ | 1154 | /* enable the receiver */ |
1155 | info->port[REG_REC_CTRL] = | 1155 | info->ioport[REG_REC_CTRL] = |
1156 | (info->rx_ctrl |= IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); | 1156 | (info->rx_ctrl |= IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); |
1157 | #endif | 1157 | #endif |
1158 | } | 1158 | } |
@@ -1490,7 +1490,7 @@ rs_stop(struct tty_struct *tty) | |||
1490 | xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); | 1490 | xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); |
1491 | } | 1491 | } |
1492 | 1492 | ||
1493 | *((unsigned long *)&info->port[REG_XOFF]) = xoff; | 1493 | *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; |
1494 | local_irq_restore(flags); | 1494 | local_irq_restore(flags); |
1495 | } | 1495 | } |
1496 | } | 1496 | } |
@@ -1513,7 +1513,7 @@ rs_start(struct tty_struct *tty) | |||
1513 | xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); | 1513 | xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); |
1514 | } | 1514 | } |
1515 | 1515 | ||
1516 | *((unsigned long *)&info->port[REG_XOFF]) = xoff; | 1516 | *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; |
1517 | if (!info->uses_dma_out && | 1517 | if (!info->uses_dma_out && |
1518 | info->xmit.head != info->xmit.tail && info->xmit.buf) | 1518 | info->xmit.head != info->xmit.tail && info->xmit.buf) |
1519 | e100_enable_serial_tx_ready_irq(info); | 1519 | e100_enable_serial_tx_ready_irq(info); |
@@ -1888,7 +1888,7 @@ static void receive_chars_dma(struct e100_serial *info) | |||
1888 | handle_all_descr_data(info); | 1888 | handle_all_descr_data(info); |
1889 | 1889 | ||
1890 | /* Read the status register to detect errors */ | 1890 | /* Read the status register to detect errors */ |
1891 | rstat = info->port[REG_STATUS]; | 1891 | rstat = info->ioport[REG_STATUS]; |
1892 | if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) { | 1892 | if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) { |
1893 | DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat)); | 1893 | DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat)); |
1894 | } | 1894 | } |
@@ -1897,7 +1897,7 @@ static void receive_chars_dma(struct e100_serial *info) | |||
1897 | /* If we got an error, we must reset it by reading the | 1897 | /* If we got an error, we must reset it by reading the |
1898 | * data_in field | 1898 | * data_in field |
1899 | */ | 1899 | */ |
1900 | unsigned char data = info->port[REG_DATA]; | 1900 | unsigned char data = info->ioport[REG_DATA]; |
1901 | 1901 | ||
1902 | PROCSTAT(ser_stat[info->line].errors_cnt++); | 1902 | PROCSTAT(ser_stat[info->line].errors_cnt++); |
1903 | DEBUG_LOG(info->line, "#dERR: s d 0x%04X\n", | 1903 | DEBUG_LOG(info->line, "#dERR: s d 0x%04X\n", |
@@ -2077,7 +2077,7 @@ static int force_eop_if_needed(struct e100_serial *info) | |||
2077 | /* We check data_avail bit to determine if data has | 2077 | /* We check data_avail bit to determine if data has |
2078 | * arrived since last time | 2078 | * arrived since last time |
2079 | */ | 2079 | */ |
2080 | unsigned char rstat = info->port[REG_STATUS]; | 2080 | unsigned char rstat = info->ioport[REG_STATUS]; |
2081 | 2081 | ||
2082 | /* error or datavail? */ | 2082 | /* error or datavail? */ |
2083 | if (rstat & SER_ERROR_MASK) { | 2083 | if (rstat & SER_ERROR_MASK) { |
@@ -2096,7 +2096,7 @@ static int force_eop_if_needed(struct e100_serial *info) | |||
2096 | TIMERD(DEBUG_LOG(info->line, "timeout: rstat 0x%03X\n", | 2096 | TIMERD(DEBUG_LOG(info->line, "timeout: rstat 0x%03X\n", |
2097 | rstat | (info->line << 8))); | 2097 | rstat | (info->line << 8))); |
2098 | /* Read data to clear status flags */ | 2098 | /* Read data to clear status flags */ |
2099 | (void)info->port[REG_DATA]; | 2099 | (void)info->ioport[REG_DATA]; |
2100 | 2100 | ||
2101 | info->forced_eop = 0; | 2101 | info->forced_eop = 0; |
2102 | START_FLUSH_FAST_TIMER(info, "magic"); | 2102 | START_FLUSH_FAST_TIMER(info, "magic"); |
@@ -2296,7 +2296,7 @@ struct e100_serial * handle_ser_rx_interrupt_no_dma(struct e100_serial *info) | |||
2296 | } | 2296 | } |
2297 | 2297 | ||
2298 | /* Read data and status at the same time */ | 2298 | /* Read data and status at the same time */ |
2299 | data_read = *((unsigned long *)&info->port[REG_DATA_STATUS32]); | 2299 | data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]); |
2300 | more_data: | 2300 | more_data: |
2301 | if (data_read & IO_MASK(R_SERIAL0_READ, xoff_detect) ) { | 2301 | if (data_read & IO_MASK(R_SERIAL0_READ, xoff_detect) ) { |
2302 | DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); | 2302 | DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); |
@@ -2391,7 +2391,7 @@ more_data: | |||
2391 | 2391 | ||
2392 | 2392 | ||
2393 | info->icount.rx++; | 2393 | info->icount.rx++; |
2394 | data_read = *((unsigned long *)&info->port[REG_DATA_STATUS32]); | 2394 | data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]); |
2395 | if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) { | 2395 | if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) { |
2396 | DEBUG_LOG(info->line, "ser_rx %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read)); | 2396 | DEBUG_LOG(info->line, "ser_rx %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read)); |
2397 | goto more_data; | 2397 | goto more_data; |
@@ -2413,7 +2413,7 @@ static struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info) | |||
2413 | return handle_ser_rx_interrupt_no_dma(info); | 2413 | return handle_ser_rx_interrupt_no_dma(info); |
2414 | } | 2414 | } |
2415 | /* DMA is used */ | 2415 | /* DMA is used */ |
2416 | rstat = info->port[REG_STATUS]; | 2416 | rstat = info->ioport[REG_STATUS]; |
2417 | if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) { | 2417 | if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) { |
2418 | DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); | 2418 | DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); |
2419 | } | 2419 | } |
@@ -2426,7 +2426,7 @@ static struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info) | |||
2426 | /* If we got an error, we must reset it by reading the | 2426 | /* If we got an error, we must reset it by reading the |
2427 | * data_in field | 2427 | * data_in field |
2428 | */ | 2428 | */ |
2429 | data = info->port[REG_DATA]; | 2429 | data = info->ioport[REG_DATA]; |
2430 | DINTR1(DEBUG_LOG(info->line, "ser_rx! %c\n", data)); | 2430 | DINTR1(DEBUG_LOG(info->line, "ser_rx! %c\n", data)); |
2431 | DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat)); | 2431 | DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat)); |
2432 | if (!data && (rstat & SER_FRAMING_ERR_MASK)) { | 2432 | if (!data && (rstat & SER_FRAMING_ERR_MASK)) { |
@@ -2528,10 +2528,10 @@ static void handle_ser_tx_interrupt(struct e100_serial *info) | |||
2528 | unsigned char rstat; | 2528 | unsigned char rstat; |
2529 | DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char)); | 2529 | DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char)); |
2530 | local_irq_save(flags); | 2530 | local_irq_save(flags); |
2531 | rstat = info->port[REG_STATUS]; | 2531 | rstat = info->ioport[REG_STATUS]; |
2532 | DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); | 2532 | DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); |
2533 | 2533 | ||
2534 | info->port[REG_TR_DATA] = info->x_char; | 2534 | info->ioport[REG_TR_DATA] = info->x_char; |
2535 | info->icount.tx++; | 2535 | info->icount.tx++; |
2536 | info->x_char = 0; | 2536 | info->x_char = 0; |
2537 | /* We must enable since it is disabled in ser_interrupt */ | 2537 | /* We must enable since it is disabled in ser_interrupt */ |
@@ -2545,7 +2545,7 @@ static void handle_ser_tx_interrupt(struct e100_serial *info) | |||
2545 | /* We only use normal tx interrupt when sending x_char */ | 2545 | /* We only use normal tx interrupt when sending x_char */ |
2546 | DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0)); | 2546 | DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0)); |
2547 | local_irq_save(flags); | 2547 | local_irq_save(flags); |
2548 | rstat = info->port[REG_STATUS]; | 2548 | rstat = info->ioport[REG_STATUS]; |
2549 | DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); | 2549 | DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); |
2550 | e100_disable_serial_tx_ready_irq(info); | 2550 | e100_disable_serial_tx_ready_irq(info); |
2551 | if (info->port.tty->stopped) | 2551 | if (info->port.tty->stopped) |
@@ -2573,7 +2573,7 @@ static void handle_ser_tx_interrupt(struct e100_serial *info) | |||
2573 | DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail])); | 2573 | DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail])); |
2574 | /* Send a byte, rs485 timing is critical so turn of ints */ | 2574 | /* Send a byte, rs485 timing is critical so turn of ints */ |
2575 | local_irq_save(flags); | 2575 | local_irq_save(flags); |
2576 | info->port[REG_TR_DATA] = info->xmit.buf[info->xmit.tail]; | 2576 | info->ioport[REG_TR_DATA] = info->xmit.buf[info->xmit.tail]; |
2577 | info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1); | 2577 | info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1); |
2578 | info->icount.tx++; | 2578 | info->icount.tx++; |
2579 | if (info->xmit.head == info->xmit.tail) { | 2579 | if (info->xmit.head == info->xmit.tail) { |
@@ -2848,7 +2848,7 @@ startup(struct e100_serial * info) | |||
2848 | 2848 | ||
2849 | /* dummy read to reset any serial errors */ | 2849 | /* dummy read to reset any serial errors */ |
2850 | 2850 | ||
2851 | (void)info->port[REG_DATA]; | 2851 | (void)info->ioport[REG_DATA]; |
2852 | 2852 | ||
2853 | /* enable the interrupts */ | 2853 | /* enable the interrupts */ |
2854 | if (info->uses_dma_out) | 2854 | if (info->uses_dma_out) |
@@ -2897,7 +2897,7 @@ shutdown(struct e100_serial * info) | |||
2897 | /* shut down the transmitter and receiver */ | 2897 | /* shut down the transmitter and receiver */ |
2898 | DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line)); | 2898 | DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line)); |
2899 | e100_disable_rx(info); | 2899 | e100_disable_rx(info); |
2900 | info->port[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40); | 2900 | info->ioport[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40); |
2901 | 2901 | ||
2902 | /* disable interrupts, reset dma channels */ | 2902 | /* disable interrupts, reset dma channels */ |
2903 | if (info->uses_dma_in) { | 2903 | if (info->uses_dma_in) { |
@@ -2968,7 +2968,7 @@ change_speed(struct e100_serial *info) | |||
2968 | 2968 | ||
2969 | if (!info->port.tty || !info->port.tty->termios) | 2969 | if (!info->port.tty || !info->port.tty->termios) |
2970 | return; | 2970 | return; |
2971 | if (!info->port) | 2971 | if (!info->ioport) |
2972 | return; | 2972 | return; |
2973 | 2973 | ||
2974 | cflag = info->port.tty->termios->c_cflag; | 2974 | cflag = info->port.tty->termios->c_cflag; |
@@ -3037,7 +3037,7 @@ change_speed(struct e100_serial *info) | |||
3037 | 3037 | ||
3038 | info->baud = cflag_to_baud(cflag); | 3038 | info->baud = cflag_to_baud(cflag); |
3039 | #ifndef CONFIG_SVINTO_SIM | 3039 | #ifndef CONFIG_SVINTO_SIM |
3040 | info->port[REG_BAUD] = cflag_to_etrax_baud(cflag); | 3040 | info->ioport[REG_BAUD] = cflag_to_etrax_baud(cflag); |
3041 | #endif /* CONFIG_SVINTO_SIM */ | 3041 | #endif /* CONFIG_SVINTO_SIM */ |
3042 | } | 3042 | } |
3043 | 3043 | ||
@@ -3097,8 +3097,8 @@ change_speed(struct e100_serial *info) | |||
3097 | 3097 | ||
3098 | /* actually write the control regs to the hardware */ | 3098 | /* actually write the control regs to the hardware */ |
3099 | 3099 | ||
3100 | info->port[REG_TR_CTRL] = info->tx_ctrl; | 3100 | info->ioport[REG_TR_CTRL] = info->tx_ctrl; |
3101 | info->port[REG_REC_CTRL] = info->rx_ctrl; | 3101 | info->ioport[REG_REC_CTRL] = info->rx_ctrl; |
3102 | xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty)); | 3102 | xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty)); |
3103 | xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable); | 3103 | xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable); |
3104 | if (info->port.tty->termios->c_iflag & IXON ) { | 3104 | if (info->port.tty->termios->c_iflag & IXON ) { |
@@ -3107,7 +3107,7 @@ change_speed(struct e100_serial *info) | |||
3107 | xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); | 3107 | xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); |
3108 | } | 3108 | } |
3109 | 3109 | ||
3110 | *((unsigned long *)&info->port[REG_XOFF]) = xoff; | 3110 | *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; |
3111 | local_irq_restore(flags); | 3111 | local_irq_restore(flags); |
3112 | #endif /* !CONFIG_SVINTO_SIM */ | 3112 | #endif /* !CONFIG_SVINTO_SIM */ |
3113 | 3113 | ||
@@ -3156,7 +3156,7 @@ static int rs_raw_write(struct tty_struct *tty, | |||
3156 | #ifdef SERIAL_DEBUG_DATA | 3156 | #ifdef SERIAL_DEBUG_DATA |
3157 | if (info->line == SERIAL_DEBUG_LINE) | 3157 | if (info->line == SERIAL_DEBUG_LINE) |
3158 | printk("rs_raw_write (%d), status %d\n", | 3158 | printk("rs_raw_write (%d), status %d\n", |
3159 | count, info->port[REG_STATUS]); | 3159 | count, info->ioport[REG_STATUS]); |
3160 | #endif | 3160 | #endif |
3161 | 3161 | ||
3162 | #ifdef CONFIG_SVINTO_SIM | 3162 | #ifdef CONFIG_SVINTO_SIM |
@@ -3427,7 +3427,7 @@ get_serial_info(struct e100_serial * info, | |||
3427 | memset(&tmp, 0, sizeof(tmp)); | 3427 | memset(&tmp, 0, sizeof(tmp)); |
3428 | tmp.type = info->type; | 3428 | tmp.type = info->type; |
3429 | tmp.line = info->line; | 3429 | tmp.line = info->line; |
3430 | tmp.port = (int)info->port; | 3430 | tmp.port = (int)info->ioport; |
3431 | tmp.irq = info->irq; | 3431 | tmp.irq = info->irq; |
3432 | tmp.flags = info->flags; | 3432 | tmp.flags = info->flags; |
3433 | tmp.baud_base = info->baud_base; | 3433 | tmp.baud_base = info->baud_base; |
@@ -3557,14 +3557,14 @@ char *get_control_state_str(int MLines, char *s) | |||
3557 | } | 3557 | } |
3558 | #endif | 3558 | #endif |
3559 | 3559 | ||
3560 | static void | 3560 | static int |
3561 | rs_break(struct tty_struct *tty, int break_state) | 3561 | rs_break(struct tty_struct *tty, int break_state) |
3562 | { | 3562 | { |
3563 | struct e100_serial *info = (struct e100_serial *)tty->driver_data; | 3563 | struct e100_serial *info = (struct e100_serial *)tty->driver_data; |
3564 | unsigned long flags; | 3564 | unsigned long flags; |
3565 | 3565 | ||
3566 | if (!info->port) | 3566 | if (!info->ioport) |
3567 | return; | 3567 | return -EIO; |
3568 | 3568 | ||
3569 | local_irq_save(flags); | 3569 | local_irq_save(flags); |
3570 | if (break_state == -1) { | 3570 | if (break_state == -1) { |
@@ -3575,8 +3575,9 @@ rs_break(struct tty_struct *tty, int break_state) | |||
3575 | /* Set bit 7 (txd) and 6 (tr_enable) */ | 3575 | /* Set bit 7 (txd) and 6 (tr_enable) */ |
3576 | info->tx_ctrl |= (0x80 | 0x40); | 3576 | info->tx_ctrl |= (0x80 | 0x40); |
3577 | } | 3577 | } |
3578 | info->port[REG_TR_CTRL] = info->tx_ctrl; | 3578 | info->ioport[REG_TR_CTRL] = info->tx_ctrl; |
3579 | local_irq_restore(flags); | 3579 | local_irq_restore(flags); |
3580 | return 0; | ||
3580 | } | 3581 | } |
3581 | 3582 | ||
3582 | static int | 3583 | static int |
@@ -4231,9 +4232,9 @@ static int line_info(char *buf, struct e100_serial *info) | |||
4231 | unsigned long tmp; | 4232 | unsigned long tmp; |
4232 | 4233 | ||
4233 | ret = sprintf(buf, "%d: uart:E100 port:%lX irq:%d", | 4234 | ret = sprintf(buf, "%d: uart:E100 port:%lX irq:%d", |
4234 | info->line, (unsigned long)info->port, info->irq); | 4235 | info->line, (unsigned long)info->ioport, info->irq); |
4235 | 4236 | ||
4236 | if (!info->port || (info->type == PORT_UNKNOWN)) { | 4237 | if (!info->ioport || (info->type == PORT_UNKNOWN)) { |
4237 | ret += sprintf(buf+ret, "\n"); | 4238 | ret += sprintf(buf+ret, "\n"); |
4238 | return ret; | 4239 | return ret; |
4239 | } | 4240 | } |
@@ -4281,7 +4282,7 @@ static int line_info(char *buf, struct e100_serial *info) | |||
4281 | } | 4282 | } |
4282 | 4283 | ||
4283 | { | 4284 | { |
4284 | unsigned char rstat = info->port[REG_STATUS]; | 4285 | unsigned char rstat = info->ioport[REG_STATUS]; |
4285 | if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) | 4286 | if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) |
4286 | ret += sprintf(buf+ret, " xoff_detect:1"); | 4287 | ret += sprintf(buf+ret, " xoff_detect:1"); |
4287 | } | 4288 | } |
@@ -4502,7 +4503,7 @@ rs_init(void) | |||
4502 | 4503 | ||
4503 | if (info->enabled) { | 4504 | if (info->enabled) { |
4504 | printk(KERN_INFO "%s%d at 0x%x is a builtin UART with DMA\n", | 4505 | printk(KERN_INFO "%s%d at 0x%x is a builtin UART with DMA\n", |
4505 | serial_driver->name, info->line, (unsigned int)info->port); | 4506 | serial_driver->name, info->line, (unsigned int)info->ioport); |
4506 | } | 4507 | } |
4507 | } | 4508 | } |
4508 | #ifdef CONFIG_ETRAX_FAST_TIMER | 4509 | #ifdef CONFIG_ETRAX_FAST_TIMER |
diff --git a/drivers/serial/crisv10.h b/drivers/serial/crisv10.h index ccd0f32b7372..e3c5c8c3c09b 100644 --- a/drivers/serial/crisv10.h +++ b/drivers/serial/crisv10.h | |||
@@ -36,8 +36,9 @@ struct etrax_recv_buffer { | |||
36 | }; | 36 | }; |
37 | 37 | ||
38 | struct e100_serial { | 38 | struct e100_serial { |
39 | struct tty_port port; | ||
39 | int baud; | 40 | int baud; |
40 | volatile u8 *port; /* R_SERIALx_CTRL */ | 41 | volatile u8 *ioport; /* R_SERIALx_CTRL */ |
41 | u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */ | 42 | u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */ |
42 | 43 | ||
43 | /* Output registers */ | 44 | /* Output registers */ |
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index e0da4dc7bbf6..6a29f9330a73 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c | |||
@@ -44,8 +44,8 @@ | |||
44 | 44 | ||
45 | #include <asm/io.h> | 45 | #include <asm/io.h> |
46 | #include <asm/irq.h> | 46 | #include <asm/irq.h> |
47 | #include <asm/hardware.h> | 47 | #include <mach/hardware.h> |
48 | #include <asm/arch/imx-uart.h> | 48 | #include <mach/imx-uart.h> |
49 | 49 | ||
50 | /* Register definitions */ | 50 | /* Register definitions */ |
51 | #define URXD0 0x0 /* Receiver Register */ | 51 | #define URXD0 0x0 /* Receiver Register */ |
diff --git a/drivers/serial/netx-serial.c b/drivers/serial/netx-serial.c index 9f8ccb735c19..3f489329e8d3 100644 --- a/drivers/serial/netx-serial.c +++ b/drivers/serial/netx-serial.c | |||
@@ -35,8 +35,8 @@ | |||
35 | 35 | ||
36 | #include <asm/io.h> | 36 | #include <asm/io.h> |
37 | #include <asm/irq.h> | 37 | #include <asm/irq.h> |
38 | #include <asm/hardware.h> | 38 | #include <mach/hardware.h> |
39 | #include <asm/arch/netx-regs.h> | 39 | #include <mach/netx-regs.h> |
40 | 40 | ||
41 | /* We've been assigned a range on the "Low-density serial ports" major */ | 41 | /* We've been assigned a range on the "Low-density serial ports" major */ |
42 | #define SERIAL_NX_MAJOR 204 | 42 | #define SERIAL_NX_MAJOR 204 |
diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c index b9a93f326fb8..f7a0d37c4221 100644 --- a/drivers/serial/pxa.c +++ b/drivers/serial/pxa.c | |||
@@ -45,9 +45,9 @@ | |||
45 | #include <linux/clk.h> | 45 | #include <linux/clk.h> |
46 | 46 | ||
47 | #include <asm/io.h> | 47 | #include <asm/io.h> |
48 | #include <asm/hardware.h> | 48 | #include <mach/hardware.h> |
49 | #include <asm/irq.h> | 49 | #include <asm/irq.h> |
50 | #include <asm/arch/pxa-regs.h> | 50 | #include <mach/pxa-regs.h> |
51 | 51 | ||
52 | 52 | ||
53 | struct uart_pxa_port { | 53 | struct uart_pxa_port { |
diff --git a/drivers/serial/s3c2400.c b/drivers/serial/s3c2400.c index a1102053e553..c8b4266ac35f 100644 --- a/drivers/serial/s3c2400.c +++ b/drivers/serial/s3c2400.c | |||
@@ -17,10 +17,10 @@ | |||
17 | 17 | ||
18 | #include <asm/irq.h> | 18 | #include <asm/irq.h> |
19 | 19 | ||
20 | #include <asm/hardware.h> | 20 | #include <mach/hardware.h> |
21 | 21 | ||
22 | #include <asm/plat-s3c/regs-serial.h> | 22 | #include <asm/plat-s3c/regs-serial.h> |
23 | #include <asm/arch/regs-gpio.h> | 23 | #include <mach/regs-gpio.h> |
24 | 24 | ||
25 | #include "samsung.h" | 25 | #include "samsung.h" |
26 | 26 | ||
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index c5f03f41686f..40a2531b5541 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c | |||
@@ -19,10 +19,10 @@ | |||
19 | #include <linux/serial.h> | 19 | #include <linux/serial.h> |
20 | 20 | ||
21 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | 23 | ||
24 | #include <asm/plat-s3c/regs-serial.h> | 24 | #include <asm/plat-s3c/regs-serial.h> |
25 | #include <asm/arch/regs-gpio.h> | 25 | #include <mach/regs-gpio.h> |
26 | 26 | ||
27 | #include "samsung.h" | 27 | #include "samsung.h" |
28 | 28 | ||
diff --git a/drivers/serial/s3c2412.c b/drivers/serial/s3c2412.c index ce0c220e3e92..d0170319c729 100644 --- a/drivers/serial/s3c2412.c +++ b/drivers/serial/s3c2412.c | |||
@@ -19,10 +19,10 @@ | |||
19 | #include <linux/serial.h> | 19 | #include <linux/serial.h> |
20 | 20 | ||
21 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | 23 | ||
24 | #include <asm/plat-s3c/regs-serial.h> | 24 | #include <asm/plat-s3c/regs-serial.h> |
25 | #include <asm/arch/regs-gpio.h> | 25 | #include <mach/regs-gpio.h> |
26 | 26 | ||
27 | #include "samsung.h" | 27 | #include "samsung.h" |
28 | 28 | ||
diff --git a/drivers/serial/s3c2440.c b/drivers/serial/s3c2440.c index 38f954bd39c6..d4a2b17b2498 100644 --- a/drivers/serial/s3c2440.c +++ b/drivers/serial/s3c2440.c | |||
@@ -19,10 +19,10 @@ | |||
19 | #include <linux/serial.h> | 19 | #include <linux/serial.h> |
20 | 20 | ||
21 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | 23 | ||
24 | #include <asm/plat-s3c/regs-serial.h> | 24 | #include <asm/plat-s3c/regs-serial.h> |
25 | #include <asm/arch/regs-gpio.h> | 25 | #include <mach/regs-gpio.h> |
26 | 26 | ||
27 | #include "samsung.h" | 27 | #include "samsung.h" |
28 | 28 | ||
diff --git a/drivers/serial/sa1100.c b/drivers/serial/sa1100.c index a5e76cc18073..b24a25ea6bc5 100644 --- a/drivers/serial/sa1100.c +++ b/drivers/serial/sa1100.c | |||
@@ -39,7 +39,7 @@ | |||
39 | 39 | ||
40 | #include <asm/io.h> | 40 | #include <asm/io.h> |
41 | #include <asm/irq.h> | 41 | #include <asm/irq.h> |
42 | #include <asm/hardware.h> | 42 | #include <mach/hardware.h> |
43 | #include <asm/mach/serial_sa1100.h> | 43 | #include <asm/mach/serial_sa1100.h> |
44 | 44 | ||
45 | /* We've been assigned a range on the "Low-density serial ports" major */ | 45 | /* We've been assigned a range on the "Low-density serial ports" major */ |
diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c index d852f83f8900..5a88b3f9fe9b 100644 --- a/drivers/serial/samsung.c +++ b/drivers/serial/samsung.c | |||
@@ -45,10 +45,10 @@ | |||
45 | 45 | ||
46 | #include <asm/irq.h> | 46 | #include <asm/irq.h> |
47 | 47 | ||
48 | #include <asm/hardware.h> | 48 | #include <mach/hardware.h> |
49 | 49 | ||
50 | #include <asm/plat-s3c/regs-serial.h> | 50 | #include <asm/plat-s3c/regs-serial.h> |
51 | #include <asm/arch/regs-gpio.h> | 51 | #include <mach/regs-gpio.h> |
52 | 52 | ||
53 | #include "samsung.h" | 53 | #include "samsung.h" |
54 | 54 | ||
diff --git a/drivers/serial/serial_ks8695.c b/drivers/serial/serial_ks8695.c index 0edbc5dd378b..b9cbfc87f616 100644 --- a/drivers/serial/serial_ks8695.c +++ b/drivers/serial/serial_ks8695.c | |||
@@ -26,8 +26,8 @@ | |||
26 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
27 | #include <asm/mach/irq.h> | 27 | #include <asm/mach/irq.h> |
28 | 28 | ||
29 | #include <asm/arch/regs-uart.h> | 29 | #include <mach/regs-uart.h> |
30 | #include <asm/arch/regs-irq.h> | 30 | #include <mach/regs-irq.h> |
31 | 31 | ||
32 | #if defined(CONFIG_SERIAL_KS8695_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) | 32 | #if defined(CONFIG_SERIAL_KS8695_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) |
33 | #define SUPPORT_SYSRQ | 33 | #define SUPPORT_SYSRQ |
diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c index be97789fa5fd..d1812d32f47d 100644 --- a/drivers/sh/maple/maple.c +++ b/drivers/sh/maple/maple.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * Core maple bus functionality | 2 | * Core maple bus functionality |
3 | * | 3 | * |
4 | * Copyright (C) 2007, 2008 Adrian McMenamin | 4 | * Copyright (C) 2007, 2008 Adrian McMenamin |
5 | * Copyright (C) 2001 - 2008 Paul Mundt | ||
5 | * | 6 | * |
6 | * Based on 2.4 code by: | 7 | * Based on 2.4 code by: |
7 | * | 8 | * |
@@ -31,7 +32,7 @@ | |||
31 | #include <mach/dma.h> | 32 | #include <mach/dma.h> |
32 | #include <mach/sysasic.h> | 33 | #include <mach/sysasic.h> |
33 | 34 | ||
34 | MODULE_AUTHOR("Yaegshi Takeshi, Paul Mundt, M.R. Brown, Adrian McMenamin"); | 35 | MODULE_AUTHOR("Yaegashi Takeshi, Paul Mundt, M. R. Brown, Adrian McMenamin"); |
35 | MODULE_DESCRIPTION("Maple bus driver for Dreamcast"); | 36 | MODULE_DESCRIPTION("Maple bus driver for Dreamcast"); |
36 | MODULE_LICENSE("GPL v2"); | 37 | MODULE_LICENSE("GPL v2"); |
37 | MODULE_SUPPORTED_DEVICE("{{SEGA, Dreamcast/Maple}}"); | 38 | MODULE_SUPPORTED_DEVICE("{{SEGA, Dreamcast/Maple}}"); |
@@ -65,19 +66,36 @@ static bool checked[4]; | |||
65 | static struct maple_device *baseunits[4]; | 66 | static struct maple_device *baseunits[4]; |
66 | 67 | ||
67 | /** | 68 | /** |
68 | * maple_driver_register - register a device driver | 69 | * maple_driver_register - register a maple driver |
69 | * automatically makes the driver bus a maple bus | 70 | * @drv: maple driver to be registered. |
70 | * @drv: the driver to be registered | 71 | * |
72 | * Registers the passed in @drv, while updating the bus type. | ||
73 | * Devices with matching function IDs will be automatically probed. | ||
71 | */ | 74 | */ |
72 | int maple_driver_register(struct device_driver *drv) | 75 | int maple_driver_register(struct maple_driver *drv) |
73 | { | 76 | { |
74 | if (!drv) | 77 | if (!drv) |
75 | return -EINVAL; | 78 | return -EINVAL; |
76 | drv->bus = &maple_bus_type; | 79 | |
77 | return driver_register(drv); | 80 | drv->drv.bus = &maple_bus_type; |
81 | |||
82 | return driver_register(&drv->drv); | ||
78 | } | 83 | } |
79 | EXPORT_SYMBOL_GPL(maple_driver_register); | 84 | EXPORT_SYMBOL_GPL(maple_driver_register); |
80 | 85 | ||
86 | /** | ||
87 | * maple_driver_unregister - unregister a maple driver. | ||
88 | * @drv: maple driver to unregister. | ||
89 | * | ||
90 | * Cleans up after maple_driver_register(). To be invoked in the exit | ||
91 | * path of any module drivers. | ||
92 | */ | ||
93 | void maple_driver_unregister(struct maple_driver *drv) | ||
94 | { | ||
95 | driver_unregister(&drv->drv); | ||
96 | } | ||
97 | EXPORT_SYMBOL_GPL(maple_driver_unregister); | ||
98 | |||
81 | /* set hardware registers to enable next round of dma */ | 99 | /* set hardware registers to enable next round of dma */ |
82 | static void maplebus_dma_reset(void) | 100 | static void maplebus_dma_reset(void) |
83 | { | 101 | { |
@@ -129,13 +147,13 @@ static void maple_release_device(struct device *dev) | |||
129 | kfree(mdev); | 147 | kfree(mdev); |
130 | } | 148 | } |
131 | 149 | ||
132 | /* | 150 | /** |
133 | * maple_add_packet - add a single instruction to the queue | 151 | * maple_add_packet - add a single instruction to the queue |
134 | * @mdev - maple device | 152 | * @mdev: maple device |
135 | * @function - function on device being queried | 153 | * @function: function on device being queried |
136 | * @command - maple command to add | 154 | * @command: maple command to add |
137 | * @length - length of command string (in 32 bit words) | 155 | * @length: length of command string (in 32 bit words) |
138 | * @data - remainder of command string | 156 | * @data: remainder of command string |
139 | */ | 157 | */ |
140 | int maple_add_packet(struct maple_device *mdev, u32 function, u32 command, | 158 | int maple_add_packet(struct maple_device *mdev, u32 function, u32 command, |
141 | size_t length, void *data) | 159 | size_t length, void *data) |
@@ -176,14 +194,15 @@ out: | |||
176 | } | 194 | } |
177 | EXPORT_SYMBOL_GPL(maple_add_packet); | 195 | EXPORT_SYMBOL_GPL(maple_add_packet); |
178 | 196 | ||
179 | /* | 197 | /** |
180 | * maple_add_packet_sleeps - add a single instruction to the queue | 198 | * maple_add_packet_sleeps - add a single instruction to the queue |
181 | * - waits for lock to be free | 199 | * @mdev: maple device |
182 | * @mdev - maple device | 200 | * @function: function on device being queried |
183 | * @function - function on device being queried | 201 | * @command: maple command to add |
184 | * @command - maple command to add | 202 | * @length: length of command string (in 32 bit words) |
185 | * @length - length of command string (in 32 bit words) | 203 | * @data: remainder of command string |
186 | * @data - remainder of command string | 204 | * |
205 | * Same as maple_add_packet(), but waits for the lock to become free. | ||
187 | */ | 206 | */ |
188 | int maple_add_packet_sleeps(struct maple_device *mdev, u32 function, | 207 | int maple_add_packet_sleeps(struct maple_device *mdev, u32 function, |
189 | u32 command, size_t length, void *data) | 208 | u32 command, size_t length, void *data) |
@@ -724,11 +743,9 @@ static int maple_get_dma_buffer(void) | |||
724 | static int match_maple_bus_driver(struct device *devptr, | 743 | static int match_maple_bus_driver(struct device *devptr, |
725 | struct device_driver *drvptr) | 744 | struct device_driver *drvptr) |
726 | { | 745 | { |
727 | struct maple_driver *maple_drv; | 746 | struct maple_driver *maple_drv = to_maple_driver(drvptr); |
728 | struct maple_device *maple_dev; | 747 | struct maple_device *maple_dev = to_maple_dev(devptr); |
729 | 748 | ||
730 | maple_drv = container_of(drvptr, struct maple_driver, drv); | ||
731 | maple_dev = container_of(devptr, struct maple_device, dev); | ||
732 | /* Trap empty port case */ | 749 | /* Trap empty port case */ |
733 | if (maple_dev->devinfo.function == 0xFFFFFFFF) | 750 | if (maple_dev->devinfo.function == 0xFFFFFFFF) |
734 | return 0; | 751 | return 0; |
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 2303521b4f09..b9d0efb6803f 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig | |||
@@ -149,6 +149,12 @@ config SPI_OMAP24XX | |||
149 | SPI master controller for OMAP24xx/OMAP34xx Multichannel SPI | 149 | SPI master controller for OMAP24xx/OMAP34xx Multichannel SPI |
150 | (McSPI) modules. | 150 | (McSPI) modules. |
151 | 151 | ||
152 | config SPI_ORION | ||
153 | tristate "Orion SPI master (EXPERIMENTAL)" | ||
154 | depends on PLAT_ORION && EXPERIMENTAL | ||
155 | help | ||
156 | This enables using the SPI master controller on the Orion chips. | ||
157 | |||
152 | config SPI_PXA2XX | 158 | config SPI_PXA2XX |
153 | tristate "PXA2xx SSP SPI master" | 159 | tristate "PXA2xx SSP SPI master" |
154 | depends on ARCH_PXA && EXPERIMENTAL | 160 | depends on ARCH_PXA && EXPERIMENTAL |
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 7fca043ce723..ccf18de34e1e 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile | |||
@@ -21,6 +21,7 @@ obj-$(CONFIG_SPI_LM70_LLP) += spi_lm70llp.o | |||
21 | obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o | 21 | obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o |
22 | obj-$(CONFIG_SPI_OMAP_UWIRE) += omap_uwire.o | 22 | obj-$(CONFIG_SPI_OMAP_UWIRE) += omap_uwire.o |
23 | obj-$(CONFIG_SPI_OMAP24XX) += omap2_mcspi.o | 23 | obj-$(CONFIG_SPI_OMAP24XX) += omap2_mcspi.o |
24 | obj-$(CONFIG_SPI_ORION) += orion_spi.o | ||
24 | obj-$(CONFIG_SPI_MPC52xx_PSC) += mpc52xx_psc_spi.o | 25 | obj-$(CONFIG_SPI_MPC52xx_PSC) += mpc52xx_psc_spi.o |
25 | obj-$(CONFIG_SPI_MPC83xx) += spi_mpc83xx.o | 26 | obj-$(CONFIG_SPI_MPC83xx) += spi_mpc83xx.o |
26 | obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o | 27 | obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o |
diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c index 0c7165660853..02f9320f3efc 100644 --- a/drivers/spi/atmel_spi.c +++ b/drivers/spi/atmel_spi.c | |||
@@ -20,9 +20,9 @@ | |||
20 | #include <linux/spi/spi.h> | 20 | #include <linux/spi/spi.h> |
21 | 21 | ||
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | #include <asm/arch/board.h> | 23 | #include <mach/board.h> |
24 | #include <asm/arch/gpio.h> | 24 | #include <mach/gpio.h> |
25 | #include <asm/arch/cpu.h> | 25 | #include <mach/cpu.h> |
26 | 26 | ||
27 | #include "atmel_spi.h" | 27 | #include "atmel_spi.h" |
28 | 28 | ||
@@ -184,7 +184,8 @@ static void atmel_spi_next_xfer(struct spi_master *master, | |||
184 | { | 184 | { |
185 | struct atmel_spi *as = spi_master_get_devdata(master); | 185 | struct atmel_spi *as = spi_master_get_devdata(master); |
186 | struct spi_transfer *xfer; | 186 | struct spi_transfer *xfer; |
187 | u32 len, remaining, total; | 187 | u32 len, remaining; |
188 | u32 ieval; | ||
188 | dma_addr_t tx_dma, rx_dma; | 189 | dma_addr_t tx_dma, rx_dma; |
189 | 190 | ||
190 | if (!as->current_transfer) | 191 | if (!as->current_transfer) |
@@ -197,6 +198,8 @@ static void atmel_spi_next_xfer(struct spi_master *master, | |||
197 | xfer = NULL; | 198 | xfer = NULL; |
198 | 199 | ||
199 | if (xfer) { | 200 | if (xfer) { |
201 | spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS)); | ||
202 | |||
200 | len = xfer->len; | 203 | len = xfer->len; |
201 | atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len); | 204 | atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len); |
202 | remaining = xfer->len - len; | 205 | remaining = xfer->len - len; |
@@ -234,6 +237,8 @@ static void atmel_spi_next_xfer(struct spi_master *master, | |||
234 | as->next_transfer = xfer; | 237 | as->next_transfer = xfer; |
235 | 238 | ||
236 | if (xfer) { | 239 | if (xfer) { |
240 | u32 total; | ||
241 | |||
237 | total = len; | 242 | total = len; |
238 | atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len); | 243 | atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len); |
239 | as->next_remaining_bytes = total - len; | 244 | as->next_remaining_bytes = total - len; |
@@ -250,9 +255,11 @@ static void atmel_spi_next_xfer(struct spi_master *master, | |||
250 | " next xfer %p: len %u tx %p/%08x rx %p/%08x\n", | 255 | " next xfer %p: len %u tx %p/%08x rx %p/%08x\n", |
251 | xfer, xfer->len, xfer->tx_buf, xfer->tx_dma, | 256 | xfer, xfer->len, xfer->tx_buf, xfer->tx_dma, |
252 | xfer->rx_buf, xfer->rx_dma); | 257 | xfer->rx_buf, xfer->rx_dma); |
258 | ieval = SPI_BIT(ENDRX) | SPI_BIT(OVRES); | ||
253 | } else { | 259 | } else { |
254 | spi_writel(as, RNCR, 0); | 260 | spi_writel(as, RNCR, 0); |
255 | spi_writel(as, TNCR, 0); | 261 | spi_writel(as, TNCR, 0); |
262 | ieval = SPI_BIT(RXBUFF) | SPI_BIT(ENDRX) | SPI_BIT(OVRES); | ||
256 | } | 263 | } |
257 | 264 | ||
258 | /* REVISIT: We're waiting for ENDRX before we start the next | 265 | /* REVISIT: We're waiting for ENDRX before we start the next |
@@ -265,7 +272,7 @@ static void atmel_spi_next_xfer(struct spi_master *master, | |||
265 | * | 272 | * |
266 | * It should be doable, though. Just not now... | 273 | * It should be doable, though. Just not now... |
267 | */ | 274 | */ |
268 | spi_writel(as, IER, SPI_BIT(ENDRX) | SPI_BIT(OVRES)); | 275 | spi_writel(as, IER, ieval); |
269 | spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN)); | 276 | spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN)); |
270 | } | 277 | } |
271 | 278 | ||
@@ -396,7 +403,7 @@ atmel_spi_interrupt(int irq, void *dev_id) | |||
396 | 403 | ||
397 | ret = IRQ_HANDLED; | 404 | ret = IRQ_HANDLED; |
398 | 405 | ||
399 | spi_writel(as, IDR, (SPI_BIT(ENDTX) | SPI_BIT(ENDRX) | 406 | spi_writel(as, IDR, (SPI_BIT(RXBUFF) | SPI_BIT(ENDRX) |
400 | | SPI_BIT(OVRES))); | 407 | | SPI_BIT(OVRES))); |
401 | 408 | ||
402 | /* | 409 | /* |
@@ -418,7 +425,7 @@ atmel_spi_interrupt(int irq, void *dev_id) | |||
418 | if (xfer->delay_usecs) | 425 | if (xfer->delay_usecs) |
419 | udelay(xfer->delay_usecs); | 426 | udelay(xfer->delay_usecs); |
420 | 427 | ||
421 | dev_warn(master->dev.parent, "fifo overrun (%u/%u remaining)\n", | 428 | dev_warn(master->dev.parent, "overrun (%u/%u remaining)\n", |
422 | spi_readl(as, TCR), spi_readl(as, RCR)); | 429 | spi_readl(as, TCR), spi_readl(as, RCR)); |
423 | 430 | ||
424 | /* | 431 | /* |
@@ -442,7 +449,7 @@ atmel_spi_interrupt(int irq, void *dev_id) | |||
442 | spi_readl(as, SR); | 449 | spi_readl(as, SR); |
443 | 450 | ||
444 | atmel_spi_msg_done(master, as, msg, -EIO, 0); | 451 | atmel_spi_msg_done(master, as, msg, -EIO, 0); |
445 | } else if (pending & SPI_BIT(ENDRX)) { | 452 | } else if (pending & (SPI_BIT(RXBUFF) | SPI_BIT(ENDRX))) { |
446 | ret = IRQ_HANDLED; | 453 | ret = IRQ_HANDLED; |
447 | 454 | ||
448 | spi_writel(as, IDR, pending); | 455 | spi_writel(as, IDR, pending); |
diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c index f6f987bb71ca..9d2186fd74aa 100644 --- a/drivers/spi/omap2_mcspi.c +++ b/drivers/spi/omap2_mcspi.c | |||
@@ -35,8 +35,8 @@ | |||
35 | 35 | ||
36 | #include <linux/spi/spi.h> | 36 | #include <linux/spi/spi.h> |
37 | 37 | ||
38 | #include <asm/arch/dma.h> | 38 | #include <mach/dma.h> |
39 | #include <asm/arch/clock.h> | 39 | #include <mach/clock.h> |
40 | 40 | ||
41 | 41 | ||
42 | #define OMAP2_MCSPI_MAX_FREQ 48000000 | 42 | #define OMAP2_MCSPI_MAX_FREQ 48000000 |
diff --git a/drivers/spi/omap_uwire.c b/drivers/spi/omap_uwire.c index d9ae111c27ae..5515eb97d7c5 100644 --- a/drivers/spi/omap_uwire.c +++ b/drivers/spi/omap_uwire.c | |||
@@ -47,12 +47,12 @@ | |||
47 | 47 | ||
48 | #include <asm/system.h> | 48 | #include <asm/system.h> |
49 | #include <asm/irq.h> | 49 | #include <asm/irq.h> |
50 | #include <asm/hardware.h> | 50 | #include <mach/hardware.h> |
51 | #include <asm/io.h> | 51 | #include <asm/io.h> |
52 | #include <asm/mach-types.h> | 52 | #include <asm/mach-types.h> |
53 | 53 | ||
54 | #include <asm/arch/mux.h> | 54 | #include <mach/mux.h> |
55 | #include <asm/arch/omap730.h> /* OMAP730_IO_CONF registers */ | 55 | #include <mach/omap730.h> /* OMAP730_IO_CONF registers */ |
56 | 56 | ||
57 | 57 | ||
58 | /* FIXME address is now a platform device resource, | 58 | /* FIXME address is now a platform device resource, |
diff --git a/drivers/spi/orion_spi.c b/drivers/spi/orion_spi.c new file mode 100644 index 000000000000..c4eaacd6e553 --- /dev/null +++ b/drivers/spi/orion_spi.c | |||
@@ -0,0 +1,574 @@ | |||
1 | /* | ||
2 | * orion_spi.c -- Marvell Orion SPI controller driver | ||
3 | * | ||
4 | * Author: Shadi Ammouri <shadi@marvell.com> | ||
5 | * Copyright (C) 2007-2008 Marvell Ltd. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/interrupt.h> | ||
14 | #include <linux/delay.h> | ||
15 | #include <linux/platform_device.h> | ||
16 | #include <linux/err.h> | ||
17 | #include <linux/io.h> | ||
18 | #include <linux/spi/spi.h> | ||
19 | #include <linux/spi/orion_spi.h> | ||
20 | #include <asm/unaligned.h> | ||
21 | |||
22 | #define DRIVER_NAME "orion_spi" | ||
23 | |||
24 | #define ORION_NUM_CHIPSELECTS 1 /* only one slave is supported*/ | ||
25 | #define ORION_SPI_WAIT_RDY_MAX_LOOP 2000 /* in usec */ | ||
26 | |||
27 | #define ORION_SPI_IF_CTRL_REG 0x00 | ||
28 | #define ORION_SPI_IF_CONFIG_REG 0x04 | ||
29 | #define ORION_SPI_DATA_OUT_REG 0x08 | ||
30 | #define ORION_SPI_DATA_IN_REG 0x0c | ||
31 | #define ORION_SPI_INT_CAUSE_REG 0x10 | ||
32 | |||
33 | #define ORION_SPI_IF_8_16_BIT_MODE (1 << 5) | ||
34 | #define ORION_SPI_CLK_PRESCALE_MASK 0x1F | ||
35 | |||
36 | struct orion_spi { | ||
37 | struct work_struct work; | ||
38 | |||
39 | /* Lock access to transfer list. */ | ||
40 | spinlock_t lock; | ||
41 | |||
42 | struct list_head msg_queue; | ||
43 | struct spi_master *master; | ||
44 | void __iomem *base; | ||
45 | unsigned int max_speed; | ||
46 | unsigned int min_speed; | ||
47 | struct orion_spi_info *spi_info; | ||
48 | }; | ||
49 | |||
50 | static struct workqueue_struct *orion_spi_wq; | ||
51 | |||
52 | static inline void __iomem *spi_reg(struct orion_spi *orion_spi, u32 reg) | ||
53 | { | ||
54 | return orion_spi->base + reg; | ||
55 | } | ||
56 | |||
57 | static inline void | ||
58 | orion_spi_setbits(struct orion_spi *orion_spi, u32 reg, u32 mask) | ||
59 | { | ||
60 | void __iomem *reg_addr = spi_reg(orion_spi, reg); | ||
61 | u32 val; | ||
62 | |||
63 | val = readl(reg_addr); | ||
64 | val |= mask; | ||
65 | writel(val, reg_addr); | ||
66 | } | ||
67 | |||
68 | static inline void | ||
69 | orion_spi_clrbits(struct orion_spi *orion_spi, u32 reg, u32 mask) | ||
70 | { | ||
71 | void __iomem *reg_addr = spi_reg(orion_spi, reg); | ||
72 | u32 val; | ||
73 | |||
74 | val = readl(reg_addr); | ||
75 | val &= ~mask; | ||
76 | writel(val, reg_addr); | ||
77 | } | ||
78 | |||
79 | static int orion_spi_set_transfer_size(struct orion_spi *orion_spi, int size) | ||
80 | { | ||
81 | if (size == 16) { | ||
82 | orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG, | ||
83 | ORION_SPI_IF_8_16_BIT_MODE); | ||
84 | } else if (size == 8) { | ||
85 | orion_spi_clrbits(orion_spi, ORION_SPI_IF_CONFIG_REG, | ||
86 | ORION_SPI_IF_8_16_BIT_MODE); | ||
87 | } else { | ||
88 | pr_debug("Bad bits per word value %d (only 8 or 16 are " | ||
89 | "allowed).\n", size); | ||
90 | return -EINVAL; | ||
91 | } | ||
92 | |||
93 | return 0; | ||
94 | } | ||
95 | |||
96 | static int orion_spi_baudrate_set(struct spi_device *spi, unsigned int speed) | ||
97 | { | ||
98 | u32 tclk_hz; | ||
99 | u32 rate; | ||
100 | u32 prescale; | ||
101 | u32 reg; | ||
102 | struct orion_spi *orion_spi; | ||
103 | |||
104 | orion_spi = spi_master_get_devdata(spi->master); | ||
105 | |||
106 | tclk_hz = orion_spi->spi_info->tclk; | ||
107 | |||
108 | /* | ||
109 | * the supported rates are: 4,6,8...30 | ||
110 | * round up as we look for equal or less speed | ||
111 | */ | ||
112 | rate = DIV_ROUND_UP(tclk_hz, speed); | ||
113 | rate = roundup(rate, 2); | ||
114 | |||
115 | /* check if requested speed is too small */ | ||
116 | if (rate > 30) | ||
117 | return -EINVAL; | ||
118 | |||
119 | if (rate < 4) | ||
120 | rate = 4; | ||
121 | |||
122 | /* Convert the rate to SPI clock divisor value. */ | ||
123 | prescale = 0x10 + rate/2; | ||
124 | |||
125 | reg = readl(spi_reg(orion_spi, ORION_SPI_IF_CONFIG_REG)); | ||
126 | reg = ((reg & ~ORION_SPI_CLK_PRESCALE_MASK) | prescale); | ||
127 | writel(reg, spi_reg(orion_spi, ORION_SPI_IF_CONFIG_REG)); | ||
128 | |||
129 | return 0; | ||
130 | } | ||
131 | |||
132 | /* | ||
133 | * called only when no transfer is active on the bus | ||
134 | */ | ||
135 | static int | ||
136 | orion_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) | ||
137 | { | ||
138 | struct orion_spi *orion_spi; | ||
139 | unsigned int speed = spi->max_speed_hz; | ||
140 | unsigned int bits_per_word = spi->bits_per_word; | ||
141 | int rc; | ||
142 | |||
143 | orion_spi = spi_master_get_devdata(spi->master); | ||
144 | |||
145 | if ((t != NULL) && t->speed_hz) | ||
146 | speed = t->speed_hz; | ||
147 | |||
148 | if ((t != NULL) && t->bits_per_word) | ||
149 | bits_per_word = t->bits_per_word; | ||
150 | |||
151 | rc = orion_spi_baudrate_set(spi, speed); | ||
152 | if (rc) | ||
153 | return rc; | ||
154 | |||
155 | return orion_spi_set_transfer_size(orion_spi, bits_per_word); | ||
156 | } | ||
157 | |||
158 | static void orion_spi_set_cs(struct orion_spi *orion_spi, int enable) | ||
159 | { | ||
160 | if (enable) | ||
161 | orion_spi_setbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); | ||
162 | else | ||
163 | orion_spi_clrbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); | ||
164 | } | ||
165 | |||
166 | static inline int orion_spi_wait_till_ready(struct orion_spi *orion_spi) | ||
167 | { | ||
168 | int i; | ||
169 | |||
170 | for (i = 0; i < ORION_SPI_WAIT_RDY_MAX_LOOP; i++) { | ||
171 | if (readl(spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG))) | ||
172 | return 1; | ||
173 | else | ||
174 | udelay(1); | ||
175 | } | ||
176 | |||
177 | return -1; | ||
178 | } | ||
179 | |||
180 | static inline int | ||
181 | orion_spi_write_read_8bit(struct spi_device *spi, | ||
182 | const u8 **tx_buf, u8 **rx_buf) | ||
183 | { | ||
184 | void __iomem *tx_reg, *rx_reg, *int_reg; | ||
185 | struct orion_spi *orion_spi; | ||
186 | |||
187 | orion_spi = spi_master_get_devdata(spi->master); | ||
188 | tx_reg = spi_reg(orion_spi, ORION_SPI_DATA_OUT_REG); | ||
189 | rx_reg = spi_reg(orion_spi, ORION_SPI_DATA_IN_REG); | ||
190 | int_reg = spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG); | ||
191 | |||
192 | /* clear the interrupt cause register */ | ||
193 | writel(0x0, int_reg); | ||
194 | |||
195 | if (tx_buf && *tx_buf) | ||
196 | writel(*(*tx_buf)++, tx_reg); | ||
197 | else | ||
198 | writel(0, tx_reg); | ||
199 | |||
200 | if (orion_spi_wait_till_ready(orion_spi) < 0) { | ||
201 | dev_err(&spi->dev, "TXS timed out\n"); | ||
202 | return -1; | ||
203 | } | ||
204 | |||
205 | if (rx_buf && *rx_buf) | ||
206 | *(*rx_buf)++ = readl(rx_reg); | ||
207 | |||
208 | return 1; | ||
209 | } | ||
210 | |||
211 | static inline int | ||
212 | orion_spi_write_read_16bit(struct spi_device *spi, | ||
213 | const u16 **tx_buf, u16 **rx_buf) | ||
214 | { | ||
215 | void __iomem *tx_reg, *rx_reg, *int_reg; | ||
216 | struct orion_spi *orion_spi; | ||
217 | |||
218 | orion_spi = spi_master_get_devdata(spi->master); | ||
219 | tx_reg = spi_reg(orion_spi, ORION_SPI_DATA_OUT_REG); | ||
220 | rx_reg = spi_reg(orion_spi, ORION_SPI_DATA_IN_REG); | ||
221 | int_reg = spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG); | ||
222 | |||
223 | /* clear the interrupt cause register */ | ||
224 | writel(0x0, int_reg); | ||
225 | |||
226 | if (tx_buf && *tx_buf) | ||
227 | writel(__cpu_to_le16(get_unaligned((*tx_buf)++)), tx_reg); | ||
228 | else | ||
229 | writel(0, tx_reg); | ||
230 | |||
231 | if (orion_spi_wait_till_ready(orion_spi) < 0) { | ||
232 | dev_err(&spi->dev, "TXS timed out\n"); | ||
233 | return -1; | ||
234 | } | ||
235 | |||
236 | if (rx_buf && *rx_buf) | ||
237 | put_unaligned(__le16_to_cpu(readl(rx_reg)), (*rx_buf)++); | ||
238 | |||
239 | return 1; | ||
240 | } | ||
241 | |||
242 | static unsigned int | ||
243 | orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer) | ||
244 | { | ||
245 | struct orion_spi *orion_spi; | ||
246 | unsigned int count; | ||
247 | int word_len; | ||
248 | |||
249 | orion_spi = spi_master_get_devdata(spi->master); | ||
250 | word_len = spi->bits_per_word; | ||
251 | count = xfer->len; | ||
252 | |||
253 | if (word_len == 8) { | ||
254 | const u8 *tx = xfer->tx_buf; | ||
255 | u8 *rx = xfer->rx_buf; | ||
256 | |||
257 | do { | ||
258 | if (orion_spi_write_read_8bit(spi, &tx, &rx) < 0) | ||
259 | goto out; | ||
260 | count--; | ||
261 | } while (count); | ||
262 | } else if (word_len == 16) { | ||
263 | const u16 *tx = xfer->tx_buf; | ||
264 | u16 *rx = xfer->rx_buf; | ||
265 | |||
266 | do { | ||
267 | if (orion_spi_write_read_16bit(spi, &tx, &rx) < 0) | ||
268 | goto out; | ||
269 | count -= 2; | ||
270 | } while (count); | ||
271 | } | ||
272 | |||
273 | out: | ||
274 | return xfer->len - count; | ||
275 | } | ||
276 | |||
277 | |||
278 | static void orion_spi_work(struct work_struct *work) | ||
279 | { | ||
280 | struct orion_spi *orion_spi = | ||
281 | container_of(work, struct orion_spi, work); | ||
282 | |||
283 | spin_lock_irq(&orion_spi->lock); | ||
284 | while (!list_empty(&orion_spi->msg_queue)) { | ||
285 | struct spi_message *m; | ||
286 | struct spi_device *spi; | ||
287 | struct spi_transfer *t = NULL; | ||
288 | int par_override = 0; | ||
289 | int status = 0; | ||
290 | int cs_active = 0; | ||
291 | |||
292 | m = container_of(orion_spi->msg_queue.next, struct spi_message, | ||
293 | queue); | ||
294 | |||
295 | list_del_init(&m->queue); | ||
296 | spin_unlock_irq(&orion_spi->lock); | ||
297 | |||
298 | spi = m->spi; | ||
299 | |||
300 | /* Load defaults */ | ||
301 | status = orion_spi_setup_transfer(spi, NULL); | ||
302 | |||
303 | if (status < 0) | ||
304 | goto msg_done; | ||
305 | |||
306 | list_for_each_entry(t, &m->transfers, transfer_list) { | ||
307 | if (par_override || t->speed_hz || t->bits_per_word) { | ||
308 | par_override = 1; | ||
309 | status = orion_spi_setup_transfer(spi, t); | ||
310 | if (status < 0) | ||
311 | break; | ||
312 | if (!t->speed_hz && !t->bits_per_word) | ||
313 | par_override = 0; | ||
314 | } | ||
315 | |||
316 | if (!cs_active) { | ||
317 | orion_spi_set_cs(orion_spi, 1); | ||
318 | cs_active = 1; | ||
319 | } | ||
320 | |||
321 | if (t->len) | ||
322 | m->actual_length += | ||
323 | orion_spi_write_read(spi, t); | ||
324 | |||
325 | if (t->delay_usecs) | ||
326 | udelay(t->delay_usecs); | ||
327 | |||
328 | if (t->cs_change) { | ||
329 | orion_spi_set_cs(orion_spi, 0); | ||
330 | cs_active = 0; | ||
331 | } | ||
332 | } | ||
333 | |||
334 | msg_done: | ||
335 | if (cs_active) | ||
336 | orion_spi_set_cs(orion_spi, 0); | ||
337 | |||
338 | m->status = status; | ||
339 | m->complete(m->context); | ||
340 | |||
341 | spin_lock_irq(&orion_spi->lock); | ||
342 | } | ||
343 | |||
344 | spin_unlock_irq(&orion_spi->lock); | ||
345 | } | ||
346 | |||
347 | static int __init orion_spi_reset(struct orion_spi *orion_spi) | ||
348 | { | ||
349 | /* Verify that the CS is deasserted */ | ||
350 | orion_spi_set_cs(orion_spi, 0); | ||
351 | |||
352 | return 0; | ||
353 | } | ||
354 | |||
355 | static int orion_spi_setup(struct spi_device *spi) | ||
356 | { | ||
357 | struct orion_spi *orion_spi; | ||
358 | |||
359 | orion_spi = spi_master_get_devdata(spi->master); | ||
360 | |||
361 | if (spi->mode) { | ||
362 | dev_err(&spi->dev, "setup: unsupported mode bits %x\n", | ||
363 | spi->mode); | ||
364 | return -EINVAL; | ||
365 | } | ||
366 | |||
367 | if (spi->bits_per_word == 0) | ||
368 | spi->bits_per_word = 8; | ||
369 | |||
370 | if ((spi->max_speed_hz == 0) | ||
371 | || (spi->max_speed_hz > orion_spi->max_speed)) | ||
372 | spi->max_speed_hz = orion_spi->max_speed; | ||
373 | |||
374 | if (spi->max_speed_hz < orion_spi->min_speed) { | ||
375 | dev_err(&spi->dev, "setup: requested speed too low %d Hz\n", | ||
376 | spi->max_speed_hz); | ||
377 | return -EINVAL; | ||
378 | } | ||
379 | |||
380 | /* | ||
381 | * baudrate & width will be set orion_spi_setup_transfer | ||
382 | */ | ||
383 | return 0; | ||
384 | } | ||
385 | |||
386 | static int orion_spi_transfer(struct spi_device *spi, struct spi_message *m) | ||
387 | { | ||
388 | struct orion_spi *orion_spi; | ||
389 | struct spi_transfer *t = NULL; | ||
390 | unsigned long flags; | ||
391 | |||
392 | m->actual_length = 0; | ||
393 | m->status = 0; | ||
394 | |||
395 | /* reject invalid messages and transfers */ | ||
396 | if (list_empty(&m->transfers) || !m->complete) | ||
397 | return -EINVAL; | ||
398 | |||
399 | orion_spi = spi_master_get_devdata(spi->master); | ||
400 | |||
401 | list_for_each_entry(t, &m->transfers, transfer_list) { | ||
402 | unsigned int bits_per_word = spi->bits_per_word; | ||
403 | |||
404 | if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) { | ||
405 | dev_err(&spi->dev, | ||
406 | "message rejected : " | ||
407 | "invalid transfer data buffers\n"); | ||
408 | goto msg_rejected; | ||
409 | } | ||
410 | |||
411 | if ((t != NULL) && t->bits_per_word) | ||
412 | bits_per_word = t->bits_per_word; | ||
413 | |||
414 | if ((bits_per_word != 8) && (bits_per_word != 16)) { | ||
415 | dev_err(&spi->dev, | ||
416 | "message rejected : " | ||
417 | "invalid transfer bits_per_word (%d bits)\n", | ||
418 | bits_per_word); | ||
419 | goto msg_rejected; | ||
420 | } | ||
421 | /*make sure buffer length is even when working in 16 bit mode*/ | ||
422 | if ((t != NULL) && (t->bits_per_word == 16) && (t->len & 1)) { | ||
423 | dev_err(&spi->dev, | ||
424 | "message rejected : " | ||
425 | "odd data length (%d) while in 16 bit mode\n", | ||
426 | t->len); | ||
427 | goto msg_rejected; | ||
428 | } | ||
429 | |||
430 | if (t->speed_hz < orion_spi->min_speed) { | ||
431 | dev_err(&spi->dev, | ||
432 | "message rejected : " | ||
433 | "device min speed (%d Hz) exceeds " | ||
434 | "required transfer speed (%d Hz)\n", | ||
435 | orion_spi->min_speed, t->speed_hz); | ||
436 | goto msg_rejected; | ||
437 | } | ||
438 | } | ||
439 | |||
440 | |||
441 | spin_lock_irqsave(&orion_spi->lock, flags); | ||
442 | list_add_tail(&m->queue, &orion_spi->msg_queue); | ||
443 | queue_work(orion_spi_wq, &orion_spi->work); | ||
444 | spin_unlock_irqrestore(&orion_spi->lock, flags); | ||
445 | |||
446 | return 0; | ||
447 | msg_rejected: | ||
448 | /* Message rejected and not queued */ | ||
449 | m->status = -EINVAL; | ||
450 | if (m->complete) | ||
451 | m->complete(m->context); | ||
452 | return -EINVAL; | ||
453 | } | ||
454 | |||
455 | static int __init orion_spi_probe(struct platform_device *pdev) | ||
456 | { | ||
457 | struct spi_master *master; | ||
458 | struct orion_spi *spi; | ||
459 | struct resource *r; | ||
460 | struct orion_spi_info *spi_info; | ||
461 | int status = 0; | ||
462 | |||
463 | spi_info = pdev->dev.platform_data; | ||
464 | |||
465 | master = spi_alloc_master(&pdev->dev, sizeof *spi); | ||
466 | if (master == NULL) { | ||
467 | dev_dbg(&pdev->dev, "master allocation failed\n"); | ||
468 | return -ENOMEM; | ||
469 | } | ||
470 | |||
471 | if (pdev->id != -1) | ||
472 | master->bus_num = pdev->id; | ||
473 | |||
474 | master->setup = orion_spi_setup; | ||
475 | master->transfer = orion_spi_transfer; | ||
476 | master->num_chipselect = ORION_NUM_CHIPSELECTS; | ||
477 | |||
478 | dev_set_drvdata(&pdev->dev, master); | ||
479 | |||
480 | spi = spi_master_get_devdata(master); | ||
481 | spi->master = master; | ||
482 | spi->spi_info = spi_info; | ||
483 | |||
484 | spi->max_speed = DIV_ROUND_UP(spi_info->tclk, 4); | ||
485 | spi->min_speed = DIV_ROUND_UP(spi_info->tclk, 30); | ||
486 | |||
487 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
488 | if (r == NULL) { | ||
489 | status = -ENODEV; | ||
490 | goto out; | ||
491 | } | ||
492 | |||
493 | if (!request_mem_region(r->start, (r->end - r->start) + 1, | ||
494 | pdev->dev.bus_id)) { | ||
495 | status = -EBUSY; | ||
496 | goto out; | ||
497 | } | ||
498 | spi->base = ioremap(r->start, SZ_1K); | ||
499 | |||
500 | INIT_WORK(&spi->work, orion_spi_work); | ||
501 | |||
502 | spin_lock_init(&spi->lock); | ||
503 | INIT_LIST_HEAD(&spi->msg_queue); | ||
504 | |||
505 | if (orion_spi_reset(spi) < 0) | ||
506 | goto out_rel_mem; | ||
507 | |||
508 | status = spi_register_master(master); | ||
509 | if (status < 0) | ||
510 | goto out_rel_mem; | ||
511 | |||
512 | return status; | ||
513 | |||
514 | out_rel_mem: | ||
515 | release_mem_region(r->start, (r->end - r->start) + 1); | ||
516 | |||
517 | out: | ||
518 | spi_master_put(master); | ||
519 | return status; | ||
520 | } | ||
521 | |||
522 | |||
523 | static int __exit orion_spi_remove(struct platform_device *pdev) | ||
524 | { | ||
525 | struct spi_master *master; | ||
526 | struct orion_spi *spi; | ||
527 | struct resource *r; | ||
528 | |||
529 | master = dev_get_drvdata(&pdev->dev); | ||
530 | spi = spi_master_get_devdata(master); | ||
531 | |||
532 | cancel_work_sync(&spi->work); | ||
533 | |||
534 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
535 | release_mem_region(r->start, (r->end - r->start) + 1); | ||
536 | |||
537 | spi_unregister_master(master); | ||
538 | |||
539 | return 0; | ||
540 | } | ||
541 | |||
542 | MODULE_ALIAS("platform:" DRIVER_NAME); | ||
543 | |||
544 | static struct platform_driver orion_spi_driver = { | ||
545 | .driver = { | ||
546 | .name = DRIVER_NAME, | ||
547 | .owner = THIS_MODULE, | ||
548 | }, | ||
549 | .remove = __exit_p(orion_spi_remove), | ||
550 | }; | ||
551 | |||
552 | static int __init orion_spi_init(void) | ||
553 | { | ||
554 | orion_spi_wq = create_singlethread_workqueue( | ||
555 | orion_spi_driver.driver.name); | ||
556 | if (orion_spi_wq == NULL) | ||
557 | return -ENOMEM; | ||
558 | |||
559 | return platform_driver_probe(&orion_spi_driver, orion_spi_probe); | ||
560 | } | ||
561 | module_init(orion_spi_init); | ||
562 | |||
563 | static void __exit orion_spi_exit(void) | ||
564 | { | ||
565 | flush_workqueue(orion_spi_wq); | ||
566 | platform_driver_unregister(&orion_spi_driver); | ||
567 | |||
568 | destroy_workqueue(orion_spi_wq); | ||
569 | } | ||
570 | module_exit(orion_spi_exit); | ||
571 | |||
572 | MODULE_DESCRIPTION("Orion SPI driver"); | ||
573 | MODULE_AUTHOR("Shadi Ammouri <shadi@marvell.com>"); | ||
574 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index 067299d6d192..34c7c9875681 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c | |||
@@ -31,15 +31,14 @@ | |||
31 | 31 | ||
32 | #include <asm/io.h> | 32 | #include <asm/io.h> |
33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
34 | #include <asm/hardware.h> | ||
35 | #include <asm/delay.h> | 34 | #include <asm/delay.h> |
36 | #include <asm/dma.h> | 35 | #include <asm/dma.h> |
37 | 36 | ||
38 | #include <asm/arch/hardware.h> | 37 | #include <mach/hardware.h> |
39 | #include <asm/arch/pxa-regs.h> | 38 | #include <mach/pxa-regs.h> |
40 | #include <asm/arch/regs-ssp.h> | 39 | #include <mach/regs-ssp.h> |
41 | #include <asm/arch/ssp.h> | 40 | #include <mach/ssp.h> |
42 | #include <asm/arch/pxa2xx_spi.h> | 41 | #include <mach/pxa2xx_spi.h> |
43 | 42 | ||
44 | MODULE_AUTHOR("Stephen Street"); | 43 | MODULE_AUTHOR("Stephen Street"); |
45 | MODULE_DESCRIPTION("PXA2xx SSP SPI Controller"); | 44 | MODULE_DESCRIPTION("PXA2xx SSP SPI Controller"); |
diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c index 6fb77fcc4971..61ba147e384d 100644 --- a/drivers/spi/spi_imx.c +++ b/drivers/spi/spi_imx.c | |||
@@ -33,12 +33,11 @@ | |||
33 | 33 | ||
34 | #include <asm/io.h> | 34 | #include <asm/io.h> |
35 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
36 | #include <asm/hardware.h> | ||
37 | #include <asm/delay.h> | 36 | #include <asm/delay.h> |
38 | 37 | ||
39 | #include <asm/arch/hardware.h> | 38 | #include <mach/hardware.h> |
40 | #include <asm/arch/imx-dma.h> | 39 | #include <mach/imx-dma.h> |
41 | #include <asm/arch/spi_imx.h> | 40 | #include <mach/spi_imx.h> |
42 | 41 | ||
43 | /*-------------------------------------------------------------------------*/ | 42 | /*-------------------------------------------------------------------------*/ |
44 | /* SPI Registers offsets from peripheral base address */ | 43 | /* SPI Registers offsets from peripheral base address */ |
diff --git a/drivers/spi/spi_s3c24xx.c b/drivers/spi/spi_s3c24xx.c index 1c643c9e1f15..98abc73c1a1d 100644 --- a/drivers/spi/spi_s3c24xx.c +++ b/drivers/spi/spi_s3c24xx.c | |||
@@ -25,11 +25,11 @@ | |||
25 | 25 | ||
26 | #include <asm/io.h> | 26 | #include <asm/io.h> |
27 | #include <asm/dma.h> | 27 | #include <asm/dma.h> |
28 | #include <asm/hardware.h> | 28 | #include <mach/hardware.h> |
29 | 29 | ||
30 | #include <asm/arch/regs-gpio.h> | 30 | #include <mach/regs-gpio.h> |
31 | #include <asm/plat-s3c24xx/regs-spi.h> | 31 | #include <asm/plat-s3c24xx/regs-spi.h> |
32 | #include <asm/arch/spi.h> | 32 | #include <mach/spi.h> |
33 | 33 | ||
34 | struct s3c24xx_spi { | 34 | struct s3c24xx_spi { |
35 | /* bitbang has to be first */ | 35 | /* bitbang has to be first */ |
@@ -236,6 +236,19 @@ static irqreturn_t s3c24xx_spi_irq(int irq, void *dev) | |||
236 | return IRQ_HANDLED; | 236 | return IRQ_HANDLED; |
237 | } | 237 | } |
238 | 238 | ||
239 | static void s3c24xx_spi_initialsetup(struct s3c24xx_spi *hw) | ||
240 | { | ||
241 | /* for the moment, permanently enable the clock */ | ||
242 | |||
243 | clk_enable(hw->clk); | ||
244 | |||
245 | /* program defaults into the registers */ | ||
246 | |||
247 | writeb(0xff, hw->regs + S3C2410_SPPRE); | ||
248 | writeb(SPPIN_DEFAULT, hw->regs + S3C2410_SPPIN); | ||
249 | writeb(SPCON_DEFAULT, hw->regs + S3C2410_SPCON); | ||
250 | } | ||
251 | |||
239 | static int __init s3c24xx_spi_probe(struct platform_device *pdev) | 252 | static int __init s3c24xx_spi_probe(struct platform_device *pdev) |
240 | { | 253 | { |
241 | struct s3c2410_spi_info *pdata; | 254 | struct s3c2410_spi_info *pdata; |
@@ -327,15 +340,7 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev) | |||
327 | goto err_no_clk; | 340 | goto err_no_clk; |
328 | } | 341 | } |
329 | 342 | ||
330 | /* for the moment, permanently enable the clock */ | 343 | s3c24xx_spi_initialsetup(hw); |
331 | |||
332 | clk_enable(hw->clk); | ||
333 | |||
334 | /* program defaults into the registers */ | ||
335 | |||
336 | writeb(0xff, hw->regs + S3C2410_SPPRE); | ||
337 | writeb(SPPIN_DEFAULT, hw->regs + S3C2410_SPPIN); | ||
338 | writeb(SPCON_DEFAULT, hw->regs + S3C2410_SPCON); | ||
339 | 344 | ||
340 | /* setup any gpio we can */ | 345 | /* setup any gpio we can */ |
341 | 346 | ||
@@ -415,7 +420,7 @@ static int s3c24xx_spi_resume(struct platform_device *pdev) | |||
415 | { | 420 | { |
416 | struct s3c24xx_spi *hw = platform_get_drvdata(pdev); | 421 | struct s3c24xx_spi *hw = platform_get_drvdata(pdev); |
417 | 422 | ||
418 | clk_enable(hw->clk); | 423 | s3c24xx_spi_initialsetup(hw); |
419 | return 0; | 424 | return 0; |
420 | } | 425 | } |
421 | 426 | ||
diff --git a/drivers/spi/spi_s3c24xx_gpio.c b/drivers/spi/spi_s3c24xx_gpio.c index e33f6145c560..cc1f647f579b 100644 --- a/drivers/spi/spi_s3c24xx_gpio.c +++ b/drivers/spi/spi_s3c24xx_gpio.c | |||
@@ -21,9 +21,9 @@ | |||
21 | #include <linux/spi/spi.h> | 21 | #include <linux/spi/spi.h> |
22 | #include <linux/spi/spi_bitbang.h> | 22 | #include <linux/spi/spi_bitbang.h> |
23 | 23 | ||
24 | #include <asm/arch/regs-gpio.h> | 24 | #include <mach/regs-gpio.h> |
25 | #include <asm/arch/spi-gpio.h> | 25 | #include <mach/spi-gpio.h> |
26 | #include <asm/hardware.h> | 26 | #include <mach/hardware.h> |
27 | 27 | ||
28 | struct s3c2410_spigpio { | 28 | struct s3c2410_spigpio { |
29 | struct spi_bitbang bitbang; | 29 | struct spi_bitbang bitbang; |
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 2fcc06eb5e60..586d6f1376cf 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c | |||
@@ -389,7 +389,6 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev, | |||
389 | if (io->entries <= 0) | 389 | if (io->entries <= 0) |
390 | return io->entries; | 390 | return io->entries; |
391 | 391 | ||
392 | io->count = io->entries; | ||
393 | io->urbs = kmalloc(io->entries * sizeof *io->urbs, mem_flags); | 392 | io->urbs = kmalloc(io->entries * sizeof *io->urbs, mem_flags); |
394 | if (!io->urbs) | 393 | if (!io->urbs) |
395 | goto nomem; | 394 | goto nomem; |
@@ -458,6 +457,7 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev, | |||
458 | io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT; | 457 | io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT; |
459 | 458 | ||
460 | /* transaction state */ | 459 | /* transaction state */ |
460 | io->count = io->entries; | ||
461 | io->status = 0; | 461 | io->status = 0; |
462 | io->bytes = 0; | 462 | io->bytes = 0; |
463 | init_completion(&io->complete); | 463 | init_completion(&io->complete); |
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index e2d8a5d86c40..a8a1de413321 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c | |||
@@ -40,16 +40,15 @@ | |||
40 | #include <linux/usb/gadget.h> | 40 | #include <linux/usb/gadget.h> |
41 | 41 | ||
42 | #include <asm/byteorder.h> | 42 | #include <asm/byteorder.h> |
43 | #include <asm/hardware.h> | 43 | #include <mach/hardware.h> |
44 | #include <asm/io.h> | 44 | #include <asm/io.h> |
45 | #include <asm/irq.h> | 45 | #include <asm/irq.h> |
46 | #include <asm/system.h> | 46 | #include <asm/system.h> |
47 | #include <asm/mach-types.h> | ||
48 | #include <asm/gpio.h> | 47 | #include <asm/gpio.h> |
49 | 48 | ||
50 | #include <asm/arch/board.h> | 49 | #include <mach/board.h> |
51 | #include <asm/arch/cpu.h> | 50 | #include <mach/cpu.h> |
52 | #include <asm/arch/at91sam9261_matrix.h> | 51 | #include <mach/at91sam9261_matrix.h> |
53 | 52 | ||
54 | #include "at91_udc.h" | 53 | #include "at91_udc.h" |
55 | 54 | ||
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c index 07e5a0b5dcda..ae30ab1d264f 100644 --- a/drivers/usb/gadget/atmel_usba_udc.c +++ b/drivers/usb/gadget/atmel_usba_udc.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | 23 | ||
24 | #include <asm/gpio.h> | 24 | #include <asm/gpio.h> |
25 | #include <asm/arch/board.h> | 25 | #include <mach/board.h> |
26 | 26 | ||
27 | #include "atmel_usba_udc.h" | 27 | #include "atmel_usba_udc.h" |
28 | 28 | ||
@@ -334,7 +334,7 @@ static void toggle_bias(int is_on) | |||
334 | 334 | ||
335 | #elif defined(CONFIG_ARCH_AT91) | 335 | #elif defined(CONFIG_ARCH_AT91) |
336 | 336 | ||
337 | #include <asm/arch/at91_pmc.h> | 337 | #include <mach/at91_pmc.h> |
338 | 338 | ||
339 | static void toggle_bias(int is_on) | 339 | static void toggle_bias(int is_on) |
340 | { | 340 | { |
diff --git a/drivers/usb/gadget/lh7a40x_udc.h b/drivers/usb/gadget/lh7a40x_udc.h index 1ecfd6366b9a..ca861203a301 100644 --- a/drivers/usb/gadget/lh7a40x_udc.h +++ b/drivers/usb/gadget/lh7a40x_udc.h | |||
@@ -47,7 +47,7 @@ | |||
47 | #include <asm/irq.h> | 47 | #include <asm/irq.h> |
48 | #include <asm/system.h> | 48 | #include <asm/system.h> |
49 | #include <asm/unaligned.h> | 49 | #include <asm/unaligned.h> |
50 | #include <asm/hardware.h> | 50 | #include <mach/hardware.h> |
51 | 51 | ||
52 | #include <linux/usb/ch9.h> | 52 | #include <linux/usb/ch9.h> |
53 | #include <linux/usb/gadget.h> | 53 | #include <linux/usb/gadget.h> |
diff --git a/drivers/usb/gadget/omap_udc.c b/drivers/usb/gadget/omap_udc.c index 395bd1844482..376e80c07530 100644 --- a/drivers/usb/gadget/omap_udc.c +++ b/drivers/usb/gadget/omap_udc.c | |||
@@ -52,8 +52,8 @@ | |||
52 | #include <asm/unaligned.h> | 52 | #include <asm/unaligned.h> |
53 | #include <asm/mach-types.h> | 53 | #include <asm/mach-types.h> |
54 | 54 | ||
55 | #include <asm/arch/dma.h> | 55 | #include <mach/dma.h> |
56 | #include <asm/arch/usb.h> | 56 | #include <mach/usb.h> |
57 | 57 | ||
58 | #include "omap_udc.h" | 58 | #include "omap_udc.h" |
59 | 59 | ||
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c index 7e6725d89976..da6e93c201d2 100644 --- a/drivers/usb/gadget/pxa25x_udc.c +++ b/drivers/usb/gadget/pxa25x_udc.c | |||
@@ -61,7 +61,7 @@ | |||
61 | * This driver is PXA25x only. Grab the right register definitions. | 61 | * This driver is PXA25x only. Grab the right register definitions. |
62 | */ | 62 | */ |
63 | #ifdef CONFIG_ARCH_PXA | 63 | #ifdef CONFIG_ARCH_PXA |
64 | #include <asm/arch/pxa25x-udc.h> | 64 | #include <mach/pxa25x-udc.h> |
65 | #endif | 65 | #endif |
66 | 66 | ||
67 | #include <asm/mach/udc_pxa2xx.h> | 67 | #include <asm/mach/udc_pxa2xx.h> |
diff --git a/drivers/usb/gadget/pxa25x_udc.h b/drivers/usb/gadget/pxa25x_udc.h index c8a13215e02c..1d51aa21e6eb 100644 --- a/drivers/usb/gadget/pxa25x_udc.h +++ b/drivers/usb/gadget/pxa25x_udc.h | |||
@@ -139,7 +139,7 @@ struct pxa25x_udc { | |||
139 | /*-------------------------------------------------------------------------*/ | 139 | /*-------------------------------------------------------------------------*/ |
140 | 140 | ||
141 | #ifdef CONFIG_ARCH_LUBBOCK | 141 | #ifdef CONFIG_ARCH_LUBBOCK |
142 | #include <asm/arch/lubbock.h> | 142 | #include <mach/lubbock.h> |
143 | /* lubbock can also report usb connect/disconnect irqs */ | 143 | /* lubbock can also report usb connect/disconnect irqs */ |
144 | #endif | 144 | #endif |
145 | 145 | ||
diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c index 9d447d8cfc0c..a28513ecbe5b 100644 --- a/drivers/usb/gadget/pxa27x_udc.c +++ b/drivers/usb/gadget/pxa27x_udc.c | |||
@@ -33,13 +33,13 @@ | |||
33 | #include <linux/irq.h> | 33 | #include <linux/irq.h> |
34 | 34 | ||
35 | #include <asm/byteorder.h> | 35 | #include <asm/byteorder.h> |
36 | #include <asm/hardware.h> | 36 | #include <mach/hardware.h> |
37 | 37 | ||
38 | #include <linux/usb.h> | 38 | #include <linux/usb.h> |
39 | #include <linux/usb/ch9.h> | 39 | #include <linux/usb/ch9.h> |
40 | #include <linux/usb/gadget.h> | 40 | #include <linux/usb/gadget.h> |
41 | #include <asm/arch/pxa2xx-regs.h> /* FIXME: for PSSR */ | 41 | #include <mach/pxa2xx-regs.h> /* FIXME: for PSSR */ |
42 | #include <asm/arch/udc.h> | 42 | #include <mach/udc.h> |
43 | 43 | ||
44 | #include "pxa27x_udc.h" | 44 | #include "pxa27x_udc.h" |
45 | 45 | ||
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c index 6b1ef488043b..538807384592 100644 --- a/drivers/usb/gadget/s3c2410_udc.c +++ b/drivers/usb/gadget/s3c2410_udc.c | |||
@@ -49,15 +49,14 @@ | |||
49 | #include <asm/irq.h> | 49 | #include <asm/irq.h> |
50 | #include <asm/system.h> | 50 | #include <asm/system.h> |
51 | #include <asm/unaligned.h> | 51 | #include <asm/unaligned.h> |
52 | #include <asm/arch/irqs.h> | 52 | #include <mach/irqs.h> |
53 | 53 | ||
54 | #include <asm/arch/hardware.h> | 54 | #include <mach/hardware.h> |
55 | #include <asm/arch/regs-gpio.h> | 55 | #include <mach/regs-gpio.h> |
56 | 56 | ||
57 | #include <asm/plat-s3c24xx/regs-udc.h> | 57 | #include <asm/plat-s3c24xx/regs-udc.h> |
58 | #include <asm/plat-s3c24xx/udc.h> | 58 | #include <asm/plat-s3c24xx/udc.h> |
59 | 59 | ||
60 | #include <asm/mach-types.h> | ||
61 | 60 | ||
62 | #include "s3c2410_udc.h" | 61 | #include "s3c2410_udc.h" |
63 | 62 | ||
@@ -888,7 +887,7 @@ static void s3c2410_udc_handle_ep(struct s3c2410_ep *ep) | |||
888 | } | 887 | } |
889 | } | 888 | } |
890 | 889 | ||
891 | #include <asm/arch/regs-irq.h> | 890 | #include <mach/regs-irq.h> |
892 | 891 | ||
893 | /* | 892 | /* |
894 | * s3c2410_udc_irq - interrupt handler | 893 | * s3c2410_udc_irq - interrupt handler |
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index a5d8e550d897..6db7a2889e66 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c | |||
@@ -15,12 +15,11 @@ | |||
15 | #include <linux/clk.h> | 15 | #include <linux/clk.h> |
16 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
17 | 17 | ||
18 | #include <asm/mach-types.h> | 18 | #include <mach/hardware.h> |
19 | #include <asm/hardware.h> | ||
20 | #include <asm/gpio.h> | 19 | #include <asm/gpio.h> |
21 | 20 | ||
22 | #include <asm/arch/board.h> | 21 | #include <mach/board.h> |
23 | #include <asm/arch/cpu.h> | 22 | #include <mach/cpu.h> |
24 | 23 | ||
25 | #ifndef CONFIG_ARCH_AT91 | 24 | #ifndef CONFIG_ARCH_AT91 |
26 | #error "CONFIG_ARCH_AT91 must be defined." | 25 | #error "CONFIG_ARCH_AT91 must be defined." |
diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c index 5adaf36e47d0..cb0b506f8259 100644 --- a/drivers/usb/host/ohci-ep93xx.c +++ b/drivers/usb/host/ohci-ep93xx.c | |||
@@ -28,8 +28,7 @@ | |||
28 | #include <linux/signal.h> | 28 | #include <linux/signal.h> |
29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
30 | 30 | ||
31 | #include <asm/mach-types.h> | 31 | #include <mach/hardware.h> |
32 | #include <asm/hardware.h> | ||
33 | 32 | ||
34 | static struct clk *usb_host_clock; | 33 | static struct clk *usb_host_clock; |
35 | 34 | ||
diff --git a/drivers/usb/host/ohci-lh7a404.c b/drivers/usb/host/ohci-lh7a404.c index 1ef5d482c145..9e31d440d115 100644 --- a/drivers/usb/host/ohci-lh7a404.c +++ b/drivers/usb/host/ohci-lh7a404.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/signal.h> | 20 | #include <linux/signal.h> |
21 | 21 | ||
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | 23 | ||
24 | 24 | ||
25 | extern int usb_disabled(void); | 25 | extern int usb_disabled(void); |
diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c index 6e5e5f81ac90..94dfca02f7e1 100644 --- a/drivers/usb/host/ohci-omap.c +++ b/drivers/usb/host/ohci-omap.c | |||
@@ -19,15 +19,15 @@ | |||
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/clk.h> | 20 | #include <linux/clk.h> |
21 | 21 | ||
22 | #include <asm/hardware.h> | 22 | #include <mach/hardware.h> |
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/mach-types.h> | 24 | #include <asm/mach-types.h> |
25 | 25 | ||
26 | #include <asm/arch/mux.h> | 26 | #include <mach/mux.h> |
27 | #include <asm/arch/irqs.h> | 27 | #include <mach/irqs.h> |
28 | #include <asm/arch/gpio.h> | 28 | #include <mach/gpio.h> |
29 | #include <asm/arch/fpga.h> | 29 | #include <mach/fpga.h> |
30 | #include <asm/arch/usb.h> | 30 | #include <mach/usb.h> |
31 | 31 | ||
32 | 32 | ||
33 | /* OMAP-1510 OHCI has its own MMU for DMA */ | 33 | /* OMAP-1510 OHCI has its own MMU for DMA */ |
diff --git a/drivers/usb/host/ohci-pnx4008.c b/drivers/usb/host/ohci-pnx4008.c index 6ad8f2fc57b9..b02cd0761977 100644 --- a/drivers/usb/host/ohci-pnx4008.c +++ b/drivers/usb/host/ohci-pnx4008.c | |||
@@ -21,13 +21,12 @@ | |||
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
23 | 23 | ||
24 | #include <asm/hardware.h> | 24 | #include <mach/hardware.h> |
25 | #include <asm/io.h> | 25 | #include <asm/io.h> |
26 | #include <asm/mach-types.h> | ||
27 | 26 | ||
28 | #include <asm/arch/platform.h> | 27 | #include <mach/platform.h> |
29 | #include <asm/arch/irqs.h> | 28 | #include <mach/irqs.h> |
30 | #include <asm/arch/gpio.h> | 29 | #include <mach/gpio.h> |
31 | 30 | ||
32 | #define USB_CTRL IO_ADDRESS(PNX4008_PWRMAN_BASE + 0x64) | 31 | #define USB_CTRL IO_ADDRESS(PNX4008_PWRMAN_BASE + 0x64) |
33 | 32 | ||
diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c index 127b15799024..8c9c4849db6e 100644 --- a/drivers/usb/host/ohci-pxa27x.c +++ b/drivers/usb/host/ohci-pxa27x.c | |||
@@ -24,11 +24,10 @@ | |||
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/clk.h> | 25 | #include <linux/clk.h> |
26 | 26 | ||
27 | #include <asm/mach-types.h> | 27 | #include <mach/hardware.h> |
28 | #include <asm/hardware.h> | 28 | #include <mach/pxa-regs.h> |
29 | #include <asm/arch/pxa-regs.h> | 29 | #include <mach/pxa2xx-regs.h> /* FIXME: for PSSR */ |
30 | #include <asm/arch/pxa2xx-regs.h> /* FIXME: for PSSR */ | 30 | #include <mach/ohci.h> |
31 | #include <asm/arch/ohci.h> | ||
32 | 31 | ||
33 | #define PXA_UHC_MAX_PORTNUM 3 | 32 | #define PXA_UHC_MAX_PORTNUM 3 |
34 | 33 | ||
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c index 3c7a740cfe0c..9e3dc4069e8b 100644 --- a/drivers/usb/host/ohci-s3c2410.c +++ b/drivers/usb/host/ohci-s3c2410.c | |||
@@ -22,8 +22,8 @@ | |||
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
24 | 24 | ||
25 | #include <asm/hardware.h> | 25 | #include <mach/hardware.h> |
26 | #include <asm/arch/usb-control.h> | 26 | #include <mach/usb-control.h> |
27 | 27 | ||
28 | #define valid_port(idx) ((idx) == 1 || (idx) == 2) | 28 | #define valid_port(idx) ((idx) == 1 || (idx) == 2) |
29 | 29 | ||
diff --git a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c index 2e9dceb9bb99..4626b002e670 100644 --- a/drivers/usb/host/ohci-sa1111.c +++ b/drivers/usb/host/ohci-sa1111.c | |||
@@ -13,10 +13,10 @@ | |||
13 | * This file is licenced under the GPL. | 13 | * This file is licenced under the GPL. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <asm/hardware.h> | 16 | #include <mach/hardware.h> |
17 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
18 | #include <asm/arch/assabet.h> | 18 | #include <mach/assabet.h> |
19 | #include <asm/arch/badge4.h> | 19 | #include <mach/badge4.h> |
20 | #include <asm/hardware/sa1111.h> | 20 | #include <asm/hardware/sa1111.h> |
21 | 21 | ||
22 | #ifndef CONFIG_SA1111 | 22 | #ifndef CONFIG_SA1111 |
diff --git a/drivers/usb/storage/freecom.c b/drivers/usb/storage/freecom.c index 7a4d45677227..73ac7262239e 100644 --- a/drivers/usb/storage/freecom.c +++ b/drivers/usb/storage/freecom.c | |||
@@ -26,8 +26,6 @@ | |||
26 | * (http://www.freecom.de/) | 26 | * (http://www.freecom.de/) |
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <linux/hdreg.h> | ||
30 | |||
31 | #include <scsi/scsi.h> | 29 | #include <scsi/scsi.h> |
32 | #include <scsi/scsi_cmnd.h> | 30 | #include <scsi/scsi_cmnd.h> |
33 | 31 | ||
diff --git a/drivers/video/acornfb.c b/drivers/video/acornfb.c index 017233d0c481..61c3d3f40fd1 100644 --- a/drivers/video/acornfb.c +++ b/drivers/video/acornfb.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
30 | #include <linux/dma-mapping.h> | 30 | #include <linux/dma-mapping.h> |
31 | 31 | ||
32 | #include <asm/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <asm/io.h> | 33 | #include <asm/io.h> |
34 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
35 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
@@ -339,7 +339,7 @@ acornfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
339 | #endif | 339 | #endif |
340 | 340 | ||
341 | #ifdef HAS_VIDC20 | 341 | #ifdef HAS_VIDC20 |
342 | #include <asm/arch/acornfb.h> | 342 | #include <mach/acornfb.h> |
343 | 343 | ||
344 | #define MAX_SIZE 2*1024*1024 | 344 | #define MAX_SIZE 2*1024*1024 |
345 | 345 | ||
diff --git a/drivers/video/am200epd.c b/drivers/video/am200epd.c index 32dd85126931..0c35b8b0160e 100644 --- a/drivers/video/am200epd.c +++ b/drivers/video/am200epd.c | |||
@@ -33,7 +33,7 @@ | |||
33 | 33 | ||
34 | #include <video/metronomefb.h> | 34 | #include <video/metronomefb.h> |
35 | 35 | ||
36 | #include <asm/arch/pxa-regs.h> | 36 | #include <mach/pxa-regs.h> |
37 | 37 | ||
38 | /* register offsets for gpio control */ | 38 | /* register offsets for gpio control */ |
39 | #define LED_GPIO_PIN 51 | 39 | #define LED_GPIO_PIN 51 |
diff --git a/drivers/video/arkfb.c b/drivers/video/arkfb.c index 38a1e8308c83..4bd569e479a7 100644 --- a/drivers/video/arkfb.c +++ b/drivers/video/arkfb.c | |||
@@ -958,20 +958,20 @@ static int __devinit ark_pci_probe(struct pci_dev *dev, const struct pci_device_ | |||
958 | /* Prepare PCI device */ | 958 | /* Prepare PCI device */ |
959 | rc = pci_enable_device(dev); | 959 | rc = pci_enable_device(dev); |
960 | if (rc < 0) { | 960 | if (rc < 0) { |
961 | dev_err(info->dev, "cannot enable PCI device\n"); | 961 | dev_err(info->device, "cannot enable PCI device\n"); |
962 | goto err_enable_device; | 962 | goto err_enable_device; |
963 | } | 963 | } |
964 | 964 | ||
965 | rc = pci_request_regions(dev, "arkfb"); | 965 | rc = pci_request_regions(dev, "arkfb"); |
966 | if (rc < 0) { | 966 | if (rc < 0) { |
967 | dev_err(info->dev, "cannot reserve framebuffer region\n"); | 967 | dev_err(info->device, "cannot reserve framebuffer region\n"); |
968 | goto err_request_regions; | 968 | goto err_request_regions; |
969 | } | 969 | } |
970 | 970 | ||
971 | par->dac = ics5342_init(ark_dac_read_regs, ark_dac_write_regs, info); | 971 | par->dac = ics5342_init(ark_dac_read_regs, ark_dac_write_regs, info); |
972 | if (! par->dac) { | 972 | if (! par->dac) { |
973 | rc = -ENOMEM; | 973 | rc = -ENOMEM; |
974 | dev_err(info->dev, "RAMDAC initialization failed\n"); | 974 | dev_err(info->device, "RAMDAC initialization failed\n"); |
975 | goto err_dac; | 975 | goto err_dac; |
976 | } | 976 | } |
977 | 977 | ||
@@ -982,7 +982,7 @@ static int __devinit ark_pci_probe(struct pci_dev *dev, const struct pci_device_ | |||
982 | info->screen_base = pci_iomap(dev, 0, 0); | 982 | info->screen_base = pci_iomap(dev, 0, 0); |
983 | if (! info->screen_base) { | 983 | if (! info->screen_base) { |
984 | rc = -ENOMEM; | 984 | rc = -ENOMEM; |
985 | dev_err(info->dev, "iomap for framebuffer failed\n"); | 985 | dev_err(info->device, "iomap for framebuffer failed\n"); |
986 | goto err_iomap; | 986 | goto err_iomap; |
987 | } | 987 | } |
988 | 988 | ||
@@ -1004,19 +1004,19 @@ static int __devinit ark_pci_probe(struct pci_dev *dev, const struct pci_device_ | |||
1004 | rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); | 1004 | rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); |
1005 | if (! ((rc == 1) || (rc == 2))) { | 1005 | if (! ((rc == 1) || (rc == 2))) { |
1006 | rc = -EINVAL; | 1006 | rc = -EINVAL; |
1007 | dev_err(info->dev, "mode %s not found\n", mode_option); | 1007 | dev_err(info->device, "mode %s not found\n", mode_option); |
1008 | goto err_find_mode; | 1008 | goto err_find_mode; |
1009 | } | 1009 | } |
1010 | 1010 | ||
1011 | rc = fb_alloc_cmap(&info->cmap, 256, 0); | 1011 | rc = fb_alloc_cmap(&info->cmap, 256, 0); |
1012 | if (rc < 0) { | 1012 | if (rc < 0) { |
1013 | dev_err(info->dev, "cannot allocate colormap\n"); | 1013 | dev_err(info->device, "cannot allocate colormap\n"); |
1014 | goto err_alloc_cmap; | 1014 | goto err_alloc_cmap; |
1015 | } | 1015 | } |
1016 | 1016 | ||
1017 | rc = register_framebuffer(info); | 1017 | rc = register_framebuffer(info); |
1018 | if (rc < 0) { | 1018 | if (rc < 0) { |
1019 | dev_err(info->dev, "cannot register framebugger\n"); | 1019 | dev_err(info->device, "cannot register framebugger\n"); |
1020 | goto err_reg_fb; | 1020 | goto err_reg_fb; |
1021 | } | 1021 | } |
1022 | 1022 | ||
@@ -1090,7 +1090,7 @@ static int ark_pci_suspend (struct pci_dev* dev, pm_message_t state) | |||
1090 | struct fb_info *info = pci_get_drvdata(dev); | 1090 | struct fb_info *info = pci_get_drvdata(dev); |
1091 | struct arkfb_info *par = info->par; | 1091 | struct arkfb_info *par = info->par; |
1092 | 1092 | ||
1093 | dev_info(info->dev, "suspend\n"); | 1093 | dev_info(info->device, "suspend\n"); |
1094 | 1094 | ||
1095 | acquire_console_sem(); | 1095 | acquire_console_sem(); |
1096 | mutex_lock(&(par->open_lock)); | 1096 | mutex_lock(&(par->open_lock)); |
@@ -1121,7 +1121,7 @@ static int ark_pci_resume (struct pci_dev* dev) | |||
1121 | struct fb_info *info = pci_get_drvdata(dev); | 1121 | struct fb_info *info = pci_get_drvdata(dev); |
1122 | struct arkfb_info *par = info->par; | 1122 | struct arkfb_info *par = info->par; |
1123 | 1123 | ||
1124 | dev_info(info->dev, "resume\n"); | 1124 | dev_info(info->device, "resume\n"); |
1125 | 1125 | ||
1126 | acquire_console_sem(); | 1126 | acquire_console_sem(); |
1127 | mutex_lock(&(par->open_lock)); | 1127 | mutex_lock(&(par->open_lock)); |
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index 5b3a15dffb5f..e7018a2f56af 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c | |||
@@ -18,9 +18,9 @@ | |||
18 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
19 | #include <linux/backlight.h> | 19 | #include <linux/backlight.h> |
20 | 20 | ||
21 | #include <asm/arch/board.h> | 21 | #include <mach/board.h> |
22 | #include <asm/arch/cpu.h> | 22 | #include <mach/cpu.h> |
23 | #include <asm/arch/gpio.h> | 23 | #include <mach/gpio.h> |
24 | 24 | ||
25 | #include <video/atmel_lcdc.h> | 25 | #include <video/atmel_lcdc.h> |
26 | 26 | ||
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index 620ba8120368..cc6b470073da 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c | |||
@@ -244,7 +244,7 @@ static int atyfb_sync(struct fb_info *info); | |||
244 | */ | 244 | */ |
245 | 245 | ||
246 | static int aty_init(struct fb_info *info); | 246 | static int aty_init(struct fb_info *info); |
247 | static void aty_resume_chip(struct fb_info *info); | 247 | |
248 | #ifdef CONFIG_ATARI | 248 | #ifdef CONFIG_ATARI |
249 | static int store_video_par(char *videopar, unsigned char m64_num); | 249 | static int store_video_par(char *videopar, unsigned char m64_num); |
250 | #endif | 250 | #endif |
@@ -2023,6 +2023,20 @@ static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state) | |||
2023 | return 0; | 2023 | return 0; |
2024 | } | 2024 | } |
2025 | 2025 | ||
2026 | static void aty_resume_chip(struct fb_info *info) | ||
2027 | { | ||
2028 | struct atyfb_par *par = info->par; | ||
2029 | |||
2030 | aty_st_le32(MEM_CNTL, par->mem_cntl, par); | ||
2031 | |||
2032 | if (par->pll_ops->resume_pll) | ||
2033 | par->pll_ops->resume_pll(info, &par->pll); | ||
2034 | |||
2035 | if (par->aux_start) | ||
2036 | aty_st_le32(BUS_CNTL, | ||
2037 | aty_ld_le32(BUS_CNTL, par) | BUS_APER_REG_DIS, par); | ||
2038 | } | ||
2039 | |||
2026 | static int atyfb_pci_resume(struct pci_dev *pdev) | 2040 | static int atyfb_pci_resume(struct pci_dev *pdev) |
2027 | { | 2041 | { |
2028 | struct fb_info *info = pci_get_drvdata(pdev); | 2042 | struct fb_info *info = pci_get_drvdata(pdev); |
@@ -2659,19 +2673,6 @@ aty_init_exit: | |||
2659 | return ret; | 2673 | return ret; |
2660 | } | 2674 | } |
2661 | 2675 | ||
2662 | static void aty_resume_chip(struct fb_info *info) | ||
2663 | { | ||
2664 | struct atyfb_par *par = info->par; | ||
2665 | |||
2666 | aty_st_le32(MEM_CNTL, par->mem_cntl, par); | ||
2667 | |||
2668 | if (par->pll_ops->resume_pll) | ||
2669 | par->pll_ops->resume_pll(info, &par->pll); | ||
2670 | |||
2671 | if (par->aux_start) | ||
2672 | aty_st_le32(BUS_CNTL, aty_ld_le32(BUS_CNTL, par) | BUS_APER_REG_DIS, par); | ||
2673 | } | ||
2674 | |||
2675 | #ifdef CONFIG_ATARI | 2676 | #ifdef CONFIG_ATARI |
2676 | static int __devinit store_video_par(char *video_str, unsigned char m64_num) | 2677 | static int __devinit store_video_par(char *video_str, unsigned char m64_num) |
2677 | { | 2678 | { |
diff --git a/drivers/video/aty/radeon_accel.c b/drivers/video/aty/radeon_accel.c index 3ca27cb13caa..4d13f68436e6 100644 --- a/drivers/video/aty/radeon_accel.c +++ b/drivers/video/aty/radeon_accel.c | |||
@@ -241,8 +241,8 @@ void radeonfb_engine_reset(struct radeonfb_info *rinfo) | |||
241 | INREG(HOST_PATH_CNTL); | 241 | INREG(HOST_PATH_CNTL); |
242 | OUTREG(HOST_PATH_CNTL, host_path_cntl); | 242 | OUTREG(HOST_PATH_CNTL, host_path_cntl); |
243 | 243 | ||
244 | if (rinfo->family != CHIP_FAMILY_R300 || | 244 | if (rinfo->family != CHIP_FAMILY_R300 && |
245 | rinfo->family != CHIP_FAMILY_R350 || | 245 | rinfo->family != CHIP_FAMILY_R350 && |
246 | rinfo->family != CHIP_FAMILY_RV350) | 246 | rinfo->family != CHIP_FAMILY_RV350) |
247 | OUTREG(RBBM_SOFT_RESET, rbbm_soft_reset); | 247 | OUTREG(RBBM_SOFT_RESET, rbbm_soft_reset); |
248 | 248 | ||
diff --git a/drivers/video/aty/radeon_i2c.c b/drivers/video/aty/radeon_i2c.c index f9e7c29ad9bf..8c8fa35f1b7c 100644 --- a/drivers/video/aty/radeon_i2c.c +++ b/drivers/video/aty/radeon_i2c.c | |||
@@ -69,7 +69,8 @@ static int radeon_setup_i2c_bus(struct radeon_i2c_chan *chan, const char *name) | |||
69 | { | 69 | { |
70 | int rc; | 70 | int rc; |
71 | 71 | ||
72 | strcpy(chan->adapter.name, name); | 72 | snprintf(chan->adapter.name, sizeof(chan->adapter.name), |
73 | "radeonfb %s", name); | ||
73 | chan->adapter.owner = THIS_MODULE; | 74 | chan->adapter.owner = THIS_MODULE; |
74 | chan->adapter.id = I2C_HW_B_RADEON; | 75 | chan->adapter.id = I2C_HW_B_RADEON; |
75 | chan->adapter.algo_data = &chan->algo; | 76 | chan->adapter.algo_data = &chan->algo; |
diff --git a/drivers/video/backlight/omap1_bl.c b/drivers/video/backlight/omap1_bl.c index 891875d53a49..cbad67e89826 100644 --- a/drivers/video/backlight/omap1_bl.c +++ b/drivers/video/backlight/omap1_bl.c | |||
@@ -25,9 +25,9 @@ | |||
25 | #include <linux/fb.h> | 25 | #include <linux/fb.h> |
26 | #include <linux/backlight.h> | 26 | #include <linux/backlight.h> |
27 | 27 | ||
28 | #include <asm/arch/hardware.h> | 28 | #include <mach/hardware.h> |
29 | #include <asm/arch/board.h> | 29 | #include <mach/board.h> |
30 | #include <asm/arch/mux.h> | 30 | #include <mach/mux.h> |
31 | 31 | ||
32 | #define OMAPBL_MAX_INTENSITY 0xff | 32 | #define OMAPBL_MAX_INTENSITY 0xff |
33 | 33 | ||
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index 6338d0e2fe07..ea07258565f0 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c | |||
@@ -68,8 +68,10 @@ static int pwm_backlight_probe(struct platform_device *pdev) | |||
68 | struct pwm_bl_data *pb; | 68 | struct pwm_bl_data *pb; |
69 | int ret; | 69 | int ret; |
70 | 70 | ||
71 | if (!data) | 71 | if (!data) { |
72 | dev_err(&pdev->dev, "failed to find platform data\n"); | ||
72 | return -EINVAL; | 73 | return -EINVAL; |
74 | } | ||
73 | 75 | ||
74 | if (data->init) { | 76 | if (data->init) { |
75 | ret = data->init(&pdev->dev); | 77 | ret = data->init(&pdev->dev); |
@@ -79,6 +81,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) | |||
79 | 81 | ||
80 | pb = kzalloc(sizeof(*pb), GFP_KERNEL); | 82 | pb = kzalloc(sizeof(*pb), GFP_KERNEL); |
81 | if (!pb) { | 83 | if (!pb) { |
84 | dev_err(&pdev->dev, "no memory for state\n"); | ||
82 | ret = -ENOMEM; | 85 | ret = -ENOMEM; |
83 | goto err_alloc; | 86 | goto err_alloc; |
84 | } | 87 | } |
@@ -91,7 +94,8 @@ static int pwm_backlight_probe(struct platform_device *pdev) | |||
91 | dev_err(&pdev->dev, "unable to request PWM for backlight\n"); | 94 | dev_err(&pdev->dev, "unable to request PWM for backlight\n"); |
92 | ret = PTR_ERR(pb->pwm); | 95 | ret = PTR_ERR(pb->pwm); |
93 | goto err_pwm; | 96 | goto err_pwm; |
94 | } | 97 | } else |
98 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); | ||
95 | 99 | ||
96 | bl = backlight_device_register(pdev->name, &pdev->dev, | 100 | bl = backlight_device_register(pdev->name, &pdev->dev, |
97 | pb, &pwm_backlight_ops); | 101 | pb, &pwm_backlight_ops); |
@@ -183,3 +187,5 @@ module_exit(pwm_backlight_exit); | |||
183 | 187 | ||
184 | MODULE_DESCRIPTION("PWM based Backlight Driver"); | 188 | MODULE_DESCRIPTION("PWM based Backlight Driver"); |
185 | MODULE_LICENSE("GPL"); | 189 | MODULE_LICENSE("GPL"); |
190 | MODULE_ALIAS("platform:pwm-backlight"); | ||
191 | |||
diff --git a/drivers/video/clps711xfb.c b/drivers/video/clps711xfb.c index 9f8a389dc7ae..16f5db471ab5 100644 --- a/drivers/video/clps711xfb.c +++ b/drivers/video/clps711xfb.c | |||
@@ -27,12 +27,12 @@ | |||
27 | #include <linux/proc_fs.h> | 27 | #include <linux/proc_fs.h> |
28 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
29 | 29 | ||
30 | #include <asm/hardware.h> | 30 | #include <mach/hardware.h> |
31 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
32 | #include <linux/uaccess.h> | 32 | #include <linux/uaccess.h> |
33 | 33 | ||
34 | #include <asm/hardware/clps7111.h> | 34 | #include <asm/hardware/clps7111.h> |
35 | #include <asm/arch/syspld.h> | 35 | #include <mach/syspld.h> |
36 | 36 | ||
37 | struct fb_info *cfb; | 37 | struct fb_info *cfb; |
38 | 38 | ||
diff --git a/drivers/video/console/.gitignore b/drivers/video/console/.gitignore new file mode 100644 index 000000000000..0c258b45439c --- /dev/null +++ b/drivers/video/console/.gitignore | |||
@@ -0,0 +1,2 @@ | |||
1 | # conmakehash generated file | ||
2 | promcon_tbl.c | ||
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 3ccfa76d9b2a..33859934a8e4 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -1311,6 +1311,9 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height, | |||
1311 | if (!height || !width) | 1311 | if (!height || !width) |
1312 | return; | 1312 | return; |
1313 | 1313 | ||
1314 | if (sy < vc->vc_top && vc->vc_top == logo_lines) | ||
1315 | vc->vc_top = 0; | ||
1316 | |||
1314 | /* Split blits that cross physical y_wrap boundary */ | 1317 | /* Split blits that cross physical y_wrap boundary */ |
1315 | 1318 | ||
1316 | y_break = p->vrows - p->yscroll; | 1319 | y_break = p->vrows - p->yscroll; |
diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c index d0e4cb618269..41d62632dcdb 100644 --- a/drivers/video/cyber2000fb.c +++ b/drivers/video/cyber2000fb.c | |||
@@ -1425,7 +1425,7 @@ static void cyberpro_common_resume(struct cfb_info *cfb) | |||
1425 | 1425 | ||
1426 | #ifdef CONFIG_ARCH_SHARK | 1426 | #ifdef CONFIG_ARCH_SHARK |
1427 | 1427 | ||
1428 | #include <asm/arch/hardware.h> | 1428 | #include <mach/hardware.h> |
1429 | 1429 | ||
1430 | static int __devinit cyberpro_vl_probe(void) | 1430 | static int __devinit cyberpro_vl_probe(void) |
1431 | { | 1431 | { |
diff --git a/drivers/video/epson1355fb.c b/drivers/video/epson1355fb.c index cc2810ef5de5..2735b79e52a1 100644 --- a/drivers/video/epson1355fb.c +++ b/drivers/video/epson1355fb.c | |||
@@ -71,7 +71,7 @@ struct epson1355_par { | |||
71 | #if defined(CONFIG_ARM) | 71 | #if defined(CONFIG_ARM) |
72 | 72 | ||
73 | # ifdef CONFIG_ARCH_CEIVA | 73 | # ifdef CONFIG_ARCH_CEIVA |
74 | # include <asm/arch/hardware.h> | 74 | # include <mach/hardware.h> |
75 | # define EPSON1355FB_BASE_PHYS (CEIVA_PHYS_SED1355) | 75 | # define EPSON1355FB_BASE_PHYS (CEIVA_PHYS_SED1355) |
76 | # endif | 76 | # endif |
77 | 77 | ||
diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c index 9cd36c223d33..bd320a2bfb7c 100644 --- a/drivers/video/fsl-diu-fb.c +++ b/drivers/video/fsl-diu-fb.c | |||
@@ -1649,8 +1649,10 @@ static int __init fsl_diu_init(void) | |||
1649 | } | 1649 | } |
1650 | 1650 | ||
1651 | prop = of_get_property(np, "d-cache-size", NULL); | 1651 | prop = of_get_property(np, "d-cache-size", NULL); |
1652 | if (prop == NULL) | 1652 | if (prop == NULL) { |
1653 | of_node_put(np); | ||
1653 | return -ENODEV; | 1654 | return -ENODEV; |
1655 | } | ||
1654 | 1656 | ||
1655 | /* Freescale PLRU requires 13/8 times the cache size to do a proper | 1657 | /* Freescale PLRU requires 13/8 times the cache size to do a proper |
1656 | displacement flush | 1658 | displacement flush |
@@ -1659,8 +1661,10 @@ static int __init fsl_diu_init(void) | |||
1659 | coherence_data_size /= 8; | 1661 | coherence_data_size /= 8; |
1660 | 1662 | ||
1661 | prop = of_get_property(np, "d-cache-line-size", NULL); | 1663 | prop = of_get_property(np, "d-cache-line-size", NULL); |
1662 | if (prop == NULL) | 1664 | if (prop == NULL) { |
1665 | of_node_put(np); | ||
1663 | return -ENODEV; | 1666 | return -ENODEV; |
1667 | } | ||
1664 | d_cache_line_size = *prop; | 1668 | d_cache_line_size = *prop; |
1665 | 1669 | ||
1666 | of_node_put(np); | 1670 | of_node_put(np); |
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index 0c5a475c1cae..ccd986140c95 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c | |||
@@ -33,9 +33,9 @@ | |||
33 | #include <linux/platform_device.h> | 33 | #include <linux/platform_device.h> |
34 | #include <linux/dma-mapping.h> | 34 | #include <linux/dma-mapping.h> |
35 | 35 | ||
36 | #include <asm/hardware.h> | 36 | #include <mach/hardware.h> |
37 | #include <asm/io.h> | 37 | #include <asm/io.h> |
38 | #include <asm/arch/imxfb.h> | 38 | #include <mach/imxfb.h> |
39 | 39 | ||
40 | /* | 40 | /* |
41 | * Complain if VAR is out of range. | 41 | * Complain if VAR is out of range. |
diff --git a/drivers/video/omap/blizzard.c b/drivers/video/omap/blizzard.c index 4d8ad9cd0e19..9dfcf39d3367 100644 --- a/drivers/video/omap/blizzard.c +++ b/drivers/video/omap/blizzard.c | |||
@@ -26,9 +26,9 @@ | |||
26 | #include <linux/delay.h> | 26 | #include <linux/delay.h> |
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | 28 | ||
29 | #include <asm/arch/dma.h> | 29 | #include <mach/dma.h> |
30 | #include <asm/arch/omapfb.h> | 30 | #include <mach/omapfb.h> |
31 | #include <asm/arch/blizzard.h> | 31 | #include <mach/blizzard.h> |
32 | 32 | ||
33 | #include "dispc.h" | 33 | #include "dispc.h" |
34 | 34 | ||
diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c index ab77c51fe9d6..6efcf89e7fbe 100644 --- a/drivers/video/omap/dispc.c +++ b/drivers/video/omap/dispc.c | |||
@@ -25,9 +25,9 @@ | |||
25 | #include <linux/clk.h> | 25 | #include <linux/clk.h> |
26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | 27 | ||
28 | #include <asm/arch/sram.h> | 28 | #include <mach/sram.h> |
29 | #include <asm/arch/omapfb.h> | 29 | #include <mach/omapfb.h> |
30 | #include <asm/arch/board.h> | 30 | #include <mach/board.h> |
31 | 31 | ||
32 | #include "dispc.h" | 32 | #include "dispc.h" |
33 | 33 | ||
diff --git a/drivers/video/omap/hwa742.c b/drivers/video/omap/hwa742.c index 1e642b7a20fe..f24df0b54e1c 100644 --- a/drivers/video/omap/hwa742.c +++ b/drivers/video/omap/hwa742.c | |||
@@ -26,9 +26,9 @@ | |||
26 | #include <linux/delay.h> | 26 | #include <linux/delay.h> |
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | 28 | ||
29 | #include <asm/arch/dma.h> | 29 | #include <mach/dma.h> |
30 | #include <asm/arch/omapfb.h> | 30 | #include <mach/omapfb.h> |
31 | #include <asm/arch/hwa742.h> | 31 | #include <mach/hwa742.h> |
32 | 32 | ||
33 | #define HWA742_REV_CODE_REG 0x0 | 33 | #define HWA742_REV_CODE_REG 0x0 |
34 | #define HWA742_CONFIG_REG 0x2 | 34 | #define HWA742_CONFIG_REG 0x2 |
diff --git a/drivers/video/omap/lcd_h3.c b/drivers/video/omap/lcd_h3.c index 31e978349a80..2486237ebba5 100644 --- a/drivers/video/omap/lcd_h3.c +++ b/drivers/video/omap/lcd_h3.c | |||
@@ -23,8 +23,8 @@ | |||
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <linux/i2c/tps65010.h> | 24 | #include <linux/i2c/tps65010.h> |
25 | 25 | ||
26 | #include <asm/arch/gpio.h> | 26 | #include <mach/gpio.h> |
27 | #include <asm/arch/omapfb.h> | 27 | #include <mach/omapfb.h> |
28 | 28 | ||
29 | #define MODULE_NAME "omapfb-lcd_h3" | 29 | #define MODULE_NAME "omapfb-lcd_h3" |
30 | 30 | ||
diff --git a/drivers/video/omap/lcd_h4.c b/drivers/video/omap/lcd_h4.c index fd6f0eb16de1..88c19d424ef7 100644 --- a/drivers/video/omap/lcd_h4.c +++ b/drivers/video/omap/lcd_h4.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | 24 | ||
25 | #include <asm/arch/omapfb.h> | 25 | #include <mach/omapfb.h> |
26 | 26 | ||
27 | static int h4_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) | 27 | static int h4_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) |
28 | { | 28 | { |
diff --git a/drivers/video/omap/lcd_inn1510.c b/drivers/video/omap/lcd_inn1510.c index 551f385861d1..6953ed4b5820 100644 --- a/drivers/video/omap/lcd_inn1510.c +++ b/drivers/video/omap/lcd_inn1510.c | |||
@@ -23,8 +23,8 @@ | |||
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | 25 | ||
26 | #include <asm/arch/fpga.h> | 26 | #include <mach/fpga.h> |
27 | #include <asm/arch/omapfb.h> | 27 | #include <mach/omapfb.h> |
28 | 28 | ||
29 | static int innovator1510_panel_init(struct lcd_panel *panel, | 29 | static int innovator1510_panel_init(struct lcd_panel *panel, |
30 | struct omapfb_device *fbdev) | 30 | struct omapfb_device *fbdev) |
diff --git a/drivers/video/omap/lcd_inn1610.c b/drivers/video/omap/lcd_inn1610.c index 5ef119c813e0..6a42c6a0cd99 100644 --- a/drivers/video/omap/lcd_inn1610.c +++ b/drivers/video/omap/lcd_inn1610.c | |||
@@ -22,8 +22,8 @@ | |||
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | 24 | ||
25 | #include <asm/arch/gpio.h> | 25 | #include <mach/gpio.h> |
26 | #include <asm/arch/omapfb.h> | 26 | #include <mach/omapfb.h> |
27 | 27 | ||
28 | #define MODULE_NAME "omapfb-lcd_h3" | 28 | #define MODULE_NAME "omapfb-lcd_h3" |
29 | 29 | ||
diff --git a/drivers/video/omap/lcd_osk.c b/drivers/video/omap/lcd_osk.c index a38038840fd6..a4a725f427a4 100644 --- a/drivers/video/omap/lcd_osk.c +++ b/drivers/video/omap/lcd_osk.c | |||
@@ -23,9 +23,9 @@ | |||
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | 25 | ||
26 | #include <asm/arch/gpio.h> | 26 | #include <mach/gpio.h> |
27 | #include <asm/arch/mux.h> | 27 | #include <mach/mux.h> |
28 | #include <asm/arch/omapfb.h> | 28 | #include <mach/omapfb.h> |
29 | 29 | ||
30 | static int osk_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) | 30 | static int osk_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) |
31 | { | 31 | { |
diff --git a/drivers/video/omap/lcd_palmte.c b/drivers/video/omap/lcd_palmte.c index 52bdfdac42c9..218317366e6e 100644 --- a/drivers/video/omap/lcd_palmte.c +++ b/drivers/video/omap/lcd_palmte.c | |||
@@ -23,8 +23,8 @@ | |||
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | 25 | ||
26 | #include <asm/arch/fpga.h> | 26 | #include <mach/fpga.h> |
27 | #include <asm/arch/omapfb.h> | 27 | #include <mach/omapfb.h> |
28 | 28 | ||
29 | static int palmte_panel_init(struct lcd_panel *panel, | 29 | static int palmte_panel_init(struct lcd_panel *panel, |
30 | struct omapfb_device *fbdev) | 30 | struct omapfb_device *fbdev) |
diff --git a/drivers/video/omap/lcd_palmtt.c b/drivers/video/omap/lcd_palmtt.c index 4bb349f54356..57b0f6cf6a5a 100644 --- a/drivers/video/omap/lcd_palmtt.c +++ b/drivers/video/omap/lcd_palmtt.c | |||
@@ -29,8 +29,8 @@ GPIO13 - screen blanking | |||
29 | #include <linux/module.h> | 29 | #include <linux/module.h> |
30 | #include <linux/io.h> | 30 | #include <linux/io.h> |
31 | 31 | ||
32 | #include <asm/arch/gpio.h> | 32 | #include <mach/gpio.h> |
33 | #include <asm/arch/omapfb.h> | 33 | #include <mach/omapfb.h> |
34 | 34 | ||
35 | static int palmtt_panel_init(struct lcd_panel *panel, | 35 | static int palmtt_panel_init(struct lcd_panel *panel, |
36 | struct omapfb_device *fbdev) | 36 | struct omapfb_device *fbdev) |
diff --git a/drivers/video/omap/lcd_palmz71.c b/drivers/video/omap/lcd_palmz71.c index ea6170ddff35..d33d78b11723 100644 --- a/drivers/video/omap/lcd_palmz71.c +++ b/drivers/video/omap/lcd_palmz71.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | 26 | ||
27 | #include <asm/arch/omapfb.h> | 27 | #include <mach/omapfb.h> |
28 | 28 | ||
29 | static int palmz71_panel_init(struct lcd_panel *panel, | 29 | static int palmz71_panel_init(struct lcd_panel *panel, |
30 | struct omapfb_device *fbdev) | 30 | struct omapfb_device *fbdev) |
diff --git a/drivers/video/omap/lcd_sx1.c b/drivers/video/omap/lcd_sx1.c index c4f306a4e5c9..caa6a896cb8b 100644 --- a/drivers/video/omap/lcd_sx1.c +++ b/drivers/video/omap/lcd_sx1.c | |||
@@ -23,10 +23,10 @@ | |||
23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | 25 | ||
26 | #include <asm/arch/gpio.h> | 26 | #include <mach/gpio.h> |
27 | #include <asm/arch/omapfb.h> | 27 | #include <mach/omapfb.h> |
28 | #include <asm/arch/mcbsp.h> | 28 | #include <mach/mcbsp.h> |
29 | #include <asm/arch/mux.h> | 29 | #include <mach/mux.h> |
30 | 30 | ||
31 | /* | 31 | /* |
32 | * OMAP310 GPIO registers | 32 | * OMAP310 GPIO registers |
diff --git a/drivers/video/omap/lcdc.c b/drivers/video/omap/lcdc.c index fb19ed4992db..83514f066712 100644 --- a/drivers/video/omap/lcdc.c +++ b/drivers/video/omap/lcdc.c | |||
@@ -29,8 +29,8 @@ | |||
29 | #include <linux/vmalloc.h> | 29 | #include <linux/vmalloc.h> |
30 | #include <linux/clk.h> | 30 | #include <linux/clk.h> |
31 | 31 | ||
32 | #include <asm/arch/dma.h> | 32 | #include <mach/dma.h> |
33 | #include <asm/arch/omapfb.h> | 33 | #include <mach/omapfb.h> |
34 | 34 | ||
35 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
36 | 36 | ||
diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c index f85af5c4fa68..51a138bd113c 100644 --- a/drivers/video/omap/omapfb_main.c +++ b/drivers/video/omap/omapfb_main.c | |||
@@ -28,9 +28,8 @@ | |||
28 | #include <linux/mm.h> | 28 | #include <linux/mm.h> |
29 | #include <linux/uaccess.h> | 29 | #include <linux/uaccess.h> |
30 | 30 | ||
31 | #include <asm/mach-types.h> | 31 | #include <mach/dma.h> |
32 | #include <asm/arch/dma.h> | 32 | #include <mach/omapfb.h> |
33 | #include <asm/arch/omapfb.h> | ||
34 | 33 | ||
35 | #define MODULE_NAME "omapfb" | 34 | #define MODULE_NAME "omapfb" |
36 | 35 | ||
diff --git a/drivers/video/omap/rfbi.c b/drivers/video/omap/rfbi.c index 789cfd23c36b..4a6f13d3facf 100644 --- a/drivers/video/omap/rfbi.c +++ b/drivers/video/omap/rfbi.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <linux/clk.h> | 27 | #include <linux/clk.h> |
28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | 29 | ||
30 | #include <asm/arch/omapfb.h> | 30 | #include <mach/omapfb.h> |
31 | 31 | ||
32 | #include "dispc.h" | 32 | #include "dispc.h" |
33 | 33 | ||
diff --git a/drivers/video/omap/sossi.c b/drivers/video/omap/sossi.c index fafd0f26b90f..6359353c2c67 100644 --- a/drivers/video/omap/sossi.c +++ b/drivers/video/omap/sossi.c | |||
@@ -24,8 +24,8 @@ | |||
24 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | 26 | ||
27 | #include <asm/arch/dma.h> | 27 | #include <mach/dma.h> |
28 | #include <asm/arch/omapfb.h> | 28 | #include <mach/omapfb.h> |
29 | 29 | ||
30 | #include "lcdc.h" | 30 | #include "lcdc.h" |
31 | 31 | ||
diff --git a/drivers/video/pnx4008/dum.h b/drivers/video/pnx4008/dum.h index d80a614d89ed..1234d4375d92 100644 --- a/drivers/video/pnx4008/dum.h +++ b/drivers/video/pnx4008/dum.h | |||
@@ -12,7 +12,7 @@ | |||
12 | #ifndef __PNX008_DUM_H__ | 12 | #ifndef __PNX008_DUM_H__ |
13 | #define __PNX008_DUM_H__ | 13 | #define __PNX008_DUM_H__ |
14 | 14 | ||
15 | #include <asm/arch/platform.h> | 15 | #include <mach/platform.h> |
16 | 16 | ||
17 | #define PNX4008_DUMCONF_VA_BASE IO_ADDRESS(PNX4008_DUMCONF_BASE) | 17 | #define PNX4008_DUMCONF_VA_BASE IO_ADDRESS(PNX4008_DUMCONF_BASE) |
18 | #define PNX4008_DUM_MAIN_VA_BASE IO_ADDRESS(PNX4008_DUM_MAINCFG_BASE) | 18 | #define PNX4008_DUM_MAIN_VA_BASE IO_ADDRESS(PNX4008_DUM_MAINCFG_BASE) |
diff --git a/drivers/video/pnx4008/sdum.c b/drivers/video/pnx4008/sdum.c index d23bf0d659b6..2aa09bce3944 100644 --- a/drivers/video/pnx4008/sdum.c +++ b/drivers/video/pnx4008/sdum.c | |||
@@ -30,7 +30,7 @@ | |||
30 | #include <linux/dma-mapping.h> | 30 | #include <linux/dma-mapping.h> |
31 | #include <linux/clk.h> | 31 | #include <linux/clk.h> |
32 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
33 | #include <asm/arch/gpio.h> | 33 | #include <mach/gpio.h> |
34 | 34 | ||
35 | #include "sdum.h" | 35 | #include "sdum.h" |
36 | #include "fbcommon.h" | 36 | #include "fbcommon.h" |
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c index 69de2fed6c58..e7aa7ae8fca8 100644 --- a/drivers/video/pxafb.c +++ b/drivers/video/pxafb.c | |||
@@ -45,14 +45,14 @@ | |||
45 | #include <linux/kthread.h> | 45 | #include <linux/kthread.h> |
46 | #include <linux/freezer.h> | 46 | #include <linux/freezer.h> |
47 | 47 | ||
48 | #include <asm/hardware.h> | 48 | #include <mach/hardware.h> |
49 | #include <asm/io.h> | 49 | #include <asm/io.h> |
50 | #include <asm/irq.h> | 50 | #include <asm/irq.h> |
51 | #include <asm/div64.h> | 51 | #include <asm/div64.h> |
52 | #include <asm/arch/pxa-regs.h> | 52 | #include <mach/pxa-regs.h> |
53 | #include <asm/arch/pxa2xx-gpio.h> | 53 | #include <mach/pxa2xx-gpio.h> |
54 | #include <asm/arch/bitfield.h> | 54 | #include <mach/bitfield.h> |
55 | #include <asm/arch/pxafb.h> | 55 | #include <mach/pxafb.h> |
56 | 56 | ||
57 | /* | 57 | /* |
58 | * Complain if VAR is out of range. | 58 | * Complain if VAR is out of range. |
diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c index f0598961c6b0..79cf0b1976aa 100644 --- a/drivers/video/s3c2410fb.c +++ b/drivers/video/s3c2410fb.c | |||
@@ -29,9 +29,9 @@ | |||
29 | #include <asm/div64.h> | 29 | #include <asm/div64.h> |
30 | 30 | ||
31 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
32 | #include <asm/arch/regs-lcd.h> | 32 | #include <mach/regs-lcd.h> |
33 | #include <asm/arch/regs-gpio.h> | 33 | #include <mach/regs-gpio.h> |
34 | #include <asm/arch/fb.h> | 34 | #include <mach/fb.h> |
35 | 35 | ||
36 | #ifdef CONFIG_PM | 36 | #ifdef CONFIG_PM |
37 | #include <linux/pm.h> | 37 | #include <linux/pm.h> |
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c index 2972f112dbed..8361bd0e3df1 100644 --- a/drivers/video/s3fb.c +++ b/drivers/video/s3fb.c | |||
@@ -903,13 +903,13 @@ static int __devinit s3_pci_probe(struct pci_dev *dev, const struct pci_device_i | |||
903 | /* Prepare PCI device */ | 903 | /* Prepare PCI device */ |
904 | rc = pci_enable_device(dev); | 904 | rc = pci_enable_device(dev); |
905 | if (rc < 0) { | 905 | if (rc < 0) { |
906 | dev_err(info->dev, "cannot enable PCI device\n"); | 906 | dev_err(info->device, "cannot enable PCI device\n"); |
907 | goto err_enable_device; | 907 | goto err_enable_device; |
908 | } | 908 | } |
909 | 909 | ||
910 | rc = pci_request_regions(dev, "s3fb"); | 910 | rc = pci_request_regions(dev, "s3fb"); |
911 | if (rc < 0) { | 911 | if (rc < 0) { |
912 | dev_err(info->dev, "cannot reserve framebuffer region\n"); | 912 | dev_err(info->device, "cannot reserve framebuffer region\n"); |
913 | goto err_request_regions; | 913 | goto err_request_regions; |
914 | } | 914 | } |
915 | 915 | ||
@@ -921,7 +921,7 @@ static int __devinit s3_pci_probe(struct pci_dev *dev, const struct pci_device_i | |||
921 | info->screen_base = pci_iomap(dev, 0, 0); | 921 | info->screen_base = pci_iomap(dev, 0, 0); |
922 | if (! info->screen_base) { | 922 | if (! info->screen_base) { |
923 | rc = -ENOMEM; | 923 | rc = -ENOMEM; |
924 | dev_err(info->dev, "iomap for framebuffer failed\n"); | 924 | dev_err(info->device, "iomap for framebuffer failed\n"); |
925 | goto err_iomap; | 925 | goto err_iomap; |
926 | } | 926 | } |
927 | 927 | ||
@@ -965,19 +965,19 @@ static int __devinit s3_pci_probe(struct pci_dev *dev, const struct pci_device_i | |||
965 | rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); | 965 | rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); |
966 | if (! ((rc == 1) || (rc == 2))) { | 966 | if (! ((rc == 1) || (rc == 2))) { |
967 | rc = -EINVAL; | 967 | rc = -EINVAL; |
968 | dev_err(info->dev, "mode %s not found\n", mode_option); | 968 | dev_err(info->device, "mode %s not found\n", mode_option); |
969 | goto err_find_mode; | 969 | goto err_find_mode; |
970 | } | 970 | } |
971 | 971 | ||
972 | rc = fb_alloc_cmap(&info->cmap, 256, 0); | 972 | rc = fb_alloc_cmap(&info->cmap, 256, 0); |
973 | if (rc < 0) { | 973 | if (rc < 0) { |
974 | dev_err(info->dev, "cannot allocate colormap\n"); | 974 | dev_err(info->device, "cannot allocate colormap\n"); |
975 | goto err_alloc_cmap; | 975 | goto err_alloc_cmap; |
976 | } | 976 | } |
977 | 977 | ||
978 | rc = register_framebuffer(info); | 978 | rc = register_framebuffer(info); |
979 | if (rc < 0) { | 979 | if (rc < 0) { |
980 | dev_err(info->dev, "cannot register framebuffer\n"); | 980 | dev_err(info->device, "cannot register framebuffer\n"); |
981 | goto err_reg_fb; | 981 | goto err_reg_fb; |
982 | } | 982 | } |
983 | 983 | ||
@@ -1053,7 +1053,7 @@ static int s3_pci_suspend(struct pci_dev* dev, pm_message_t state) | |||
1053 | struct fb_info *info = pci_get_drvdata(dev); | 1053 | struct fb_info *info = pci_get_drvdata(dev); |
1054 | struct s3fb_info *par = info->par; | 1054 | struct s3fb_info *par = info->par; |
1055 | 1055 | ||
1056 | dev_info(info->dev, "suspend\n"); | 1056 | dev_info(info->device, "suspend\n"); |
1057 | 1057 | ||
1058 | acquire_console_sem(); | 1058 | acquire_console_sem(); |
1059 | mutex_lock(&(par->open_lock)); | 1059 | mutex_lock(&(par->open_lock)); |
@@ -1085,7 +1085,7 @@ static int s3_pci_resume(struct pci_dev* dev) | |||
1085 | struct s3fb_info *par = info->par; | 1085 | struct s3fb_info *par = info->par; |
1086 | int err; | 1086 | int err; |
1087 | 1087 | ||
1088 | dev_info(info->dev, "resume\n"); | 1088 | dev_info(info->device, "resume\n"); |
1089 | 1089 | ||
1090 | acquire_console_sem(); | 1090 | acquire_console_sem(); |
1091 | mutex_lock(&(par->open_lock)); | 1091 | mutex_lock(&(par->open_lock)); |
@@ -1102,7 +1102,7 @@ static int s3_pci_resume(struct pci_dev* dev) | |||
1102 | if (err) { | 1102 | if (err) { |
1103 | mutex_unlock(&(par->open_lock)); | 1103 | mutex_unlock(&(par->open_lock)); |
1104 | release_console_sem(); | 1104 | release_console_sem(); |
1105 | dev_err(info->dev, "error %d enabling device for resume\n", err); | 1105 | dev_err(info->device, "error %d enabling device for resume\n", err); |
1106 | return err; | 1106 | return err; |
1107 | } | 1107 | } |
1108 | pci_set_master(dev); | 1108 | pci_set_master(dev); |
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index 78bcdbc3f484..c052bd4c0b06 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c | |||
@@ -177,11 +177,11 @@ | |||
177 | #include <linux/dma-mapping.h> | 177 | #include <linux/dma-mapping.h> |
178 | #include <linux/mutex.h> | 178 | #include <linux/mutex.h> |
179 | 179 | ||
180 | #include <asm/hardware.h> | 180 | #include <mach/hardware.h> |
181 | #include <asm/io.h> | 181 | #include <asm/io.h> |
182 | #include <asm/mach-types.h> | 182 | #include <asm/mach-types.h> |
183 | #include <asm/arch/assabet.h> | 183 | #include <mach/assabet.h> |
184 | #include <asm/arch/shannon.h> | 184 | #include <mach/shannon.h> |
185 | 185 | ||
186 | /* | 186 | /* |
187 | * debugging? | 187 | * debugging? |
diff --git a/drivers/video/vt8623fb.c b/drivers/video/vt8623fb.c index 4a484ee98f8a..34aae7a2a62b 100644 --- a/drivers/video/vt8623fb.c +++ b/drivers/video/vt8623fb.c | |||
@@ -677,13 +677,13 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi | |||
677 | 677 | ||
678 | rc = pci_enable_device(dev); | 678 | rc = pci_enable_device(dev); |
679 | if (rc < 0) { | 679 | if (rc < 0) { |
680 | dev_err(info->dev, "cannot enable PCI device\n"); | 680 | dev_err(info->device, "cannot enable PCI device\n"); |
681 | goto err_enable_device; | 681 | goto err_enable_device; |
682 | } | 682 | } |
683 | 683 | ||
684 | rc = pci_request_regions(dev, "vt8623fb"); | 684 | rc = pci_request_regions(dev, "vt8623fb"); |
685 | if (rc < 0) { | 685 | if (rc < 0) { |
686 | dev_err(info->dev, "cannot reserve framebuffer region\n"); | 686 | dev_err(info->device, "cannot reserve framebuffer region\n"); |
687 | goto err_request_regions; | 687 | goto err_request_regions; |
688 | } | 688 | } |
689 | 689 | ||
@@ -696,14 +696,14 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi | |||
696 | info->screen_base = pci_iomap(dev, 0, 0); | 696 | info->screen_base = pci_iomap(dev, 0, 0); |
697 | if (! info->screen_base) { | 697 | if (! info->screen_base) { |
698 | rc = -ENOMEM; | 698 | rc = -ENOMEM; |
699 | dev_err(info->dev, "iomap for framebuffer failed\n"); | 699 | dev_err(info->device, "iomap for framebuffer failed\n"); |
700 | goto err_iomap_1; | 700 | goto err_iomap_1; |
701 | } | 701 | } |
702 | 702 | ||
703 | par->mmio_base = pci_iomap(dev, 1, 0); | 703 | par->mmio_base = pci_iomap(dev, 1, 0); |
704 | if (! par->mmio_base) { | 704 | if (! par->mmio_base) { |
705 | rc = -ENOMEM; | 705 | rc = -ENOMEM; |
706 | dev_err(info->dev, "iomap for MMIO failed\n"); | 706 | dev_err(info->device, "iomap for MMIO failed\n"); |
707 | goto err_iomap_2; | 707 | goto err_iomap_2; |
708 | } | 708 | } |
709 | 709 | ||
@@ -714,7 +714,7 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi | |||
714 | if ((16 <= memsize1) && (memsize1 <= 64) && (memsize1 == memsize2)) | 714 | if ((16 <= memsize1) && (memsize1 <= 64) && (memsize1 == memsize2)) |
715 | info->screen_size = memsize1 << 20; | 715 | info->screen_size = memsize1 << 20; |
716 | else { | 716 | else { |
717 | dev_err(info->dev, "memory size detection failed (%x %x), suppose 16 MB\n", memsize1, memsize2); | 717 | dev_err(info->device, "memory size detection failed (%x %x), suppose 16 MB\n", memsize1, memsize2); |
718 | info->screen_size = 16 << 20; | 718 | info->screen_size = 16 << 20; |
719 | } | 719 | } |
720 | 720 | ||
@@ -731,19 +731,19 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi | |||
731 | rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); | 731 | rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); |
732 | if (! ((rc == 1) || (rc == 2))) { | 732 | if (! ((rc == 1) || (rc == 2))) { |
733 | rc = -EINVAL; | 733 | rc = -EINVAL; |
734 | dev_err(info->dev, "mode %s not found\n", mode_option); | 734 | dev_err(info->device, "mode %s not found\n", mode_option); |
735 | goto err_find_mode; | 735 | goto err_find_mode; |
736 | } | 736 | } |
737 | 737 | ||
738 | rc = fb_alloc_cmap(&info->cmap, 256, 0); | 738 | rc = fb_alloc_cmap(&info->cmap, 256, 0); |
739 | if (rc < 0) { | 739 | if (rc < 0) { |
740 | dev_err(info->dev, "cannot allocate colormap\n"); | 740 | dev_err(info->device, "cannot allocate colormap\n"); |
741 | goto err_alloc_cmap; | 741 | goto err_alloc_cmap; |
742 | } | 742 | } |
743 | 743 | ||
744 | rc = register_framebuffer(info); | 744 | rc = register_framebuffer(info); |
745 | if (rc < 0) { | 745 | if (rc < 0) { |
746 | dev_err(info->dev, "cannot register framebugger\n"); | 746 | dev_err(info->device, "cannot register framebugger\n"); |
747 | goto err_reg_fb; | 747 | goto err_reg_fb; |
748 | } | 748 | } |
749 | 749 | ||
@@ -817,7 +817,7 @@ static int vt8623_pci_suspend(struct pci_dev* dev, pm_message_t state) | |||
817 | struct fb_info *info = pci_get_drvdata(dev); | 817 | struct fb_info *info = pci_get_drvdata(dev); |
818 | struct vt8623fb_info *par = info->par; | 818 | struct vt8623fb_info *par = info->par; |
819 | 819 | ||
820 | dev_info(info->dev, "suspend\n"); | 820 | dev_info(info->device, "suspend\n"); |
821 | 821 | ||
822 | acquire_console_sem(); | 822 | acquire_console_sem(); |
823 | mutex_lock(&(par->open_lock)); | 823 | mutex_lock(&(par->open_lock)); |
@@ -848,7 +848,7 @@ static int vt8623_pci_resume(struct pci_dev* dev) | |||
848 | struct fb_info *info = pci_get_drvdata(dev); | 848 | struct fb_info *info = pci_get_drvdata(dev); |
849 | struct vt8623fb_info *par = info->par; | 849 | struct vt8623fb_info *par = info->par; |
850 | 850 | ||
851 | dev_info(info->dev, "resume\n"); | 851 | dev_info(info->device, "resume\n"); |
852 | 852 | ||
853 | acquire_console_sem(); | 853 | acquire_console_sem(); |
854 | mutex_lock(&(par->open_lock)); | 854 | mutex_lock(&(par->open_lock)); |
diff --git a/drivers/watchdog/ar7_wdt.c b/drivers/watchdog/ar7_wdt.c index 2eb48c0df32c..ef7b0d67095e 100644 --- a/drivers/watchdog/ar7_wdt.c +++ b/drivers/watchdog/ar7_wdt.c | |||
@@ -69,7 +69,8 @@ struct ar7_wdt { | |||
69 | u32 prescale; | 69 | u32 prescale; |
70 | }; | 70 | }; |
71 | 71 | ||
72 | static struct semaphore open_semaphore; | 72 | static unsigned long wdt_is_open; |
73 | static spinlock_t wdt_lock; | ||
73 | static unsigned expect_close; | 74 | static unsigned expect_close; |
74 | 75 | ||
75 | /* XXX currently fixed, allows max margin ~68.72 secs */ | 76 | /* XXX currently fixed, allows max margin ~68.72 secs */ |
@@ -154,8 +155,10 @@ static void ar7_wdt_update_margin(int new_margin) | |||
154 | u32 change; | 155 | u32 change; |
155 | 156 | ||
156 | change = new_margin * (ar7_vbus_freq() / prescale_value); | 157 | change = new_margin * (ar7_vbus_freq() / prescale_value); |
157 | if (change < 1) change = 1; | 158 | if (change < 1) |
158 | if (change > 0xffff) change = 0xffff; | 159 | change = 1; |
160 | if (change > 0xffff) | ||
161 | change = 0xffff; | ||
159 | ar7_wdt_change(change); | 162 | ar7_wdt_change(change); |
160 | margin = change * prescale_value / ar7_vbus_freq(); | 163 | margin = change * prescale_value / ar7_vbus_freq(); |
161 | printk(KERN_INFO DRVNAME | 164 | printk(KERN_INFO DRVNAME |
@@ -179,7 +182,7 @@ static void ar7_wdt_disable_wdt(void) | |||
179 | static int ar7_wdt_open(struct inode *inode, struct file *file) | 182 | static int ar7_wdt_open(struct inode *inode, struct file *file) |
180 | { | 183 | { |
181 | /* only allow one at a time */ | 184 | /* only allow one at a time */ |
182 | if (down_trylock(&open_semaphore)) | 185 | if (test_and_set_bit(0, &wdt_is_open)) |
183 | return -EBUSY; | 186 | return -EBUSY; |
184 | ar7_wdt_enable_wdt(); | 187 | ar7_wdt_enable_wdt(); |
185 | expect_close = 0; | 188 | expect_close = 0; |
@@ -195,9 +198,7 @@ static int ar7_wdt_release(struct inode *inode, struct file *file) | |||
195 | "will not disable the watchdog timer\n"); | 198 | "will not disable the watchdog timer\n"); |
196 | else if (!nowayout) | 199 | else if (!nowayout) |
197 | ar7_wdt_disable_wdt(); | 200 | ar7_wdt_disable_wdt(); |
198 | 201 | clear_bit(0, &wdt_is_open); | |
199 | up(&open_semaphore); | ||
200 | |||
201 | return 0; | 202 | return 0; |
202 | } | 203 | } |
203 | 204 | ||
@@ -222,7 +223,9 @@ static ssize_t ar7_wdt_write(struct file *file, const char *data, | |||
222 | if (len) { | 223 | if (len) { |
223 | size_t i; | 224 | size_t i; |
224 | 225 | ||
226 | spin_lock(&wdt_lock); | ||
225 | ar7_wdt_kick(1); | 227 | ar7_wdt_kick(1); |
228 | spin_unlock(&wdt_lock); | ||
226 | 229 | ||
227 | expect_close = 0; | 230 | expect_close = 0; |
228 | for (i = 0; i < len; ++i) { | 231 | for (i = 0; i < len; ++i) { |
@@ -237,8 +240,8 @@ static ssize_t ar7_wdt_write(struct file *file, const char *data, | |||
237 | return len; | 240 | return len; |
238 | } | 241 | } |
239 | 242 | ||
240 | static int ar7_wdt_ioctl(struct inode *inode, struct file *file, | 243 | static long ar7_wdt_ioctl(struct file *file, |
241 | unsigned int cmd, unsigned long arg) | 244 | unsigned int cmd, unsigned long arg) |
242 | { | 245 | { |
243 | static struct watchdog_info ident = { | 246 | static struct watchdog_info ident = { |
244 | .identity = LONGNAME, | 247 | .identity = LONGNAME, |
@@ -269,8 +272,10 @@ static int ar7_wdt_ioctl(struct inode *inode, struct file *file, | |||
269 | if (new_margin < 1) | 272 | if (new_margin < 1) |
270 | return -EINVAL; | 273 | return -EINVAL; |
271 | 274 | ||
275 | spin_lock(&wdt_lock); | ||
272 | ar7_wdt_update_margin(new_margin); | 276 | ar7_wdt_update_margin(new_margin); |
273 | ar7_wdt_kick(1); | 277 | ar7_wdt_kick(1); |
278 | spin_unlock(&wdt_lock); | ||
274 | 279 | ||
275 | case WDIOC_GETTIMEOUT: | 280 | case WDIOC_GETTIMEOUT: |
276 | if (put_user(margin, (int *)arg)) | 281 | if (put_user(margin, (int *)arg)) |
@@ -282,7 +287,7 @@ static int ar7_wdt_ioctl(struct inode *inode, struct file *file, | |||
282 | static const struct file_operations ar7_wdt_fops = { | 287 | static const struct file_operations ar7_wdt_fops = { |
283 | .owner = THIS_MODULE, | 288 | .owner = THIS_MODULE, |
284 | .write = ar7_wdt_write, | 289 | .write = ar7_wdt_write, |
285 | .ioctl = ar7_wdt_ioctl, | 290 | .unlocked_ioctl = ar7_wdt_ioctl, |
286 | .open = ar7_wdt_open, | 291 | .open = ar7_wdt_open, |
287 | .release = ar7_wdt_release, | 292 | .release = ar7_wdt_release, |
288 | }; | 293 | }; |
@@ -297,6 +302,8 @@ static int __init ar7_wdt_init(void) | |||
297 | { | 302 | { |
298 | int rc; | 303 | int rc; |
299 | 304 | ||
305 | spin_lock_init(&wdt_lock); | ||
306 | |||
300 | ar7_wdt_get_regs(); | 307 | ar7_wdt_get_regs(); |
301 | 308 | ||
302 | if (!request_mem_region(ar7_regs_wdt, sizeof(struct ar7_wdt), | 309 | if (!request_mem_region(ar7_regs_wdt, sizeof(struct ar7_wdt), |
@@ -312,8 +319,6 @@ static int __init ar7_wdt_init(void) | |||
312 | ar7_wdt_prescale(prescale_value); | 319 | ar7_wdt_prescale(prescale_value); |
313 | ar7_wdt_update_margin(margin); | 320 | ar7_wdt_update_margin(margin); |
314 | 321 | ||
315 | sema_init(&open_semaphore, 1); | ||
316 | |||
317 | rc = register_reboot_notifier(&ar7_wdt_notifier); | 322 | rc = register_reboot_notifier(&ar7_wdt_notifier); |
318 | if (rc) { | 323 | if (rc) { |
319 | printk(KERN_ERR DRVNAME | 324 | printk(KERN_ERR DRVNAME |
diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c index 9ff9a9565320..bf872aa2b9f3 100644 --- a/drivers/watchdog/at91rm9200_wdt.c +++ b/drivers/watchdog/at91rm9200_wdt.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
22 | #include <linux/watchdog.h> | 22 | #include <linux/watchdog.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/arch/at91_st.h> | 24 | #include <mach/at91_st.h> |
25 | 25 | ||
26 | 26 | ||
27 | #define WDT_DEFAULT_TIME 5 /* seconds */ | 27 | #define WDT_DEFAULT_TIME 5 /* seconds */ |
diff --git a/drivers/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c index 1782c79eff06..003dffe5cb19 100644 --- a/drivers/watchdog/davinci_wdt.c +++ b/drivers/watchdog/davinci_wdt.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
25 | 25 | ||
26 | #include <asm/hardware.h> | 26 | #include <mach/hardware.h> |
27 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
28 | #include <asm/io.h> | 28 | #include <asm/io.h> |
29 | 29 | ||
diff --git a/drivers/watchdog/ep93xx_wdt.c b/drivers/watchdog/ep93xx_wdt.c index 0e4787a0bb87..af8ef14c0e4c 100644 --- a/drivers/watchdog/ep93xx_wdt.c +++ b/drivers/watchdog/ep93xx_wdt.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/watchdog.h> | 29 | #include <linux/watchdog.h> |
30 | #include <linux/timer.h> | 30 | #include <linux/timer.h> |
31 | 31 | ||
32 | #include <asm/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
34 | 34 | ||
35 | #define WDT_VERSION "0.3" | 35 | #define WDT_VERSION "0.3" |
diff --git a/drivers/watchdog/iop_wdt.c b/drivers/watchdog/iop_wdt.c index bbbd91af754d..1946dd06d815 100644 --- a/drivers/watchdog/iop_wdt.c +++ b/drivers/watchdog/iop_wdt.c | |||
@@ -32,7 +32,7 @@ | |||
32 | #include <linux/miscdevice.h> | 32 | #include <linux/miscdevice.h> |
33 | #include <linux/watchdog.h> | 33 | #include <linux/watchdog.h> |
34 | #include <linux/uaccess.h> | 34 | #include <linux/uaccess.h> |
35 | #include <asm/hardware.h> | 35 | #include <mach/hardware.h> |
36 | 36 | ||
37 | static int nowayout = WATCHDOG_NOWAYOUT; | 37 | static int nowayout = WATCHDOG_NOWAYOUT; |
38 | static unsigned long wdt_status; | 38 | static unsigned long wdt_status; |
diff --git a/drivers/watchdog/it8712f_wdt.c b/drivers/watchdog/it8712f_wdt.c index 445b7e812112..51bfd5721833 100644 --- a/drivers/watchdog/it8712f_wdt.c +++ b/drivers/watchdog/it8712f_wdt.c | |||
@@ -30,9 +30,8 @@ | |||
30 | #include <linux/fs.h> | 30 | #include <linux/fs.h> |
31 | #include <linux/pci.h> | 31 | #include <linux/pci.h> |
32 | #include <linux/spinlock.h> | 32 | #include <linux/spinlock.h> |
33 | 33 | #include <linux/uaccess.h> | |
34 | #include <asm/uaccess.h> | 34 | #include <linux/io.h> |
35 | #include <asm/io.h> | ||
36 | 35 | ||
37 | #define NAME "it8712f_wdt" | 36 | #define NAME "it8712f_wdt" |
38 | 37 | ||
@@ -50,7 +49,7 @@ static int nowayout = WATCHDOG_NOWAYOUT; | |||
50 | module_param(nowayout, int, 0); | 49 | module_param(nowayout, int, 0); |
51 | MODULE_PARM_DESC(nowayout, "Disable watchdog shutdown on close"); | 50 | MODULE_PARM_DESC(nowayout, "Disable watchdog shutdown on close"); |
52 | 51 | ||
53 | static struct semaphore it8712f_wdt_sem; | 52 | static unsigned long wdt_open; |
54 | static unsigned expect_close; | 53 | static unsigned expect_close; |
55 | static spinlock_t io_lock; | 54 | static spinlock_t io_lock; |
56 | static unsigned char revision; | 55 | static unsigned char revision; |
@@ -86,22 +85,19 @@ static unsigned short address; | |||
86 | #define WDT_OUT_PWROK 0x10 | 85 | #define WDT_OUT_PWROK 0x10 |
87 | #define WDT_OUT_KRST 0x40 | 86 | #define WDT_OUT_KRST 0x40 |
88 | 87 | ||
89 | static int | 88 | static int superio_inb(int reg) |
90 | superio_inb(int reg) | ||
91 | { | 89 | { |
92 | outb(reg, REG); | 90 | outb(reg, REG); |
93 | return inb(VAL); | 91 | return inb(VAL); |
94 | } | 92 | } |
95 | 93 | ||
96 | static void | 94 | static void superio_outb(int val, int reg) |
97 | superio_outb(int val, int reg) | ||
98 | { | 95 | { |
99 | outb(reg, REG); | 96 | outb(reg, REG); |
100 | outb(val, VAL); | 97 | outb(val, VAL); |
101 | } | 98 | } |
102 | 99 | ||
103 | static int | 100 | static int superio_inw(int reg) |
104 | superio_inw(int reg) | ||
105 | { | 101 | { |
106 | int val; | 102 | int val; |
107 | outb(reg++, REG); | 103 | outb(reg++, REG); |
@@ -111,15 +107,13 @@ superio_inw(int reg) | |||
111 | return val; | 107 | return val; |
112 | } | 108 | } |
113 | 109 | ||
114 | static inline void | 110 | static inline void superio_select(int ldn) |
115 | superio_select(int ldn) | ||
116 | { | 111 | { |
117 | outb(LDN, REG); | 112 | outb(LDN, REG); |
118 | outb(ldn, VAL); | 113 | outb(ldn, VAL); |
119 | } | 114 | } |
120 | 115 | ||
121 | static inline void | 116 | static inline void superio_enter(void) |
122 | superio_enter(void) | ||
123 | { | 117 | { |
124 | spin_lock(&io_lock); | 118 | spin_lock(&io_lock); |
125 | outb(0x87, REG); | 119 | outb(0x87, REG); |
@@ -128,22 +122,19 @@ superio_enter(void) | |||
128 | outb(0x55, REG); | 122 | outb(0x55, REG); |
129 | } | 123 | } |
130 | 124 | ||
131 | static inline void | 125 | static inline void superio_exit(void) |
132 | superio_exit(void) | ||
133 | { | 126 | { |
134 | outb(0x02, REG); | 127 | outb(0x02, REG); |
135 | outb(0x02, VAL); | 128 | outb(0x02, VAL); |
136 | spin_unlock(&io_lock); | 129 | spin_unlock(&io_lock); |
137 | } | 130 | } |
138 | 131 | ||
139 | static inline void | 132 | static inline void it8712f_wdt_ping(void) |
140 | it8712f_wdt_ping(void) | ||
141 | { | 133 | { |
142 | inb(address); | 134 | inb(address); |
143 | } | 135 | } |
144 | 136 | ||
145 | static void | 137 | static void it8712f_wdt_update_margin(void) |
146 | it8712f_wdt_update_margin(void) | ||
147 | { | 138 | { |
148 | int config = WDT_OUT_KRST | WDT_OUT_PWROK; | 139 | int config = WDT_OUT_KRST | WDT_OUT_PWROK; |
149 | int units = margin; | 140 | int units = margin; |
@@ -165,8 +156,7 @@ it8712f_wdt_update_margin(void) | |||
165 | superio_outb(units, WDT_TIMEOUT); | 156 | superio_outb(units, WDT_TIMEOUT); |
166 | } | 157 | } |
167 | 158 | ||
168 | static int | 159 | static int it8712f_wdt_get_status(void) |
169 | it8712f_wdt_get_status(void) | ||
170 | { | 160 | { |
171 | if (superio_inb(WDT_CONTROL) & 0x01) | 161 | if (superio_inb(WDT_CONTROL) & 0x01) |
172 | return WDIOF_CARDRESET; | 162 | return WDIOF_CARDRESET; |
@@ -174,8 +164,7 @@ it8712f_wdt_get_status(void) | |||
174 | return 0; | 164 | return 0; |
175 | } | 165 | } |
176 | 166 | ||
177 | static void | 167 | static void it8712f_wdt_enable(void) |
178 | it8712f_wdt_enable(void) | ||
179 | { | 168 | { |
180 | printk(KERN_DEBUG NAME ": enabling watchdog timer\n"); | 169 | printk(KERN_DEBUG NAME ": enabling watchdog timer\n"); |
181 | superio_enter(); | 170 | superio_enter(); |
@@ -190,8 +179,7 @@ it8712f_wdt_enable(void) | |||
190 | it8712f_wdt_ping(); | 179 | it8712f_wdt_ping(); |
191 | } | 180 | } |
192 | 181 | ||
193 | static void | 182 | static void it8712f_wdt_disable(void) |
194 | it8712f_wdt_disable(void) | ||
195 | { | 183 | { |
196 | printk(KERN_DEBUG NAME ": disabling watchdog timer\n"); | 184 | printk(KERN_DEBUG NAME ": disabling watchdog timer\n"); |
197 | 185 | ||
@@ -207,8 +195,7 @@ it8712f_wdt_disable(void) | |||
207 | superio_exit(); | 195 | superio_exit(); |
208 | } | 196 | } |
209 | 197 | ||
210 | static int | 198 | static int it8712f_wdt_notify(struct notifier_block *this, |
211 | it8712f_wdt_notify(struct notifier_block *this, | ||
212 | unsigned long code, void *unused) | 199 | unsigned long code, void *unused) |
213 | { | 200 | { |
214 | if (code == SYS_HALT || code == SYS_POWER_OFF) | 201 | if (code == SYS_HALT || code == SYS_POWER_OFF) |
@@ -222,9 +209,8 @@ static struct notifier_block it8712f_wdt_notifier = { | |||
222 | .notifier_call = it8712f_wdt_notify, | 209 | .notifier_call = it8712f_wdt_notify, |
223 | }; | 210 | }; |
224 | 211 | ||
225 | static ssize_t | 212 | static ssize_t it8712f_wdt_write(struct file *file, const char __user *data, |
226 | it8712f_wdt_write(struct file *file, const char __user *data, | 213 | size_t len, loff_t *ppos) |
227 | size_t len, loff_t *ppos) | ||
228 | { | 214 | { |
229 | /* check for a magic close character */ | 215 | /* check for a magic close character */ |
230 | if (len) { | 216 | if (len) { |
@@ -245,9 +231,8 @@ it8712f_wdt_write(struct file *file, const char __user *data, | |||
245 | return len; | 231 | return len; |
246 | } | 232 | } |
247 | 233 | ||
248 | static int | 234 | static long it8712f_wdt_ioctl(struct file *file, unsigned int cmd, |
249 | it8712f_wdt_ioctl(struct inode *inode, struct file *file, | 235 | unsigned long arg) |
250 | unsigned int cmd, unsigned long arg) | ||
251 | { | 236 | { |
252 | void __user *argp = (void __user *)arg; | 237 | void __user *argp = (void __user *)arg; |
253 | int __user *p = argp; | 238 | int __user *p = argp; |
@@ -302,19 +287,16 @@ it8712f_wdt_ioctl(struct inode *inode, struct file *file, | |||
302 | } | 287 | } |
303 | } | 288 | } |
304 | 289 | ||
305 | static int | 290 | static int it8712f_wdt_open(struct inode *inode, struct file *file) |
306 | it8712f_wdt_open(struct inode *inode, struct file *file) | ||
307 | { | 291 | { |
308 | /* only allow one at a time */ | 292 | /* only allow one at a time */ |
309 | if (down_trylock(&it8712f_wdt_sem)) | 293 | if (test_and_set_bit(0, &wdt_open)) |
310 | return -EBUSY; | 294 | return -EBUSY; |
311 | it8712f_wdt_enable(); | 295 | it8712f_wdt_enable(); |
312 | |||
313 | return nonseekable_open(inode, file); | 296 | return nonseekable_open(inode, file); |
314 | } | 297 | } |
315 | 298 | ||
316 | static int | 299 | static int it8712f_wdt_release(struct inode *inode, struct file *file) |
317 | it8712f_wdt_release(struct inode *inode, struct file *file) | ||
318 | { | 300 | { |
319 | if (expect_close != 42) { | 301 | if (expect_close != 42) { |
320 | printk(KERN_WARNING NAME | 302 | printk(KERN_WARNING NAME |
@@ -324,7 +306,7 @@ it8712f_wdt_release(struct inode *inode, struct file *file) | |||
324 | it8712f_wdt_disable(); | 306 | it8712f_wdt_disable(); |
325 | } | 307 | } |
326 | expect_close = 0; | 308 | expect_close = 0; |
327 | up(&it8712f_wdt_sem); | 309 | clear_bit(0, &wdt_open); |
328 | 310 | ||
329 | return 0; | 311 | return 0; |
330 | } | 312 | } |
@@ -333,7 +315,7 @@ static const struct file_operations it8712f_wdt_fops = { | |||
333 | .owner = THIS_MODULE, | 315 | .owner = THIS_MODULE, |
334 | .llseek = no_llseek, | 316 | .llseek = no_llseek, |
335 | .write = it8712f_wdt_write, | 317 | .write = it8712f_wdt_write, |
336 | .ioctl = it8712f_wdt_ioctl, | 318 | .unlocked_ioctl = it8712f_wdt_ioctl, |
337 | .open = it8712f_wdt_open, | 319 | .open = it8712f_wdt_open, |
338 | .release = it8712f_wdt_release, | 320 | .release = it8712f_wdt_release, |
339 | }; | 321 | }; |
@@ -344,8 +326,7 @@ static struct miscdevice it8712f_wdt_miscdev = { | |||
344 | .fops = &it8712f_wdt_fops, | 326 | .fops = &it8712f_wdt_fops, |
345 | }; | 327 | }; |
346 | 328 | ||
347 | static int __init | 329 | static int __init it8712f_wdt_find(unsigned short *address) |
348 | it8712f_wdt_find(unsigned short *address) | ||
349 | { | 330 | { |
350 | int err = -ENODEV; | 331 | int err = -ENODEV; |
351 | int chip_type; | 332 | int chip_type; |
@@ -387,8 +368,7 @@ exit: | |||
387 | return err; | 368 | return err; |
388 | } | 369 | } |
389 | 370 | ||
390 | static int __init | 371 | static int __init it8712f_wdt_init(void) |
391 | it8712f_wdt_init(void) | ||
392 | { | 372 | { |
393 | int err = 0; | 373 | int err = 0; |
394 | 374 | ||
@@ -404,8 +384,6 @@ it8712f_wdt_init(void) | |||
404 | 384 | ||
405 | it8712f_wdt_disable(); | 385 | it8712f_wdt_disable(); |
406 | 386 | ||
407 | sema_init(&it8712f_wdt_sem, 1); | ||
408 | |||
409 | err = register_reboot_notifier(&it8712f_wdt_notifier); | 387 | err = register_reboot_notifier(&it8712f_wdt_notifier); |
410 | if (err) { | 388 | if (err) { |
411 | printk(KERN_ERR NAME ": unable to register reboot notifier\n"); | 389 | printk(KERN_ERR NAME ": unable to register reboot notifier\n"); |
@@ -430,8 +408,7 @@ out: | |||
430 | return err; | 408 | return err; |
431 | } | 409 | } |
432 | 410 | ||
433 | static void __exit | 411 | static void __exit it8712f_wdt_exit(void) |
434 | it8712f_wdt_exit(void) | ||
435 | { | 412 | { |
436 | misc_deregister(&it8712f_wdt_miscdev); | 413 | misc_deregister(&it8712f_wdt_miscdev); |
437 | unregister_reboot_notifier(&it8712f_wdt_notifier); | 414 | unregister_reboot_notifier(&it8712f_wdt_notifier); |
diff --git a/drivers/watchdog/ixp2000_wdt.c b/drivers/watchdog/ixp2000_wdt.c index dc7548dcaf35..4226dae7d260 100644 --- a/drivers/watchdog/ixp2000_wdt.c +++ b/drivers/watchdog/ixp2000_wdt.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #include <linux/init.h> | 26 | #include <linux/init.h> |
27 | #include <linux/bitops.h> | 27 | #include <linux/bitops.h> |
28 | 28 | ||
29 | #include <asm/hardware.h> | 29 | #include <mach/hardware.h> |
30 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
31 | 31 | ||
32 | static int nowayout = WATCHDOG_NOWAYOUT; | 32 | static int nowayout = WATCHDOG_NOWAYOUT; |
diff --git a/drivers/watchdog/ixp4xx_wdt.c b/drivers/watchdog/ixp4xx_wdt.c index 5864bb865cfe..2313fad0dbb1 100644 --- a/drivers/watchdog/ixp4xx_wdt.c +++ b/drivers/watchdog/ixp4xx_wdt.c | |||
@@ -23,7 +23,7 @@ | |||
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/bitops.h> | 24 | #include <linux/bitops.h> |
25 | 25 | ||
26 | #include <asm/hardware.h> | 26 | #include <mach/hardware.h> |
27 | #include <asm/uaccess.h> | 27 | #include <asm/uaccess.h> |
28 | 28 | ||
29 | static int nowayout = WATCHDOG_NOWAYOUT; | 29 | static int nowayout = WATCHDOG_NOWAYOUT; |
diff --git a/drivers/watchdog/ks8695_wdt.c b/drivers/watchdog/ks8695_wdt.c index df5a6b811ccd..d21a6407fe21 100644 --- a/drivers/watchdog/ks8695_wdt.c +++ b/drivers/watchdog/ks8695_wdt.c | |||
@@ -21,7 +21,7 @@ | |||
21 | #include <linux/watchdog.h> | 21 | #include <linux/watchdog.h> |
22 | #include <asm/io.h> | 22 | #include <asm/io.h> |
23 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
24 | #include <asm/arch/regs-timer.h> | 24 | #include <mach/regs-timer.h> |
25 | 25 | ||
26 | 26 | ||
27 | #define WDT_DEFAULT_TIME 5 /* seconds */ | 27 | #define WDT_DEFAULT_TIME 5 /* seconds */ |
diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index 74bc39aa1ce8..74a10d50607b 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c | |||
@@ -43,9 +43,9 @@ | |||
43 | 43 | ||
44 | #include <asm/io.h> | 44 | #include <asm/io.h> |
45 | #include <asm/uaccess.h> | 45 | #include <asm/uaccess.h> |
46 | #include <asm/hardware.h> | 46 | #include <mach/hardware.h> |
47 | 47 | ||
48 | #include <asm/arch/prcm.h> | 48 | #include <mach/prcm.h> |
49 | 49 | ||
50 | #include "omap_wdt.h" | 50 | #include "omap_wdt.h" |
51 | 51 | ||
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 6b8483d3c783..f431a0427eaa 100644 --- a/drivers/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <linux/clk.h> | 29 | #include <linux/clk.h> |
30 | #include <linux/spinlock.h> | 30 | #include <linux/spinlock.h> |
31 | 31 | ||
32 | #include <asm/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
34 | #include <asm/io.h> | 34 | #include <asm/io.h> |
35 | 35 | ||
diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index 98532c0e0689..f1fe800658f4 100644 --- a/drivers/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c | |||
@@ -46,11 +46,10 @@ | |||
46 | #include <linux/platform_device.h> | 46 | #include <linux/platform_device.h> |
47 | #include <linux/interrupt.h> | 47 | #include <linux/interrupt.h> |
48 | #include <linux/clk.h> | 48 | #include <linux/clk.h> |
49 | #include <linux/uaccess.h> | ||
50 | #include <linux/io.h> | ||
49 | 51 | ||
50 | #include <asm/uaccess.h> | 52 | #include <mach/map.h> |
51 | #include <asm/io.h> | ||
52 | |||
53 | #include <asm/arch/map.h> | ||
54 | 53 | ||
55 | #undef S3C_VA_WATCHDOG | 54 | #undef S3C_VA_WATCHDOG |
56 | #define S3C_VA_WATCHDOG (0) | 55 | #define S3C_VA_WATCHDOG (0) |
@@ -65,8 +64,8 @@ | |||
65 | static int nowayout = WATCHDOG_NOWAYOUT; | 64 | static int nowayout = WATCHDOG_NOWAYOUT; |
66 | static int tmr_margin = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME; | 65 | static int tmr_margin = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME; |
67 | static int tmr_atboot = CONFIG_S3C2410_WATCHDOG_ATBOOT; | 66 | static int tmr_atboot = CONFIG_S3C2410_WATCHDOG_ATBOOT; |
68 | static int soft_noboot = 0; | 67 | static int soft_noboot; |
69 | static int debug = 0; | 68 | static int debug; |
70 | 69 | ||
71 | module_param(tmr_margin, int, 0); | 70 | module_param(tmr_margin, int, 0); |
72 | module_param(tmr_atboot, int, 0); | 71 | module_param(tmr_atboot, int, 0); |
@@ -74,24 +73,23 @@ module_param(nowayout, int, 0); | |||
74 | module_param(soft_noboot, int, 0); | 73 | module_param(soft_noboot, int, 0); |
75 | module_param(debug, int, 0); | 74 | module_param(debug, int, 0); |
76 | 75 | ||
77 | MODULE_PARM_DESC(tmr_margin, "Watchdog tmr_margin in seconds. default=" __MODULE_STRING(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME) ")"); | 76 | MODULE_PARM_DESC(tmr_margin, "Watchdog tmr_margin in seconds. default=" |
78 | 77 | __MODULE_STRING(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME) ")"); | |
79 | MODULE_PARM_DESC(tmr_atboot, "Watchdog is started at boot time if set to 1, default=" __MODULE_STRING(CONFIG_S3C2410_WATCHDOG_ATBOOT)); | 78 | MODULE_PARM_DESC(tmr_atboot, |
80 | 79 | "Watchdog is started at boot time if set to 1, default=" | |
81 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 80 | __MODULE_STRING(CONFIG_S3C2410_WATCHDOG_ATBOOT)); |
82 | 81 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" | |
82 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
83 | MODULE_PARM_DESC(soft_noboot, "Watchdog action, set to 1 to ignore reboots, 0 to reboot (default depends on ONLY_TESTING)"); | 83 | MODULE_PARM_DESC(soft_noboot, "Watchdog action, set to 1 to ignore reboots, 0 to reboot (default depends on ONLY_TESTING)"); |
84 | |||
85 | MODULE_PARM_DESC(debug, "Watchdog debug, set to >1 for debug, (default 0)"); | 84 | MODULE_PARM_DESC(debug, "Watchdog debug, set to >1 for debug, (default 0)"); |
86 | 85 | ||
87 | 86 | ||
88 | typedef enum close_state { | 87 | typedef enum close_state { |
89 | CLOSE_STATE_NOT, | 88 | CLOSE_STATE_NOT, |
90 | CLOSE_STATE_ALLOW=0x4021 | 89 | CLOSE_STATE_ALLOW = 0x4021 |
91 | } close_state_t; | 90 | } close_state_t; |
92 | 91 | ||
93 | static DECLARE_MUTEX(open_lock); | 92 | static unsigned long open_lock; |
94 | |||
95 | static struct device *wdt_dev; /* platform device attached to */ | 93 | static struct device *wdt_dev; /* platform device attached to */ |
96 | static struct resource *wdt_mem; | 94 | static struct resource *wdt_mem; |
97 | static struct resource *wdt_irq; | 95 | static struct resource *wdt_irq; |
@@ -99,38 +97,58 @@ static struct clk *wdt_clock; | |||
99 | static void __iomem *wdt_base; | 97 | static void __iomem *wdt_base; |
100 | static unsigned int wdt_count; | 98 | static unsigned int wdt_count; |
101 | static close_state_t allow_close; | 99 | static close_state_t allow_close; |
100 | static DEFINE_SPINLOCK(wdt_lock); | ||
102 | 101 | ||
103 | /* watchdog control routines */ | 102 | /* watchdog control routines */ |
104 | 103 | ||
105 | #define DBG(msg...) do { \ | 104 | #define DBG(msg...) do { \ |
106 | if (debug) \ | 105 | if (debug) \ |
107 | printk(KERN_INFO msg); \ | 106 | printk(KERN_INFO msg); \ |
108 | } while(0) | 107 | } while (0) |
109 | 108 | ||
110 | /* functions */ | 109 | /* functions */ |
111 | 110 | ||
112 | static int s3c2410wdt_keepalive(void) | 111 | static void s3c2410wdt_keepalive(void) |
113 | { | 112 | { |
113 | spin_lock(&wdt_lock); | ||
114 | writel(wdt_count, wdt_base + S3C2410_WTCNT); | 114 | writel(wdt_count, wdt_base + S3C2410_WTCNT); |
115 | return 0; | 115 | spin_unlock(&wdt_lock); |
116 | } | 116 | } |
117 | 117 | ||
118 | static int s3c2410wdt_stop(void) | 118 | static void __s3c2410wdt_stop(void) |
119 | { | 119 | { |
120 | unsigned long wtcon; | 120 | unsigned long wtcon; |
121 | 121 | ||
122 | spin_lock(&wdt_lock); | ||
122 | wtcon = readl(wdt_base + S3C2410_WTCON); | 123 | wtcon = readl(wdt_base + S3C2410_WTCON); |
123 | wtcon &= ~(S3C2410_WTCON_ENABLE | S3C2410_WTCON_RSTEN); | 124 | wtcon &= ~(S3C2410_WTCON_ENABLE | S3C2410_WTCON_RSTEN); |
124 | writel(wtcon, wdt_base + S3C2410_WTCON); | 125 | writel(wtcon, wdt_base + S3C2410_WTCON); |
126 | spin_unlock(&wdt_lock); | ||
127 | } | ||
125 | 128 | ||
126 | return 0; | 129 | static void __s3c2410wdt_stop(void) |
130 | { | ||
131 | unsigned long wtcon; | ||
132 | |||
133 | wtcon = readl(wdt_base + S3C2410_WTCON); | ||
134 | wtcon &= ~(S3C2410_WTCON_ENABLE | S3C2410_WTCON_RSTEN); | ||
135 | writel(wtcon, wdt_base + S3C2410_WTCON); | ||
136 | } | ||
137 | |||
138 | static void s3c2410wdt_stop(void) | ||
139 | { | ||
140 | spin_lock(&wdt_lock); | ||
141 | __s3c2410wdt_stop(); | ||
142 | spin_unlock(&wdt_lock); | ||
127 | } | 143 | } |
128 | 144 | ||
129 | static int s3c2410wdt_start(void) | 145 | static void s3c2410wdt_start(void) |
130 | { | 146 | { |
131 | unsigned long wtcon; | 147 | unsigned long wtcon; |
132 | 148 | ||
133 | s3c2410wdt_stop(); | 149 | spin_lock(&wdt_lock); |
150 | |||
151 | __s3c2410wdt_stop(); | ||
134 | 152 | ||
135 | wtcon = readl(wdt_base + S3C2410_WTCON); | 153 | wtcon = readl(wdt_base + S3C2410_WTCON); |
136 | wtcon |= S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128; | 154 | wtcon |= S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128; |
@@ -149,6 +167,7 @@ static int s3c2410wdt_start(void) | |||
149 | writel(wdt_count, wdt_base + S3C2410_WTDAT); | 167 | writel(wdt_count, wdt_base + S3C2410_WTDAT); |
150 | writel(wdt_count, wdt_base + S3C2410_WTCNT); | 168 | writel(wdt_count, wdt_base + S3C2410_WTCNT); |
151 | writel(wtcon, wdt_base + S3C2410_WTCON); | 169 | writel(wtcon, wdt_base + S3C2410_WTCON); |
170 | spin_unlock(&wdt_lock); | ||
152 | 171 | ||
153 | return 0; | 172 | return 0; |
154 | } | 173 | } |
@@ -211,7 +230,7 @@ static int s3c2410wdt_set_heartbeat(int timeout) | |||
211 | 230 | ||
212 | static int s3c2410wdt_open(struct inode *inode, struct file *file) | 231 | static int s3c2410wdt_open(struct inode *inode, struct file *file) |
213 | { | 232 | { |
214 | if(down_trylock(&open_lock)) | 233 | if (test_and_set_bit(0, &open_lock)) |
215 | return -EBUSY; | 234 | return -EBUSY; |
216 | 235 | ||
217 | if (nowayout) | 236 | if (nowayout) |
@@ -231,15 +250,14 @@ static int s3c2410wdt_release(struct inode *inode, struct file *file) | |||
231 | * Lock it in if it's a module and we set nowayout | 250 | * Lock it in if it's a module and we set nowayout |
232 | */ | 251 | */ |
233 | 252 | ||
234 | if (allow_close == CLOSE_STATE_ALLOW) { | 253 | if (allow_close == CLOSE_STATE_ALLOW) |
235 | s3c2410wdt_stop(); | 254 | s3c2410wdt_stop(); |
236 | } else { | 255 | else { |
237 | dev_err(wdt_dev, "Unexpected close, not stopping watchdog\n"); | 256 | dev_err(wdt_dev, "Unexpected close, not stopping watchdog\n"); |
238 | s3c2410wdt_keepalive(); | 257 | s3c2410wdt_keepalive(); |
239 | } | 258 | } |
240 | |||
241 | allow_close = CLOSE_STATE_NOT; | 259 | allow_close = CLOSE_STATE_NOT; |
242 | up(&open_lock); | 260 | clear_bit(0, &open_lock); |
243 | return 0; | 261 | return 0; |
244 | } | 262 | } |
245 | 263 | ||
@@ -249,7 +267,7 @@ static ssize_t s3c2410wdt_write(struct file *file, const char __user *data, | |||
249 | /* | 267 | /* |
250 | * Refresh the timer. | 268 | * Refresh the timer. |
251 | */ | 269 | */ |
252 | if(len) { | 270 | if (len) { |
253 | if (!nowayout) { | 271 | if (!nowayout) { |
254 | size_t i; | 272 | size_t i; |
255 | 273 | ||
@@ -265,7 +283,6 @@ static ssize_t s3c2410wdt_write(struct file *file, const char __user *data, | |||
265 | allow_close = CLOSE_STATE_ALLOW; | 283 | allow_close = CLOSE_STATE_ALLOW; |
266 | } | 284 | } |
267 | } | 285 | } |
268 | |||
269 | s3c2410wdt_keepalive(); | 286 | s3c2410wdt_keepalive(); |
270 | } | 287 | } |
271 | return len; | 288 | return len; |
@@ -273,48 +290,41 @@ static ssize_t s3c2410wdt_write(struct file *file, const char __user *data, | |||
273 | 290 | ||
274 | #define OPTIONS WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE | 291 | #define OPTIONS WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE |
275 | 292 | ||
276 | static struct watchdog_info s3c2410_wdt_ident = { | 293 | static const struct watchdog_info s3c2410_wdt_ident = { |
277 | .options = OPTIONS, | 294 | .options = OPTIONS, |
278 | .firmware_version = 0, | 295 | .firmware_version = 0, |
279 | .identity = "S3C2410 Watchdog", | 296 | .identity = "S3C2410 Watchdog", |
280 | }; | 297 | }; |
281 | 298 | ||
282 | 299 | ||
283 | static int s3c2410wdt_ioctl(struct inode *inode, struct file *file, | 300 | static long s3c2410wdt_ioctl(struct file *file, unsigned int cmd, |
284 | unsigned int cmd, unsigned long arg) | 301 | unsigned long arg) |
285 | { | 302 | { |
286 | void __user *argp = (void __user *)arg; | 303 | void __user *argp = (void __user *)arg; |
287 | int __user *p = argp; | 304 | int __user *p = argp; |
288 | int new_margin; | 305 | int new_margin; |
289 | 306 | ||
290 | switch (cmd) { | 307 | switch (cmd) { |
291 | default: | 308 | default: |
292 | return -ENOTTY; | 309 | return -ENOTTY; |
293 | 310 | case WDIOC_GETSUPPORT: | |
294 | case WDIOC_GETSUPPORT: | 311 | return copy_to_user(argp, &s3c2410_wdt_ident, |
295 | return copy_to_user(argp, &s3c2410_wdt_ident, | 312 | sizeof(s3c2410_wdt_ident)) ? -EFAULT : 0; |
296 | sizeof(s3c2410_wdt_ident)) ? -EFAULT : 0; | 313 | case WDIOC_GETSTATUS: |
297 | 314 | case WDIOC_GETBOOTSTATUS: | |
298 | case WDIOC_GETSTATUS: | 315 | return put_user(0, p); |
299 | case WDIOC_GETBOOTSTATUS: | 316 | case WDIOC_KEEPALIVE: |
300 | return put_user(0, p); | 317 | s3c2410wdt_keepalive(); |
301 | 318 | return 0; | |
302 | case WDIOC_KEEPALIVE: | 319 | case WDIOC_SETTIMEOUT: |
303 | s3c2410wdt_keepalive(); | 320 | if (get_user(new_margin, p)) |
304 | return 0; | 321 | return -EFAULT; |
305 | 322 | if (s3c2410wdt_set_heartbeat(new_margin)) | |
306 | case WDIOC_SETTIMEOUT: | 323 | return -EINVAL; |
307 | if (get_user(new_margin, p)) | 324 | s3c2410wdt_keepalive(); |
308 | return -EFAULT; | 325 | return put_user(tmr_margin, p); |
309 | 326 | case WDIOC_GETTIMEOUT: | |
310 | if (s3c2410wdt_set_heartbeat(new_margin)) | 327 | return put_user(tmr_margin, p); |
311 | return -EINVAL; | ||
312 | |||
313 | s3c2410wdt_keepalive(); | ||
314 | return put_user(tmr_margin, p); | ||
315 | |||
316 | case WDIOC_GETTIMEOUT: | ||
317 | return put_user(tmr_margin, p); | ||
318 | } | 328 | } |
319 | } | 329 | } |
320 | 330 | ||
@@ -324,7 +334,7 @@ static const struct file_operations s3c2410wdt_fops = { | |||
324 | .owner = THIS_MODULE, | 334 | .owner = THIS_MODULE, |
325 | .llseek = no_llseek, | 335 | .llseek = no_llseek, |
326 | .write = s3c2410wdt_write, | 336 | .write = s3c2410wdt_write, |
327 | .ioctl = s3c2410wdt_ioctl, | 337 | .unlocked_ioctl = s3c2410wdt_ioctl, |
328 | .open = s3c2410wdt_open, | 338 | .open = s3c2410wdt_open, |
329 | .release = s3c2410wdt_release, | 339 | .release = s3c2410wdt_release, |
330 | }; | 340 | }; |
@@ -411,14 +421,15 @@ static int s3c2410wdt_probe(struct platform_device *pdev) | |||
411 | * not, try the default value */ | 421 | * not, try the default value */ |
412 | 422 | ||
413 | if (s3c2410wdt_set_heartbeat(tmr_margin)) { | 423 | if (s3c2410wdt_set_heartbeat(tmr_margin)) { |
414 | started = s3c2410wdt_set_heartbeat(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); | 424 | started = s3c2410wdt_set_heartbeat( |
425 | CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); | ||
415 | 426 | ||
416 | if (started == 0) { | 427 | if (started == 0) |
417 | dev_info(dev,"tmr_margin value out of range, default %d used\n", | 428 | dev_info(dev, |
429 | "tmr_margin value out of range, default %d used\n", | ||
418 | CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); | 430 | CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); |
419 | } else { | 431 | else |
420 | dev_info(dev, "default timer value is out of range, cannot start\n"); | 432 | dev_info(dev, "default timer value is out of range, cannot start\n"); |
421 | } | ||
422 | } | 433 | } |
423 | 434 | ||
424 | ret = misc_register(&s3c2410wdt_miscdev); | 435 | ret = misc_register(&s3c2410wdt_miscdev); |
@@ -447,7 +458,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev) | |||
447 | (wtcon & S3C2410_WTCON_ENABLE) ? "" : "in", | 458 | (wtcon & S3C2410_WTCON_ENABLE) ? "" : "in", |
448 | (wtcon & S3C2410_WTCON_RSTEN) ? "" : "dis", | 459 | (wtcon & S3C2410_WTCON_RSTEN) ? "" : "dis", |
449 | (wtcon & S3C2410_WTCON_INTEN) ? "" : "en"); | 460 | (wtcon & S3C2410_WTCON_INTEN) ? "" : "en"); |
450 | 461 | ||
451 | return 0; | 462 | return 0; |
452 | 463 | ||
453 | err_clk: | 464 | err_clk: |
@@ -487,7 +498,7 @@ static int s3c2410wdt_remove(struct platform_device *dev) | |||
487 | 498 | ||
488 | static void s3c2410wdt_shutdown(struct platform_device *dev) | 499 | static void s3c2410wdt_shutdown(struct platform_device *dev) |
489 | { | 500 | { |
490 | s3c2410wdt_stop(); | 501 | s3c2410wdt_stop(); |
491 | } | 502 | } |
492 | 503 | ||
493 | #ifdef CONFIG_PM | 504 | #ifdef CONFIG_PM |
@@ -540,7 +551,8 @@ static struct platform_driver s3c2410wdt_driver = { | |||
540 | }; | 551 | }; |
541 | 552 | ||
542 | 553 | ||
543 | static char banner[] __initdata = KERN_INFO "S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics\n"; | 554 | static char banner[] __initdata = |
555 | KERN_INFO "S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics\n"; | ||
544 | 556 | ||
545 | static int __init watchdog_init(void) | 557 | static int __init watchdog_init(void) |
546 | { | 558 | { |
diff --git a/drivers/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c index e42002d2f815..97d9da758dcc 100644 --- a/drivers/watchdog/sa1100_wdt.c +++ b/drivers/watchdog/sa1100_wdt.c | |||
@@ -28,12 +28,11 @@ | |||
28 | #include <linux/bitops.h> | 28 | #include <linux/bitops.h> |
29 | 29 | ||
30 | #ifdef CONFIG_ARCH_PXA | 30 | #ifdef CONFIG_ARCH_PXA |
31 | #include <asm/arch/pxa-regs.h> | 31 | #include <mach/pxa-regs.h> |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | #include <asm/arch/reset.h> | 34 | #include <mach/reset.h> |
35 | 35 | #include <mach/hardware.h> | |
36 | #include <asm/hardware.h> | ||
37 | #include <asm/uaccess.h> | 36 | #include <asm/uaccess.h> |
38 | 37 | ||
39 | #define OSCR_FREQ CLOCK_TICK_RATE | 38 | #define OSCR_FREQ CLOCK_TICK_RATE |
diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c index 35cddff7020f..621ebad56d86 100644 --- a/drivers/watchdog/sc1200wdt.c +++ b/drivers/watchdog/sc1200wdt.c | |||
@@ -15,14 +15,18 @@ | |||
15 | * | 15 | * |
16 | * Changelog: | 16 | * Changelog: |
17 | * 20020220 Zwane Mwaikambo Code based on datasheet, no hardware. | 17 | * 20020220 Zwane Mwaikambo Code based on datasheet, no hardware. |
18 | * 20020221 Zwane Mwaikambo Cleanups as suggested by Jeff Garzik and Alan Cox. | 18 | * 20020221 Zwane Mwaikambo Cleanups as suggested by Jeff Garzik |
19 | * and Alan Cox. | ||
19 | * 20020222 Zwane Mwaikambo Added probing. | 20 | * 20020222 Zwane Mwaikambo Added probing. |
20 | * 20020225 Zwane Mwaikambo Added ISAPNP support. | 21 | * 20020225 Zwane Mwaikambo Added ISAPNP support. |
21 | * 20020412 Rob Radez Broke out start/stop functions | 22 | * 20020412 Rob Radez Broke out start/stop functions |
22 | * <rob@osinvestor.com> Return proper status instead of temperature warning | 23 | * <rob@osinvestor.com> Return proper status instead of |
23 | * Add WDIOC_GETBOOTSTATUS and WDIOC_SETOPTIONS ioctls | 24 | * temperature warning |
25 | * Add WDIOC_GETBOOTSTATUS and | ||
26 | * WDIOC_SETOPTIONS ioctls | ||
24 | * Fix CONFIG_WATCHDOG_NOWAYOUT | 27 | * Fix CONFIG_WATCHDOG_NOWAYOUT |
25 | * 20020530 Joel Becker Add Matt Domsch's nowayout module option | 28 | * 20020530 Joel Becker Add Matt Domsch's nowayout module |
29 | * option | ||
26 | * 20030116 Adam Belay Updated to the latest pnp code | 30 | * 20030116 Adam Belay Updated to the latest pnp code |
27 | * | 31 | * |
28 | */ | 32 | */ |
@@ -39,9 +43,8 @@ | |||
39 | #include <linux/pnp.h> | 43 | #include <linux/pnp.h> |
40 | #include <linux/fs.h> | 44 | #include <linux/fs.h> |
41 | #include <linux/semaphore.h> | 45 | #include <linux/semaphore.h> |
42 | 46 | #include <linux/io.h> | |
43 | #include <asm/io.h> | 47 | #include <linux/uaccess.h> |
44 | #include <asm/uaccess.h> | ||
45 | 48 | ||
46 | #define SC1200_MODULE_VER "build 20020303" | 49 | #define SC1200_MODULE_VER "build 20020303" |
47 | #define SC1200_MODULE_NAME "sc1200wdt" | 50 | #define SC1200_MODULE_NAME "sc1200wdt" |
@@ -72,7 +75,7 @@ static char banner[] __initdata = KERN_INFO PFX SC1200_MODULE_VER; | |||
72 | static int timeout = 1; | 75 | static int timeout = 1; |
73 | static int io = -1; | 76 | static int io = -1; |
74 | static int io_len = 2; /* for non plug and play */ | 77 | static int io_len = 2; /* for non plug and play */ |
75 | static struct semaphore open_sem; | 78 | static unsigned long open_flag; |
76 | static char expect_close; | 79 | static char expect_close; |
77 | static DEFINE_SPINLOCK(sc1200wdt_lock); /* io port access serialisation */ | 80 | static DEFINE_SPINLOCK(sc1200wdt_lock); /* io port access serialisation */ |
78 | 81 | ||
@@ -81,7 +84,8 @@ static int isapnp = 1; | |||
81 | static struct pnp_dev *wdt_dev; | 84 | static struct pnp_dev *wdt_dev; |
82 | 85 | ||
83 | module_param(isapnp, int, 0); | 86 | module_param(isapnp, int, 0); |
84 | MODULE_PARM_DESC(isapnp, "When set to 0 driver ISA PnP support will be disabled"); | 87 | MODULE_PARM_DESC(isapnp, |
88 | "When set to 0 driver ISA PnP support will be disabled"); | ||
85 | #endif | 89 | #endif |
86 | 90 | ||
87 | module_param(io, int, 0); | 91 | module_param(io, int, 0); |
@@ -91,26 +95,40 @@ MODULE_PARM_DESC(timeout, "range is 0-255 minutes, default is 1"); | |||
91 | 95 | ||
92 | static int nowayout = WATCHDOG_NOWAYOUT; | 96 | static int nowayout = WATCHDOG_NOWAYOUT; |
93 | module_param(nowayout, int, 0); | 97 | module_param(nowayout, int, 0); |
94 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 98 | MODULE_PARM_DESC(nowayout, |
99 | "Watchdog cannot be stopped once started (default=" | ||
100 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
95 | 101 | ||
96 | 102 | ||
97 | 103 | ||
98 | /* Read from Data Register */ | 104 | /* Read from Data Register */ |
99 | static inline void sc1200wdt_read_data(unsigned char index, unsigned char *data) | 105 | static inline void __sc1200wdt_read_data(unsigned char index, |
106 | unsigned char *data) | ||
100 | { | 107 | { |
101 | spin_lock(&sc1200wdt_lock); | ||
102 | outb_p(index, PMIR); | 108 | outb_p(index, PMIR); |
103 | *data = inb(PMDR); | 109 | *data = inb(PMDR); |
104 | spin_unlock(&sc1200wdt_lock); | ||
105 | } | 110 | } |
106 | 111 | ||
112 | static void sc1200wdt_read_data(unsigned char index, unsigned char *data) | ||
113 | { | ||
114 | spin_lock(&sc1200wdt_lock); | ||
115 | __sc1200wdt_read_data(index, data); | ||
116 | spin_unlock(&sc1200wdt_lock); | ||
117 | } | ||
107 | 118 | ||
108 | /* Write to Data Register */ | 119 | /* Write to Data Register */ |
109 | static inline void sc1200wdt_write_data(unsigned char index, unsigned char data) | 120 | static inline void __sc1200wdt_write_data(unsigned char index, |
121 | unsigned char data) | ||
110 | { | 122 | { |
111 | spin_lock(&sc1200wdt_lock); | ||
112 | outb_p(index, PMIR); | 123 | outb_p(index, PMIR); |
113 | outb(data, PMDR); | 124 | outb(data, PMDR); |
125 | } | ||
126 | |||
127 | static inline void sc1200wdt_write_data(unsigned char index, | ||
128 | unsigned char data) | ||
129 | { | ||
130 | spin_lock(&sc1200wdt_lock); | ||
131 | __sc1200wdt_write_data(index, data); | ||
114 | spin_unlock(&sc1200wdt_lock); | 132 | spin_unlock(&sc1200wdt_lock); |
115 | } | 133 | } |
116 | 134 | ||
@@ -118,22 +136,23 @@ static inline void sc1200wdt_write_data(unsigned char index, unsigned char data) | |||
118 | static void sc1200wdt_start(void) | 136 | static void sc1200wdt_start(void) |
119 | { | 137 | { |
120 | unsigned char reg; | 138 | unsigned char reg; |
139 | spin_lock(&sc1200wdt_lock); | ||
121 | 140 | ||
122 | sc1200wdt_read_data(WDCF, ®); | 141 | __sc1200wdt_read_data(WDCF, ®); |
123 | /* assert WDO when any of the following interrupts are triggered too */ | 142 | /* assert WDO when any of the following interrupts are triggered too */ |
124 | reg |= (KBC_IRQ | MSE_IRQ | UART1_IRQ | UART2_IRQ); | 143 | reg |= (KBC_IRQ | MSE_IRQ | UART1_IRQ | UART2_IRQ); |
125 | sc1200wdt_write_data(WDCF, reg); | 144 | __sc1200wdt_write_data(WDCF, reg); |
126 | /* set the timeout and get the ball rolling */ | 145 | /* set the timeout and get the ball rolling */ |
127 | sc1200wdt_write_data(WDTO, timeout); | 146 | __sc1200wdt_write_data(WDTO, timeout); |
128 | } | ||
129 | 147 | ||
148 | spin_unlock(&sc1200wdt_lock); | ||
149 | } | ||
130 | 150 | ||
131 | static void sc1200wdt_stop(void) | 151 | static void sc1200wdt_stop(void) |
132 | { | 152 | { |
133 | sc1200wdt_write_data(WDTO, 0); | 153 | sc1200wdt_write_data(WDTO, 0); |
134 | } | 154 | } |
135 | 155 | ||
136 | |||
137 | /* This returns the status of the WDO signal, inactive high. */ | 156 | /* This returns the status of the WDO signal, inactive high. */ |
138 | static inline int sc1200wdt_status(void) | 157 | static inline int sc1200wdt_status(void) |
139 | { | 158 | { |
@@ -144,14 +163,13 @@ static inline int sc1200wdt_status(void) | |||
144 | * KEEPALIVEPING which is a bit of a kludge because there's nothing | 163 | * KEEPALIVEPING which is a bit of a kludge because there's nothing |
145 | * else for enabled/disabled status | 164 | * else for enabled/disabled status |
146 | */ | 165 | */ |
147 | return (ret & 0x01) ? 0 : WDIOF_KEEPALIVEPING; /* bits 1 - 7 are undefined */ | 166 | return (ret & 0x01) ? 0 : WDIOF_KEEPALIVEPING; |
148 | } | 167 | } |
149 | 168 | ||
150 | |||
151 | static int sc1200wdt_open(struct inode *inode, struct file *file) | 169 | static int sc1200wdt_open(struct inode *inode, struct file *file) |
152 | { | 170 | { |
153 | /* allow one at a time */ | 171 | /* allow one at a time */ |
154 | if (down_trylock(&open_sem)) | 172 | if (test_and_set_bit(0, &open_flag)) |
155 | return -EBUSY; | 173 | return -EBUSY; |
156 | 174 | ||
157 | if (timeout > MAX_TIMEOUT) | 175 | if (timeout > MAX_TIMEOUT) |
@@ -164,71 +182,71 @@ static int sc1200wdt_open(struct inode *inode, struct file *file) | |||
164 | } | 182 | } |
165 | 183 | ||
166 | 184 | ||
167 | static int sc1200wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) | 185 | static long sc1200wdt_ioctl(struct file *file, unsigned int cmd, |
186 | unsigned long arg) | ||
168 | { | 187 | { |
169 | int new_timeout; | 188 | int new_timeout; |
170 | void __user *argp = (void __user *)arg; | 189 | void __user *argp = (void __user *)arg; |
171 | int __user *p = argp; | 190 | int __user *p = argp; |
172 | static struct watchdog_info ident = { | 191 | static const struct watchdog_info ident = { |
173 | .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE, | 192 | .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | |
193 | WDIOF_MAGICCLOSE, | ||
174 | .firmware_version = 0, | 194 | .firmware_version = 0, |
175 | .identity = "PC87307/PC97307", | 195 | .identity = "PC87307/PC97307", |
176 | }; | 196 | }; |
177 | 197 | ||
178 | switch (cmd) { | 198 | switch (cmd) { |
179 | default: | ||
180 | return -ENOTTY; | ||
181 | |||
182 | case WDIOC_GETSUPPORT: | ||
183 | if (copy_to_user(argp, &ident, sizeof ident)) | ||
184 | return -EFAULT; | ||
185 | return 0; | ||
186 | |||
187 | case WDIOC_GETSTATUS: | ||
188 | return put_user(sc1200wdt_status(), p); | ||
189 | |||
190 | case WDIOC_GETBOOTSTATUS: | ||
191 | return put_user(0, p); | ||
192 | |||
193 | case WDIOC_KEEPALIVE: | ||
194 | sc1200wdt_write_data(WDTO, timeout); | ||
195 | return 0; | ||
196 | 199 | ||
197 | case WDIOC_SETTIMEOUT: | 200 | case WDIOC_GETSUPPORT: |
198 | if (get_user(new_timeout, p)) | 201 | if (copy_to_user(argp, &ident, sizeof ident)) |
199 | return -EFAULT; | 202 | return -EFAULT; |
203 | return 0; | ||
200 | 204 | ||
201 | /* the API states this is given in secs */ | 205 | case WDIOC_GETSTATUS: |
202 | new_timeout /= 60; | 206 | return put_user(sc1200wdt_status(), p); |
203 | if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) | ||
204 | return -EINVAL; | ||
205 | 207 | ||
206 | timeout = new_timeout; | 208 | case WDIOC_GETBOOTSTATUS: |
207 | sc1200wdt_write_data(WDTO, timeout); | 209 | return put_user(0, p); |
208 | /* fall through and return the new timeout */ | ||
209 | 210 | ||
210 | case WDIOC_GETTIMEOUT: | 211 | case WDIOC_KEEPALIVE: |
211 | return put_user(timeout * 60, p); | 212 | sc1200wdt_write_data(WDTO, timeout); |
213 | return 0; | ||
214 | |||
215 | case WDIOC_SETTIMEOUT: | ||
216 | if (get_user(new_timeout, p)) | ||
217 | return -EFAULT; | ||
218 | /* the API states this is given in secs */ | ||
219 | new_timeout /= 60; | ||
220 | if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) | ||
221 | return -EINVAL; | ||
222 | timeout = new_timeout; | ||
223 | sc1200wdt_write_data(WDTO, timeout); | ||
224 | /* fall through and return the new timeout */ | ||
212 | 225 | ||
213 | case WDIOC_SETOPTIONS: | 226 | case WDIOC_GETTIMEOUT: |
214 | { | 227 | return put_user(timeout * 60, p); |
215 | int options, retval = -EINVAL; | ||
216 | 228 | ||
217 | if (get_user(options, p)) | 229 | case WDIOC_SETOPTIONS: |
218 | return -EFAULT; | 230 | { |
231 | int options, retval = -EINVAL; | ||
219 | 232 | ||
220 | if (options & WDIOS_DISABLECARD) { | 233 | if (get_user(options, p)) |
221 | sc1200wdt_stop(); | 234 | return -EFAULT; |
222 | retval = 0; | ||
223 | } | ||
224 | 235 | ||
225 | if (options & WDIOS_ENABLECARD) { | 236 | if (options & WDIOS_DISABLECARD) { |
226 | sc1200wdt_start(); | 237 | sc1200wdt_stop(); |
227 | retval = 0; | 238 | retval = 0; |
228 | } | 239 | } |
229 | 240 | ||
230 | return retval; | 241 | if (options & WDIOS_ENABLECARD) { |
242 | sc1200wdt_start(); | ||
243 | retval = 0; | ||
231 | } | 244 | } |
245 | |||
246 | return retval; | ||
247 | } | ||
248 | default: | ||
249 | return -ENOTTY; | ||
232 | } | 250 | } |
233 | } | 251 | } |
234 | 252 | ||
@@ -240,16 +258,18 @@ static int sc1200wdt_release(struct inode *inode, struct file *file) | |||
240 | printk(KERN_INFO PFX "Watchdog disabled\n"); | 258 | printk(KERN_INFO PFX "Watchdog disabled\n"); |
241 | } else { | 259 | } else { |
242 | sc1200wdt_write_data(WDTO, timeout); | 260 | sc1200wdt_write_data(WDTO, timeout); |
243 | printk(KERN_CRIT PFX "Unexpected close!, timeout = %d min(s)\n", timeout); | 261 | printk(KERN_CRIT PFX |
262 | "Unexpected close!, timeout = %d min(s)\n", timeout); | ||
244 | } | 263 | } |
245 | up(&open_sem); | 264 | clear_bit(0, &open_flag); |
246 | expect_close = 0; | 265 | expect_close = 0; |
247 | 266 | ||
248 | return 0; | 267 | return 0; |
249 | } | 268 | } |
250 | 269 | ||
251 | 270 | ||
252 | static ssize_t sc1200wdt_write(struct file *file, const char __user *data, size_t len, loff_t *ppos) | 271 | static ssize_t sc1200wdt_write(struct file *file, const char __user *data, |
272 | size_t len, loff_t *ppos) | ||
253 | { | 273 | { |
254 | if (len) { | 274 | if (len) { |
255 | if (!nowayout) { | 275 | if (!nowayout) { |
@@ -275,7 +295,8 @@ static ssize_t sc1200wdt_write(struct file *file, const char __user *data, size_ | |||
275 | } | 295 | } |
276 | 296 | ||
277 | 297 | ||
278 | static int sc1200wdt_notify_sys(struct notifier_block *this, unsigned long code, void *unused) | 298 | static int sc1200wdt_notify_sys(struct notifier_block *this, |
299 | unsigned long code, void *unused) | ||
279 | { | 300 | { |
280 | if (code == SYS_DOWN || code == SYS_HALT) | 301 | if (code == SYS_DOWN || code == SYS_HALT) |
281 | sc1200wdt_stop(); | 302 | sc1200wdt_stop(); |
@@ -284,23 +305,20 @@ static int sc1200wdt_notify_sys(struct notifier_block *this, unsigned long code, | |||
284 | } | 305 | } |
285 | 306 | ||
286 | 307 | ||
287 | static struct notifier_block sc1200wdt_notifier = | 308 | static struct notifier_block sc1200wdt_notifier = { |
288 | { | ||
289 | .notifier_call = sc1200wdt_notify_sys, | 309 | .notifier_call = sc1200wdt_notify_sys, |
290 | }; | 310 | }; |
291 | 311 | ||
292 | static const struct file_operations sc1200wdt_fops = | 312 | static const struct file_operations sc1200wdt_fops = { |
293 | { | ||
294 | .owner = THIS_MODULE, | 313 | .owner = THIS_MODULE, |
295 | .llseek = no_llseek, | 314 | .llseek = no_llseek, |
296 | .write = sc1200wdt_write, | 315 | .write = sc1200wdt_write, |
297 | .ioctl = sc1200wdt_ioctl, | 316 | .unlocked_ioctl = sc1200wdt_ioctl, |
298 | .open = sc1200wdt_open, | 317 | .open = sc1200wdt_open, |
299 | .release = sc1200wdt_release, | 318 | .release = sc1200wdt_release, |
300 | }; | 319 | }; |
301 | 320 | ||
302 | static struct miscdevice sc1200wdt_miscdev = | 321 | static struct miscdevice sc1200wdt_miscdev = { |
303 | { | ||
304 | .minor = WATCHDOG_MINOR, | 322 | .minor = WATCHDOG_MINOR, |
305 | .name = "watchdog", | 323 | .name = "watchdog", |
306 | .fops = &sc1200wdt_fops, | 324 | .fops = &sc1200wdt_fops, |
@@ -312,14 +330,14 @@ static int __init sc1200wdt_probe(void) | |||
312 | /* The probe works by reading the PMC3 register's default value of 0x0e | 330 | /* The probe works by reading the PMC3 register's default value of 0x0e |
313 | * there is one caveat, if the device disables the parallel port or any | 331 | * there is one caveat, if the device disables the parallel port or any |
314 | * of the UARTs we won't be able to detect it. | 332 | * of the UARTs we won't be able to detect it. |
315 | * Nb. This could be done with accuracy by reading the SID registers, but | 333 | * NB. This could be done with accuracy by reading the SID registers, |
316 | * we don't have access to those io regions. | 334 | * but we don't have access to those io regions. |
317 | */ | 335 | */ |
318 | 336 | ||
319 | unsigned char reg; | 337 | unsigned char reg; |
320 | 338 | ||
321 | sc1200wdt_read_data(PMC3, ®); | 339 | sc1200wdt_read_data(PMC3, ®); |
322 | reg &= 0x0f; /* we don't want the UART busy bits */ | 340 | reg &= 0x0f; /* we don't want the UART busy bits */ |
323 | return (reg == 0x0e) ? 0 : -ENODEV; | 341 | return (reg == 0x0e) ? 0 : -ENODEV; |
324 | } | 342 | } |
325 | 343 | ||
@@ -332,7 +350,8 @@ static struct pnp_device_id scl200wdt_pnp_devices[] = { | |||
332 | {.id = ""}, | 350 | {.id = ""}, |
333 | }; | 351 | }; |
334 | 352 | ||
335 | static int scl200wdt_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id) | 353 | static int scl200wdt_pnp_probe(struct pnp_dev *dev, |
354 | const struct pnp_device_id *dev_id) | ||
336 | { | 355 | { |
337 | /* this driver only supports one card at a time */ | 356 | /* this driver only supports one card at a time */ |
338 | if (wdt_dev || !isapnp) | 357 | if (wdt_dev || !isapnp) |
@@ -347,13 +366,14 @@ static int scl200wdt_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id | |||
347 | return -EBUSY; | 366 | return -EBUSY; |
348 | } | 367 | } |
349 | 368 | ||
350 | printk(KERN_INFO "scl200wdt: PnP device found at io port %#x/%d\n", io, io_len); | 369 | printk(KERN_INFO "scl200wdt: PnP device found at io port %#x/%d\n", |
370 | io, io_len); | ||
351 | return 0; | 371 | return 0; |
352 | } | 372 | } |
353 | 373 | ||
354 | static void scl200wdt_pnp_remove(struct pnp_dev * dev) | 374 | static void scl200wdt_pnp_remove(struct pnp_dev *dev) |
355 | { | 375 | { |
356 | if (wdt_dev){ | 376 | if (wdt_dev) { |
357 | release_region(io, io_len); | 377 | release_region(io, io_len); |
358 | wdt_dev = NULL; | 378 | wdt_dev = NULL; |
359 | } | 379 | } |
@@ -375,8 +395,6 @@ static int __init sc1200wdt_init(void) | |||
375 | 395 | ||
376 | printk("%s\n", banner); | 396 | printk("%s\n", banner); |
377 | 397 | ||
378 | sema_init(&open_sem, 1); | ||
379 | |||
380 | #if defined CONFIG_PNP | 398 | #if defined CONFIG_PNP |
381 | if (isapnp) { | 399 | if (isapnp) { |
382 | ret = pnp_register_driver(&scl200wdt_pnp_driver); | 400 | ret = pnp_register_driver(&scl200wdt_pnp_driver); |
@@ -410,13 +428,16 @@ static int __init sc1200wdt_init(void) | |||
410 | 428 | ||
411 | ret = register_reboot_notifier(&sc1200wdt_notifier); | 429 | ret = register_reboot_notifier(&sc1200wdt_notifier); |
412 | if (ret) { | 430 | if (ret) { |
413 | printk(KERN_ERR PFX "Unable to register reboot notifier err = %d\n", ret); | 431 | printk(KERN_ERR PFX |
432 | "Unable to register reboot notifier err = %d\n", ret); | ||
414 | goto out_io; | 433 | goto out_io; |
415 | } | 434 | } |
416 | 435 | ||
417 | ret = misc_register(&sc1200wdt_miscdev); | 436 | ret = misc_register(&sc1200wdt_miscdev); |
418 | if (ret) { | 437 | if (ret) { |
419 | printk(KERN_ERR PFX "Unable to register miscdev on minor %d\n", WATCHDOG_MINOR); | 438 | printk(KERN_ERR PFX |
439 | "Unable to register miscdev on minor %d\n", | ||
440 | WATCHDOG_MINOR); | ||
420 | goto out_rbt; | 441 | goto out_rbt; |
421 | } | 442 | } |
422 | 443 | ||
@@ -446,7 +467,7 @@ static void __exit sc1200wdt_exit(void) | |||
446 | unregister_reboot_notifier(&sc1200wdt_notifier); | 467 | unregister_reboot_notifier(&sc1200wdt_notifier); |
447 | 468 | ||
448 | #if defined CONFIG_PNP | 469 | #if defined CONFIG_PNP |
449 | if(isapnp) | 470 | if (isapnp) |
450 | pnp_unregister_driver(&scl200wdt_pnp_driver); | 471 | pnp_unregister_driver(&scl200wdt_pnp_driver); |
451 | else | 472 | else |
452 | #endif | 473 | #endif |
diff --git a/drivers/watchdog/wdt.c b/drivers/watchdog/wdt.c index 756fb15fdce7..53a6b18bcb9a 100644 --- a/drivers/watchdog/wdt.c +++ b/drivers/watchdog/wdt.c | |||
@@ -24,9 +24,10 @@ | |||
24 | * Matt Crocker). | 24 | * Matt Crocker). |
25 | * Alan Cox : Added wdt= boot option | 25 | * Alan Cox : Added wdt= boot option |
26 | * Alan Cox : Cleaned up copy/user stuff | 26 | * Alan Cox : Cleaned up copy/user stuff |
27 | * Tim Hockin : Added insmod parameters, comment cleanup | 27 | * Tim Hockin : Added insmod parameters, comment |
28 | * Parameterized timeout | 28 | * cleanup, parameterized timeout |
29 | * Tigran Aivazian : Restructured wdt_init() to handle failures | 29 | * Tigran Aivazian : Restructured wdt_init() to handle |
30 | * failures | ||
30 | * Joel Becker : Added WDIOC_GET/SETTIMEOUT | 31 | * Joel Becker : Added WDIOC_GET/SETTIMEOUT |
31 | * Matt Domsch : Added nowayout module option | 32 | * Matt Domsch : Added nowayout module option |
32 | */ | 33 | */ |
@@ -42,9 +43,9 @@ | |||
42 | #include <linux/notifier.h> | 43 | #include <linux/notifier.h> |
43 | #include <linux/reboot.h> | 44 | #include <linux/reboot.h> |
44 | #include <linux/init.h> | 45 | #include <linux/init.h> |
46 | #include <linux/io.h> | ||
47 | #include <linux/uaccess.h> | ||
45 | 48 | ||
46 | #include <asm/io.h> | ||
47 | #include <asm/uaccess.h> | ||
48 | #include <asm/system.h> | 49 | #include <asm/system.h> |
49 | #include "wd501p.h" | 50 | #include "wd501p.h" |
50 | 51 | ||
@@ -60,15 +61,19 @@ static char expect_close; | |||
60 | static int heartbeat = WD_TIMO; | 61 | static int heartbeat = WD_TIMO; |
61 | static int wd_heartbeat; | 62 | static int wd_heartbeat; |
62 | module_param(heartbeat, int, 0); | 63 | module_param(heartbeat, int, 0); |
63 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" __MODULE_STRING(WD_TIMO) ")"); | 64 | MODULE_PARM_DESC(heartbeat, |
65 | "Watchdog heartbeat in seconds. (0 < heartbeat < 65536, default=" | ||
66 | __MODULE_STRING(WD_TIMO) ")"); | ||
64 | 67 | ||
65 | static int nowayout = WATCHDOG_NOWAYOUT; | 68 | static int nowayout = WATCHDOG_NOWAYOUT; |
66 | module_param(nowayout, int, 0); | 69 | module_param(nowayout, int, 0); |
67 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 70 | MODULE_PARM_DESC(nowayout, |
71 | "Watchdog cannot be stopped once started (default=" | ||
72 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
68 | 73 | ||
69 | /* You must set these - there is no sane way to probe for this board. */ | 74 | /* You must set these - there is no sane way to probe for this board. */ |
70 | static int io=0x240; | 75 | static int io = 0x240; |
71 | static int irq=11; | 76 | static int irq = 11; |
72 | 77 | ||
73 | static DEFINE_SPINLOCK(wdt_lock); | 78 | static DEFINE_SPINLOCK(wdt_lock); |
74 | 79 | ||
@@ -82,7 +87,8 @@ MODULE_PARM_DESC(irq, "WDT irq (default=11)"); | |||
82 | static int tachometer; | 87 | static int tachometer; |
83 | 88 | ||
84 | module_param(tachometer, int, 0); | 89 | module_param(tachometer, int, 0); |
85 | MODULE_PARM_DESC(tachometer, "WDT501-P Fan Tachometer support (0=disable, default=0)"); | 90 | MODULE_PARM_DESC(tachometer, |
91 | "WDT501-P Fan Tachometer support (0=disable, default=0)"); | ||
86 | #endif /* CONFIG_WDT_501 */ | 92 | #endif /* CONFIG_WDT_501 */ |
87 | 93 | ||
88 | /* | 94 | /* |
@@ -91,9 +97,9 @@ MODULE_PARM_DESC(tachometer, "WDT501-P Fan Tachometer support (0=disable, defaul | |||
91 | 97 | ||
92 | static void wdt_ctr_mode(int ctr, int mode) | 98 | static void wdt_ctr_mode(int ctr, int mode) |
93 | { | 99 | { |
94 | ctr<<=6; | 100 | ctr <<= 6; |
95 | ctr|=0x30; | 101 | ctr |= 0x30; |
96 | ctr|=(mode<<1); | 102 | ctr |= (mode << 1); |
97 | outb_p(ctr, WDT_CR); | 103 | outb_p(ctr, WDT_CR); |
98 | } | 104 | } |
99 | 105 | ||
@@ -114,12 +120,15 @@ static int wdt_start(void) | |||
114 | unsigned long flags; | 120 | unsigned long flags; |
115 | spin_lock_irqsave(&wdt_lock, flags); | 121 | spin_lock_irqsave(&wdt_lock, flags); |
116 | inb_p(WDT_DC); /* Disable watchdog */ | 122 | inb_p(WDT_DC); /* Disable watchdog */ |
117 | wdt_ctr_mode(0,3); /* Program CTR0 for Mode 3: Square Wave Generator */ | 123 | wdt_ctr_mode(0, 3); /* Program CTR0 for Mode 3: |
118 | wdt_ctr_mode(1,2); /* Program CTR1 for Mode 2: Rate Generator */ | 124 | Square Wave Generator */ |
119 | wdt_ctr_mode(2,0); /* Program CTR2 for Mode 0: Pulse on Terminal Count */ | 125 | wdt_ctr_mode(1, 2); /* Program CTR1 for Mode 2: |
126 | Rate Generator */ | ||
127 | wdt_ctr_mode(2, 0); /* Program CTR2 for Mode 0: | ||
128 | Pulse on Terminal Count */ | ||
120 | wdt_ctr_load(0, 8948); /* Count at 100Hz */ | 129 | wdt_ctr_load(0, 8948); /* Count at 100Hz */ |
121 | wdt_ctr_load(1,wd_heartbeat); /* Heartbeat */ | 130 | wdt_ctr_load(1, wd_heartbeat); /* Heartbeat */ |
122 | wdt_ctr_load(2,65535); /* Length of reset pulse */ | 131 | wdt_ctr_load(2, 65535); /* Length of reset pulse */ |
123 | outb_p(0, WDT_DC); /* Enable watchdog */ | 132 | outb_p(0, WDT_DC); /* Enable watchdog */ |
124 | spin_unlock_irqrestore(&wdt_lock, flags); | 133 | spin_unlock_irqrestore(&wdt_lock, flags); |
125 | return 0; | 134 | return 0; |
@@ -131,13 +140,13 @@ static int wdt_start(void) | |||
131 | * Stop the watchdog driver. | 140 | * Stop the watchdog driver. |
132 | */ | 141 | */ |
133 | 142 | ||
134 | static int wdt_stop (void) | 143 | static int wdt_stop(void) |
135 | { | 144 | { |
136 | unsigned long flags; | 145 | unsigned long flags; |
137 | spin_lock_irqsave(&wdt_lock, flags); | 146 | spin_lock_irqsave(&wdt_lock, flags); |
138 | /* Turn the card off */ | 147 | /* Turn the card off */ |
139 | inb_p(WDT_DC); /* Disable watchdog */ | 148 | inb_p(WDT_DC); /* Disable watchdog */ |
140 | wdt_ctr_load(2,0); /* 0 length reset pulses now */ | 149 | wdt_ctr_load(2, 0); /* 0 length reset pulses now */ |
141 | spin_unlock_irqrestore(&wdt_lock, flags); | 150 | spin_unlock_irqrestore(&wdt_lock, flags); |
142 | return 0; | 151 | return 0; |
143 | } | 152 | } |
@@ -145,8 +154,8 @@ static int wdt_stop (void) | |||
145 | /** | 154 | /** |
146 | * wdt_ping: | 155 | * wdt_ping: |
147 | * | 156 | * |
148 | * Reload counter one with the watchdog heartbeat. We don't bother reloading | 157 | * Reload counter one with the watchdog heartbeat. We don't bother |
149 | * the cascade counter. | 158 | * reloading the cascade counter. |
150 | */ | 159 | */ |
151 | 160 | ||
152 | static int wdt_ping(void) | 161 | static int wdt_ping(void) |
@@ -155,8 +164,9 @@ static int wdt_ping(void) | |||
155 | spin_lock_irqsave(&wdt_lock, flags); | 164 | spin_lock_irqsave(&wdt_lock, flags); |
156 | /* Write a watchdog value */ | 165 | /* Write a watchdog value */ |
157 | inb_p(WDT_DC); /* Disable watchdog */ | 166 | inb_p(WDT_DC); /* Disable watchdog */ |
158 | wdt_ctr_mode(1,2); /* Re-Program CTR1 for Mode 2: Rate Generator */ | 167 | wdt_ctr_mode(1, 2); /* Re-Program CTR1 for Mode 2: |
159 | wdt_ctr_load(1,wd_heartbeat); /* Heartbeat */ | 168 | Rate Generator */ |
169 | wdt_ctr_load(1, wd_heartbeat); /* Heartbeat */ | ||
160 | outb_p(0, WDT_DC); /* Enable watchdog */ | 170 | outb_p(0, WDT_DC); /* Enable watchdog */ |
161 | spin_unlock_irqrestore(&wdt_lock, flags); | 171 | spin_unlock_irqrestore(&wdt_lock, flags); |
162 | return 0; | 172 | return 0; |
@@ -166,13 +176,14 @@ static int wdt_ping(void) | |||
166 | * wdt_set_heartbeat: | 176 | * wdt_set_heartbeat: |
167 | * @t: the new heartbeat value that needs to be set. | 177 | * @t: the new heartbeat value that needs to be set. |
168 | * | 178 | * |
169 | * Set a new heartbeat value for the watchdog device. If the heartbeat value is | 179 | * Set a new heartbeat value for the watchdog device. If the heartbeat |
170 | * incorrect we keep the old value and return -EINVAL. If successfull we | 180 | * value is incorrect we keep the old value and return -EINVAL. If |
171 | * return 0. | 181 | * successful we return 0. |
172 | */ | 182 | */ |
183 | |||
173 | static int wdt_set_heartbeat(int t) | 184 | static int wdt_set_heartbeat(int t) |
174 | { | 185 | { |
175 | if ((t < 1) || (t > 65535)) | 186 | if (t < 1 || t > 65535) |
176 | return -EINVAL; | 187 | return -EINVAL; |
177 | 188 | ||
178 | heartbeat = t; | 189 | heartbeat = t; |
@@ -200,7 +211,7 @@ static int wdt_get_status(int *status) | |||
200 | new_status = inb_p(WDT_SR); | 211 | new_status = inb_p(WDT_SR); |
201 | spin_unlock_irqrestore(&wdt_lock, flags); | 212 | spin_unlock_irqrestore(&wdt_lock, flags); |
202 | 213 | ||
203 | *status=0; | 214 | *status = 0; |
204 | if (new_status & WDC_SR_ISOI0) | 215 | if (new_status & WDC_SR_ISOI0) |
205 | *status |= WDIOF_EXTERN1; | 216 | *status |= WDIOF_EXTERN1; |
206 | if (new_status & WDC_SR_ISII1) | 217 | if (new_status & WDC_SR_ISII1) |
@@ -266,7 +277,7 @@ static irqreturn_t wdt_interrupt(int irq, void *dev_id) | |||
266 | 277 | ||
267 | #ifdef CONFIG_WDT_501 | 278 | #ifdef CONFIG_WDT_501 |
268 | if (!(status & WDC_SR_TGOOD)) | 279 | if (!(status & WDC_SR_TGOOD)) |
269 | printk(KERN_CRIT "Overheat alarm.(%d)\n",inb_p(WDT_RT)); | 280 | printk(KERN_CRIT "Overheat alarm.(%d)\n", inb_p(WDT_RT)); |
270 | if (!(status & WDC_SR_PSUOVER)) | 281 | if (!(status & WDC_SR_PSUOVER)) |
271 | printk(KERN_CRIT "PSU over voltage.\n"); | 282 | printk(KERN_CRIT "PSU over voltage.\n"); |
272 | if (!(status & WDC_SR_PSUUNDR)) | 283 | if (!(status & WDC_SR_PSUUNDR)) |
@@ -304,9 +315,10 @@ static irqreturn_t wdt_interrupt(int irq, void *dev_id) | |||
304 | * write of data will do, as we we don't define content meaning. | 315 | * write of data will do, as we we don't define content meaning. |
305 | */ | 316 | */ |
306 | 317 | ||
307 | static ssize_t wdt_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) | 318 | static ssize_t wdt_write(struct file *file, const char __user *buf, |
319 | size_t count, loff_t *ppos) | ||
308 | { | 320 | { |
309 | if(count) { | 321 | if (count) { |
310 | if (!nowayout) { | 322 | if (!nowayout) { |
311 | size_t i; | 323 | size_t i; |
312 | 324 | ||
@@ -328,7 +340,6 @@ static ssize_t wdt_write(struct file *file, const char __user *buf, size_t count | |||
328 | 340 | ||
329 | /** | 341 | /** |
330 | * wdt_ioctl: | 342 | * wdt_ioctl: |
331 | * @inode: inode of the device | ||
332 | * @file: file handle to the device | 343 | * @file: file handle to the device |
333 | * @cmd: watchdog command | 344 | * @cmd: watchdog command |
334 | * @arg: argument pointer | 345 | * @arg: argument pointer |
@@ -338,8 +349,7 @@ static ssize_t wdt_write(struct file *file, const char __user *buf, size_t count | |||
338 | * querying capabilities and current status. | 349 | * querying capabilities and current status. |
339 | */ | 350 | */ |
340 | 351 | ||
341 | static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | 352 | static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
342 | unsigned long arg) | ||
343 | { | 353 | { |
344 | void __user *argp = (void __user *)arg; | 354 | void __user *argp = (void __user *)arg; |
345 | int __user *p = argp; | 355 | int __user *p = argp; |
@@ -362,32 +372,28 @@ static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
362 | ident.options |= WDIOF_FANFAULT; | 372 | ident.options |= WDIOF_FANFAULT; |
363 | #endif /* CONFIG_WDT_501 */ | 373 | #endif /* CONFIG_WDT_501 */ |
364 | 374 | ||
365 | switch(cmd) | 375 | switch (cmd) { |
366 | { | 376 | default: |
367 | default: | 377 | return -ENOTTY; |
368 | return -ENOTTY; | 378 | case WDIOC_GETSUPPORT: |
369 | case WDIOC_GETSUPPORT: | 379 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
370 | return copy_to_user(argp, &ident, sizeof(ident))?-EFAULT:0; | 380 | case WDIOC_GETSTATUS: |
371 | 381 | wdt_get_status(&status); | |
372 | case WDIOC_GETSTATUS: | 382 | return put_user(status, p); |
373 | wdt_get_status(&status); | 383 | case WDIOC_GETBOOTSTATUS: |
374 | return put_user(status, p); | 384 | return put_user(0, p); |
375 | case WDIOC_GETBOOTSTATUS: | 385 | case WDIOC_KEEPALIVE: |
376 | return put_user(0, p); | 386 | wdt_ping(); |
377 | case WDIOC_KEEPALIVE: | 387 | return 0; |
378 | wdt_ping(); | 388 | case WDIOC_SETTIMEOUT: |
379 | return 0; | 389 | if (get_user(new_heartbeat, p)) |
380 | case WDIOC_SETTIMEOUT: | 390 | return -EFAULT; |
381 | if (get_user(new_heartbeat, p)) | 391 | if (wdt_set_heartbeat(new_heartbeat)) |
382 | return -EFAULT; | 392 | return -EINVAL; |
383 | 393 | wdt_ping(); | |
384 | if (wdt_set_heartbeat(new_heartbeat)) | 394 | /* Fall */ |
385 | return -EINVAL; | 395 | case WDIOC_GETTIMEOUT: |
386 | 396 | return put_user(heartbeat, p); | |
387 | wdt_ping(); | ||
388 | /* Fall */ | ||
389 | case WDIOC_GETTIMEOUT: | ||
390 | return put_user(heartbeat, p); | ||
391 | } | 397 | } |
392 | } | 398 | } |
393 | 399 | ||
@@ -405,7 +411,7 @@ static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
405 | 411 | ||
406 | static int wdt_open(struct inode *inode, struct file *file) | 412 | static int wdt_open(struct inode *inode, struct file *file) |
407 | { | 413 | { |
408 | if(test_and_set_bit(0, &wdt_is_open)) | 414 | if (test_and_set_bit(0, &wdt_is_open)) |
409 | return -EBUSY; | 415 | return -EBUSY; |
410 | /* | 416 | /* |
411 | * Activate | 417 | * Activate |
@@ -432,7 +438,8 @@ static int wdt_release(struct inode *inode, struct file *file) | |||
432 | wdt_stop(); | 438 | wdt_stop(); |
433 | clear_bit(0, &wdt_is_open); | 439 | clear_bit(0, &wdt_is_open); |
434 | } else { | 440 | } else { |
435 | printk(KERN_CRIT "wdt: WDT device closed unexpectedly. WDT will not stop!\n"); | 441 | printk(KERN_CRIT |
442 | "wdt: WDT device closed unexpectedly. WDT will not stop!\n"); | ||
436 | wdt_ping(); | 443 | wdt_ping(); |
437 | } | 444 | } |
438 | expect_close = 0; | 445 | expect_close = 0; |
@@ -451,14 +458,15 @@ static int wdt_release(struct inode *inode, struct file *file) | |||
451 | * farenheit. It was designed by an imperial measurement luddite. | 458 | * farenheit. It was designed by an imperial measurement luddite. |
452 | */ | 459 | */ |
453 | 460 | ||
454 | static ssize_t wdt_temp_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) | 461 | static ssize_t wdt_temp_read(struct file *file, char __user *buf, |
462 | size_t count, loff_t *ptr) | ||
455 | { | 463 | { |
456 | int temperature; | 464 | int temperature; |
457 | 465 | ||
458 | if (wdt_get_temperature(&temperature)) | 466 | if (wdt_get_temperature(&temperature)) |
459 | return -EFAULT; | 467 | return -EFAULT; |
460 | 468 | ||
461 | if (copy_to_user (buf, &temperature, 1)) | 469 | if (copy_to_user(buf, &temperature, 1)) |
462 | return -EFAULT; | 470 | return -EFAULT; |
463 | 471 | ||
464 | return 1; | 472 | return 1; |
@@ -506,10 +514,8 @@ static int wdt_temp_release(struct inode *inode, struct file *file) | |||
506 | static int wdt_notify_sys(struct notifier_block *this, unsigned long code, | 514 | static int wdt_notify_sys(struct notifier_block *this, unsigned long code, |
507 | void *unused) | 515 | void *unused) |
508 | { | 516 | { |
509 | if(code==SYS_DOWN || code==SYS_HALT) { | 517 | if (code == SYS_DOWN || code == SYS_HALT) |
510 | /* Turn the card off */ | ||
511 | wdt_stop(); | 518 | wdt_stop(); |
512 | } | ||
513 | return NOTIFY_DONE; | 519 | return NOTIFY_DONE; |
514 | } | 520 | } |
515 | 521 | ||
@@ -522,7 +528,7 @@ static const struct file_operations wdt_fops = { | |||
522 | .owner = THIS_MODULE, | 528 | .owner = THIS_MODULE, |
523 | .llseek = no_llseek, | 529 | .llseek = no_llseek, |
524 | .write = wdt_write, | 530 | .write = wdt_write, |
525 | .ioctl = wdt_ioctl, | 531 | .unlocked_ioctl = wdt_ioctl, |
526 | .open = wdt_open, | 532 | .open = wdt_open, |
527 | .release = wdt_release, | 533 | .release = wdt_release, |
528 | }; | 534 | }; |
@@ -576,7 +582,7 @@ static void __exit wdt_exit(void) | |||
576 | #endif /* CONFIG_WDT_501 */ | 582 | #endif /* CONFIG_WDT_501 */ |
577 | unregister_reboot_notifier(&wdt_notifier); | 583 | unregister_reboot_notifier(&wdt_notifier); |
578 | free_irq(irq, NULL); | 584 | free_irq(irq, NULL); |
579 | release_region(io,8); | 585 | release_region(io, 8); |
580 | } | 586 | } |
581 | 587 | ||
582 | /** | 588 | /** |
@@ -591,44 +597,49 @@ static int __init wdt_init(void) | |||
591 | { | 597 | { |
592 | int ret; | 598 | int ret; |
593 | 599 | ||
594 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ | 600 | /* Check that the heartbeat value is within it's range; |
601 | if not reset to the default */ | ||
595 | if (wdt_set_heartbeat(heartbeat)) { | 602 | if (wdt_set_heartbeat(heartbeat)) { |
596 | wdt_set_heartbeat(WD_TIMO); | 603 | wdt_set_heartbeat(WD_TIMO); |
597 | printk(KERN_INFO "wdt: heartbeat value must be 0<heartbeat<65536, using %d\n", | 604 | printk(KERN_INFO "wdt: heartbeat value must be 0 < heartbeat < 65536, using %d\n", |
598 | WD_TIMO); | 605 | WD_TIMO); |
599 | } | 606 | } |
600 | 607 | ||
601 | if (!request_region(io, 8, "wdt501p")) { | 608 | if (!request_region(io, 8, "wdt501p")) { |
602 | printk(KERN_ERR "wdt: I/O address 0x%04x already in use\n", io); | 609 | printk(KERN_ERR |
610 | "wdt: I/O address 0x%04x already in use\n", io); | ||
603 | ret = -EBUSY; | 611 | ret = -EBUSY; |
604 | goto out; | 612 | goto out; |
605 | } | 613 | } |
606 | 614 | ||
607 | ret = request_irq(irq, wdt_interrupt, IRQF_DISABLED, "wdt501p", NULL); | 615 | ret = request_irq(irq, wdt_interrupt, IRQF_DISABLED, "wdt501p", NULL); |
608 | if(ret) { | 616 | if (ret) { |
609 | printk(KERN_ERR "wdt: IRQ %d is not free.\n", irq); | 617 | printk(KERN_ERR "wdt: IRQ %d is not free.\n", irq); |
610 | goto outreg; | 618 | goto outreg; |
611 | } | 619 | } |
612 | 620 | ||
613 | ret = register_reboot_notifier(&wdt_notifier); | 621 | ret = register_reboot_notifier(&wdt_notifier); |
614 | if(ret) { | 622 | if (ret) { |
615 | printk(KERN_ERR "wdt: cannot register reboot notifier (err=%d)\n", ret); | 623 | printk(KERN_ERR |
624 | "wdt: cannot register reboot notifier (err=%d)\n", ret); | ||
616 | goto outirq; | 625 | goto outirq; |
617 | } | 626 | } |
618 | 627 | ||
619 | #ifdef CONFIG_WDT_501 | 628 | #ifdef CONFIG_WDT_501 |
620 | ret = misc_register(&temp_miscdev); | 629 | ret = misc_register(&temp_miscdev); |
621 | if (ret) { | 630 | if (ret) { |
622 | printk(KERN_ERR "wdt: cannot register miscdev on minor=%d (err=%d)\n", | 631 | printk(KERN_ERR |
623 | TEMP_MINOR, ret); | 632 | "wdt: cannot register miscdev on minor=%d (err=%d)\n", |
633 | TEMP_MINOR, ret); | ||
624 | goto outrbt; | 634 | goto outrbt; |
625 | } | 635 | } |
626 | #endif /* CONFIG_WDT_501 */ | 636 | #endif /* CONFIG_WDT_501 */ |
627 | 637 | ||
628 | ret = misc_register(&wdt_miscdev); | 638 | ret = misc_register(&wdt_miscdev); |
629 | if (ret) { | 639 | if (ret) { |
630 | printk(KERN_ERR "wdt: cannot register miscdev on minor=%d (err=%d)\n", | 640 | printk(KERN_ERR |
631 | WATCHDOG_MINOR, ret); | 641 | "wdt: cannot register miscdev on minor=%d (err=%d)\n", |
642 | WATCHDOG_MINOR, ret); | ||
632 | goto outmisc; | 643 | goto outmisc; |
633 | } | 644 | } |
634 | 645 | ||
@@ -636,7 +647,8 @@ static int __init wdt_init(void) | |||
636 | printk(KERN_INFO "WDT500/501-P driver 0.10 at 0x%04x (Interrupt %d). heartbeat=%d sec (nowayout=%d)\n", | 647 | printk(KERN_INFO "WDT500/501-P driver 0.10 at 0x%04x (Interrupt %d). heartbeat=%d sec (nowayout=%d)\n", |
637 | io, irq, heartbeat, nowayout); | 648 | io, irq, heartbeat, nowayout); |
638 | #ifdef CONFIG_WDT_501 | 649 | #ifdef CONFIG_WDT_501 |
639 | printk(KERN_INFO "wdt: Fan Tachometer is %s\n", (tachometer ? "Enabled" : "Disabled")); | 650 | printk(KERN_INFO "wdt: Fan Tachometer is %s\n", |
651 | (tachometer ? "Enabled" : "Disabled")); | ||
640 | #endif /* CONFIG_WDT_501 */ | 652 | #endif /* CONFIG_WDT_501 */ |
641 | 653 | ||
642 | out: | 654 | out: |
@@ -651,7 +663,7 @@ outrbt: | |||
651 | outirq: | 663 | outirq: |
652 | free_irq(irq, NULL); | 664 | free_irq(irq, NULL); |
653 | outreg: | 665 | outreg: |
654 | release_region(io,8); | 666 | release_region(io, 8); |
655 | goto out; | 667 | goto out; |
656 | } | 668 | } |
657 | 669 | ||
diff --git a/drivers/watchdog/wdt285.c b/drivers/watchdog/wdt285.c index e4cf661dc890..94e2d91c9ac9 100644 --- a/drivers/watchdog/wdt285.c +++ b/drivers/watchdog/wdt285.c | |||
@@ -29,7 +29,7 @@ | |||
29 | 29 | ||
30 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
31 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
32 | #include <asm/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
34 | #include <asm/hardware/dec21285.h> | 34 | #include <asm/hardware/dec21285.h> |
35 | 35 | ||
diff --git a/drivers/watchdog/wdt_pci.c b/drivers/watchdog/wdt_pci.c index 1355608683e4..5d922fd6eafc 100644 --- a/drivers/watchdog/wdt_pci.c +++ b/drivers/watchdog/wdt_pci.c | |||
@@ -29,9 +29,11 @@ | |||
29 | * JP Nollmann : Added support for PCI wdt501p | 29 | * JP Nollmann : Added support for PCI wdt501p |
30 | * Alan Cox : Split ISA and PCI cards into two drivers | 30 | * Alan Cox : Split ISA and PCI cards into two drivers |
31 | * Jeff Garzik : PCI cleanups | 31 | * Jeff Garzik : PCI cleanups |
32 | * Tigran Aivazian : Restructured wdtpci_init_one() to handle failures | 32 | * Tigran Aivazian : Restructured wdtpci_init_one() to handle |
33 | * failures | ||
33 | * Joel Becker : Added WDIOC_GET/SETTIMEOUT | 34 | * Joel Becker : Added WDIOC_GET/SETTIMEOUT |
34 | * Zwane Mwaikambo : Magic char closing, locking changes, cleanups | 35 | * Zwane Mwaikambo : Magic char closing, locking changes, |
36 | * cleanups | ||
35 | * Matt Domsch : nowayout module option | 37 | * Matt Domsch : nowayout module option |
36 | */ | 38 | */ |
37 | 39 | ||
@@ -42,14 +44,15 @@ | |||
42 | #include <linux/miscdevice.h> | 44 | #include <linux/miscdevice.h> |
43 | #include <linux/watchdog.h> | 45 | #include <linux/watchdog.h> |
44 | #include <linux/ioport.h> | 46 | #include <linux/ioport.h> |
47 | #include <linux/delay.h> | ||
45 | #include <linux/notifier.h> | 48 | #include <linux/notifier.h> |
46 | #include <linux/reboot.h> | 49 | #include <linux/reboot.h> |
47 | #include <linux/init.h> | 50 | #include <linux/init.h> |
48 | #include <linux/fs.h> | 51 | #include <linux/fs.h> |
49 | #include <linux/pci.h> | 52 | #include <linux/pci.h> |
53 | #include <linux/io.h> | ||
54 | #include <linux/uaccess.h> | ||
50 | 55 | ||
51 | #include <asm/io.h> | ||
52 | #include <asm/uaccess.h> | ||
53 | #include <asm/system.h> | 56 | #include <asm/system.h> |
54 | 57 | ||
55 | #define WDT_IS_PCI | 58 | #define WDT_IS_PCI |
@@ -73,7 +76,7 @@ | |||
73 | /* We can only use 1 card due to the /dev/watchdog restriction */ | 76 | /* We can only use 1 card due to the /dev/watchdog restriction */ |
74 | static int dev_count; | 77 | static int dev_count; |
75 | 78 | ||
76 | static struct semaphore open_sem; | 79 | static unsigned long open_lock; |
77 | static DEFINE_SPINLOCK(wdtpci_lock); | 80 | static DEFINE_SPINLOCK(wdtpci_lock); |
78 | static char expect_close; | 81 | static char expect_close; |
79 | 82 | ||
@@ -86,18 +89,23 @@ static int irq; | |||
86 | static int heartbeat = WD_TIMO; | 89 | static int heartbeat = WD_TIMO; |
87 | static int wd_heartbeat; | 90 | static int wd_heartbeat; |
88 | module_param(heartbeat, int, 0); | 91 | module_param(heartbeat, int, 0); |
89 | MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" __MODULE_STRING(WD_TIMO) ")"); | 92 | MODULE_PARM_DESC(heartbeat, |
93 | "Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" | ||
94 | __MODULE_STRING(WD_TIMO) ")"); | ||
90 | 95 | ||
91 | static int nowayout = WATCHDOG_NOWAYOUT; | 96 | static int nowayout = WATCHDOG_NOWAYOUT; |
92 | module_param(nowayout, int, 0); | 97 | module_param(nowayout, int, 0); |
93 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 98 | MODULE_PARM_DESC(nowayout, |
99 | "Watchdog cannot be stopped once started (default=" | ||
100 | __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
94 | 101 | ||
95 | #ifdef CONFIG_WDT_501_PCI | 102 | #ifdef CONFIG_WDT_501_PCI |
96 | /* Support for the Fan Tachometer on the PCI-WDT501 */ | 103 | /* Support for the Fan Tachometer on the PCI-WDT501 */ |
97 | static int tachometer; | 104 | static int tachometer; |
98 | 105 | ||
99 | module_param(tachometer, int, 0); | 106 | module_param(tachometer, int, 0); |
100 | MODULE_PARM_DESC(tachometer, "PCI-WDT501 Fan Tachometer support (0=disable, default=0)"); | 107 | MODULE_PARM_DESC(tachometer, |
108 | "PCI-WDT501 Fan Tachometer support (0=disable, default=0)"); | ||
101 | #endif /* CONFIG_WDT_501_PCI */ | 109 | #endif /* CONFIG_WDT_501_PCI */ |
102 | 110 | ||
103 | /* | 111 | /* |
@@ -106,16 +114,19 @@ MODULE_PARM_DESC(tachometer, "PCI-WDT501 Fan Tachometer support (0=disable, defa | |||
106 | 114 | ||
107 | static void wdtpci_ctr_mode(int ctr, int mode) | 115 | static void wdtpci_ctr_mode(int ctr, int mode) |
108 | { | 116 | { |
109 | ctr<<=6; | 117 | ctr <<= 6; |
110 | ctr|=0x30; | 118 | ctr |= 0x30; |
111 | ctr|=(mode<<1); | 119 | ctr |= (mode << 1); |
112 | outb_p(ctr, WDT_CR); | 120 | outb(ctr, WDT_CR); |
121 | udelay(8); | ||
113 | } | 122 | } |
114 | 123 | ||
115 | static void wdtpci_ctr_load(int ctr, int val) | 124 | static void wdtpci_ctr_load(int ctr, int val) |
116 | { | 125 | { |
117 | outb_p(val&0xFF, WDT_COUNT0+ctr); | 126 | outb(val & 0xFF, WDT_COUNT0 + ctr); |
118 | outb_p(val>>8, WDT_COUNT0+ctr); | 127 | udelay(8); |
128 | outb(val >> 8, WDT_COUNT0 + ctr); | ||
129 | udelay(8); | ||
119 | } | 130 | } |
120 | 131 | ||
121 | /** | 132 | /** |
@@ -134,23 +145,35 @@ static int wdtpci_start(void) | |||
134 | * "pet" the watchdog, as Access says. | 145 | * "pet" the watchdog, as Access says. |
135 | * This resets the clock outputs. | 146 | * This resets the clock outputs. |
136 | */ | 147 | */ |
137 | inb_p(WDT_DC); /* Disable watchdog */ | 148 | inb(WDT_DC); /* Disable watchdog */ |
138 | wdtpci_ctr_mode(2,0); /* Program CTR2 for Mode 0: Pulse on Terminal Count */ | 149 | udelay(8); |
139 | outb_p(0, WDT_DC); /* Enable watchdog */ | 150 | wdtpci_ctr_mode(2, 0); /* Program CTR2 for Mode 0: |
140 | 151 | Pulse on Terminal Count */ | |
141 | inb_p(WDT_DC); /* Disable watchdog */ | 152 | outb(0, WDT_DC); /* Enable watchdog */ |
142 | outb_p(0, WDT_CLOCK); /* 2.0833MHz clock */ | 153 | udelay(8); |
143 | inb_p(WDT_BUZZER); /* disable */ | 154 | inb(WDT_DC); /* Disable watchdog */ |
144 | inb_p(WDT_OPTONOTRST); /* disable */ | 155 | udelay(8); |
145 | inb_p(WDT_OPTORST); /* disable */ | 156 | outb(0, WDT_CLOCK); /* 2.0833MHz clock */ |
146 | inb_p(WDT_PROGOUT); /* disable */ | 157 | udelay(8); |
147 | wdtpci_ctr_mode(0,3); /* Program CTR0 for Mode 3: Square Wave Generator */ | 158 | inb(WDT_BUZZER); /* disable */ |
148 | wdtpci_ctr_mode(1,2); /* Program CTR1 for Mode 2: Rate Generator */ | 159 | udelay(8); |
149 | wdtpci_ctr_mode(2,1); /* Program CTR2 for Mode 1: Retriggerable One-Shot */ | 160 | inb(WDT_OPTONOTRST); /* disable */ |
150 | wdtpci_ctr_load(0,20833); /* count at 100Hz */ | 161 | udelay(8); |
151 | wdtpci_ctr_load(1,wd_heartbeat);/* Heartbeat */ | 162 | inb(WDT_OPTORST); /* disable */ |
163 | udelay(8); | ||
164 | inb(WDT_PROGOUT); /* disable */ | ||
165 | udelay(8); | ||
166 | wdtpci_ctr_mode(0, 3); /* Program CTR0 for Mode 3: | ||
167 | Square Wave Generator */ | ||
168 | wdtpci_ctr_mode(1, 2); /* Program CTR1 for Mode 2: | ||
169 | Rate Generator */ | ||
170 | wdtpci_ctr_mode(2, 1); /* Program CTR2 for Mode 1: | ||
171 | Retriggerable One-Shot */ | ||
172 | wdtpci_ctr_load(0, 20833); /* count at 100Hz */ | ||
173 | wdtpci_ctr_load(1, wd_heartbeat);/* Heartbeat */ | ||
152 | /* DO NOT LOAD CTR2 on PCI card! -- JPN */ | 174 | /* DO NOT LOAD CTR2 on PCI card! -- JPN */ |
153 | outb_p(0, WDT_DC); /* Enable watchdog */ | 175 | outb(0, WDT_DC); /* Enable watchdog */ |
176 | udelay(8); | ||
154 | 177 | ||
155 | spin_unlock_irqrestore(&wdtpci_lock, flags); | 178 | spin_unlock_irqrestore(&wdtpci_lock, flags); |
156 | return 0; | 179 | return 0; |
@@ -162,14 +185,15 @@ static int wdtpci_start(void) | |||
162 | * Stop the watchdog driver. | 185 | * Stop the watchdog driver. |
163 | */ | 186 | */ |
164 | 187 | ||
165 | static int wdtpci_stop (void) | 188 | static int wdtpci_stop(void) |
166 | { | 189 | { |
167 | unsigned long flags; | 190 | unsigned long flags; |
168 | 191 | ||
169 | /* Turn the card off */ | 192 | /* Turn the card off */ |
170 | spin_lock_irqsave(&wdtpci_lock, flags); | 193 | spin_lock_irqsave(&wdtpci_lock, flags); |
171 | inb_p(WDT_DC); /* Disable watchdog */ | 194 | inb(WDT_DC); /* Disable watchdog */ |
172 | wdtpci_ctr_load(2,0); /* 0 length reset pulses now */ | 195 | udelay(8); |
196 | wdtpci_ctr_load(2, 0); /* 0 length reset pulses now */ | ||
173 | spin_unlock_irqrestore(&wdtpci_lock, flags); | 197 | spin_unlock_irqrestore(&wdtpci_lock, flags); |
174 | return 0; | 198 | return 0; |
175 | } | 199 | } |
@@ -177,20 +201,23 @@ static int wdtpci_stop (void) | |||
177 | /** | 201 | /** |
178 | * wdtpci_ping: | 202 | * wdtpci_ping: |
179 | * | 203 | * |
180 | * Reload counter one with the watchdog heartbeat. We don't bother reloading | 204 | * Reload counter one with the watchdog heartbeat. We don't bother |
181 | * the cascade counter. | 205 | * reloading the cascade counter. |
182 | */ | 206 | */ |
183 | 207 | ||
184 | static int wdtpci_ping(void) | 208 | static int wdtpci_ping(void) |
185 | { | 209 | { |
186 | unsigned long flags; | 210 | unsigned long flags; |
187 | 211 | ||
188 | /* Write a watchdog value */ | ||
189 | spin_lock_irqsave(&wdtpci_lock, flags); | 212 | spin_lock_irqsave(&wdtpci_lock, flags); |
190 | inb_p(WDT_DC); /* Disable watchdog */ | 213 | /* Write a watchdog value */ |
191 | wdtpci_ctr_mode(1,2); /* Re-Program CTR1 for Mode 2: Rate Generator */ | 214 | inb(WDT_DC); /* Disable watchdog */ |
192 | wdtpci_ctr_load(1,wd_heartbeat);/* Heartbeat */ | 215 | udelay(8); |
193 | outb_p(0, WDT_DC); /* Enable watchdog */ | 216 | wdtpci_ctr_mode(1, 2); /* Re-Program CTR1 for Mode 2: |
217 | Rate Generator */ | ||
218 | wdtpci_ctr_load(1, wd_heartbeat);/* Heartbeat */ | ||
219 | outb(0, WDT_DC); /* Enable watchdog */ | ||
220 | udelay(8); | ||
194 | spin_unlock_irqrestore(&wdtpci_lock, flags); | 221 | spin_unlock_irqrestore(&wdtpci_lock, flags); |
195 | return 0; | 222 | return 0; |
196 | } | 223 | } |
@@ -199,14 +226,14 @@ static int wdtpci_ping(void) | |||
199 | * wdtpci_set_heartbeat: | 226 | * wdtpci_set_heartbeat: |
200 | * @t: the new heartbeat value that needs to be set. | 227 | * @t: the new heartbeat value that needs to be set. |
201 | * | 228 | * |
202 | * Set a new heartbeat value for the watchdog device. If the heartbeat value is | 229 | * Set a new heartbeat value for the watchdog device. If the heartbeat |
203 | * incorrect we keep the old value and return -EINVAL. If successfull we | 230 | * value is incorrect we keep the old value and return -EINVAL. |
204 | * return 0. | 231 | * If successful we return 0. |
205 | */ | 232 | */ |
206 | static int wdtpci_set_heartbeat(int t) | 233 | static int wdtpci_set_heartbeat(int t) |
207 | { | 234 | { |
208 | /* Arbitrary, can't find the card's limits */ | 235 | /* Arbitrary, can't find the card's limits */ |
209 | if ((t < 1) || (t > 65535)) | 236 | if (t < 1 || t > 65535) |
210 | return -EINVAL; | 237 | return -EINVAL; |
211 | 238 | ||
212 | heartbeat = t; | 239 | heartbeat = t; |
@@ -227,9 +254,14 @@ static int wdtpci_set_heartbeat(int t) | |||
227 | 254 | ||
228 | static int wdtpci_get_status(int *status) | 255 | static int wdtpci_get_status(int *status) |
229 | { | 256 | { |
230 | unsigned char new_status=inb_p(WDT_SR); | 257 | unsigned char new_status; |
258 | unsigned long flags; | ||
259 | |||
260 | spin_lock_irqsave(&wdtpci_lock, flags); | ||
261 | new_status = inb(WDT_SR); | ||
262 | spin_unlock_irqrestore(&wdtpci_lock, flags); | ||
231 | 263 | ||
232 | *status=0; | 264 | *status = 0; |
233 | if (new_status & WDC_SR_ISOI0) | 265 | if (new_status & WDC_SR_ISOI0) |
234 | *status |= WDIOF_EXTERN1; | 266 | *status |= WDIOF_EXTERN1; |
235 | if (new_status & WDC_SR_ISII1) | 267 | if (new_status & WDC_SR_ISII1) |
@@ -259,8 +291,12 @@ static int wdtpci_get_status(int *status) | |||
259 | 291 | ||
260 | static int wdtpci_get_temperature(int *temperature) | 292 | static int wdtpci_get_temperature(int *temperature) |
261 | { | 293 | { |
262 | unsigned short c=inb_p(WDT_RT); | 294 | unsigned short c; |
263 | 295 | unsigned long flags; | |
296 | spin_lock_irqsave(&wdtpci_lock, flags); | ||
297 | c = inb(WDT_RT); | ||
298 | udelay(8); | ||
299 | spin_unlock_irqrestore(&wdtpci_lock, flags); | ||
264 | *temperature = (c * 11 / 15) + 7; | 300 | *temperature = (c * 11 / 15) + 7; |
265 | return 0; | 301 | return 0; |
266 | } | 302 | } |
@@ -282,17 +318,25 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id) | |||
282 | * Read the status register see what is up and | 318 | * Read the status register see what is up and |
283 | * then printk it. | 319 | * then printk it. |
284 | */ | 320 | */ |
285 | unsigned char status=inb_p(WDT_SR); | 321 | unsigned char status; |
322 | |||
323 | spin_lock(&wdtpci_lock); | ||
324 | |||
325 | status = inb(WDT_SR); | ||
326 | udelay(8); | ||
286 | 327 | ||
287 | printk(KERN_CRIT PFX "status %d\n", status); | 328 | printk(KERN_CRIT PFX "status %d\n", status); |
288 | 329 | ||
289 | #ifdef CONFIG_WDT_501_PCI | 330 | #ifdef CONFIG_WDT_501_PCI |
290 | if (!(status & WDC_SR_TGOOD)) | 331 | if (!(status & WDC_SR_TGOOD)) { |
291 | printk(KERN_CRIT PFX "Overheat alarm.(%d)\n",inb_p(WDT_RT)); | 332 | u8 alarm = inb(WDT_RT); |
333 | printk(KERN_CRIT PFX "Overheat alarm.(%d)\n", alarm); | ||
334 | udelay(8); | ||
335 | } | ||
292 | if (!(status & WDC_SR_PSUOVER)) | 336 | if (!(status & WDC_SR_PSUOVER)) |
293 | printk(KERN_CRIT PFX "PSU over voltage.\n"); | 337 | printk(KERN_CRIT PFX "PSU over voltage.\n"); |
294 | if (!(status & WDC_SR_PSUUNDR)) | 338 | if (!(status & WDC_SR_PSUUNDR)) |
295 | printk(KERN_CRIT PFX "PSU under voltage.\n"); | 339 | printk(KERN_CRIT PFX "PSU under voltage.\n"); |
296 | if (tachometer) { | 340 | if (tachometer) { |
297 | if (!(status & WDC_SR_FANGOOD)) | 341 | if (!(status & WDC_SR_FANGOOD)) |
298 | printk(KERN_CRIT PFX "Possible fan fault.\n"); | 342 | printk(KERN_CRIT PFX "Possible fan fault.\n"); |
@@ -310,6 +354,7 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id) | |||
310 | printk(KERN_CRIT PFX "Reset in 5ms.\n"); | 354 | printk(KERN_CRIT PFX "Reset in 5ms.\n"); |
311 | #endif | 355 | #endif |
312 | } | 356 | } |
357 | spin_unlock(&wdtpci_lock); | ||
313 | return IRQ_HANDLED; | 358 | return IRQ_HANDLED; |
314 | } | 359 | } |
315 | 360 | ||
@@ -325,7 +370,8 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id) | |||
325 | * write of data will do, as we we don't define content meaning. | 370 | * write of data will do, as we we don't define content meaning. |
326 | */ | 371 | */ |
327 | 372 | ||
328 | static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) | 373 | static ssize_t wdtpci_write(struct file *file, const char __user *buf, |
374 | size_t count, loff_t *ppos) | ||
329 | { | 375 | { |
330 | if (count) { | 376 | if (count) { |
331 | if (!nowayout) { | 377 | if (!nowayout) { |
@@ -335,7 +381,7 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t co | |||
335 | 381 | ||
336 | for (i = 0; i != count; i++) { | 382 | for (i = 0; i != count; i++) { |
337 | char c; | 383 | char c; |
338 | if(get_user(c, buf+i)) | 384 | if (get_user(c, buf+i)) |
339 | return -EFAULT; | 385 | return -EFAULT; |
340 | if (c == 'V') | 386 | if (c == 'V') |
341 | expect_close = 42; | 387 | expect_close = 42; |
@@ -343,13 +389,11 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t co | |||
343 | } | 389 | } |
344 | wdtpci_ping(); | 390 | wdtpci_ping(); |
345 | } | 391 | } |
346 | |||
347 | return count; | 392 | return count; |
348 | } | 393 | } |
349 | 394 | ||
350 | /** | 395 | /** |
351 | * wdtpci_ioctl: | 396 | * wdtpci_ioctl: |
352 | * @inode: inode of the device | ||
353 | * @file: file handle to the device | 397 | * @file: file handle to the device |
354 | * @cmd: watchdog command | 398 | * @cmd: watchdog command |
355 | * @arg: argument pointer | 399 | * @arg: argument pointer |
@@ -359,8 +403,8 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t co | |||
359 | * querying capabilities and current status. | 403 | * querying capabilities and current status. |
360 | */ | 404 | */ |
361 | 405 | ||
362 | static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | 406 | static long wdtpci_ioctl(struct file *file, unsigned int cmd, |
363 | unsigned long arg) | 407 | unsigned long arg) |
364 | { | 408 | { |
365 | int new_heartbeat; | 409 | int new_heartbeat; |
366 | int status; | 410 | int status; |
@@ -383,33 +427,29 @@ static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd | |||
383 | ident.options |= WDIOF_FANFAULT; | 427 | ident.options |= WDIOF_FANFAULT; |
384 | #endif /* CONFIG_WDT_501_PCI */ | 428 | #endif /* CONFIG_WDT_501_PCI */ |
385 | 429 | ||
386 | switch(cmd) | 430 | switch (cmd) { |
387 | { | 431 | default: |
388 | default: | 432 | return -ENOTTY; |
389 | return -ENOTTY; | 433 | case WDIOC_GETSUPPORT: |
390 | case WDIOC_GETSUPPORT: | 434 | return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; |
391 | return copy_to_user(argp, &ident, sizeof(ident))?-EFAULT:0; | 435 | case WDIOC_GETSTATUS: |
392 | 436 | wdtpci_get_status(&status); | |
393 | case WDIOC_GETSTATUS: | 437 | return put_user(status, p); |
394 | wdtpci_get_status(&status); | 438 | case WDIOC_GETBOOTSTATUS: |
395 | return put_user(status, p); | 439 | return put_user(0, p); |
396 | case WDIOC_GETBOOTSTATUS: | 440 | case WDIOC_KEEPALIVE: |
397 | return put_user(0, p); | 441 | wdtpci_ping(); |
398 | case WDIOC_KEEPALIVE: | 442 | return 0; |
399 | wdtpci_ping(); | 443 | case WDIOC_SETTIMEOUT: |
400 | return 0; | 444 | if (get_user(new_heartbeat, p)) |
401 | case WDIOC_SETTIMEOUT: | 445 | return -EFAULT; |
402 | if (get_user(new_heartbeat, p)) | 446 | if (wdtpci_set_heartbeat(new_heartbeat)) |
403 | return -EFAULT; | 447 | return -EINVAL; |
404 | 448 | wdtpci_ping(); | |
405 | if (wdtpci_set_heartbeat(new_heartbeat)) | 449 | /* Fall */ |
406 | return -EINVAL; | 450 | case WDIOC_GETTIMEOUT: |
407 | 451 | return put_user(heartbeat, p); | |
408 | wdtpci_ping(); | 452 | } |
409 | /* Fall */ | ||
410 | case WDIOC_GETTIMEOUT: | ||
411 | return put_user(heartbeat, p); | ||
412 | } | ||
413 | } | 453 | } |
414 | 454 | ||
415 | /** | 455 | /** |
@@ -426,12 +466,11 @@ static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd | |||
426 | 466 | ||
427 | static int wdtpci_open(struct inode *inode, struct file *file) | 467 | static int wdtpci_open(struct inode *inode, struct file *file) |
428 | { | 468 | { |
429 | if (down_trylock(&open_sem)) | 469 | if (test_and_set_bit(0, &open_lock)) |
430 | return -EBUSY; | 470 | return -EBUSY; |
431 | 471 | ||
432 | if (nowayout) { | 472 | if (nowayout) |
433 | __module_get(THIS_MODULE); | 473 | __module_get(THIS_MODULE); |
434 | } | ||
435 | /* | 474 | /* |
436 | * Activate | 475 | * Activate |
437 | */ | 476 | */ |
@@ -460,7 +499,7 @@ static int wdtpci_release(struct inode *inode, struct file *file) | |||
460 | wdtpci_ping(); | 499 | wdtpci_ping(); |
461 | } | 500 | } |
462 | expect_close = 0; | 501 | expect_close = 0; |
463 | up(&open_sem); | 502 | clear_bit(0, &open_lock); |
464 | return 0; | 503 | return 0; |
465 | } | 504 | } |
466 | 505 | ||
@@ -476,14 +515,15 @@ static int wdtpci_release(struct inode *inode, struct file *file) | |||
476 | * fahrenheit. It was designed by an imperial measurement luddite. | 515 | * fahrenheit. It was designed by an imperial measurement luddite. |
477 | */ | 516 | */ |
478 | 517 | ||
479 | static ssize_t wdtpci_temp_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) | 518 | static ssize_t wdtpci_temp_read(struct file *file, char __user *buf, |
519 | size_t count, loff_t *ptr) | ||
480 | { | 520 | { |
481 | int temperature; | 521 | int temperature; |
482 | 522 | ||
483 | if (wdtpci_get_temperature(&temperature)) | 523 | if (wdtpci_get_temperature(&temperature)) |
484 | return -EFAULT; | 524 | return -EFAULT; |
485 | 525 | ||
486 | if (copy_to_user (buf, &temperature, 1)) | 526 | if (copy_to_user(buf, &temperature, 1)) |
487 | return -EFAULT; | 527 | return -EFAULT; |
488 | 528 | ||
489 | return 1; | 529 | return 1; |
@@ -529,12 +569,10 @@ static int wdtpci_temp_release(struct inode *inode, struct file *file) | |||
529 | */ | 569 | */ |
530 | 570 | ||
531 | static int wdtpci_notify_sys(struct notifier_block *this, unsigned long code, | 571 | static int wdtpci_notify_sys(struct notifier_block *this, unsigned long code, |
532 | void *unused) | 572 | void *unused) |
533 | { | 573 | { |
534 | if (code==SYS_DOWN || code==SYS_HALT) { | 574 | if (code == SYS_DOWN || code == SYS_HALT) |
535 | /* Turn the card off */ | ||
536 | wdtpci_stop(); | 575 | wdtpci_stop(); |
537 | } | ||
538 | return NOTIFY_DONE; | 576 | return NOTIFY_DONE; |
539 | } | 577 | } |
540 | 578 | ||
@@ -547,7 +585,7 @@ static const struct file_operations wdtpci_fops = { | |||
547 | .owner = THIS_MODULE, | 585 | .owner = THIS_MODULE, |
548 | .llseek = no_llseek, | 586 | .llseek = no_llseek, |
549 | .write = wdtpci_write, | 587 | .write = wdtpci_write, |
550 | .ioctl = wdtpci_ioctl, | 588 | .unlocked_ioctl = wdtpci_ioctl, |
551 | .open = wdtpci_open, | 589 | .open = wdtpci_open, |
552 | .release = wdtpci_release, | 590 | .release = wdtpci_release, |
553 | }; | 591 | }; |
@@ -584,80 +622,85 @@ static struct notifier_block wdtpci_notifier = { | |||
584 | }; | 622 | }; |
585 | 623 | ||
586 | 624 | ||
587 | static int __devinit wdtpci_init_one (struct pci_dev *dev, | 625 | static int __devinit wdtpci_init_one(struct pci_dev *dev, |
588 | const struct pci_device_id *ent) | 626 | const struct pci_device_id *ent) |
589 | { | 627 | { |
590 | int ret = -EIO; | 628 | int ret = -EIO; |
591 | 629 | ||
592 | dev_count++; | 630 | dev_count++; |
593 | if (dev_count > 1) { | 631 | if (dev_count > 1) { |
594 | printk (KERN_ERR PFX "this driver only supports 1 device\n"); | 632 | printk(KERN_ERR PFX "This driver only supports one device\n"); |
595 | return -ENODEV; | 633 | return -ENODEV; |
596 | } | 634 | } |
597 | 635 | ||
598 | if (pci_enable_device (dev)) { | 636 | if (pci_enable_device(dev)) { |
599 | printk (KERN_ERR PFX "Not possible to enable PCI Device\n"); | 637 | printk(KERN_ERR PFX "Not possible to enable PCI Device\n"); |
600 | return -ENODEV; | 638 | return -ENODEV; |
601 | } | 639 | } |
602 | 640 | ||
603 | if (pci_resource_start (dev, 2) == 0x0000) { | 641 | if (pci_resource_start(dev, 2) == 0x0000) { |
604 | printk (KERN_ERR PFX "No I/O-Address for card detected\n"); | 642 | printk(KERN_ERR PFX "No I/O-Address for card detected\n"); |
605 | ret = -ENODEV; | 643 | ret = -ENODEV; |
606 | goto out_pci; | 644 | goto out_pci; |
607 | } | 645 | } |
608 | 646 | ||
609 | sema_init(&open_sem, 1); | ||
610 | |||
611 | irq = dev->irq; | 647 | irq = dev->irq; |
612 | io = pci_resource_start (dev, 2); | 648 | io = pci_resource_start(dev, 2); |
613 | 649 | ||
614 | if (request_region (io, 16, "wdt_pci") == NULL) { | 650 | if (request_region(io, 16, "wdt_pci") == NULL) { |
615 | printk (KERN_ERR PFX "I/O address 0x%04x already in use\n", io); | 651 | printk(KERN_ERR PFX "I/O address 0x%04x already in use\n", io); |
616 | goto out_pci; | 652 | goto out_pci; |
617 | } | 653 | } |
618 | 654 | ||
619 | if (request_irq (irq, wdtpci_interrupt, IRQF_DISABLED | IRQF_SHARED, | 655 | if (request_irq(irq, wdtpci_interrupt, IRQF_DISABLED | IRQF_SHARED, |
620 | "wdt_pci", &wdtpci_miscdev)) { | 656 | "wdt_pci", &wdtpci_miscdev)) { |
621 | printk (KERN_ERR PFX "IRQ %d is not free\n", irq); | 657 | printk(KERN_ERR PFX "IRQ %d is not free\n", irq); |
622 | goto out_reg; | 658 | goto out_reg; |
623 | } | 659 | } |
624 | 660 | ||
625 | printk ("PCI-WDT500/501 (PCI-WDG-CSM) driver 0.10 at 0x%04x (Interrupt %d)\n", | 661 | printk(KERN_INFO |
626 | io, irq); | 662 | "PCI-WDT500/501 (PCI-WDG-CSM) driver 0.10 at 0x%04x (Interrupt %d)\n", |
663 | io, irq); | ||
627 | 664 | ||
628 | /* Check that the heartbeat value is within it's range ; if not reset to the default */ | 665 | /* Check that the heartbeat value is within its range; |
666 | if not reset to the default */ | ||
629 | if (wdtpci_set_heartbeat(heartbeat)) { | 667 | if (wdtpci_set_heartbeat(heartbeat)) { |
630 | wdtpci_set_heartbeat(WD_TIMO); | 668 | wdtpci_set_heartbeat(WD_TIMO); |
631 | printk(KERN_INFO PFX "heartbeat value must be 0<heartbeat<65536, using %d\n", | 669 | printk(KERN_INFO PFX |
632 | WD_TIMO); | 670 | "heartbeat value must be 0 < heartbeat < 65536, using %d\n", |
671 | WD_TIMO); | ||
633 | } | 672 | } |
634 | 673 | ||
635 | ret = register_reboot_notifier (&wdtpci_notifier); | 674 | ret = register_reboot_notifier(&wdtpci_notifier); |
636 | if (ret) { | 675 | if (ret) { |
637 | printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); | 676 | printk(KERN_ERR PFX |
677 | "cannot register reboot notifier (err=%d)\n", ret); | ||
638 | goto out_irq; | 678 | goto out_irq; |
639 | } | 679 | } |
640 | 680 | ||
641 | #ifdef CONFIG_WDT_501_PCI | 681 | #ifdef CONFIG_WDT_501_PCI |
642 | ret = misc_register (&temp_miscdev); | 682 | ret = misc_register(&temp_miscdev); |
643 | if (ret) { | 683 | if (ret) { |
644 | printk (KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 684 | printk(KERN_ERR PFX |
645 | TEMP_MINOR, ret); | 685 | "cannot register miscdev on minor=%d (err=%d)\n", |
686 | TEMP_MINOR, ret); | ||
646 | goto out_rbt; | 687 | goto out_rbt; |
647 | } | 688 | } |
648 | #endif /* CONFIG_WDT_501_PCI */ | 689 | #endif /* CONFIG_WDT_501_PCI */ |
649 | 690 | ||
650 | ret = misc_register (&wdtpci_miscdev); | 691 | ret = misc_register(&wdtpci_miscdev); |
651 | if (ret) { | 692 | if (ret) { |
652 | printk (KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 693 | printk(KERN_ERR PFX |
653 | WATCHDOG_MINOR, ret); | 694 | "cannot register miscdev on minor=%d (err=%d)\n", |
695 | WATCHDOG_MINOR, ret); | ||
654 | goto out_misc; | 696 | goto out_misc; |
655 | } | 697 | } |
656 | 698 | ||
657 | printk(KERN_INFO PFX "initialized. heartbeat=%d sec (nowayout=%d)\n", | 699 | printk(KERN_INFO PFX "initialized. heartbeat=%d sec (nowayout=%d)\n", |
658 | heartbeat, nowayout); | 700 | heartbeat, nowayout); |
659 | #ifdef CONFIG_WDT_501_PCI | 701 | #ifdef CONFIG_WDT_501_PCI |
660 | printk(KERN_INFO "wdt: Fan Tachometer is %s\n", (tachometer ? "Enabled" : "Disabled")); | 702 | printk(KERN_INFO "wdt: Fan Tachometer is %s\n", |
703 | (tachometer ? "Enabled" : "Disabled")); | ||
661 | #endif /* CONFIG_WDT_501_PCI */ | 704 | #endif /* CONFIG_WDT_501_PCI */ |
662 | 705 | ||
663 | ret = 0; | 706 | ret = 0; |
@@ -673,14 +716,14 @@ out_rbt: | |||
673 | out_irq: | 716 | out_irq: |
674 | free_irq(irq, &wdtpci_miscdev); | 717 | free_irq(irq, &wdtpci_miscdev); |
675 | out_reg: | 718 | out_reg: |
676 | release_region (io, 16); | 719 | release_region(io, 16); |
677 | out_pci: | 720 | out_pci: |
678 | pci_disable_device(dev); | 721 | pci_disable_device(dev); |
679 | goto out; | 722 | goto out; |
680 | } | 723 | } |
681 | 724 | ||
682 | 725 | ||
683 | static void __devexit wdtpci_remove_one (struct pci_dev *pdev) | 726 | static void __devexit wdtpci_remove_one(struct pci_dev *pdev) |
684 | { | 727 | { |
685 | /* here we assume only one device will ever have | 728 | /* here we assume only one device will ever have |
686 | * been picked up and registered by probe function */ | 729 | * been picked up and registered by probe function */ |
@@ -728,7 +771,7 @@ static struct pci_driver wdtpci_driver = { | |||
728 | 771 | ||
729 | static void __exit wdtpci_cleanup(void) | 772 | static void __exit wdtpci_cleanup(void) |
730 | { | 773 | { |
731 | pci_unregister_driver (&wdtpci_driver); | 774 | pci_unregister_driver(&wdtpci_driver); |
732 | } | 775 | } |
733 | 776 | ||
734 | 777 | ||
@@ -742,7 +785,7 @@ static void __exit wdtpci_cleanup(void) | |||
742 | 785 | ||
743 | static int __init wdtpci_init(void) | 786 | static int __init wdtpci_init(void) |
744 | { | 787 | { |
745 | return pci_register_driver (&wdtpci_driver); | 788 | return pci_register_driver(&wdtpci_driver); |
746 | } | 789 | } |
747 | 790 | ||
748 | 791 | ||