diff options
author | David S. Miller <davem@davemloft.net> | 2008-07-18 05:39:39 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-18 05:39:39 -0400 |
commit | 49997d75152b3d23c53b0fa730599f2f74c92c65 (patch) | |
tree | 46e93126170d02cfec9505172e545732c1b69656 /drivers/net | |
parent | a0c80b80e0fb48129e4e9d6a9ede914f9ff1850d (diff) | |
parent | 5b664cb235e97afbf34db9c4d77f08ebd725335e (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
Documentation/powerpc/booting-without-of.txt
drivers/atm/Makefile
drivers/net/fs_enet/fs_enet-main.c
drivers/pci/pci-acpi.c
net/8021q/vlan.c
net/iucv/iucv.c
Diffstat (limited to 'drivers/net')
53 files changed, 492 insertions, 3826 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 9490cb172330..611e9fb18b67 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -209,7 +209,7 @@ config MII | |||
209 | 209 | ||
210 | config MACB | 210 | config MACB |
211 | tristate "Atmel MACB support" | 211 | tristate "Atmel MACB support" |
212 | depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91CAP9 | 212 | depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91SAM9G20 || ARCH_AT91CAP9 |
213 | select PHYLIB | 213 | select PHYLIB |
214 | help | 214 | help |
215 | The Atmel MACB ethernet interface is found on many AT32 and AT91 | 215 | The Atmel MACB ethernet interface is found on many AT32 and AT91 |
@@ -1848,7 +1848,6 @@ config NE_H8300 | |||
1848 | Say Y here if you want to use the NE2000 compatible | 1848 | Say Y here if you want to use the NE2000 compatible |
1849 | controller on the Renesas H8/300 processor. | 1849 | controller on the Renesas H8/300 processor. |
1850 | 1850 | ||
1851 | source "drivers/net/fec_8xx/Kconfig" | ||
1852 | source "drivers/net/fs_enet/Kconfig" | 1851 | source "drivers/net/fs_enet/Kconfig" |
1853 | 1852 | ||
1854 | endif # NET_ETHERNET | 1853 | endif # NET_ETHERNET |
diff --git a/drivers/net/Makefile b/drivers/net/Makefile index 3292d0af59c3..4b17a9ab7861 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile | |||
@@ -217,7 +217,6 @@ obj-$(CONFIG_SMC91X) += smc91x.o | |||
217 | obj-$(CONFIG_SMC911X) += smc911x.o | 217 | obj-$(CONFIG_SMC911X) += smc911x.o |
218 | obj-$(CONFIG_BFIN_MAC) += bfin_mac.o | 218 | obj-$(CONFIG_BFIN_MAC) += bfin_mac.o |
219 | obj-$(CONFIG_DM9000) += dm9000.o | 219 | obj-$(CONFIG_DM9000) += dm9000.o |
220 | obj-$(CONFIG_FEC_8XX) += fec_8xx/ | ||
221 | obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o | 220 | obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o |
222 | pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o | 221 | pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o |
223 | obj-$(CONFIG_MLX4_CORE) += mlx4/ | 222 | obj-$(CONFIG_MLX4_CORE) += mlx4/ |
diff --git a/drivers/net/arm/etherh.c b/drivers/net/arm/etherh.c index 00081d2b9cd5..e9d15eccad08 100644 --- a/drivers/net/arm/etherh.c +++ b/drivers/net/arm/etherh.c | |||
@@ -647,7 +647,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) | |||
647 | struct ei_device *ei_local; | 647 | struct ei_device *ei_local; |
648 | struct net_device *dev; | 648 | struct net_device *dev; |
649 | struct etherh_priv *eh; | 649 | struct etherh_priv *eh; |
650 | int i, ret; | 650 | int ret; |
651 | DECLARE_MAC_BUF(mac); | 651 | DECLARE_MAC_BUF(mac); |
652 | 652 | ||
653 | etherh_banner(); | 653 | etherh_banner(); |
diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h index d444f5881f56..9ecf8a6dc97f 100644 --- a/drivers/net/cxgb3/common.h +++ b/drivers/net/cxgb3/common.h | |||
@@ -687,8 +687,9 @@ int t3_seeprom_write(struct adapter *adapter, u32 addr, __le32 data); | |||
687 | int t3_seeprom_wp(struct adapter *adapter, int enable); | 687 | int t3_seeprom_wp(struct adapter *adapter, int enable); |
688 | int t3_get_tp_version(struct adapter *adapter, u32 *vers); | 688 | int t3_get_tp_version(struct adapter *adapter, u32 *vers); |
689 | int t3_check_tpsram_version(struct adapter *adapter, int *must_load); | 689 | int t3_check_tpsram_version(struct adapter *adapter, int *must_load); |
690 | int t3_check_tpsram(struct adapter *adapter, u8 *tp_ram, unsigned int size); | 690 | int t3_check_tpsram(struct adapter *adapter, const u8 *tp_ram, |
691 | int t3_set_proto_sram(struct adapter *adap, u8 *data); | 691 | unsigned int size); |
692 | int t3_set_proto_sram(struct adapter *adap, const u8 *data); | ||
692 | int t3_read_flash(struct adapter *adapter, unsigned int addr, | 693 | int t3_read_flash(struct adapter *adapter, unsigned int addr, |
693 | unsigned int nwords, u32 *data, int byte_oriented); | 694 | unsigned int nwords, u32 *data, int byte_oriented); |
694 | int t3_load_fw(struct adapter *adapter, const u8 * fw_data, unsigned int size); | 695 | int t3_load_fw(struct adapter *adapter, const u8 * fw_data, unsigned int size); |
diff --git a/drivers/net/cxgb3/cxgb3_ctl_defs.h b/drivers/net/cxgb3/cxgb3_ctl_defs.h index d38e6cc92668..6ad92405d9a0 100644 --- a/drivers/net/cxgb3/cxgb3_ctl_defs.h +++ b/drivers/net/cxgb3/cxgb3_ctl_defs.h | |||
@@ -54,6 +54,7 @@ enum { | |||
54 | RDMA_CQ_DISABLE = 16, | 54 | RDMA_CQ_DISABLE = 16, |
55 | RDMA_CTRL_QP_SETUP = 17, | 55 | RDMA_CTRL_QP_SETUP = 17, |
56 | RDMA_GET_MEM = 18, | 56 | RDMA_GET_MEM = 18, |
57 | RDMA_GET_MIB = 19, | ||
57 | 58 | ||
58 | GET_RX_PAGE_INFO = 50, | 59 | GET_RX_PAGE_INFO = 50, |
59 | }; | 60 | }; |
diff --git a/drivers/net/cxgb3/cxgb3_offload.c b/drivers/net/cxgb3/cxgb3_offload.c index c69f4c0187d9..c5b3de1bb456 100644 --- a/drivers/net/cxgb3/cxgb3_offload.c +++ b/drivers/net/cxgb3/cxgb3_offload.c | |||
@@ -314,6 +314,12 @@ static int cxgb_rdma_ctl(struct adapter *adapter, unsigned int req, void *data) | |||
314 | spin_unlock_irq(&adapter->sge.reg_lock); | 314 | spin_unlock_irq(&adapter->sge.reg_lock); |
315 | break; | 315 | break; |
316 | } | 316 | } |
317 | case RDMA_GET_MIB: { | ||
318 | spin_lock(&adapter->stats_lock); | ||
319 | t3_tp_get_mib_stats(adapter, (struct tp_mib_stats *)data); | ||
320 | spin_unlock(&adapter->stats_lock); | ||
321 | break; | ||
322 | } | ||
317 | default: | 323 | default: |
318 | ret = -EOPNOTSUPP; | 324 | ret = -EOPNOTSUPP; |
319 | } | 325 | } |
@@ -392,6 +398,7 @@ static int cxgb_offload_ctl(struct t3cdev *tdev, unsigned int req, void *data) | |||
392 | case RDMA_CQ_DISABLE: | 398 | case RDMA_CQ_DISABLE: |
393 | case RDMA_CTRL_QP_SETUP: | 399 | case RDMA_CTRL_QP_SETUP: |
394 | case RDMA_GET_MEM: | 400 | case RDMA_GET_MEM: |
401 | case RDMA_GET_MIB: | ||
395 | if (!offload_running(adapter)) | 402 | if (!offload_running(adapter)) |
396 | return -EAGAIN; | 403 | return -EAGAIN; |
397 | return cxgb_rdma_ctl(adapter, req, data); | 404 | return cxgb_rdma_ctl(adapter, req, data); |
diff --git a/drivers/net/cxgb3/t3_hw.c b/drivers/net/cxgb3/t3_hw.c index d405a932c73a..47d51788a462 100644 --- a/drivers/net/cxgb3/t3_hw.c +++ b/drivers/net/cxgb3/t3_hw.c | |||
@@ -923,7 +923,8 @@ int t3_check_tpsram_version(struct adapter *adapter, int *must_load) | |||
923 | * Checks if an adapter's tp sram is compatible with the driver. | 923 | * Checks if an adapter's tp sram is compatible with the driver. |
924 | * Returns 0 if the versions are compatible, a negative error otherwise. | 924 | * Returns 0 if the versions are compatible, a negative error otherwise. |
925 | */ | 925 | */ |
926 | int t3_check_tpsram(struct adapter *adapter, u8 *tp_sram, unsigned int size) | 926 | int t3_check_tpsram(struct adapter *adapter, const u8 *tp_sram, |
927 | unsigned int size) | ||
927 | { | 928 | { |
928 | u32 csum; | 929 | u32 csum; |
929 | unsigned int i; | 930 | unsigned int i; |
@@ -2875,10 +2876,10 @@ static void ulp_config(struct adapter *adap, const struct tp_params *p) | |||
2875 | * | 2876 | * |
2876 | * Write the contents of the protocol SRAM. | 2877 | * Write the contents of the protocol SRAM. |
2877 | */ | 2878 | */ |
2878 | int t3_set_proto_sram(struct adapter *adap, u8 *data) | 2879 | int t3_set_proto_sram(struct adapter *adap, const u8 *data) |
2879 | { | 2880 | { |
2880 | int i; | 2881 | int i; |
2881 | __be32 *buf = (__be32 *)data; | 2882 | const __be32 *buf = (const __be32 *)data; |
2882 | 2883 | ||
2883 | for (i = 0; i < PROTO_SRAM_LINES; i++) { | 2884 | for (i = 0; i < PROTO_SRAM_LINES; i++) { |
2884 | t3_write_reg(adap, A_TP_EMBED_OP_FIELD5, be32_to_cpu(*buf++)); | 2885 | t3_write_reg(adap, A_TP_EMBED_OP_FIELD5, be32_to_cpu(*buf++)); |
diff --git a/drivers/net/cxgb3/version.h b/drivers/net/cxgb3/version.h index a0177fc55e28..29db711303b9 100644 --- a/drivers/net/cxgb3/version.h +++ b/drivers/net/cxgb3/version.h | |||
@@ -38,7 +38,7 @@ | |||
38 | #define DRV_VERSION "1.0-ko" | 38 | #define DRV_VERSION "1.0-ko" |
39 | 39 | ||
40 | /* Firmware version */ | 40 | /* Firmware version */ |
41 | #define FW_VERSION_MAJOR 6 | 41 | #define FW_VERSION_MAJOR 7 |
42 | #define FW_VERSION_MINOR 0 | 42 | #define FW_VERSION_MINOR 0 |
43 | #define FW_VERSION_MICRO 0 | 43 | #define FW_VERSION_MICRO 0 |
44 | #endif /* __CHELSIO_VERSION_H */ | 44 | #endif /* __CHELSIO_VERSION_H */ |
diff --git a/drivers/net/fec_8xx/Kconfig b/drivers/net/fec_8xx/Kconfig deleted file mode 100644 index afb34ded26ee..000000000000 --- a/drivers/net/fec_8xx/Kconfig +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | config FEC_8XX | ||
2 | tristate "Motorola 8xx FEC driver" | ||
3 | depends on 8XX | ||
4 | select MII | ||
5 | |||
6 | config FEC_8XX_GENERIC_PHY | ||
7 | bool "Support any generic PHY" | ||
8 | depends on FEC_8XX | ||
9 | default y | ||
10 | |||
11 | config FEC_8XX_DM9161_PHY | ||
12 | bool "Support DM9161 PHY" | ||
13 | depends on FEC_8XX | ||
14 | default n | ||
15 | |||
16 | config FEC_8XX_LXT971_PHY | ||
17 | bool "Support LXT971/LXT972 PHY" | ||
18 | depends on FEC_8XX | ||
19 | default n | ||
20 | |||
diff --git a/drivers/net/fec_8xx/Makefile b/drivers/net/fec_8xx/Makefile deleted file mode 100644 index 70c54f8c48e5..000000000000 --- a/drivers/net/fec_8xx/Makefile +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | # | ||
2 | # Makefile for the Motorola 8xx FEC ethernet controller | ||
3 | # | ||
4 | |||
5 | obj-$(CONFIG_FEC_8XX) += fec_8xx.o | ||
6 | |||
7 | fec_8xx-objs := fec_main.o fec_mii.o | ||
8 | |||
9 | # the platform instantatiation objects | ||
10 | ifeq ($(CONFIG_NETTA),y) | ||
11 | fec_8xx-objs += fec_8xx-netta.o | ||
12 | endif | ||
diff --git a/drivers/net/fec_8xx/fec_8xx-netta.c b/drivers/net/fec_8xx/fec_8xx-netta.c deleted file mode 100644 index 79deee222e28..000000000000 --- a/drivers/net/fec_8xx/fec_8xx-netta.c +++ /dev/null | |||
@@ -1,151 +0,0 @@ | |||
1 | /* | ||
2 | * FEC instantatiation file for NETTA | ||
3 | */ | ||
4 | |||
5 | #include <linux/kernel.h> | ||
6 | #include <linux/types.h> | ||
7 | #include <linux/string.h> | ||
8 | #include <linux/ptrace.h> | ||
9 | #include <linux/errno.h> | ||
10 | #include <linux/ioport.h> | ||
11 | #include <linux/slab.h> | ||
12 | #include <linux/interrupt.h> | ||
13 | #include <linux/pci.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/netdevice.h> | ||
17 | #include <linux/etherdevice.h> | ||
18 | #include <linux/skbuff.h> | ||
19 | #include <linux/spinlock.h> | ||
20 | #include <linux/mii.h> | ||
21 | #include <linux/ethtool.h> | ||
22 | #include <linux/bitops.h> | ||
23 | |||
24 | #include <asm/8xx_immap.h> | ||
25 | #include <asm/pgtable.h> | ||
26 | #include <asm/mpc8xx.h> | ||
27 | #include <asm/irq.h> | ||
28 | #include <asm/uaccess.h> | ||
29 | #include <asm/cpm1.h> | ||
30 | |||
31 | #include "fec_8xx.h" | ||
32 | |||
33 | /*************************************************/ | ||
34 | |||
35 | static struct fec_platform_info fec1_info = { | ||
36 | .fec_no = 0, | ||
37 | .use_mdio = 1, | ||
38 | .phy_addr = 8, | ||
39 | .fec_irq = SIU_LEVEL1, | ||
40 | .phy_irq = CPM_IRQ_OFFSET + CPMVEC_PIO_PC6, | ||
41 | .rx_ring = 128, | ||
42 | .tx_ring = 16, | ||
43 | .rx_copybreak = 240, | ||
44 | .use_napi = 1, | ||
45 | .napi_weight = 17, | ||
46 | }; | ||
47 | |||
48 | static struct fec_platform_info fec2_info = { | ||
49 | .fec_no = 1, | ||
50 | .use_mdio = 1, | ||
51 | .phy_addr = 2, | ||
52 | .fec_irq = SIU_LEVEL3, | ||
53 | .phy_irq = CPM_IRQ_OFFSET + CPMVEC_PIO_PC7, | ||
54 | .rx_ring = 128, | ||
55 | .tx_ring = 16, | ||
56 | .rx_copybreak = 240, | ||
57 | .use_napi = 1, | ||
58 | .napi_weight = 17, | ||
59 | }; | ||
60 | |||
61 | static struct net_device *fec1_dev; | ||
62 | static struct net_device *fec2_dev; | ||
63 | |||
64 | /* XXX custom u-boot & Linux startup needed */ | ||
65 | extern const char *__fw_getenv(const char *var); | ||
66 | |||
67 | /* access ports */ | ||
68 | #define setbits32(_addr, _v) __fec_out32(&(_addr), __fec_in32(&(_addr)) | (_v)) | ||
69 | #define clrbits32(_addr, _v) __fec_out32(&(_addr), __fec_in32(&(_addr)) & ~(_v)) | ||
70 | |||
71 | #define setbits16(_addr, _v) __fec_out16(&(_addr), __fec_in16(&(_addr)) | (_v)) | ||
72 | #define clrbits16(_addr, _v) __fec_out16(&(_addr), __fec_in16(&(_addr)) & ~(_v)) | ||
73 | |||
74 | int fec_8xx_platform_init(void) | ||
75 | { | ||
76 | immap_t *immap = (immap_t *)IMAP_ADDR; | ||
77 | bd_t *bd = (bd_t *) __res; | ||
78 | const char *s; | ||
79 | char *e; | ||
80 | int i; | ||
81 | |||
82 | /* use MDC for MII */ | ||
83 | setbits16(immap->im_ioport.iop_pdpar, 0x0080); | ||
84 | clrbits16(immap->im_ioport.iop_pddir, 0x0080); | ||
85 | |||
86 | /* configure FEC1 pins */ | ||
87 | setbits16(immap->im_ioport.iop_papar, 0xe810); | ||
88 | setbits16(immap->im_ioport.iop_padir, 0x0810); | ||
89 | clrbits16(immap->im_ioport.iop_padir, 0xe000); | ||
90 | |||
91 | setbits32(immap->im_cpm.cp_pbpar, 0x00000001); | ||
92 | clrbits32(immap->im_cpm.cp_pbdir, 0x00000001); | ||
93 | |||
94 | setbits32(immap->im_cpm.cp_cptr, 0x00000100); | ||
95 | clrbits32(immap->im_cpm.cp_cptr, 0x00000050); | ||
96 | |||
97 | clrbits16(immap->im_ioport.iop_pcpar, 0x0200); | ||
98 | clrbits16(immap->im_ioport.iop_pcdir, 0x0200); | ||
99 | clrbits16(immap->im_ioport.iop_pcso, 0x0200); | ||
100 | setbits16(immap->im_ioport.iop_pcint, 0x0200); | ||
101 | |||
102 | /* configure FEC2 pins */ | ||
103 | setbits32(immap->im_cpm.cp_pepar, 0x00039620); | ||
104 | setbits32(immap->im_cpm.cp_pedir, 0x00039620); | ||
105 | setbits32(immap->im_cpm.cp_peso, 0x00031000); | ||
106 | clrbits32(immap->im_cpm.cp_peso, 0x00008620); | ||
107 | |||
108 | setbits32(immap->im_cpm.cp_cptr, 0x00000080); | ||
109 | clrbits32(immap->im_cpm.cp_cptr, 0x00000028); | ||
110 | |||
111 | clrbits16(immap->im_ioport.iop_pcpar, 0x0200); | ||
112 | clrbits16(immap->im_ioport.iop_pcdir, 0x0200); | ||
113 | clrbits16(immap->im_ioport.iop_pcso, 0x0200); | ||
114 | setbits16(immap->im_ioport.iop_pcint, 0x0200); | ||
115 | |||
116 | /* fill up */ | ||
117 | fec1_info.sys_clk = bd->bi_intfreq; | ||
118 | fec2_info.sys_clk = bd->bi_intfreq; | ||
119 | |||
120 | s = __fw_getenv("ethaddr"); | ||
121 | if (s != NULL) { | ||
122 | for (i = 0; i < 6; i++) { | ||
123 | fec1_info.macaddr[i] = simple_strtoul(s, &e, 16); | ||
124 | if (*e) | ||
125 | s = e + 1; | ||
126 | } | ||
127 | } | ||
128 | |||
129 | s = __fw_getenv("eth1addr"); | ||
130 | if (s != NULL) { | ||
131 | for (i = 0; i < 6; i++) { | ||
132 | fec2_info.macaddr[i] = simple_strtoul(s, &e, 16); | ||
133 | if (*e) | ||
134 | s = e + 1; | ||
135 | } | ||
136 | } | ||
137 | |||
138 | fec_8xx_init_one(&fec1_info, &fec1_dev); | ||
139 | fec_8xx_init_one(&fec2_info, &fec2_dev); | ||
140 | |||
141 | return fec1_dev != NULL && fec2_dev != NULL ? 0 : -1; | ||
142 | } | ||
143 | |||
144 | void fec_8xx_platform_cleanup(void) | ||
145 | { | ||
146 | if (fec2_dev != NULL) | ||
147 | fec_8xx_cleanup_one(fec2_dev); | ||
148 | |||
149 | if (fec1_dev != NULL) | ||
150 | fec_8xx_cleanup_one(fec1_dev); | ||
151 | } | ||
diff --git a/drivers/net/fec_8xx/fec_8xx.h b/drivers/net/fec_8xx/fec_8xx.h deleted file mode 100644 index f3b1c6fbba8b..000000000000 --- a/drivers/net/fec_8xx/fec_8xx.h +++ /dev/null | |||
@@ -1,220 +0,0 @@ | |||
1 | #ifndef FEC_8XX_H | ||
2 | #define FEC_8XX_H | ||
3 | |||
4 | #include <linux/mii.h> | ||
5 | #include <linux/netdevice.h> | ||
6 | |||
7 | #include <linux/types.h> | ||
8 | |||
9 | /* HW info */ | ||
10 | |||
11 | /* CRC polynomium used by the FEC for the multicast group filtering */ | ||
12 | #define FEC_CRC_POLY 0x04C11DB7 | ||
13 | |||
14 | #define MII_ADVERTISE_HALF (ADVERTISE_100HALF | \ | ||
15 | ADVERTISE_10HALF | ADVERTISE_CSMA) | ||
16 | #define MII_ADVERTISE_ALL (ADVERTISE_100FULL | \ | ||
17 | ADVERTISE_10FULL | MII_ADVERTISE_HALF) | ||
18 | |||
19 | /* Interrupt events/masks. | ||
20 | */ | ||
21 | #define FEC_ENET_HBERR 0x80000000U /* Heartbeat error */ | ||
22 | #define FEC_ENET_BABR 0x40000000U /* Babbling receiver */ | ||
23 | #define FEC_ENET_BABT 0x20000000U /* Babbling transmitter */ | ||
24 | #define FEC_ENET_GRA 0x10000000U /* Graceful stop complete */ | ||
25 | #define FEC_ENET_TXF 0x08000000U /* Full frame transmitted */ | ||
26 | #define FEC_ENET_TXB 0x04000000U /* A buffer was transmitted */ | ||
27 | #define FEC_ENET_RXF 0x02000000U /* Full frame received */ | ||
28 | #define FEC_ENET_RXB 0x01000000U /* A buffer was received */ | ||
29 | #define FEC_ENET_MII 0x00800000U /* MII interrupt */ | ||
30 | #define FEC_ENET_EBERR 0x00400000U /* SDMA bus error */ | ||
31 | |||
32 | #define FEC_ECNTRL_PINMUX 0x00000004 | ||
33 | #define FEC_ECNTRL_ETHER_EN 0x00000002 | ||
34 | #define FEC_ECNTRL_RESET 0x00000001 | ||
35 | |||
36 | #define FEC_RCNTRL_BC_REJ 0x00000010 | ||
37 | #define FEC_RCNTRL_PROM 0x00000008 | ||
38 | #define FEC_RCNTRL_MII_MODE 0x00000004 | ||
39 | #define FEC_RCNTRL_DRT 0x00000002 | ||
40 | #define FEC_RCNTRL_LOOP 0x00000001 | ||
41 | |||
42 | #define FEC_TCNTRL_FDEN 0x00000004 | ||
43 | #define FEC_TCNTRL_HBC 0x00000002 | ||
44 | #define FEC_TCNTRL_GTS 0x00000001 | ||
45 | |||
46 | /* values for MII phy_status */ | ||
47 | |||
48 | #define PHY_CONF_ANE 0x0001 /* 1 auto-negotiation enabled */ | ||
49 | #define PHY_CONF_LOOP 0x0002 /* 1 loopback mode enabled */ | ||
50 | #define PHY_CONF_SPMASK 0x00f0 /* mask for speed */ | ||
51 | #define PHY_CONF_10HDX 0x0010 /* 10 Mbit half duplex supported */ | ||
52 | #define PHY_CONF_10FDX 0x0020 /* 10 Mbit full duplex supported */ | ||
53 | #define PHY_CONF_100HDX 0x0040 /* 100 Mbit half duplex supported */ | ||
54 | #define PHY_CONF_100FDX 0x0080 /* 100 Mbit full duplex supported */ | ||
55 | |||
56 | #define PHY_STAT_LINK 0x0100 /* 1 up - 0 down */ | ||
57 | #define PHY_STAT_FAULT 0x0200 /* 1 remote fault */ | ||
58 | #define PHY_STAT_ANC 0x0400 /* 1 auto-negotiation complete */ | ||
59 | #define PHY_STAT_SPMASK 0xf000 /* mask for speed */ | ||
60 | #define PHY_STAT_10HDX 0x1000 /* 10 Mbit half duplex selected */ | ||
61 | #define PHY_STAT_10FDX 0x2000 /* 10 Mbit full duplex selected */ | ||
62 | #define PHY_STAT_100HDX 0x4000 /* 100 Mbit half duplex selected */ | ||
63 | #define PHY_STAT_100FDX 0x8000 /* 100 Mbit full duplex selected */ | ||
64 | |||
65 | typedef struct phy_info { | ||
66 | unsigned int id; | ||
67 | const char *name; | ||
68 | void (*startup) (struct net_device * dev); | ||
69 | void (*shutdown) (struct net_device * dev); | ||
70 | void (*ack_int) (struct net_device * dev); | ||
71 | } phy_info_t; | ||
72 | |||
73 | /* The FEC stores dest/src/type, data, and checksum for receive packets. | ||
74 | */ | ||
75 | #define MAX_MTU 1508 /* Allow fullsized pppoe packets over VLAN */ | ||
76 | #define MIN_MTU 46 /* this is data size */ | ||
77 | #define CRC_LEN 4 | ||
78 | |||
79 | #define PKT_MAXBUF_SIZE (MAX_MTU+ETH_HLEN+CRC_LEN) | ||
80 | #define PKT_MINBUF_SIZE (MIN_MTU+ETH_HLEN+CRC_LEN) | ||
81 | |||
82 | /* Must be a multiple of 4 */ | ||
83 | #define PKT_MAXBLR_SIZE ((PKT_MAXBUF_SIZE+3) & ~3) | ||
84 | /* This is needed so that invalidate_xxx wont invalidate too much */ | ||
85 | #define ENET_RX_FRSIZE L1_CACHE_ALIGN(PKT_MAXBUF_SIZE) | ||
86 | |||
87 | /* platform interface */ | ||
88 | |||
89 | struct fec_platform_info { | ||
90 | int fec_no; /* FEC index */ | ||
91 | int use_mdio; /* use external MII */ | ||
92 | int phy_addr; /* the phy address */ | ||
93 | int fec_irq, phy_irq; /* the irq for the controller */ | ||
94 | int rx_ring, tx_ring; /* number of buffers on rx */ | ||
95 | int sys_clk; /* system clock */ | ||
96 | __u8 macaddr[6]; /* mac address */ | ||
97 | int rx_copybreak; /* limit we copy small frames */ | ||
98 | int use_napi; /* use NAPI */ | ||
99 | int napi_weight; /* NAPI weight */ | ||
100 | }; | ||
101 | |||
102 | /* forward declaration */ | ||
103 | struct fec; | ||
104 | |||
105 | struct fec_enet_private { | ||
106 | spinlock_t lock; /* during all ops except TX pckt processing */ | ||
107 | spinlock_t tx_lock; /* during fec_start_xmit and fec_tx */ | ||
108 | struct net_device *dev; | ||
109 | struct napi_struct napi; | ||
110 | int fecno; | ||
111 | struct fec *fecp; | ||
112 | const struct fec_platform_info *fpi; | ||
113 | int rx_ring, tx_ring; | ||
114 | dma_addr_t ring_mem_addr; | ||
115 | void *ring_base; | ||
116 | struct sk_buff **rx_skbuff; | ||
117 | struct sk_buff **tx_skbuff; | ||
118 | cbd_t *rx_bd_base; /* Address of Rx and Tx buffers. */ | ||
119 | cbd_t *tx_bd_base; | ||
120 | cbd_t *dirty_tx; /* ring entries to be free()ed. */ | ||
121 | cbd_t *cur_rx; | ||
122 | cbd_t *cur_tx; | ||
123 | int tx_free; | ||
124 | struct net_device_stats stats; | ||
125 | struct timer_list phy_timer_list; | ||
126 | const struct phy_info *phy; | ||
127 | unsigned int fec_phy_speed; | ||
128 | __u32 msg_enable; | ||
129 | struct mii_if_info mii_if; | ||
130 | }; | ||
131 | |||
132 | /***************************************************************************/ | ||
133 | |||
134 | void fec_restart(struct net_device *dev, int duplex, int speed); | ||
135 | void fec_stop(struct net_device *dev); | ||
136 | |||
137 | /***************************************************************************/ | ||
138 | |||
139 | int fec_mii_read(struct net_device *dev, int phy_id, int location); | ||
140 | void fec_mii_write(struct net_device *dev, int phy_id, int location, int value); | ||
141 | |||
142 | int fec_mii_phy_id_detect(struct net_device *dev); | ||
143 | void fec_mii_startup(struct net_device *dev); | ||
144 | void fec_mii_shutdown(struct net_device *dev); | ||
145 | void fec_mii_ack_int(struct net_device *dev); | ||
146 | |||
147 | void fec_mii_link_status_change_check(struct net_device *dev, int init_media); | ||
148 | |||
149 | /***************************************************************************/ | ||
150 | |||
151 | #define FEC1_NO 0x00 | ||
152 | #define FEC2_NO 0x01 | ||
153 | #define FEC3_NO 0x02 | ||
154 | |||
155 | int fec_8xx_init_one(const struct fec_platform_info *fpi, | ||
156 | struct net_device **devp); | ||
157 | int fec_8xx_cleanup_one(struct net_device *dev); | ||
158 | |||
159 | /***************************************************************************/ | ||
160 | |||
161 | #define DRV_MODULE_NAME "fec_8xx" | ||
162 | #define PFX DRV_MODULE_NAME ": " | ||
163 | #define DRV_MODULE_VERSION "0.1" | ||
164 | #define DRV_MODULE_RELDATE "May 6, 2004" | ||
165 | |||
166 | /***************************************************************************/ | ||
167 | |||
168 | int fec_8xx_platform_init(void); | ||
169 | void fec_8xx_platform_cleanup(void); | ||
170 | |||
171 | /***************************************************************************/ | ||
172 | |||
173 | /* FEC access macros */ | ||
174 | #if defined(CONFIG_8xx) | ||
175 | /* for a 8xx __raw_xxx's are sufficient */ | ||
176 | #define __fec_out32(addr, x) __raw_writel(x, addr) | ||
177 | #define __fec_out16(addr, x) __raw_writew(x, addr) | ||
178 | #define __fec_in32(addr) __raw_readl(addr) | ||
179 | #define __fec_in16(addr) __raw_readw(addr) | ||
180 | #else | ||
181 | /* for others play it safe */ | ||
182 | #define __fec_out32(addr, x) out_be32(addr, x) | ||
183 | #define __fec_out16(addr, x) out_be16(addr, x) | ||
184 | #define __fec_in32(addr) in_be32(addr) | ||
185 | #define __fec_in16(addr) in_be16(addr) | ||
186 | #endif | ||
187 | |||
188 | /* write */ | ||
189 | #define FW(_fecp, _reg, _v) __fec_out32(&(_fecp)->fec_ ## _reg, (_v)) | ||
190 | |||
191 | /* read */ | ||
192 | #define FR(_fecp, _reg) __fec_in32(&(_fecp)->fec_ ## _reg) | ||
193 | |||
194 | /* set bits */ | ||
195 | #define FS(_fecp, _reg, _v) FW(_fecp, _reg, FR(_fecp, _reg) | (_v)) | ||
196 | |||
197 | /* clear bits */ | ||
198 | #define FC(_fecp, _reg, _v) FW(_fecp, _reg, FR(_fecp, _reg) & ~(_v)) | ||
199 | |||
200 | /* buffer descriptor access macros */ | ||
201 | |||
202 | /* write */ | ||
203 | #define CBDW_SC(_cbd, _sc) __fec_out16(&(_cbd)->cbd_sc, (_sc)) | ||
204 | #define CBDW_DATLEN(_cbd, _datlen) __fec_out16(&(_cbd)->cbd_datlen, (_datlen)) | ||
205 | #define CBDW_BUFADDR(_cbd, _bufaddr) __fec_out32(&(_cbd)->cbd_bufaddr, (_bufaddr)) | ||
206 | |||
207 | /* read */ | ||
208 | #define CBDR_SC(_cbd) __fec_in16(&(_cbd)->cbd_sc) | ||
209 | #define CBDR_DATLEN(_cbd) __fec_in16(&(_cbd)->cbd_datlen) | ||
210 | #define CBDR_BUFADDR(_cbd) __fec_in32(&(_cbd)->cbd_bufaddr) | ||
211 | |||
212 | /* set bits */ | ||
213 | #define CBDS_SC(_cbd, _sc) CBDW_SC(_cbd, CBDR_SC(_cbd) | (_sc)) | ||
214 | |||
215 | /* clear bits */ | ||
216 | #define CBDC_SC(_cbd, _sc) CBDW_SC(_cbd, CBDR_SC(_cbd) & ~(_sc)) | ||
217 | |||
218 | /***************************************************************************/ | ||
219 | |||
220 | #endif | ||
diff --git a/drivers/net/fec_8xx/fec_main.c b/drivers/net/fec_8xx/fec_main.c deleted file mode 100644 index ca8d2e83ab03..000000000000 --- a/drivers/net/fec_8xx/fec_main.c +++ /dev/null | |||
@@ -1,1264 +0,0 @@ | |||
1 | /* | ||
2 | * Fast Ethernet Controller (FEC) driver for Motorola MPC8xx. | ||
3 | * | ||
4 | * Copyright (c) 2003 Intracom S.A. | ||
5 | * by Pantelis Antoniou <panto@intracom.gr> | ||
6 | * | ||
7 | * Heavily based on original FEC driver by Dan Malek <dan@embeddededge.com> | ||
8 | * and modifications by Joakim Tjernlund <joakim.tjernlund@lumentis.se> | ||
9 | * | ||
10 | * Released under the GPL | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/types.h> | ||
16 | #include <linux/string.h> | ||
17 | #include <linux/ptrace.h> | ||
18 | #include <linux/errno.h> | ||
19 | #include <linux/ioport.h> | ||
20 | #include <linux/slab.h> | ||
21 | #include <linux/interrupt.h> | ||
22 | #include <linux/init.h> | ||
23 | #include <linux/delay.h> | ||
24 | #include <linux/netdevice.h> | ||
25 | #include <linux/etherdevice.h> | ||
26 | #include <linux/skbuff.h> | ||
27 | #include <linux/spinlock.h> | ||
28 | #include <linux/mii.h> | ||
29 | #include <linux/ethtool.h> | ||
30 | #include <linux/bitops.h> | ||
31 | #include <linux/dma-mapping.h> | ||
32 | |||
33 | #include <asm/8xx_immap.h> | ||
34 | #include <asm/pgtable.h> | ||
35 | #include <asm/mpc8xx.h> | ||
36 | #include <asm/irq.h> | ||
37 | #include <asm/uaccess.h> | ||
38 | #include <asm/cpm1.h> | ||
39 | |||
40 | #include "fec_8xx.h" | ||
41 | |||
42 | /*************************************************/ | ||
43 | |||
44 | #define FEC_MAX_MULTICAST_ADDRS 64 | ||
45 | |||
46 | /*************************************************/ | ||
47 | |||
48 | static char version[] __devinitdata = | ||
49 | DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")" "\n"; | ||
50 | |||
51 | MODULE_AUTHOR("Pantelis Antoniou <panto@intracom.gr>"); | ||
52 | MODULE_DESCRIPTION("Motorola 8xx FEC ethernet driver"); | ||
53 | MODULE_LICENSE("GPL"); | ||
54 | |||
55 | int fec_8xx_debug = -1; /* -1 == use FEC_8XX_DEF_MSG_ENABLE as value */ | ||
56 | module_param(fec_8xx_debug, int, 0); | ||
57 | MODULE_PARM_DESC(fec_8xx_debug, | ||
58 | "FEC 8xx bitmapped debugging message enable value"); | ||
59 | |||
60 | |||
61 | /*************************************************/ | ||
62 | |||
63 | /* | ||
64 | * Delay to wait for FEC reset command to complete (in us) | ||
65 | */ | ||
66 | #define FEC_RESET_DELAY 50 | ||
67 | |||
68 | /*****************************************************************************************/ | ||
69 | |||
70 | static void fec_whack_reset(fec_t * fecp) | ||
71 | { | ||
72 | int i; | ||
73 | |||
74 | /* | ||
75 | * Whack a reset. We should wait for this. | ||
76 | */ | ||
77 | FW(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET); | ||
78 | for (i = 0; | ||
79 | (FR(fecp, ecntrl) & FEC_ECNTRL_RESET) != 0 && i < FEC_RESET_DELAY; | ||
80 | i++) | ||
81 | udelay(1); | ||
82 | |||
83 | if (i == FEC_RESET_DELAY) | ||
84 | printk(KERN_WARNING "FEC Reset timeout!\n"); | ||
85 | |||
86 | } | ||
87 | |||
88 | /****************************************************************************/ | ||
89 | |||
90 | /* | ||
91 | * Transmitter timeout. | ||
92 | */ | ||
93 | #define TX_TIMEOUT (2*HZ) | ||
94 | |||
95 | /****************************************************************************/ | ||
96 | |||
97 | /* | ||
98 | * Returns the CRC needed when filling in the hash table for | ||
99 | * multicast group filtering | ||
100 | * pAddr must point to a MAC address (6 bytes) | ||
101 | */ | ||
102 | static __u32 fec_mulicast_calc_crc(char *pAddr) | ||
103 | { | ||
104 | u8 byte; | ||
105 | int byte_count; | ||
106 | int bit_count; | ||
107 | __u32 crc = 0xffffffff; | ||
108 | u8 msb; | ||
109 | |||
110 | for (byte_count = 0; byte_count < 6; byte_count++) { | ||
111 | byte = pAddr[byte_count]; | ||
112 | for (bit_count = 0; bit_count < 8; bit_count++) { | ||
113 | msb = crc >> 31; | ||
114 | crc <<= 1; | ||
115 | if (msb ^ (byte & 0x1)) { | ||
116 | crc ^= FEC_CRC_POLY; | ||
117 | } | ||
118 | byte >>= 1; | ||
119 | } | ||
120 | } | ||
121 | return (crc); | ||
122 | } | ||
123 | |||
124 | /* | ||
125 | * Set or clear the multicast filter for this adaptor. | ||
126 | * Skeleton taken from sunlance driver. | ||
127 | * The CPM Ethernet implementation allows Multicast as well as individual | ||
128 | * MAC address filtering. Some of the drivers check to make sure it is | ||
129 | * a group multicast address, and discard those that are not. I guess I | ||
130 | * will do the same for now, but just remove the test if you want | ||
131 | * individual filtering as well (do the upper net layers want or support | ||
132 | * this kind of feature?). | ||
133 | */ | ||
134 | static void fec_set_multicast_list(struct net_device *dev) | ||
135 | { | ||
136 | struct fec_enet_private *fep = netdev_priv(dev); | ||
137 | fec_t *fecp = fep->fecp; | ||
138 | struct dev_mc_list *pmc; | ||
139 | __u32 crc; | ||
140 | int temp; | ||
141 | __u32 csrVal; | ||
142 | int hash_index; | ||
143 | __u32 hthi, htlo; | ||
144 | unsigned long flags; | ||
145 | |||
146 | |||
147 | if ((dev->flags & IFF_PROMISC) != 0) { | ||
148 | |||
149 | spin_lock_irqsave(&fep->lock, flags); | ||
150 | FS(fecp, r_cntrl, FEC_RCNTRL_PROM); | ||
151 | spin_unlock_irqrestore(&fep->lock, flags); | ||
152 | |||
153 | /* | ||
154 | * Log any net taps. | ||
155 | */ | ||
156 | printk(KERN_WARNING DRV_MODULE_NAME | ||
157 | ": %s: Promiscuous mode enabled.\n", dev->name); | ||
158 | return; | ||
159 | |||
160 | } | ||
161 | |||
162 | if ((dev->flags & IFF_ALLMULTI) != 0 || | ||
163 | dev->mc_count > FEC_MAX_MULTICAST_ADDRS) { | ||
164 | /* | ||
165 | * Catch all multicast addresses, set the filter to all 1's. | ||
166 | */ | ||
167 | hthi = 0xffffffffU; | ||
168 | htlo = 0xffffffffU; | ||
169 | } else { | ||
170 | hthi = 0; | ||
171 | htlo = 0; | ||
172 | |||
173 | /* | ||
174 | * Now populate the hash table | ||
175 | */ | ||
176 | for (pmc = dev->mc_list; pmc != NULL; pmc = pmc->next) { | ||
177 | crc = fec_mulicast_calc_crc(pmc->dmi_addr); | ||
178 | temp = (crc & 0x3f) >> 1; | ||
179 | hash_index = ((temp & 0x01) << 4) | | ||
180 | ((temp & 0x02) << 2) | | ||
181 | ((temp & 0x04)) | | ||
182 | ((temp & 0x08) >> 2) | | ||
183 | ((temp & 0x10) >> 4); | ||
184 | csrVal = (1 << hash_index); | ||
185 | if (crc & 1) | ||
186 | hthi |= csrVal; | ||
187 | else | ||
188 | htlo |= csrVal; | ||
189 | } | ||
190 | } | ||
191 | |||
192 | spin_lock_irqsave(&fep->lock, flags); | ||
193 | FC(fecp, r_cntrl, FEC_RCNTRL_PROM); | ||
194 | FW(fecp, hash_table_high, hthi); | ||
195 | FW(fecp, hash_table_low, htlo); | ||
196 | spin_unlock_irqrestore(&fep->lock, flags); | ||
197 | } | ||
198 | |||
199 | static int fec_set_mac_address(struct net_device *dev, void *addr) | ||
200 | { | ||
201 | struct sockaddr *mac = addr; | ||
202 | struct fec_enet_private *fep = netdev_priv(dev); | ||
203 | struct fec *fecp = fep->fecp; | ||
204 | int i; | ||
205 | __u32 addrhi, addrlo; | ||
206 | unsigned long flags; | ||
207 | |||
208 | /* Get pointer to SCC area in parameter RAM. */ | ||
209 | for (i = 0; i < 6; i++) | ||
210 | dev->dev_addr[i] = mac->sa_data[i]; | ||
211 | |||
212 | /* | ||
213 | * Set station address. | ||
214 | */ | ||
215 | addrhi = ((__u32) dev->dev_addr[0] << 24) | | ||
216 | ((__u32) dev->dev_addr[1] << 16) | | ||
217 | ((__u32) dev->dev_addr[2] << 8) | | ||
218 | (__u32) dev->dev_addr[3]; | ||
219 | addrlo = ((__u32) dev->dev_addr[4] << 24) | | ||
220 | ((__u32) dev->dev_addr[5] << 16); | ||
221 | |||
222 | spin_lock_irqsave(&fep->lock, flags); | ||
223 | FW(fecp, addr_low, addrhi); | ||
224 | FW(fecp, addr_high, addrlo); | ||
225 | spin_unlock_irqrestore(&fep->lock, flags); | ||
226 | |||
227 | return 0; | ||
228 | } | ||
229 | |||
230 | /* | ||
231 | * This function is called to start or restart the FEC during a link | ||
232 | * change. This only happens when switching between half and full | ||
233 | * duplex. | ||
234 | */ | ||
235 | void fec_restart(struct net_device *dev, int duplex, int speed) | ||
236 | { | ||
237 | #ifdef CONFIG_DUET | ||
238 | immap_t *immap = (immap_t *) IMAP_ADDR; | ||
239 | __u32 cptr; | ||
240 | #endif | ||
241 | struct fec_enet_private *fep = netdev_priv(dev); | ||
242 | struct fec *fecp = fep->fecp; | ||
243 | const struct fec_platform_info *fpi = fep->fpi; | ||
244 | cbd_t *bdp; | ||
245 | struct sk_buff *skb; | ||
246 | int i; | ||
247 | __u32 addrhi, addrlo; | ||
248 | |||
249 | fec_whack_reset(fep->fecp); | ||
250 | |||
251 | /* | ||
252 | * Set station address. | ||
253 | */ | ||
254 | addrhi = ((__u32) dev->dev_addr[0] << 24) | | ||
255 | ((__u32) dev->dev_addr[1] << 16) | | ||
256 | ((__u32) dev->dev_addr[2] << 8) | | ||
257 | (__u32) dev->dev_addr[3]; | ||
258 | addrlo = ((__u32) dev->dev_addr[4] << 24) | | ||
259 | ((__u32) dev->dev_addr[5] << 16); | ||
260 | FW(fecp, addr_low, addrhi); | ||
261 | FW(fecp, addr_high, addrlo); | ||
262 | |||
263 | /* | ||
264 | * Reset all multicast. | ||
265 | */ | ||
266 | FW(fecp, hash_table_high, 0); | ||
267 | FW(fecp, hash_table_low, 0); | ||
268 | |||
269 | /* | ||
270 | * Set maximum receive buffer size. | ||
271 | */ | ||
272 | FW(fecp, r_buff_size, PKT_MAXBLR_SIZE); | ||
273 | FW(fecp, r_hash, PKT_MAXBUF_SIZE); | ||
274 | |||
275 | /* | ||
276 | * Set receive and transmit descriptor base. | ||
277 | */ | ||
278 | FW(fecp, r_des_start, iopa((__u32) (fep->rx_bd_base))); | ||
279 | FW(fecp, x_des_start, iopa((__u32) (fep->tx_bd_base))); | ||
280 | |||
281 | fep->dirty_tx = fep->cur_tx = fep->tx_bd_base; | ||
282 | fep->tx_free = fep->tx_ring; | ||
283 | fep->cur_rx = fep->rx_bd_base; | ||
284 | |||
285 | /* | ||
286 | * Reset SKB receive buffers | ||
287 | */ | ||
288 | for (i = 0; i < fep->rx_ring; i++) { | ||
289 | if ((skb = fep->rx_skbuff[i]) == NULL) | ||
290 | continue; | ||
291 | fep->rx_skbuff[i] = NULL; | ||
292 | dev_kfree_skb(skb); | ||
293 | } | ||
294 | |||
295 | /* | ||
296 | * Initialize the receive buffer descriptors. | ||
297 | */ | ||
298 | for (i = 0, bdp = fep->rx_bd_base; i < fep->rx_ring; i++, bdp++) { | ||
299 | skb = dev_alloc_skb(ENET_RX_FRSIZE); | ||
300 | if (skb == NULL) { | ||
301 | printk(KERN_WARNING DRV_MODULE_NAME | ||
302 | ": %s Memory squeeze, unable to allocate skb\n", | ||
303 | dev->name); | ||
304 | fep->stats.rx_dropped++; | ||
305 | break; | ||
306 | } | ||
307 | fep->rx_skbuff[i] = skb; | ||
308 | skb->dev = dev; | ||
309 | CBDW_BUFADDR(bdp, dma_map_single(NULL, skb->data, | ||
310 | L1_CACHE_ALIGN(PKT_MAXBUF_SIZE), | ||
311 | DMA_FROM_DEVICE)); | ||
312 | CBDW_DATLEN(bdp, 0); /* zero */ | ||
313 | CBDW_SC(bdp, BD_ENET_RX_EMPTY | | ||
314 | ((i < fep->rx_ring - 1) ? 0 : BD_SC_WRAP)); | ||
315 | } | ||
316 | /* | ||
317 | * if we failed, fillup remainder | ||
318 | */ | ||
319 | for (; i < fep->rx_ring; i++, bdp++) { | ||
320 | fep->rx_skbuff[i] = NULL; | ||
321 | CBDW_SC(bdp, (i < fep->rx_ring - 1) ? 0 : BD_SC_WRAP); | ||
322 | } | ||
323 | |||
324 | /* | ||
325 | * Reset SKB transmit buffers. | ||
326 | */ | ||
327 | for (i = 0; i < fep->tx_ring; i++) { | ||
328 | if ((skb = fep->tx_skbuff[i]) == NULL) | ||
329 | continue; | ||
330 | fep->tx_skbuff[i] = NULL; | ||
331 | dev_kfree_skb(skb); | ||
332 | } | ||
333 | |||
334 | /* | ||
335 | * ...and the same for transmit. | ||
336 | */ | ||
337 | for (i = 0, bdp = fep->tx_bd_base; i < fep->tx_ring; i++, bdp++) { | ||
338 | fep->tx_skbuff[i] = NULL; | ||
339 | CBDW_BUFADDR(bdp, virt_to_bus(NULL)); | ||
340 | CBDW_DATLEN(bdp, 0); | ||
341 | CBDW_SC(bdp, (i < fep->tx_ring - 1) ? 0 : BD_SC_WRAP); | ||
342 | } | ||
343 | |||
344 | /* | ||
345 | * Enable big endian and don't care about SDMA FC. | ||
346 | */ | ||
347 | FW(fecp, fun_code, 0x78000000); | ||
348 | |||
349 | /* | ||
350 | * Set MII speed. | ||
351 | */ | ||
352 | FW(fecp, mii_speed, fep->fec_phy_speed); | ||
353 | |||
354 | /* | ||
355 | * Clear any outstanding interrupt. | ||
356 | */ | ||
357 | FW(fecp, ievent, 0xffc0); | ||
358 | FW(fecp, ivec, (fpi->fec_irq / 2) << 29); | ||
359 | |||
360 | /* | ||
361 | * adjust to speed (only for DUET & RMII) | ||
362 | */ | ||
363 | #ifdef CONFIG_DUET | ||
364 | cptr = in_be32(&immap->im_cpm.cp_cptr); | ||
365 | switch (fpi->fec_no) { | ||
366 | case 0: | ||
367 | /* | ||
368 | * check if in RMII mode | ||
369 | */ | ||
370 | if ((cptr & 0x100) == 0) | ||
371 | break; | ||
372 | |||
373 | if (speed == 10) | ||
374 | cptr |= 0x0000010; | ||
375 | else if (speed == 100) | ||
376 | cptr &= ~0x0000010; | ||
377 | break; | ||
378 | case 1: | ||
379 | /* | ||
380 | * check if in RMII mode | ||
381 | */ | ||
382 | if ((cptr & 0x80) == 0) | ||
383 | break; | ||
384 | |||
385 | if (speed == 10) | ||
386 | cptr |= 0x0000008; | ||
387 | else if (speed == 100) | ||
388 | cptr &= ~0x0000008; | ||
389 | break; | ||
390 | default: | ||
391 | break; | ||
392 | } | ||
393 | out_be32(&immap->im_cpm.cp_cptr, cptr); | ||
394 | #endif | ||
395 | |||
396 | FW(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */ | ||
397 | /* | ||
398 | * adjust to duplex mode | ||
399 | */ | ||
400 | if (duplex) { | ||
401 | FC(fecp, r_cntrl, FEC_RCNTRL_DRT); | ||
402 | FS(fecp, x_cntrl, FEC_TCNTRL_FDEN); /* FD enable */ | ||
403 | } else { | ||
404 | FS(fecp, r_cntrl, FEC_RCNTRL_DRT); | ||
405 | FC(fecp, x_cntrl, FEC_TCNTRL_FDEN); /* FD disable */ | ||
406 | } | ||
407 | |||
408 | /* | ||
409 | * Enable interrupts we wish to service. | ||
410 | */ | ||
411 | FW(fecp, imask, FEC_ENET_TXF | FEC_ENET_TXB | | ||
412 | FEC_ENET_RXF | FEC_ENET_RXB); | ||
413 | |||
414 | /* | ||
415 | * And last, enable the transmit and receive processing. | ||
416 | */ | ||
417 | FW(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN); | ||
418 | FW(fecp, r_des_active, 0x01000000); | ||
419 | } | ||
420 | |||
421 | void fec_stop(struct net_device *dev) | ||
422 | { | ||
423 | struct fec_enet_private *fep = netdev_priv(dev); | ||
424 | fec_t *fecp = fep->fecp; | ||
425 | struct sk_buff *skb; | ||
426 | int i; | ||
427 | |||
428 | if ((FR(fecp, ecntrl) & FEC_ECNTRL_ETHER_EN) == 0) | ||
429 | return; /* already down */ | ||
430 | |||
431 | FW(fecp, x_cntrl, 0x01); /* Graceful transmit stop */ | ||
432 | for (i = 0; ((FR(fecp, ievent) & 0x10000000) == 0) && | ||
433 | i < FEC_RESET_DELAY; i++) | ||
434 | udelay(1); | ||
435 | |||
436 | if (i == FEC_RESET_DELAY) | ||
437 | printk(KERN_WARNING DRV_MODULE_NAME | ||
438 | ": %s FEC timeout on graceful transmit stop\n", | ||
439 | dev->name); | ||
440 | /* | ||
441 | * Disable FEC. Let only MII interrupts. | ||
442 | */ | ||
443 | FW(fecp, imask, 0); | ||
444 | FW(fecp, ecntrl, ~FEC_ECNTRL_ETHER_EN); | ||
445 | |||
446 | /* | ||
447 | * Reset SKB transmit buffers. | ||
448 | */ | ||
449 | for (i = 0; i < fep->tx_ring; i++) { | ||
450 | if ((skb = fep->tx_skbuff[i]) == NULL) | ||
451 | continue; | ||
452 | fep->tx_skbuff[i] = NULL; | ||
453 | dev_kfree_skb(skb); | ||
454 | } | ||
455 | |||
456 | /* | ||
457 | * Reset SKB receive buffers | ||
458 | */ | ||
459 | for (i = 0; i < fep->rx_ring; i++) { | ||
460 | if ((skb = fep->rx_skbuff[i]) == NULL) | ||
461 | continue; | ||
462 | fep->rx_skbuff[i] = NULL; | ||
463 | dev_kfree_skb(skb); | ||
464 | } | ||
465 | } | ||
466 | |||
467 | /* common receive function */ | ||
468 | static int fec_enet_rx_common(struct fec_enet_private *ep, | ||
469 | struct net_device *dev, int budget) | ||
470 | { | ||
471 | fec_t *fecp = fep->fecp; | ||
472 | const struct fec_platform_info *fpi = fep->fpi; | ||
473 | cbd_t *bdp; | ||
474 | struct sk_buff *skb, *skbn, *skbt; | ||
475 | int received = 0; | ||
476 | __u16 pkt_len, sc; | ||
477 | int curidx; | ||
478 | |||
479 | /* | ||
480 | * First, grab all of the stats for the incoming packet. | ||
481 | * These get messed up if we get called due to a busy condition. | ||
482 | */ | ||
483 | bdp = fep->cur_rx; | ||
484 | |||
485 | /* clear RX status bits for napi*/ | ||
486 | if (fpi->use_napi) | ||
487 | FW(fecp, ievent, FEC_ENET_RXF | FEC_ENET_RXB); | ||
488 | |||
489 | while (((sc = CBDR_SC(bdp)) & BD_ENET_RX_EMPTY) == 0) { | ||
490 | |||
491 | curidx = bdp - fep->rx_bd_base; | ||
492 | |||
493 | /* | ||
494 | * Since we have allocated space to hold a complete frame, | ||
495 | * the last indicator should be set. | ||
496 | */ | ||
497 | if ((sc & BD_ENET_RX_LAST) == 0) | ||
498 | printk(KERN_WARNING DRV_MODULE_NAME | ||
499 | ": %s rcv is not +last\n", | ||
500 | dev->name); | ||
501 | |||
502 | /* | ||
503 | * Check for errors. | ||
504 | */ | ||
505 | if (sc & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_CL | | ||
506 | BD_ENET_RX_NO | BD_ENET_RX_CR | BD_ENET_RX_OV)) { | ||
507 | fep->stats.rx_errors++; | ||
508 | /* Frame too long or too short. */ | ||
509 | if (sc & (BD_ENET_RX_LG | BD_ENET_RX_SH)) | ||
510 | fep->stats.rx_length_errors++; | ||
511 | /* Frame alignment */ | ||
512 | if (sc & (BD_ENET_RX_NO | BD_ENET_RX_CL)) | ||
513 | fep->stats.rx_frame_errors++; | ||
514 | /* CRC Error */ | ||
515 | if (sc & BD_ENET_RX_CR) | ||
516 | fep->stats.rx_crc_errors++; | ||
517 | /* FIFO overrun */ | ||
518 | if (sc & BD_ENET_RX_OV) | ||
519 | fep->stats.rx_crc_errors++; | ||
520 | |||
521 | skbn = fep->rx_skbuff[curidx]; | ||
522 | BUG_ON(skbn == NULL); | ||
523 | |||
524 | } else { | ||
525 | skb = fep->rx_skbuff[curidx]; | ||
526 | BUG_ON(skb == NULL); | ||
527 | |||
528 | /* | ||
529 | * Process the incoming frame. | ||
530 | */ | ||
531 | fep->stats.rx_packets++; | ||
532 | pkt_len = CBDR_DATLEN(bdp) - 4; /* remove CRC */ | ||
533 | fep->stats.rx_bytes += pkt_len + 4; | ||
534 | |||
535 | if (pkt_len <= fpi->rx_copybreak) { | ||
536 | /* +2 to make IP header L1 cache aligned */ | ||
537 | skbn = dev_alloc_skb(pkt_len + 2); | ||
538 | if (skbn != NULL) { | ||
539 | skb_reserve(skbn, 2); /* align IP header */ | ||
540 | skb_copy_from_linear_data(skb, | ||
541 | skbn->data, | ||
542 | pkt_len); | ||
543 | /* swap */ | ||
544 | skbt = skb; | ||
545 | skb = skbn; | ||
546 | skbn = skbt; | ||
547 | } | ||
548 | } else | ||
549 | skbn = dev_alloc_skb(ENET_RX_FRSIZE); | ||
550 | |||
551 | if (skbn != NULL) { | ||
552 | skb_put(skb, pkt_len); /* Make room */ | ||
553 | skb->protocol = eth_type_trans(skb, dev); | ||
554 | received++; | ||
555 | if (!fpi->use_napi) | ||
556 | netif_rx(skb); | ||
557 | else | ||
558 | netif_receive_skb(skb); | ||
559 | } else { | ||
560 | printk(KERN_WARNING DRV_MODULE_NAME | ||
561 | ": %s Memory squeeze, dropping packet.\n", | ||
562 | dev->name); | ||
563 | fep->stats.rx_dropped++; | ||
564 | skbn = skb; | ||
565 | } | ||
566 | } | ||
567 | |||
568 | fep->rx_skbuff[curidx] = skbn; | ||
569 | CBDW_BUFADDR(bdp, dma_map_single(NULL, skbn->data, | ||
570 | L1_CACHE_ALIGN(PKT_MAXBUF_SIZE), | ||
571 | DMA_FROM_DEVICE)); | ||
572 | CBDW_DATLEN(bdp, 0); | ||
573 | CBDW_SC(bdp, (sc & ~BD_ENET_RX_STATS) | BD_ENET_RX_EMPTY); | ||
574 | |||
575 | /* | ||
576 | * Update BD pointer to next entry. | ||
577 | */ | ||
578 | if ((sc & BD_ENET_RX_WRAP) == 0) | ||
579 | bdp++; | ||
580 | else | ||
581 | bdp = fep->rx_bd_base; | ||
582 | |||
583 | /* | ||
584 | * Doing this here will keep the FEC running while we process | ||
585 | * incoming frames. On a heavily loaded network, we should be | ||
586 | * able to keep up at the expense of system resources. | ||
587 | */ | ||
588 | FW(fecp, r_des_active, 0x01000000); | ||
589 | |||
590 | if (received >= budget) | ||
591 | break; | ||
592 | |||
593 | } | ||
594 | |||
595 | fep->cur_rx = bdp; | ||
596 | |||
597 | if (fpi->use_napi) { | ||
598 | if (received < budget) { | ||
599 | netif_rx_complete(dev, &fep->napi); | ||
600 | |||
601 | /* enable RX interrupt bits */ | ||
602 | FS(fecp, imask, FEC_ENET_RXF | FEC_ENET_RXB); | ||
603 | } | ||
604 | } | ||
605 | |||
606 | return received; | ||
607 | } | ||
608 | |||
609 | static void fec_enet_tx(struct net_device *dev) | ||
610 | { | ||
611 | struct fec_enet_private *fep = netdev_priv(dev); | ||
612 | cbd_t *bdp; | ||
613 | struct sk_buff *skb; | ||
614 | int dirtyidx, do_wake; | ||
615 | __u16 sc; | ||
616 | |||
617 | spin_lock(&fep->lock); | ||
618 | bdp = fep->dirty_tx; | ||
619 | |||
620 | do_wake = 0; | ||
621 | while (((sc = CBDR_SC(bdp)) & BD_ENET_TX_READY) == 0) { | ||
622 | |||
623 | dirtyidx = bdp - fep->tx_bd_base; | ||
624 | |||
625 | if (fep->tx_free == fep->tx_ring) | ||
626 | break; | ||
627 | |||
628 | skb = fep->tx_skbuff[dirtyidx]; | ||
629 | |||
630 | /* | ||
631 | * Check for errors. | ||
632 | */ | ||
633 | if (sc & (BD_ENET_TX_HB | BD_ENET_TX_LC | | ||
634 | BD_ENET_TX_RL | BD_ENET_TX_UN | BD_ENET_TX_CSL)) { | ||
635 | fep->stats.tx_errors++; | ||
636 | if (sc & BD_ENET_TX_HB) /* No heartbeat */ | ||
637 | fep->stats.tx_heartbeat_errors++; | ||
638 | if (sc & BD_ENET_TX_LC) /* Late collision */ | ||
639 | fep->stats.tx_window_errors++; | ||
640 | if (sc & BD_ENET_TX_RL) /* Retrans limit */ | ||
641 | fep->stats.tx_aborted_errors++; | ||
642 | if (sc & BD_ENET_TX_UN) /* Underrun */ | ||
643 | fep->stats.tx_fifo_errors++; | ||
644 | if (sc & BD_ENET_TX_CSL) /* Carrier lost */ | ||
645 | fep->stats.tx_carrier_errors++; | ||
646 | } else | ||
647 | fep->stats.tx_packets++; | ||
648 | |||
649 | if (sc & BD_ENET_TX_READY) | ||
650 | printk(KERN_WARNING DRV_MODULE_NAME | ||
651 | ": %s HEY! Enet xmit interrupt and TX_READY.\n", | ||
652 | dev->name); | ||
653 | |||
654 | /* | ||
655 | * Deferred means some collisions occurred during transmit, | ||
656 | * but we eventually sent the packet OK. | ||
657 | */ | ||
658 | if (sc & BD_ENET_TX_DEF) | ||
659 | fep->stats.collisions++; | ||
660 | |||
661 | /* | ||
662 | * Free the sk buffer associated with this last transmit. | ||
663 | */ | ||
664 | dev_kfree_skb_irq(skb); | ||
665 | fep->tx_skbuff[dirtyidx] = NULL; | ||
666 | |||
667 | /* | ||
668 | * Update pointer to next buffer descriptor to be transmitted. | ||
669 | */ | ||
670 | if ((sc & BD_ENET_TX_WRAP) == 0) | ||
671 | bdp++; | ||
672 | else | ||
673 | bdp = fep->tx_bd_base; | ||
674 | |||
675 | /* | ||
676 | * Since we have freed up a buffer, the ring is no longer | ||
677 | * full. | ||
678 | */ | ||
679 | if (!fep->tx_free++) | ||
680 | do_wake = 1; | ||
681 | } | ||
682 | |||
683 | fep->dirty_tx = bdp; | ||
684 | |||
685 | spin_unlock(&fep->lock); | ||
686 | |||
687 | if (do_wake && netif_queue_stopped(dev)) | ||
688 | netif_wake_queue(dev); | ||
689 | } | ||
690 | |||
691 | /* | ||
692 | * The interrupt handler. | ||
693 | * This is called from the MPC core interrupt. | ||
694 | */ | ||
695 | static irqreturn_t | ||
696 | fec_enet_interrupt(int irq, void *dev_id) | ||
697 | { | ||
698 | struct net_device *dev = dev_id; | ||
699 | struct fec_enet_private *fep; | ||
700 | const struct fec_platform_info *fpi; | ||
701 | fec_t *fecp; | ||
702 | __u32 int_events; | ||
703 | __u32 int_events_napi; | ||
704 | |||
705 | if (unlikely(dev == NULL)) | ||
706 | return IRQ_NONE; | ||
707 | |||
708 | fep = netdev_priv(dev); | ||
709 | fecp = fep->fecp; | ||
710 | fpi = fep->fpi; | ||
711 | |||
712 | /* | ||
713 | * Get the interrupt events that caused us to be here. | ||
714 | */ | ||
715 | while ((int_events = FR(fecp, ievent) & FR(fecp, imask)) != 0) { | ||
716 | |||
717 | if (!fpi->use_napi) | ||
718 | FW(fecp, ievent, int_events); | ||
719 | else { | ||
720 | int_events_napi = int_events & ~(FEC_ENET_RXF | FEC_ENET_RXB); | ||
721 | FW(fecp, ievent, int_events_napi); | ||
722 | } | ||
723 | |||
724 | if ((int_events & (FEC_ENET_HBERR | FEC_ENET_BABR | | ||
725 | FEC_ENET_BABT | FEC_ENET_EBERR)) != 0) | ||
726 | printk(KERN_WARNING DRV_MODULE_NAME | ||
727 | ": %s FEC ERROR(s) 0x%x\n", | ||
728 | dev->name, int_events); | ||
729 | |||
730 | if ((int_events & FEC_ENET_RXF) != 0) { | ||
731 | if (!fpi->use_napi) | ||
732 | fec_enet_rx_common(fep, dev, ~0); | ||
733 | else { | ||
734 | if (netif_rx_schedule_prep(dev, &fep->napi)) { | ||
735 | /* disable rx interrupts */ | ||
736 | FC(fecp, imask, FEC_ENET_RXF | FEC_ENET_RXB); | ||
737 | __netif_rx_schedule(dev, &fep->napi); | ||
738 | } else { | ||
739 | printk(KERN_ERR DRV_MODULE_NAME | ||
740 | ": %s driver bug! interrupt while in poll!\n", | ||
741 | dev->name); | ||
742 | FC(fecp, imask, FEC_ENET_RXF | FEC_ENET_RXB); | ||
743 | } | ||
744 | } | ||
745 | } | ||
746 | |||
747 | if ((int_events & FEC_ENET_TXF) != 0) | ||
748 | fec_enet_tx(dev); | ||
749 | } | ||
750 | |||
751 | return IRQ_HANDLED; | ||
752 | } | ||
753 | |||
754 | /* This interrupt occurs when the PHY detects a link change. */ | ||
755 | static irqreturn_t | ||
756 | fec_mii_link_interrupt(int irq, void *dev_id) | ||
757 | { | ||
758 | struct net_device *dev = dev_id; | ||
759 | struct fec_enet_private *fep; | ||
760 | const struct fec_platform_info *fpi; | ||
761 | |||
762 | if (unlikely(dev == NULL)) | ||
763 | return IRQ_NONE; | ||
764 | |||
765 | fep = netdev_priv(dev); | ||
766 | fpi = fep->fpi; | ||
767 | |||
768 | if (!fpi->use_mdio) | ||
769 | return IRQ_NONE; | ||
770 | |||
771 | /* | ||
772 | * Acknowledge the interrupt if possible. If we have not | ||
773 | * found the PHY yet we can't process or acknowledge the | ||
774 | * interrupt now. Instead we ignore this interrupt for now, | ||
775 | * which we can do since it is edge triggered. It will be | ||
776 | * acknowledged later by fec_enet_open(). | ||
777 | */ | ||
778 | if (!fep->phy) | ||
779 | return IRQ_NONE; | ||
780 | |||
781 | fec_mii_ack_int(dev); | ||
782 | fec_mii_link_status_change_check(dev, 0); | ||
783 | |||
784 | return IRQ_HANDLED; | ||
785 | } | ||
786 | |||
787 | |||
788 | /**********************************************************************************/ | ||
789 | |||
790 | static int fec_enet_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
791 | { | ||
792 | struct fec_enet_private *fep = netdev_priv(dev); | ||
793 | fec_t *fecp = fep->fecp; | ||
794 | cbd_t *bdp; | ||
795 | int curidx; | ||
796 | unsigned long flags; | ||
797 | |||
798 | spin_lock_irqsave(&fep->tx_lock, flags); | ||
799 | |||
800 | /* | ||
801 | * Fill in a Tx ring entry | ||
802 | */ | ||
803 | bdp = fep->cur_tx; | ||
804 | |||
805 | if (!fep->tx_free || (CBDR_SC(bdp) & BD_ENET_TX_READY)) { | ||
806 | netif_stop_queue(dev); | ||
807 | spin_unlock_irqrestore(&fep->tx_lock, flags); | ||
808 | |||
809 | /* | ||
810 | * Ooops. All transmit buffers are full. Bail out. | ||
811 | * This should not happen, since the tx queue should be stopped. | ||
812 | */ | ||
813 | printk(KERN_WARNING DRV_MODULE_NAME | ||
814 | ": %s tx queue full!.\n", dev->name); | ||
815 | return 1; | ||
816 | } | ||
817 | |||
818 | curidx = bdp - fep->tx_bd_base; | ||
819 | /* | ||
820 | * Clear all of the status flags. | ||
821 | */ | ||
822 | CBDC_SC(bdp, BD_ENET_TX_STATS); | ||
823 | |||
824 | /* | ||
825 | * Save skb pointer. | ||
826 | */ | ||
827 | fep->tx_skbuff[curidx] = skb; | ||
828 | |||
829 | fep->stats.tx_bytes += skb->len; | ||
830 | |||
831 | /* | ||
832 | * Push the data cache so the CPM does not get stale memory data. | ||
833 | */ | ||
834 | CBDW_BUFADDR(bdp, dma_map_single(NULL, skb->data, | ||
835 | skb->len, DMA_TO_DEVICE)); | ||
836 | CBDW_DATLEN(bdp, skb->len); | ||
837 | |||
838 | dev->trans_start = jiffies; | ||
839 | |||
840 | /* | ||
841 | * If this was the last BD in the ring, start at the beginning again. | ||
842 | */ | ||
843 | if ((CBDR_SC(bdp) & BD_ENET_TX_WRAP) == 0) | ||
844 | fep->cur_tx++; | ||
845 | else | ||
846 | fep->cur_tx = fep->tx_bd_base; | ||
847 | |||
848 | if (!--fep->tx_free) | ||
849 | netif_stop_queue(dev); | ||
850 | |||
851 | /* | ||
852 | * Trigger transmission start | ||
853 | */ | ||
854 | CBDS_SC(bdp, BD_ENET_TX_READY | BD_ENET_TX_INTR | | ||
855 | BD_ENET_TX_LAST | BD_ENET_TX_TC); | ||
856 | FW(fecp, x_des_active, 0x01000000); | ||
857 | |||
858 | spin_unlock_irqrestore(&fep->tx_lock, flags); | ||
859 | |||
860 | return 0; | ||
861 | } | ||
862 | |||
863 | static void fec_timeout(struct net_device *dev) | ||
864 | { | ||
865 | struct fec_enet_private *fep = netdev_priv(dev); | ||
866 | |||
867 | fep->stats.tx_errors++; | ||
868 | |||
869 | if (fep->tx_free) | ||
870 | netif_wake_queue(dev); | ||
871 | |||
872 | /* check link status again */ | ||
873 | fec_mii_link_status_change_check(dev, 0); | ||
874 | } | ||
875 | |||
876 | static int fec_enet_open(struct net_device *dev) | ||
877 | { | ||
878 | struct fec_enet_private *fep = netdev_priv(dev); | ||
879 | const struct fec_platform_info *fpi = fep->fpi; | ||
880 | unsigned long flags; | ||
881 | |||
882 | napi_enable(&fep->napi); | ||
883 | |||
884 | /* Install our interrupt handler. */ | ||
885 | if (request_irq(fpi->fec_irq, fec_enet_interrupt, 0, "fec", dev) != 0) { | ||
886 | printk(KERN_ERR DRV_MODULE_NAME | ||
887 | ": %s Could not allocate FEC IRQ!", dev->name); | ||
888 | napi_disable(&fep->napi); | ||
889 | return -EINVAL; | ||
890 | } | ||
891 | |||
892 | /* Install our phy interrupt handler */ | ||
893 | if (fpi->phy_irq != -1 && | ||
894 | request_irq(fpi->phy_irq, fec_mii_link_interrupt, 0, "fec-phy", | ||
895 | dev) != 0) { | ||
896 | printk(KERN_ERR DRV_MODULE_NAME | ||
897 | ": %s Could not allocate PHY IRQ!", dev->name); | ||
898 | free_irq(fpi->fec_irq, dev); | ||
899 | napi_disable(&fep->napi); | ||
900 | return -EINVAL; | ||
901 | } | ||
902 | |||
903 | if (fpi->use_mdio) { | ||
904 | fec_mii_startup(dev); | ||
905 | netif_carrier_off(dev); | ||
906 | fec_mii_link_status_change_check(dev, 1); | ||
907 | } else { | ||
908 | spin_lock_irqsave(&fep->lock, flags); | ||
909 | fec_restart(dev, 1, 100); /* XXX this sucks */ | ||
910 | spin_unlock_irqrestore(&fep->lock, flags); | ||
911 | |||
912 | netif_carrier_on(dev); | ||
913 | netif_start_queue(dev); | ||
914 | } | ||
915 | return 0; | ||
916 | } | ||
917 | |||
918 | static int fec_enet_close(struct net_device *dev) | ||
919 | { | ||
920 | struct fec_enet_private *fep = netdev_priv(dev); | ||
921 | const struct fec_platform_info *fpi = fep->fpi; | ||
922 | unsigned long flags; | ||
923 | |||
924 | netif_stop_queue(dev); | ||
925 | napi_disable(&fep->napi); | ||
926 | netif_carrier_off(dev); | ||
927 | |||
928 | if (fpi->use_mdio) | ||
929 | fec_mii_shutdown(dev); | ||
930 | |||
931 | spin_lock_irqsave(&fep->lock, flags); | ||
932 | fec_stop(dev); | ||
933 | spin_unlock_irqrestore(&fep->lock, flags); | ||
934 | |||
935 | /* release any irqs */ | ||
936 | if (fpi->phy_irq != -1) | ||
937 | free_irq(fpi->phy_irq, dev); | ||
938 | free_irq(fpi->fec_irq, dev); | ||
939 | |||
940 | return 0; | ||
941 | } | ||
942 | |||
943 | static struct net_device_stats *fec_enet_get_stats(struct net_device *dev) | ||
944 | { | ||
945 | struct fec_enet_private *fep = netdev_priv(dev); | ||
946 | return &fep->stats; | ||
947 | } | ||
948 | |||
949 | static int fec_enet_poll(struct napi_struct *napi, int budget) | ||
950 | { | ||
951 | struct fec_enet_private *fep = container_of(napi, struct fec_enet_private, napi); | ||
952 | struct net_device *dev = fep->dev; | ||
953 | |||
954 | return fec_enet_rx_common(fep, dev, budget); | ||
955 | } | ||
956 | |||
957 | /*************************************************************************/ | ||
958 | |||
959 | static void fec_get_drvinfo(struct net_device *dev, | ||
960 | struct ethtool_drvinfo *info) | ||
961 | { | ||
962 | strcpy(info->driver, DRV_MODULE_NAME); | ||
963 | strcpy(info->version, DRV_MODULE_VERSION); | ||
964 | } | ||
965 | |||
966 | static int fec_get_regs_len(struct net_device *dev) | ||
967 | { | ||
968 | return sizeof(fec_t); | ||
969 | } | ||
970 | |||
971 | static void fec_get_regs(struct net_device *dev, struct ethtool_regs *regs, | ||
972 | void *p) | ||
973 | { | ||
974 | struct fec_enet_private *fep = netdev_priv(dev); | ||
975 | unsigned long flags; | ||
976 | |||
977 | if (regs->len < sizeof(fec_t)) | ||
978 | return; | ||
979 | |||
980 | regs->version = 0; | ||
981 | spin_lock_irqsave(&fep->lock, flags); | ||
982 | memcpy_fromio(p, fep->fecp, sizeof(fec_t)); | ||
983 | spin_unlock_irqrestore(&fep->lock, flags); | ||
984 | } | ||
985 | |||
986 | static int fec_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | ||
987 | { | ||
988 | struct fec_enet_private *fep = netdev_priv(dev); | ||
989 | unsigned long flags; | ||
990 | int rc; | ||
991 | |||
992 | spin_lock_irqsave(&fep->lock, flags); | ||
993 | rc = mii_ethtool_gset(&fep->mii_if, cmd); | ||
994 | spin_unlock_irqrestore(&fep->lock, flags); | ||
995 | |||
996 | return rc; | ||
997 | } | ||
998 | |||
999 | static int fec_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) | ||
1000 | { | ||
1001 | struct fec_enet_private *fep = netdev_priv(dev); | ||
1002 | unsigned long flags; | ||
1003 | int rc; | ||
1004 | |||
1005 | spin_lock_irqsave(&fep->lock, flags); | ||
1006 | rc = mii_ethtool_sset(&fep->mii_if, cmd); | ||
1007 | spin_unlock_irqrestore(&fep->lock, flags); | ||
1008 | |||
1009 | return rc; | ||
1010 | } | ||
1011 | |||
1012 | static int fec_nway_reset(struct net_device *dev) | ||
1013 | { | ||
1014 | struct fec_enet_private *fep = netdev_priv(dev); | ||
1015 | return mii_nway_restart(&fep->mii_if); | ||
1016 | } | ||
1017 | |||
1018 | static __u32 fec_get_msglevel(struct net_device *dev) | ||
1019 | { | ||
1020 | struct fec_enet_private *fep = netdev_priv(dev); | ||
1021 | return fep->msg_enable; | ||
1022 | } | ||
1023 | |||
1024 | static void fec_set_msglevel(struct net_device *dev, __u32 value) | ||
1025 | { | ||
1026 | struct fec_enet_private *fep = netdev_priv(dev); | ||
1027 | fep->msg_enable = value; | ||
1028 | } | ||
1029 | |||
1030 | static const struct ethtool_ops fec_ethtool_ops = { | ||
1031 | .get_drvinfo = fec_get_drvinfo, | ||
1032 | .get_regs_len = fec_get_regs_len, | ||
1033 | .get_settings = fec_get_settings, | ||
1034 | .set_settings = fec_set_settings, | ||
1035 | .nway_reset = fec_nway_reset, | ||
1036 | .get_link = ethtool_op_get_link, | ||
1037 | .get_msglevel = fec_get_msglevel, | ||
1038 | .set_msglevel = fec_set_msglevel, | ||
1039 | .set_tx_csum = ethtool_op_set_tx_csum, /* local! */ | ||
1040 | .set_sg = ethtool_op_set_sg, | ||
1041 | .get_regs = fec_get_regs, | ||
1042 | }; | ||
1043 | |||
1044 | static int fec_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | ||
1045 | { | ||
1046 | struct fec_enet_private *fep = netdev_priv(dev); | ||
1047 | struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&rq->ifr_data; | ||
1048 | unsigned long flags; | ||
1049 | int rc; | ||
1050 | |||
1051 | if (!netif_running(dev)) | ||
1052 | return -EINVAL; | ||
1053 | |||
1054 | spin_lock_irqsave(&fep->lock, flags); | ||
1055 | rc = generic_mii_ioctl(&fep->mii_if, mii, cmd, NULL); | ||
1056 | spin_unlock_irqrestore(&fep->lock, flags); | ||
1057 | return rc; | ||
1058 | } | ||
1059 | |||
1060 | int fec_8xx_init_one(const struct fec_platform_info *fpi, | ||
1061 | struct net_device **devp) | ||
1062 | { | ||
1063 | immap_t *immap = (immap_t *) IMAP_ADDR; | ||
1064 | static int fec_8xx_version_printed = 0; | ||
1065 | struct net_device *dev = NULL; | ||
1066 | struct fec_enet_private *fep = NULL; | ||
1067 | fec_t *fecp = NULL; | ||
1068 | int i; | ||
1069 | int err = 0; | ||
1070 | int registered = 0; | ||
1071 | __u32 siel; | ||
1072 | |||
1073 | *devp = NULL; | ||
1074 | |||
1075 | switch (fpi->fec_no) { | ||
1076 | case 0: | ||
1077 | fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec; | ||
1078 | break; | ||
1079 | #ifdef CONFIG_DUET | ||
1080 | case 1: | ||
1081 | fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec2; | ||
1082 | break; | ||
1083 | #endif | ||
1084 | default: | ||
1085 | return -EINVAL; | ||
1086 | } | ||
1087 | |||
1088 | if (fec_8xx_version_printed++ == 0) | ||
1089 | printk(KERN_INFO "%s", version); | ||
1090 | |||
1091 | i = sizeof(*fep) + (sizeof(struct sk_buff **) * | ||
1092 | (fpi->rx_ring + fpi->tx_ring)); | ||
1093 | |||
1094 | dev = alloc_etherdev(i); | ||
1095 | if (!dev) { | ||
1096 | err = -ENOMEM; | ||
1097 | goto err; | ||
1098 | } | ||
1099 | |||
1100 | fep = netdev_priv(dev); | ||
1101 | fep->dev = dev; | ||
1102 | |||
1103 | /* partial reset of FEC */ | ||
1104 | fec_whack_reset(fecp); | ||
1105 | |||
1106 | /* point rx_skbuff, tx_skbuff */ | ||
1107 | fep->rx_skbuff = (struct sk_buff **)&fep[1]; | ||
1108 | fep->tx_skbuff = fep->rx_skbuff + fpi->rx_ring; | ||
1109 | |||
1110 | fep->fecp = fecp; | ||
1111 | fep->fpi = fpi; | ||
1112 | |||
1113 | /* init locks */ | ||
1114 | spin_lock_init(&fep->lock); | ||
1115 | spin_lock_init(&fep->tx_lock); | ||
1116 | |||
1117 | /* | ||
1118 | * Set the Ethernet address. | ||
1119 | */ | ||
1120 | for (i = 0; i < 6; i++) | ||
1121 | dev->dev_addr[i] = fpi->macaddr[i]; | ||
1122 | |||
1123 | fep->ring_base = dma_alloc_coherent(NULL, | ||
1124 | (fpi->tx_ring + fpi->rx_ring) * | ||
1125 | sizeof(cbd_t), &fep->ring_mem_addr, | ||
1126 | GFP_KERNEL); | ||
1127 | if (fep->ring_base == NULL) { | ||
1128 | printk(KERN_ERR DRV_MODULE_NAME | ||
1129 | ": %s dma alloc failed.\n", dev->name); | ||
1130 | err = -ENOMEM; | ||
1131 | goto err; | ||
1132 | } | ||
1133 | |||
1134 | /* | ||
1135 | * Set receive and transmit descriptor base. | ||
1136 | */ | ||
1137 | fep->rx_bd_base = fep->ring_base; | ||
1138 | fep->tx_bd_base = fep->rx_bd_base + fpi->rx_ring; | ||
1139 | |||
1140 | /* initialize ring size variables */ | ||
1141 | fep->tx_ring = fpi->tx_ring; | ||
1142 | fep->rx_ring = fpi->rx_ring; | ||
1143 | |||
1144 | /* SIU interrupt */ | ||
1145 | if (fpi->phy_irq != -1 && | ||
1146 | (fpi->phy_irq >= SIU_IRQ0 && fpi->phy_irq < SIU_LEVEL7)) { | ||
1147 | |||
1148 | siel = in_be32(&immap->im_siu_conf.sc_siel); | ||
1149 | if ((fpi->phy_irq & 1) == 0) | ||
1150 | siel |= (0x80000000 >> fpi->phy_irq); | ||
1151 | else | ||
1152 | siel &= ~(0x80000000 >> (fpi->phy_irq & ~1)); | ||
1153 | out_be32(&immap->im_siu_conf.sc_siel, siel); | ||
1154 | } | ||
1155 | |||
1156 | /* | ||
1157 | * The FEC Ethernet specific entries in the device structure. | ||
1158 | */ | ||
1159 | dev->open = fec_enet_open; | ||
1160 | dev->hard_start_xmit = fec_enet_start_xmit; | ||
1161 | dev->tx_timeout = fec_timeout; | ||
1162 | dev->watchdog_timeo = TX_TIMEOUT; | ||
1163 | dev->stop = fec_enet_close; | ||
1164 | dev->get_stats = fec_enet_get_stats; | ||
1165 | dev->set_multicast_list = fec_set_multicast_list; | ||
1166 | dev->set_mac_address = fec_set_mac_address; | ||
1167 | netif_napi_add(dev, &fec->napi, | ||
1168 | fec_enet_poll, fpi->napi_weight); | ||
1169 | |||
1170 | dev->ethtool_ops = &fec_ethtool_ops; | ||
1171 | dev->do_ioctl = fec_ioctl; | ||
1172 | |||
1173 | fep->fec_phy_speed = | ||
1174 | ((((fpi->sys_clk + 4999999) / 2500000) / 2) & 0x3F) << 1; | ||
1175 | |||
1176 | init_timer(&fep->phy_timer_list); | ||
1177 | |||
1178 | /* partial reset of FEC so that only MII works */ | ||
1179 | FW(fecp, mii_speed, fep->fec_phy_speed); | ||
1180 | FW(fecp, ievent, 0xffc0); | ||
1181 | FW(fecp, ivec, (fpi->fec_irq / 2) << 29); | ||
1182 | FW(fecp, imask, 0); | ||
1183 | FW(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */ | ||
1184 | FW(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN); | ||
1185 | |||
1186 | netif_carrier_off(dev); | ||
1187 | |||
1188 | err = register_netdev(dev); | ||
1189 | if (err != 0) | ||
1190 | goto err; | ||
1191 | registered = 1; | ||
1192 | |||
1193 | if (fpi->use_mdio) { | ||
1194 | fep->mii_if.dev = dev; | ||
1195 | fep->mii_if.mdio_read = fec_mii_read; | ||
1196 | fep->mii_if.mdio_write = fec_mii_write; | ||
1197 | fep->mii_if.phy_id_mask = 0x1f; | ||
1198 | fep->mii_if.reg_num_mask = 0x1f; | ||
1199 | fep->mii_if.phy_id = fec_mii_phy_id_detect(dev); | ||
1200 | } | ||
1201 | |||
1202 | *devp = dev; | ||
1203 | |||
1204 | return 0; | ||
1205 | |||
1206 | err: | ||
1207 | if (dev != NULL) { | ||
1208 | if (fecp != NULL) | ||
1209 | fec_whack_reset(fecp); | ||
1210 | |||
1211 | if (registered) | ||
1212 | unregister_netdev(dev); | ||
1213 | |||
1214 | if (fep != NULL) { | ||
1215 | if (fep->ring_base) | ||
1216 | dma_free_coherent(NULL, | ||
1217 | (fpi->tx_ring + | ||
1218 | fpi->rx_ring) * | ||
1219 | sizeof(cbd_t), fep->ring_base, | ||
1220 | fep->ring_mem_addr); | ||
1221 | } | ||
1222 | free_netdev(dev); | ||
1223 | } | ||
1224 | return err; | ||
1225 | } | ||
1226 | |||
1227 | int fec_8xx_cleanup_one(struct net_device *dev) | ||
1228 | { | ||
1229 | struct fec_enet_private *fep = netdev_priv(dev); | ||
1230 | fec_t *fecp = fep->fecp; | ||
1231 | const struct fec_platform_info *fpi = fep->fpi; | ||
1232 | |||
1233 | fec_whack_reset(fecp); | ||
1234 | |||
1235 | unregister_netdev(dev); | ||
1236 | |||
1237 | dma_free_coherent(NULL, (fpi->tx_ring + fpi->rx_ring) * sizeof(cbd_t), | ||
1238 | fep->ring_base, fep->ring_mem_addr); | ||
1239 | |||
1240 | free_netdev(dev); | ||
1241 | |||
1242 | return 0; | ||
1243 | } | ||
1244 | |||
1245 | /**************************************************************************************/ | ||
1246 | /**************************************************************************************/ | ||
1247 | /**************************************************************************************/ | ||
1248 | |||
1249 | static int __init fec_8xx_init(void) | ||
1250 | { | ||
1251 | return fec_8xx_platform_init(); | ||
1252 | } | ||
1253 | |||
1254 | static void __exit fec_8xx_cleanup(void) | ||
1255 | { | ||
1256 | fec_8xx_platform_cleanup(); | ||
1257 | } | ||
1258 | |||
1259 | /**************************************************************************************/ | ||
1260 | /**************************************************************************************/ | ||
1261 | /**************************************************************************************/ | ||
1262 | |||
1263 | module_init(fec_8xx_init); | ||
1264 | module_exit(fec_8xx_cleanup); | ||
diff --git a/drivers/net/fec_8xx/fec_mii.c b/drivers/net/fec_8xx/fec_mii.c deleted file mode 100644 index 3b6ca29d31f2..000000000000 --- a/drivers/net/fec_8xx/fec_mii.c +++ /dev/null | |||
@@ -1,418 +0,0 @@ | |||
1 | /* | ||
2 | * Fast Ethernet Controller (FEC) driver for Motorola MPC8xx. | ||
3 | * | ||
4 | * Copyright (c) 2003 Intracom S.A. | ||
5 | * by Pantelis Antoniou <panto@intracom.gr> | ||
6 | * | ||
7 | * Heavily based on original FEC driver by Dan Malek <dan@embeddededge.com> | ||
8 | * and modifications by Joakim Tjernlund <joakim.tjernlund@lumentis.se> | ||
9 | * | ||
10 | * Released under the GPL | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/string.h> | ||
17 | #include <linux/ptrace.h> | ||
18 | #include <linux/errno.h> | ||
19 | #include <linux/ioport.h> | ||
20 | #include <linux/slab.h> | ||
21 | #include <linux/interrupt.h> | ||
22 | #include <linux/init.h> | ||
23 | #include <linux/delay.h> | ||
24 | #include <linux/netdevice.h> | ||
25 | #include <linux/etherdevice.h> | ||
26 | #include <linux/skbuff.h> | ||
27 | #include <linux/spinlock.h> | ||
28 | #include <linux/mii.h> | ||
29 | #include <linux/ethtool.h> | ||
30 | #include <linux/bitops.h> | ||
31 | |||
32 | #include <asm/8xx_immap.h> | ||
33 | #include <asm/pgtable.h> | ||
34 | #include <asm/mpc8xx.h> | ||
35 | #include <asm/irq.h> | ||
36 | #include <asm/uaccess.h> | ||
37 | #include <asm/cpm1.h> | ||
38 | |||
39 | /*************************************************/ | ||
40 | |||
41 | #include "fec_8xx.h" | ||
42 | |||
43 | /*************************************************/ | ||
44 | |||
45 | /* Make MII read/write commands for the FEC. | ||
46 | */ | ||
47 | #define mk_mii_read(REG) (0x60020000 | ((REG & 0x1f) << 18)) | ||
48 | #define mk_mii_write(REG, VAL) (0x50020000 | ((REG & 0x1f) << 18) | (VAL & 0xffff)) | ||
49 | #define mk_mii_end 0 | ||
50 | |||
51 | /*************************************************/ | ||
52 | |||
53 | /* XXX both FECs use the MII interface of FEC1 */ | ||
54 | static DEFINE_SPINLOCK(fec_mii_lock); | ||
55 | |||
56 | #define FEC_MII_LOOPS 10000 | ||
57 | |||
58 | int fec_mii_read(struct net_device *dev, int phy_id, int location) | ||
59 | { | ||
60 | struct fec_enet_private *fep = netdev_priv(dev); | ||
61 | fec_t *fecp; | ||
62 | int i, ret = -1; | ||
63 | unsigned long flags; | ||
64 | |||
65 | /* XXX MII interface is only connected to FEC1 */ | ||
66 | fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec; | ||
67 | |||
68 | spin_lock_irqsave(&fec_mii_lock, flags); | ||
69 | |||
70 | if ((FR(fecp, r_cntrl) & FEC_RCNTRL_MII_MODE) == 0) { | ||
71 | FS(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */ | ||
72 | FS(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN); | ||
73 | FW(fecp, ievent, FEC_ENET_MII); | ||
74 | } | ||
75 | |||
76 | /* Add PHY address to register command. */ | ||
77 | FW(fecp, mii_speed, fep->fec_phy_speed); | ||
78 | FW(fecp, mii_data, (phy_id << 23) | mk_mii_read(location)); | ||
79 | |||
80 | for (i = 0; i < FEC_MII_LOOPS; i++) | ||
81 | if ((FR(fecp, ievent) & FEC_ENET_MII) != 0) | ||
82 | break; | ||
83 | |||
84 | if (i < FEC_MII_LOOPS) { | ||
85 | FW(fecp, ievent, FEC_ENET_MII); | ||
86 | ret = FR(fecp, mii_data) & 0xffff; | ||
87 | } | ||
88 | |||
89 | spin_unlock_irqrestore(&fec_mii_lock, flags); | ||
90 | |||
91 | return ret; | ||
92 | } | ||
93 | |||
94 | void fec_mii_write(struct net_device *dev, int phy_id, int location, int value) | ||
95 | { | ||
96 | struct fec_enet_private *fep = netdev_priv(dev); | ||
97 | fec_t *fecp; | ||
98 | unsigned long flags; | ||
99 | int i; | ||
100 | |||
101 | /* XXX MII interface is only connected to FEC1 */ | ||
102 | fecp = &((immap_t *) IMAP_ADDR)->im_cpm.cp_fec; | ||
103 | |||
104 | spin_lock_irqsave(&fec_mii_lock, flags); | ||
105 | |||
106 | if ((FR(fecp, r_cntrl) & FEC_RCNTRL_MII_MODE) == 0) { | ||
107 | FS(fecp, r_cntrl, FEC_RCNTRL_MII_MODE); /* MII enable */ | ||
108 | FS(fecp, ecntrl, FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN); | ||
109 | FW(fecp, ievent, FEC_ENET_MII); | ||
110 | } | ||
111 | |||
112 | /* Add PHY address to register command. */ | ||
113 | FW(fecp, mii_speed, fep->fec_phy_speed); /* always adapt mii speed */ | ||
114 | FW(fecp, mii_data, (phy_id << 23) | mk_mii_write(location, value)); | ||
115 | |||
116 | for (i = 0; i < FEC_MII_LOOPS; i++) | ||
117 | if ((FR(fecp, ievent) & FEC_ENET_MII) != 0) | ||
118 | break; | ||
119 | |||
120 | if (i < FEC_MII_LOOPS) | ||
121 | FW(fecp, ievent, FEC_ENET_MII); | ||
122 | |||
123 | spin_unlock_irqrestore(&fec_mii_lock, flags); | ||
124 | } | ||
125 | |||
126 | /*************************************************/ | ||
127 | |||
128 | #ifdef CONFIG_FEC_8XX_GENERIC_PHY | ||
129 | |||
130 | /* | ||
131 | * Generic PHY support. | ||
132 | * Should work for all PHYs, but link change is detected by polling | ||
133 | */ | ||
134 | |||
135 | static void generic_timer_callback(unsigned long data) | ||
136 | { | ||
137 | struct net_device *dev = (struct net_device *)data; | ||
138 | struct fec_enet_private *fep = netdev_priv(dev); | ||
139 | |||
140 | fep->phy_timer_list.expires = jiffies + HZ / 2; | ||
141 | |||
142 | add_timer(&fep->phy_timer_list); | ||
143 | |||
144 | fec_mii_link_status_change_check(dev, 0); | ||
145 | } | ||
146 | |||
147 | static void generic_startup(struct net_device *dev) | ||
148 | { | ||
149 | struct fec_enet_private *fep = netdev_priv(dev); | ||
150 | |||
151 | fep->phy_timer_list.expires = jiffies + HZ / 2; /* every 500ms */ | ||
152 | fep->phy_timer_list.data = (unsigned long)dev; | ||
153 | fep->phy_timer_list.function = generic_timer_callback; | ||
154 | add_timer(&fep->phy_timer_list); | ||
155 | } | ||
156 | |||
157 | static void generic_shutdown(struct net_device *dev) | ||
158 | { | ||
159 | struct fec_enet_private *fep = netdev_priv(dev); | ||
160 | |||
161 | del_timer_sync(&fep->phy_timer_list); | ||
162 | } | ||
163 | |||
164 | #endif | ||
165 | |||
166 | #ifdef CONFIG_FEC_8XX_DM9161_PHY | ||
167 | |||
168 | /* ------------------------------------------------------------------------- */ | ||
169 | /* The Davicom DM9161 is used on the NETTA board */ | ||
170 | |||
171 | /* register definitions */ | ||
172 | |||
173 | #define MII_DM9161_ACR 16 /* Aux. Config Register */ | ||
174 | #define MII_DM9161_ACSR 17 /* Aux. Config/Status Register */ | ||
175 | #define MII_DM9161_10TCSR 18 /* 10BaseT Config/Status Reg. */ | ||
176 | #define MII_DM9161_INTR 21 /* Interrupt Register */ | ||
177 | #define MII_DM9161_RECR 22 /* Receive Error Counter Reg. */ | ||
178 | #define MII_DM9161_DISCR 23 /* Disconnect Counter Register */ | ||
179 | |||
180 | static void dm9161_startup(struct net_device *dev) | ||
181 | { | ||
182 | struct fec_enet_private *fep = netdev_priv(dev); | ||
183 | |||
184 | fec_mii_write(dev, fep->mii_if.phy_id, MII_DM9161_INTR, 0x0000); | ||
185 | } | ||
186 | |||
187 | static void dm9161_ack_int(struct net_device *dev) | ||
188 | { | ||
189 | struct fec_enet_private *fep = netdev_priv(dev); | ||
190 | |||
191 | fec_mii_read(dev, fep->mii_if.phy_id, MII_DM9161_INTR); | ||
192 | } | ||
193 | |||
194 | static void dm9161_shutdown(struct net_device *dev) | ||
195 | { | ||
196 | struct fec_enet_private *fep = netdev_priv(dev); | ||
197 | |||
198 | fec_mii_write(dev, fep->mii_if.phy_id, MII_DM9161_INTR, 0x0f00); | ||
199 | } | ||
200 | |||
201 | #endif | ||
202 | |||
203 | #ifdef CONFIG_FEC_8XX_LXT971_PHY | ||
204 | |||
205 | /* Support for LXT971/972 PHY */ | ||
206 | |||
207 | #define MII_LXT971_PCR 16 /* Port Control Register */ | ||
208 | #define MII_LXT971_SR2 17 /* Status Register 2 */ | ||
209 | #define MII_LXT971_IER 18 /* Interrupt Enable Register */ | ||
210 | #define MII_LXT971_ISR 19 /* Interrupt Status Register */ | ||
211 | #define MII_LXT971_LCR 20 /* LED Control Register */ | ||
212 | #define MII_LXT971_TCR 30 /* Transmit Control Register */ | ||
213 | |||
214 | static void lxt971_startup(struct net_device *dev) | ||
215 | { | ||
216 | struct fec_enet_private *fep = netdev_priv(dev); | ||
217 | |||
218 | fec_mii_write(dev, fep->mii_if.phy_id, MII_LXT971_IER, 0x00F2); | ||
219 | } | ||
220 | |||
221 | static void lxt971_ack_int(struct net_device *dev) | ||
222 | { | ||
223 | struct fec_enet_private *fep = netdev_priv(dev); | ||
224 | |||
225 | fec_mii_read(dev, fep->mii_if.phy_id, MII_LXT971_ISR); | ||
226 | } | ||
227 | |||
228 | static void lxt971_shutdown(struct net_device *dev) | ||
229 | { | ||
230 | struct fec_enet_private *fep = netdev_priv(dev); | ||
231 | |||
232 | fec_mii_write(dev, fep->mii_if.phy_id, MII_LXT971_IER, 0x0000); | ||
233 | } | ||
234 | #endif | ||
235 | |||
236 | /**********************************************************************************/ | ||
237 | |||
238 | static const struct phy_info phy_info[] = { | ||
239 | #ifdef CONFIG_FEC_8XX_DM9161_PHY | ||
240 | { | ||
241 | .id = 0x00181b88, | ||
242 | .name = "DM9161", | ||
243 | .startup = dm9161_startup, | ||
244 | .ack_int = dm9161_ack_int, | ||
245 | .shutdown = dm9161_shutdown, | ||
246 | }, | ||
247 | #endif | ||
248 | #ifdef CONFIG_FEC_8XX_LXT971_PHY | ||
249 | { | ||
250 | .id = 0x0001378e, | ||
251 | .name = "LXT971/972", | ||
252 | .startup = lxt971_startup, | ||
253 | .ack_int = lxt971_ack_int, | ||
254 | .shutdown = lxt971_shutdown, | ||
255 | }, | ||
256 | #endif | ||
257 | #ifdef CONFIG_FEC_8XX_GENERIC_PHY | ||
258 | { | ||
259 | .id = 0, | ||
260 | .name = "GENERIC", | ||
261 | .startup = generic_startup, | ||
262 | .shutdown = generic_shutdown, | ||
263 | }, | ||
264 | #endif | ||
265 | }; | ||
266 | |||
267 | /**********************************************************************************/ | ||
268 | |||
269 | int fec_mii_phy_id_detect(struct net_device *dev) | ||
270 | { | ||
271 | struct fec_enet_private *fep = netdev_priv(dev); | ||
272 | const struct fec_platform_info *fpi = fep->fpi; | ||
273 | int i, r, start, end, phytype, physubtype; | ||
274 | const struct phy_info *phy; | ||
275 | int phy_hwid, phy_id; | ||
276 | |||
277 | /* if no MDIO */ | ||
278 | if (fpi->use_mdio == 0) | ||
279 | return -1; | ||
280 | |||
281 | phy_hwid = -1; | ||
282 | fep->phy = NULL; | ||
283 | |||
284 | /* auto-detect? */ | ||
285 | if (fpi->phy_addr == -1) { | ||
286 | start = 0; | ||
287 | end = 32; | ||
288 | } else { /* direct */ | ||
289 | start = fpi->phy_addr; | ||
290 | end = start + 1; | ||
291 | } | ||
292 | |||
293 | for (phy_id = start; phy_id < end; phy_id++) { | ||
294 | r = fec_mii_read(dev, phy_id, MII_PHYSID1); | ||
295 | if (r == -1 || (phytype = (r & 0xffff)) == 0xffff) | ||
296 | continue; | ||
297 | r = fec_mii_read(dev, phy_id, MII_PHYSID2); | ||
298 | if (r == -1 || (physubtype = (r & 0xffff)) == 0xffff) | ||
299 | continue; | ||
300 | phy_hwid = (phytype << 16) | physubtype; | ||
301 | if (phy_hwid != -1) | ||
302 | break; | ||
303 | } | ||
304 | |||
305 | if (phy_hwid == -1) { | ||
306 | printk(KERN_ERR DRV_MODULE_NAME | ||
307 | ": %s No PHY detected!\n", dev->name); | ||
308 | return -1; | ||
309 | } | ||
310 | |||
311 | for (i = 0, phy = phy_info; i < ARRAY_SIZE(phy_info); i++, phy++) | ||
312 | if (phy->id == (phy_hwid >> 4) || phy->id == 0) | ||
313 | break; | ||
314 | |||
315 | if (i >= ARRAY_SIZE(phy_info)) { | ||
316 | printk(KERN_ERR DRV_MODULE_NAME | ||
317 | ": %s PHY id 0x%08x is not supported!\n", | ||
318 | dev->name, phy_hwid); | ||
319 | return -1; | ||
320 | } | ||
321 | |||
322 | fep->phy = phy; | ||
323 | |||
324 | printk(KERN_INFO DRV_MODULE_NAME | ||
325 | ": %s Phy @ 0x%x, type %s (0x%08x)\n", | ||
326 | dev->name, phy_id, fep->phy->name, phy_hwid); | ||
327 | |||
328 | return phy_id; | ||
329 | } | ||
330 | |||
331 | void fec_mii_startup(struct net_device *dev) | ||
332 | { | ||
333 | struct fec_enet_private *fep = netdev_priv(dev); | ||
334 | const struct fec_platform_info *fpi = fep->fpi; | ||
335 | |||
336 | if (!fpi->use_mdio || fep->phy == NULL) | ||
337 | return; | ||
338 | |||
339 | if (fep->phy->startup == NULL) | ||
340 | return; | ||
341 | |||
342 | (*fep->phy->startup) (dev); | ||
343 | } | ||
344 | |||
345 | void fec_mii_shutdown(struct net_device *dev) | ||
346 | { | ||
347 | struct fec_enet_private *fep = netdev_priv(dev); | ||
348 | const struct fec_platform_info *fpi = fep->fpi; | ||
349 | |||
350 | if (!fpi->use_mdio || fep->phy == NULL) | ||
351 | return; | ||
352 | |||
353 | if (fep->phy->shutdown == NULL) | ||
354 | return; | ||
355 | |||
356 | (*fep->phy->shutdown) (dev); | ||
357 | } | ||
358 | |||
359 | void fec_mii_ack_int(struct net_device *dev) | ||
360 | { | ||
361 | struct fec_enet_private *fep = netdev_priv(dev); | ||
362 | const struct fec_platform_info *fpi = fep->fpi; | ||
363 | |||
364 | if (!fpi->use_mdio || fep->phy == NULL) | ||
365 | return; | ||
366 | |||
367 | if (fep->phy->ack_int == NULL) | ||
368 | return; | ||
369 | |||
370 | (*fep->phy->ack_int) (dev); | ||
371 | } | ||
372 | |||
373 | /* helper function */ | ||
374 | static int mii_negotiated(struct mii_if_info *mii) | ||
375 | { | ||
376 | int advert, lpa, val; | ||
377 | |||
378 | if (!mii_link_ok(mii)) | ||
379 | return 0; | ||
380 | |||
381 | val = (*mii->mdio_read) (mii->dev, mii->phy_id, MII_BMSR); | ||
382 | if ((val & BMSR_ANEGCOMPLETE) == 0) | ||
383 | return 0; | ||
384 | |||
385 | advert = (*mii->mdio_read) (mii->dev, mii->phy_id, MII_ADVERTISE); | ||
386 | lpa = (*mii->mdio_read) (mii->dev, mii->phy_id, MII_LPA); | ||
387 | |||
388 | return mii_nway_result(advert & lpa); | ||
389 | } | ||
390 | |||
391 | void fec_mii_link_status_change_check(struct net_device *dev, int init_media) | ||
392 | { | ||
393 | struct fec_enet_private *fep = netdev_priv(dev); | ||
394 | unsigned int media; | ||
395 | unsigned long flags; | ||
396 | |||
397 | if (mii_check_media(&fep->mii_if, netif_msg_link(fep), init_media) == 0) | ||
398 | return; | ||
399 | |||
400 | media = mii_negotiated(&fep->mii_if); | ||
401 | |||
402 | if (netif_carrier_ok(dev)) { | ||
403 | spin_lock_irqsave(&fep->lock, flags); | ||
404 | fec_restart(dev, !!(media & ADVERTISE_FULL), | ||
405 | (media & (ADVERTISE_100FULL | ADVERTISE_100HALF)) ? | ||
406 | 100 : 10); | ||
407 | spin_unlock_irqrestore(&fep->lock, flags); | ||
408 | |||
409 | netif_start_queue(dev); | ||
410 | } else { | ||
411 | netif_stop_queue(dev); | ||
412 | |||
413 | spin_lock_irqsave(&fep->lock, flags); | ||
414 | fec_stop(dev); | ||
415 | spin_unlock_irqrestore(&fep->lock, flags); | ||
416 | |||
417 | } | ||
418 | } | ||
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c index bdb81f5750ad..445763e5648e 100644 --- a/drivers/net/fs_enet/fs_enet-main.c +++ b/drivers/net/fs_enet/fs_enet-main.c | |||
@@ -44,7 +44,7 @@ | |||
44 | 44 | ||
45 | #ifdef CONFIG_PPC_CPM_NEW_BINDING | 45 | #ifdef CONFIG_PPC_CPM_NEW_BINDING |
46 | #include <linux/of_gpio.h> | 46 | #include <linux/of_gpio.h> |
47 | #include <asm/of_platform.h> | 47 | #include <linux/of_platform.h> |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #include "fs_enet.h" | 50 | #include "fs_enet.h" |
diff --git a/drivers/net/fs_enet/mac-scc.c b/drivers/net/fs_enet/mac-scc.c index d7ca31945c82..e3557eca7b6d 100644 --- a/drivers/net/fs_enet/mac-scc.c +++ b/drivers/net/fs_enet/mac-scc.c | |||
@@ -44,7 +44,7 @@ | |||
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | #ifdef CONFIG_PPC_CPM_NEW_BINDING | 46 | #ifdef CONFIG_PPC_CPM_NEW_BINDING |
47 | #include <asm/of_platform.h> | 47 | #include <linux/of_platform.h> |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #include "fs_enet.h" | 50 | #include "fs_enet.h" |
diff --git a/drivers/net/fs_enet/mii-fec.c b/drivers/net/fs_enet/mii-fec.c index f0014cfbb275..8f6a43b0e0ff 100644 --- a/drivers/net/fs_enet/mii-fec.c +++ b/drivers/net/fs_enet/mii-fec.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <asm/uaccess.h> | 37 | #include <asm/uaccess.h> |
38 | 38 | ||
39 | #ifdef CONFIG_PPC_CPM_NEW_BINDING | 39 | #ifdef CONFIG_PPC_CPM_NEW_BINDING |
40 | #include <asm/of_platform.h> | 40 | #include <linux/of_platform.h> |
41 | #endif | 41 | #endif |
42 | 42 | ||
43 | #include "fs_enet.h" | 43 | #include "fs_enet.h" |
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c index 9ca57d365599..2e720f26ca83 100644 --- a/drivers/net/ibm_newemac/core.c +++ b/drivers/net/ibm_newemac/core.c | |||
@@ -367,25 +367,31 @@ static int emac_reset(struct emac_instance *dev) | |||
367 | 367 | ||
368 | static void emac_hash_mc(struct emac_instance *dev) | 368 | static void emac_hash_mc(struct emac_instance *dev) |
369 | { | 369 | { |
370 | struct emac_regs __iomem *p = dev->emacp; | 370 | const int regs = EMAC_XAHT_REGS(dev); |
371 | u16 gaht[4] = { 0 }; | 371 | u32 *gaht_base = emac_gaht_base(dev); |
372 | u32 gaht_temp[regs]; | ||
372 | struct dev_mc_list *dmi; | 373 | struct dev_mc_list *dmi; |
374 | int i; | ||
373 | 375 | ||
374 | DBG(dev, "hash_mc %d" NL, dev->ndev->mc_count); | 376 | DBG(dev, "hash_mc %d" NL, dev->ndev->mc_count); |
375 | 377 | ||
378 | memset(gaht_temp, 0, sizeof (gaht_temp)); | ||
379 | |||
376 | for (dmi = dev->ndev->mc_list; dmi; dmi = dmi->next) { | 380 | for (dmi = dev->ndev->mc_list; dmi; dmi = dmi->next) { |
377 | int bit; | 381 | int slot, reg, mask; |
378 | DBG2(dev, "mc %02x:%02x:%02x:%02x:%02x:%02x" NL, | 382 | DBG2(dev, "mc %02x:%02x:%02x:%02x:%02x:%02x" NL, |
379 | dmi->dmi_addr[0], dmi->dmi_addr[1], dmi->dmi_addr[2], | 383 | dmi->dmi_addr[0], dmi->dmi_addr[1], dmi->dmi_addr[2], |
380 | dmi->dmi_addr[3], dmi->dmi_addr[4], dmi->dmi_addr[5]); | 384 | dmi->dmi_addr[3], dmi->dmi_addr[4], dmi->dmi_addr[5]); |
381 | 385 | ||
382 | bit = 63 - (ether_crc(ETH_ALEN, dmi->dmi_addr) >> 26); | 386 | slot = EMAC_XAHT_CRC_TO_SLOT(dev, ether_crc(ETH_ALEN, dmi->dmi_addr)); |
383 | gaht[bit >> 4] |= 0x8000 >> (bit & 0x0f); | 387 | reg = EMAC_XAHT_SLOT_TO_REG(dev, slot); |
388 | mask = EMAC_XAHT_SLOT_TO_MASK(dev, slot); | ||
389 | |||
390 | gaht_temp[reg] |= mask; | ||
384 | } | 391 | } |
385 | out_be32(&p->gaht1, gaht[0]); | 392 | |
386 | out_be32(&p->gaht2, gaht[1]); | 393 | for (i = 0; i < regs; i++) |
387 | out_be32(&p->gaht3, gaht[2]); | 394 | out_be32(gaht_base + i, gaht_temp[i]); |
388 | out_be32(&p->gaht4, gaht[3]); | ||
389 | } | 395 | } |
390 | 396 | ||
391 | static inline u32 emac_iff2rmr(struct net_device *ndev) | 397 | static inline u32 emac_iff2rmr(struct net_device *ndev) |
@@ -402,7 +408,8 @@ static inline u32 emac_iff2rmr(struct net_device *ndev) | |||
402 | 408 | ||
403 | if (ndev->flags & IFF_PROMISC) | 409 | if (ndev->flags & IFF_PROMISC) |
404 | r |= EMAC_RMR_PME; | 410 | r |= EMAC_RMR_PME; |
405 | else if (ndev->flags & IFF_ALLMULTI || ndev->mc_count > 32) | 411 | else if (ndev->flags & IFF_ALLMULTI || |
412 | (ndev->mc_count > EMAC_XAHT_SLOTS(dev))) | ||
406 | r |= EMAC_RMR_PMME; | 413 | r |= EMAC_RMR_PMME; |
407 | else if (ndev->mc_count > 0) | 414 | else if (ndev->mc_count > 0) |
408 | r |= EMAC_RMR_MAE; | 415 | r |= EMAC_RMR_MAE; |
@@ -546,7 +553,7 @@ static int emac_configure(struct emac_instance *dev) | |||
546 | /* Put some arbitrary OUI, Manuf & Rev IDs so we can | 553 | /* Put some arbitrary OUI, Manuf & Rev IDs so we can |
547 | * identify this GPCS PHY later. | 554 | * identify this GPCS PHY later. |
548 | */ | 555 | */ |
549 | out_be32(&p->ipcr, 0xdeadbeef); | 556 | out_be32(&p->u1.emac4.ipcr, 0xdeadbeef); |
550 | } else | 557 | } else |
551 | mr1 |= EMAC_MR1_MF_1000; | 558 | mr1 |= EMAC_MR1_MF_1000; |
552 | 559 | ||
@@ -2025,10 +2032,10 @@ static int emac_get_regs_len(struct emac_instance *dev) | |||
2025 | { | 2032 | { |
2026 | if (emac_has_feature(dev, EMAC_FTR_EMAC4)) | 2033 | if (emac_has_feature(dev, EMAC_FTR_EMAC4)) |
2027 | return sizeof(struct emac_ethtool_regs_subhdr) + | 2034 | return sizeof(struct emac_ethtool_regs_subhdr) + |
2028 | EMAC4_ETHTOOL_REGS_SIZE; | 2035 | EMAC4_ETHTOOL_REGS_SIZE(dev); |
2029 | else | 2036 | else |
2030 | return sizeof(struct emac_ethtool_regs_subhdr) + | 2037 | return sizeof(struct emac_ethtool_regs_subhdr) + |
2031 | EMAC_ETHTOOL_REGS_SIZE; | 2038 | EMAC_ETHTOOL_REGS_SIZE(dev); |
2032 | } | 2039 | } |
2033 | 2040 | ||
2034 | static int emac_ethtool_get_regs_len(struct net_device *ndev) | 2041 | static int emac_ethtool_get_regs_len(struct net_device *ndev) |
@@ -2055,12 +2062,12 @@ static void *emac_dump_regs(struct emac_instance *dev, void *buf) | |||
2055 | hdr->index = dev->cell_index; | 2062 | hdr->index = dev->cell_index; |
2056 | if (emac_has_feature(dev, EMAC_FTR_EMAC4)) { | 2063 | if (emac_has_feature(dev, EMAC_FTR_EMAC4)) { |
2057 | hdr->version = EMAC4_ETHTOOL_REGS_VER; | 2064 | hdr->version = EMAC4_ETHTOOL_REGS_VER; |
2058 | memcpy_fromio(hdr + 1, dev->emacp, EMAC4_ETHTOOL_REGS_SIZE); | 2065 | memcpy_fromio(hdr + 1, dev->emacp, EMAC4_ETHTOOL_REGS_SIZE(dev)); |
2059 | return ((void *)(hdr + 1) + EMAC4_ETHTOOL_REGS_SIZE); | 2066 | return ((void *)(hdr + 1) + EMAC4_ETHTOOL_REGS_SIZE(dev)); |
2060 | } else { | 2067 | } else { |
2061 | hdr->version = EMAC_ETHTOOL_REGS_VER; | 2068 | hdr->version = EMAC_ETHTOOL_REGS_VER; |
2062 | memcpy_fromio(hdr + 1, dev->emacp, EMAC_ETHTOOL_REGS_SIZE); | 2069 | memcpy_fromio(hdr + 1, dev->emacp, EMAC_ETHTOOL_REGS_SIZE(dev)); |
2063 | return ((void *)(hdr + 1) + EMAC_ETHTOOL_REGS_SIZE); | 2070 | return ((void *)(hdr + 1) + EMAC_ETHTOOL_REGS_SIZE(dev)); |
2064 | } | 2071 | } |
2065 | } | 2072 | } |
2066 | 2073 | ||
@@ -2550,7 +2557,9 @@ static int __devinit emac_init_config(struct emac_instance *dev) | |||
2550 | } | 2557 | } |
2551 | 2558 | ||
2552 | /* Check EMAC version */ | 2559 | /* Check EMAC version */ |
2553 | if (of_device_is_compatible(np, "ibm,emac4")) { | 2560 | if (of_device_is_compatible(np, "ibm,emac4sync")) { |
2561 | dev->features |= (EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC); | ||
2562 | } else if (of_device_is_compatible(np, "ibm,emac4")) { | ||
2554 | dev->features |= EMAC_FTR_EMAC4; | 2563 | dev->features |= EMAC_FTR_EMAC4; |
2555 | if (of_device_is_compatible(np, "ibm,emac-440gx")) | 2564 | if (of_device_is_compatible(np, "ibm,emac-440gx")) |
2556 | dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX; | 2565 | dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX; |
@@ -2611,6 +2620,15 @@ static int __devinit emac_init_config(struct emac_instance *dev) | |||
2611 | } | 2620 | } |
2612 | memcpy(dev->ndev->dev_addr, p, 6); | 2621 | memcpy(dev->ndev->dev_addr, p, 6); |
2613 | 2622 | ||
2623 | /* IAHT and GAHT filter parameterization */ | ||
2624 | if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) { | ||
2625 | dev->xaht_slots_shift = EMAC4SYNC_XAHT_SLOTS_SHIFT; | ||
2626 | dev->xaht_width_shift = EMAC4SYNC_XAHT_WIDTH_SHIFT; | ||
2627 | } else { | ||
2628 | dev->xaht_slots_shift = EMAC4_XAHT_SLOTS_SHIFT; | ||
2629 | dev->xaht_width_shift = EMAC4_XAHT_WIDTH_SHIFT; | ||
2630 | } | ||
2631 | |||
2614 | DBG(dev, "features : 0x%08x / 0x%08x\n", dev->features, EMAC_FTRS_POSSIBLE); | 2632 | DBG(dev, "features : 0x%08x / 0x%08x\n", dev->features, EMAC_FTRS_POSSIBLE); |
2615 | DBG(dev, "tx_fifo_size : %d (%d gige)\n", dev->tx_fifo_size, dev->tx_fifo_size_gige); | 2633 | DBG(dev, "tx_fifo_size : %d (%d gige)\n", dev->tx_fifo_size, dev->tx_fifo_size_gige); |
2616 | DBG(dev, "rx_fifo_size : %d (%d gige)\n", dev->rx_fifo_size, dev->rx_fifo_size_gige); | 2634 | DBG(dev, "rx_fifo_size : %d (%d gige)\n", dev->rx_fifo_size, dev->rx_fifo_size_gige); |
@@ -2682,7 +2700,8 @@ static int __devinit emac_probe(struct of_device *ofdev, | |||
2682 | goto err_irq_unmap; | 2700 | goto err_irq_unmap; |
2683 | } | 2701 | } |
2684 | // TODO : request_mem_region | 2702 | // TODO : request_mem_region |
2685 | dev->emacp = ioremap(dev->rsrc_regs.start, sizeof(struct emac_regs)); | 2703 | dev->emacp = ioremap(dev->rsrc_regs.start, |
2704 | dev->rsrc_regs.end - dev->rsrc_regs.start + 1); | ||
2686 | if (dev->emacp == NULL) { | 2705 | if (dev->emacp == NULL) { |
2687 | printk(KERN_ERR "%s: Can't map device registers!\n", | 2706 | printk(KERN_ERR "%s: Can't map device registers!\n", |
2688 | np->full_name); | 2707 | np->full_name); |
@@ -2896,6 +2915,10 @@ static struct of_device_id emac_match[] = | |||
2896 | .type = "network", | 2915 | .type = "network", |
2897 | .compatible = "ibm,emac4", | 2916 | .compatible = "ibm,emac4", |
2898 | }, | 2917 | }, |
2918 | { | ||
2919 | .type = "network", | ||
2920 | .compatible = "ibm,emac4sync", | ||
2921 | }, | ||
2899 | {}, | 2922 | {}, |
2900 | }; | 2923 | }; |
2901 | 2924 | ||
diff --git a/drivers/net/ibm_newemac/core.h b/drivers/net/ibm_newemac/core.h index 1683db9870a4..6545e69d12c3 100644 --- a/drivers/net/ibm_newemac/core.h +++ b/drivers/net/ibm_newemac/core.h | |||
@@ -33,8 +33,8 @@ | |||
33 | #include <linux/netdevice.h> | 33 | #include <linux/netdevice.h> |
34 | #include <linux/dma-mapping.h> | 34 | #include <linux/dma-mapping.h> |
35 | #include <linux/spinlock.h> | 35 | #include <linux/spinlock.h> |
36 | #include <linux/of_platform.h> | ||
36 | 37 | ||
37 | #include <asm/of_platform.h> | ||
38 | #include <asm/io.h> | 38 | #include <asm/io.h> |
39 | #include <asm/dcr.h> | 39 | #include <asm/dcr.h> |
40 | 40 | ||
@@ -235,6 +235,10 @@ struct emac_instance { | |||
235 | u32 fifo_entry_size; | 235 | u32 fifo_entry_size; |
236 | u32 mal_burst_size; /* move to MAL ? */ | 236 | u32 mal_burst_size; /* move to MAL ? */ |
237 | 237 | ||
238 | /* IAHT and GAHT filter parameterization */ | ||
239 | u32 xaht_slots_shift; | ||
240 | u32 xaht_width_shift; | ||
241 | |||
238 | /* Descriptor management | 242 | /* Descriptor management |
239 | */ | 243 | */ |
240 | struct mal_descriptor *tx_desc; | 244 | struct mal_descriptor *tx_desc; |
@@ -309,6 +313,10 @@ struct emac_instance { | |||
309 | * Set if we need phy clock workaround for 440ep or 440gr | 313 | * Set if we need phy clock workaround for 440ep or 440gr |
310 | */ | 314 | */ |
311 | #define EMAC_FTR_440EP_PHY_CLK_FIX 0x00000100 | 315 | #define EMAC_FTR_440EP_PHY_CLK_FIX 0x00000100 |
316 | /* | ||
317 | * The 405EX and 460EX contain the EMAC4SYNC core | ||
318 | */ | ||
319 | #define EMAC_FTR_EMAC4SYNC 0x00000200 | ||
312 | 320 | ||
313 | 321 | ||
314 | /* Right now, we don't quite handle the always/possible masks on the | 322 | /* Right now, we don't quite handle the always/possible masks on the |
@@ -320,7 +328,8 @@ enum { | |||
320 | 328 | ||
321 | EMAC_FTRS_POSSIBLE = | 329 | EMAC_FTRS_POSSIBLE = |
322 | #ifdef CONFIG_IBM_NEW_EMAC_EMAC4 | 330 | #ifdef CONFIG_IBM_NEW_EMAC_EMAC4 |
323 | EMAC_FTR_EMAC4 | EMAC_FTR_HAS_NEW_STACR | | 331 | EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC | |
332 | EMAC_FTR_HAS_NEW_STACR | | ||
324 | EMAC_FTR_STACR_OC_INVERT | EMAC_FTR_440GX_PHY_CLK_FIX | | 333 | EMAC_FTR_STACR_OC_INVERT | EMAC_FTR_440GX_PHY_CLK_FIX | |
325 | #endif | 334 | #endif |
326 | #ifdef CONFIG_IBM_NEW_EMAC_TAH | 335 | #ifdef CONFIG_IBM_NEW_EMAC_TAH |
@@ -342,6 +351,71 @@ static inline int emac_has_feature(struct emac_instance *dev, | |||
342 | (EMAC_FTRS_POSSIBLE & dev->features & feature); | 351 | (EMAC_FTRS_POSSIBLE & dev->features & feature); |
343 | } | 352 | } |
344 | 353 | ||
354 | /* | ||
355 | * Various instances of the EMAC core have varying 1) number of | ||
356 | * address match slots, 2) width of the registers for handling address | ||
357 | * match slots, 3) number of registers for handling address match | ||
358 | * slots and 4) base offset for those registers. | ||
359 | * | ||
360 | * These macros and inlines handle these differences based on | ||
361 | * parameters supplied by the device structure which are, in turn, | ||
362 | * initialized based on the "compatible" entry in the device tree. | ||
363 | */ | ||
364 | |||
365 | #define EMAC4_XAHT_SLOTS_SHIFT 6 | ||
366 | #define EMAC4_XAHT_WIDTH_SHIFT 4 | ||
367 | |||
368 | #define EMAC4SYNC_XAHT_SLOTS_SHIFT 8 | ||
369 | #define EMAC4SYNC_XAHT_WIDTH_SHIFT 5 | ||
370 | |||
371 | #define EMAC_XAHT_SLOTS(dev) (1 << (dev)->xaht_slots_shift) | ||
372 | #define EMAC_XAHT_WIDTH(dev) (1 << (dev)->xaht_width_shift) | ||
373 | #define EMAC_XAHT_REGS(dev) (1 << ((dev)->xaht_slots_shift - \ | ||
374 | (dev)->xaht_width_shift)) | ||
375 | |||
376 | #define EMAC_XAHT_CRC_TO_SLOT(dev, crc) \ | ||
377 | ((EMAC_XAHT_SLOTS(dev) - 1) - \ | ||
378 | ((crc) >> ((sizeof (u32) * BITS_PER_BYTE) - \ | ||
379 | (dev)->xaht_slots_shift))) | ||
380 | |||
381 | #define EMAC_XAHT_SLOT_TO_REG(dev, slot) \ | ||
382 | ((slot) >> (dev)->xaht_width_shift) | ||
383 | |||
384 | #define EMAC_XAHT_SLOT_TO_MASK(dev, slot) \ | ||
385 | ((u32)(1 << (EMAC_XAHT_WIDTH(dev) - 1)) >> \ | ||
386 | ((slot) & (u32)(EMAC_XAHT_WIDTH(dev) - 1))) | ||
387 | |||
388 | static inline u32 *emac_xaht_base(struct emac_instance *dev) | ||
389 | { | ||
390 | struct emac_regs __iomem *p = dev->emacp; | ||
391 | int offset; | ||
392 | |||
393 | /* The first IAHT entry always is the base of the block of | ||
394 | * IAHT and GAHT registers. | ||
395 | */ | ||
396 | if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) | ||
397 | offset = offsetof(struct emac_regs, u1.emac4sync.iaht1); | ||
398 | else | ||
399 | offset = offsetof(struct emac_regs, u0.emac4.iaht1); | ||
400 | |||
401 | return ((u32 *)((ptrdiff_t)p + offset)); | ||
402 | } | ||
403 | |||
404 | static inline u32 *emac_gaht_base(struct emac_instance *dev) | ||
405 | { | ||
406 | /* GAHT registers always come after an identical number of | ||
407 | * IAHT registers. | ||
408 | */ | ||
409 | return (emac_xaht_base(dev) + EMAC_XAHT_REGS(dev)); | ||
410 | } | ||
411 | |||
412 | static inline u32 *emac_iaht_base(struct emac_instance *dev) | ||
413 | { | ||
414 | /* IAHT registers always come before an identical number of | ||
415 | * GAHT registers. | ||
416 | */ | ||
417 | return (emac_xaht_base(dev)); | ||
418 | } | ||
345 | 419 | ||
346 | /* Ethtool get_regs complex data. | 420 | /* Ethtool get_regs complex data. |
347 | * We want to get not just EMAC registers, but also MAL, ZMII, RGMII, TAH | 421 | * We want to get not just EMAC registers, but also MAL, ZMII, RGMII, TAH |
@@ -366,4 +440,11 @@ struct emac_ethtool_regs_subhdr { | |||
366 | u32 index; | 440 | u32 index; |
367 | }; | 441 | }; |
368 | 442 | ||
443 | #define EMAC_ETHTOOL_REGS_VER 0 | ||
444 | #define EMAC_ETHTOOL_REGS_SIZE(dev) ((dev)->rsrc_regs.end - \ | ||
445 | (dev)->rsrc_regs.start + 1) | ||
446 | #define EMAC4_ETHTOOL_REGS_VER 1 | ||
447 | #define EMAC4_ETHTOOL_REGS_SIZE(dev) ((dev)->rsrc_regs.end - \ | ||
448 | (dev)->rsrc_regs.start + 1) | ||
449 | |||
369 | #endif /* __IBM_NEWEMAC_CORE_H */ | 450 | #endif /* __IBM_NEWEMAC_CORE_H */ |
diff --git a/drivers/net/ibm_newemac/debug.c b/drivers/net/ibm_newemac/debug.c index 86b756a30784..775c850a425a 100644 --- a/drivers/net/ibm_newemac/debug.c +++ b/drivers/net/ibm_newemac/debug.c | |||
@@ -67,29 +67,55 @@ static void emac_desc_dump(struct emac_instance *p) | |||
67 | static void emac_mac_dump(struct emac_instance *dev) | 67 | static void emac_mac_dump(struct emac_instance *dev) |
68 | { | 68 | { |
69 | struct emac_regs __iomem *p = dev->emacp; | 69 | struct emac_regs __iomem *p = dev->emacp; |
70 | const int xaht_regs = EMAC_XAHT_REGS(dev); | ||
71 | u32 *gaht_base = emac_gaht_base(dev); | ||
72 | u32 *iaht_base = emac_iaht_base(dev); | ||
73 | int emac4sync = emac_has_feature(dev, EMAC_FTR_EMAC4SYNC); | ||
74 | int n; | ||
70 | 75 | ||
71 | printk("** EMAC %s registers **\n" | 76 | printk("** EMAC %s registers **\n" |
72 | "MR0 = 0x%08x MR1 = 0x%08x TMR0 = 0x%08x TMR1 = 0x%08x\n" | 77 | "MR0 = 0x%08x MR1 = 0x%08x TMR0 = 0x%08x TMR1 = 0x%08x\n" |
73 | "RMR = 0x%08x ISR = 0x%08x ISER = 0x%08x\n" | 78 | "RMR = 0x%08x ISR = 0x%08x ISER = 0x%08x\n" |
74 | "IAR = %04x%08x VTPID = 0x%04x VTCI = 0x%04x\n" | 79 | "IAR = %04x%08x VTPID = 0x%04x VTCI = 0x%04x\n", |
75 | "IAHT: 0x%04x 0x%04x 0x%04x 0x%04x " | ||
76 | "GAHT: 0x%04x 0x%04x 0x%04x 0x%04x\n" | ||
77 | "LSA = %04x%08x IPGVR = 0x%04x\n" | ||
78 | "STACR = 0x%08x TRTR = 0x%08x RWMR = 0x%08x\n" | ||
79 | "OCTX = 0x%08x OCRX = 0x%08x IPCR = 0x%08x\n", | ||
80 | dev->ofdev->node->full_name, in_be32(&p->mr0), in_be32(&p->mr1), | 80 | dev->ofdev->node->full_name, in_be32(&p->mr0), in_be32(&p->mr1), |
81 | in_be32(&p->tmr0), in_be32(&p->tmr1), | 81 | in_be32(&p->tmr0), in_be32(&p->tmr1), |
82 | in_be32(&p->rmr), in_be32(&p->isr), in_be32(&p->iser), | 82 | in_be32(&p->rmr), in_be32(&p->isr), in_be32(&p->iser), |
83 | in_be32(&p->iahr), in_be32(&p->ialr), in_be32(&p->vtpid), | 83 | in_be32(&p->iahr), in_be32(&p->ialr), in_be32(&p->vtpid), |
84 | in_be32(&p->vtci), | 84 | in_be32(&p->vtci) |
85 | in_be32(&p->iaht1), in_be32(&p->iaht2), in_be32(&p->iaht3), | 85 | ); |
86 | in_be32(&p->iaht4), | 86 | |
87 | in_be32(&p->gaht1), in_be32(&p->gaht2), in_be32(&p->gaht3), | 87 | if (emac4sync) |
88 | in_be32(&p->gaht4), | 88 | printk("MAR = %04x%08x MMAR = %04x%08x\n", |
89 | in_be32(&p->u0.emac4sync.mahr), | ||
90 | in_be32(&p->u0.emac4sync.malr), | ||
91 | in_be32(&p->u0.emac4sync.mmahr), | ||
92 | in_be32(&p->u0.emac4sync.mmalr) | ||
93 | ); | ||
94 | |||
95 | for (n = 0; n < xaht_regs; n++) | ||
96 | printk("IAHT%02d = 0x%08x\n", n + 1, in_be32(iaht_base + n)); | ||
97 | |||
98 | for (n = 0; n < xaht_regs; n++) | ||
99 | printk("GAHT%02d = 0x%08x\n", n + 1, in_be32(gaht_base + n)); | ||
100 | |||
101 | printk("LSA = %04x%08x IPGVR = 0x%04x\n" | ||
102 | "STACR = 0x%08x TRTR = 0x%08x RWMR = 0x%08x\n" | ||
103 | "OCTX = 0x%08x OCRX = 0x%08x\n", | ||
89 | in_be32(&p->lsah), in_be32(&p->lsal), in_be32(&p->ipgvr), | 104 | in_be32(&p->lsah), in_be32(&p->lsal), in_be32(&p->ipgvr), |
90 | in_be32(&p->stacr), in_be32(&p->trtr), in_be32(&p->rwmr), | 105 | in_be32(&p->stacr), in_be32(&p->trtr), in_be32(&p->rwmr), |
91 | in_be32(&p->octx), in_be32(&p->ocrx), in_be32(&p->ipcr) | 106 | in_be32(&p->octx), in_be32(&p->ocrx) |
92 | ); | 107 | ); |
108 | |||
109 | if (!emac4sync) { | ||
110 | printk("IPCR = 0x%08x\n", | ||
111 | in_be32(&p->u1.emac4.ipcr) | ||
112 | ); | ||
113 | } else { | ||
114 | printk("REVID = 0x%08x TPC = 0x%08x\n", | ||
115 | in_be32(&p->u1.emac4sync.revid), | ||
116 | in_be32(&p->u1.emac4sync.tpc) | ||
117 | ); | ||
118 | } | ||
93 | 119 | ||
94 | emac_desc_dump(dev); | 120 | emac_desc_dump(dev); |
95 | } | 121 | } |
diff --git a/drivers/net/ibm_newemac/emac.h b/drivers/net/ibm_newemac/emac.h index 91cb096ab405..0afc2cf5c52b 100644 --- a/drivers/net/ibm_newemac/emac.h +++ b/drivers/net/ibm_newemac/emac.h | |||
@@ -27,37 +27,80 @@ | |||
27 | 27 | ||
28 | #include <linux/types.h> | 28 | #include <linux/types.h> |
29 | 29 | ||
30 | /* EMAC registers Write Access rules */ | 30 | /* EMAC registers Write Access rules */ |
31 | struct emac_regs { | 31 | struct emac_regs { |
32 | u32 mr0; /* special */ | 32 | /* Common registers across all EMAC implementations. */ |
33 | u32 mr1; /* Reset */ | 33 | u32 mr0; /* Special */ |
34 | u32 tmr0; /* special */ | 34 | u32 mr1; /* Reset */ |
35 | u32 tmr1; /* special */ | 35 | u32 tmr0; /* Special */ |
36 | u32 rmr; /* Reset */ | 36 | u32 tmr1; /* Special */ |
37 | u32 isr; /* Always */ | 37 | u32 rmr; /* Reset */ |
38 | u32 iser; /* Reset */ | 38 | u32 isr; /* Always */ |
39 | u32 iahr; /* Reset, R, T */ | 39 | u32 iser; /* Reset */ |
40 | u32 ialr; /* Reset, R, T */ | 40 | u32 iahr; /* Reset, R, T */ |
41 | u32 vtpid; /* Reset, R, T */ | 41 | u32 ialr; /* Reset, R, T */ |
42 | u32 vtci; /* Reset, R, T */ | 42 | u32 vtpid; /* Reset, R, T */ |
43 | u32 ptr; /* Reset, T */ | 43 | u32 vtci; /* Reset, R, T */ |
44 | u32 iaht1; /* Reset, R */ | 44 | u32 ptr; /* Reset, T */ |
45 | u32 iaht2; /* Reset, R */ | 45 | union { |
46 | u32 iaht3; /* Reset, R */ | 46 | /* Registers unique to EMAC4 implementations */ |
47 | u32 iaht4; /* Reset, R */ | 47 | struct { |
48 | u32 gaht1; /* Reset, R */ | 48 | u32 iaht1; /* Reset, R */ |
49 | u32 gaht2; /* Reset, R */ | 49 | u32 iaht2; /* Reset, R */ |
50 | u32 gaht3; /* Reset, R */ | 50 | u32 iaht3; /* Reset, R */ |
51 | u32 gaht4; /* Reset, R */ | 51 | u32 iaht4; /* Reset, R */ |
52 | u32 gaht1; /* Reset, R */ | ||
53 | u32 gaht2; /* Reset, R */ | ||
54 | u32 gaht3; /* Reset, R */ | ||
55 | u32 gaht4; /* Reset, R */ | ||
56 | } emac4; | ||
57 | /* Registers unique to EMAC4SYNC implementations */ | ||
58 | struct { | ||
59 | u32 mahr; /* Reset, R, T */ | ||
60 | u32 malr; /* Reset, R, T */ | ||
61 | u32 mmahr; /* Reset, R, T */ | ||
62 | u32 mmalr; /* Reset, R, T */ | ||
63 | u32 rsvd0[4]; | ||
64 | } emac4sync; | ||
65 | } u0; | ||
66 | /* Common registers across all EMAC implementations. */ | ||
52 | u32 lsah; | 67 | u32 lsah; |
53 | u32 lsal; | 68 | u32 lsal; |
54 | u32 ipgvr; /* Reset, T */ | 69 | u32 ipgvr; /* Reset, T */ |
55 | u32 stacr; /* special */ | 70 | u32 stacr; /* Special */ |
56 | u32 trtr; /* special */ | 71 | u32 trtr; /* Special */ |
57 | u32 rwmr; /* Reset */ | 72 | u32 rwmr; /* Reset */ |
58 | u32 octx; | 73 | u32 octx; |
59 | u32 ocrx; | 74 | u32 ocrx; |
60 | u32 ipcr; | 75 | union { |
76 | /* Registers unique to EMAC4 implementations */ | ||
77 | struct { | ||
78 | u32 ipcr; | ||
79 | } emac4; | ||
80 | /* Registers unique to EMAC4SYNC implementations */ | ||
81 | struct { | ||
82 | u32 rsvd1; | ||
83 | u32 revid; | ||
84 | u32 rsvd2[2]; | ||
85 | u32 iaht1; /* Reset, R */ | ||
86 | u32 iaht2; /* Reset, R */ | ||
87 | u32 iaht3; /* Reset, R */ | ||
88 | u32 iaht4; /* Reset, R */ | ||
89 | u32 iaht5; /* Reset, R */ | ||
90 | u32 iaht6; /* Reset, R */ | ||
91 | u32 iaht7; /* Reset, R */ | ||
92 | u32 iaht8; /* Reset, R */ | ||
93 | u32 gaht1; /* Reset, R */ | ||
94 | u32 gaht2; /* Reset, R */ | ||
95 | u32 gaht3; /* Reset, R */ | ||
96 | u32 gaht4; /* Reset, R */ | ||
97 | u32 gaht5; /* Reset, R */ | ||
98 | u32 gaht6; /* Reset, R */ | ||
99 | u32 gaht7; /* Reset, R */ | ||
100 | u32 gaht8; /* Reset, R */ | ||
101 | u32 tpc; /* Reset, T */ | ||
102 | } emac4sync; | ||
103 | } u1; | ||
61 | }; | 104 | }; |
62 | 105 | ||
63 | /* | 106 | /* |
@@ -73,12 +116,6 @@ struct emac_regs { | |||
73 | #define PHY_MODE_RTBI 7 | 116 | #define PHY_MODE_RTBI 7 |
74 | #define PHY_MODE_SGMII 8 | 117 | #define PHY_MODE_SGMII 8 |
75 | 118 | ||
76 | |||
77 | #define EMAC_ETHTOOL_REGS_VER 0 | ||
78 | #define EMAC_ETHTOOL_REGS_SIZE (sizeof(struct emac_regs) - sizeof(u32)) | ||
79 | #define EMAC4_ETHTOOL_REGS_VER 1 | ||
80 | #define EMAC4_ETHTOOL_REGS_SIZE sizeof(struct emac_regs) | ||
81 | |||
82 | /* EMACx_MR0 */ | 119 | /* EMACx_MR0 */ |
83 | #define EMAC_MR0_RXI 0x80000000 | 120 | #define EMAC_MR0_RXI 0x80000000 |
84 | #define EMAC_MR0_TXI 0x40000000 | 121 | #define EMAC_MR0_TXI 0x40000000 |
diff --git a/drivers/net/ibm_newemac/rgmii.c b/drivers/net/ibm_newemac/rgmii.c index e32da3de2695..1d5379de6900 100644 --- a/drivers/net/ibm_newemac/rgmii.c +++ b/drivers/net/ibm_newemac/rgmii.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #define RGMII_FER_RGMII(idx) (0x5 << ((idx) * 4)) | 39 | #define RGMII_FER_RGMII(idx) (0x5 << ((idx) * 4)) |
40 | #define RGMII_FER_TBI(idx) (0x6 << ((idx) * 4)) | 40 | #define RGMII_FER_TBI(idx) (0x6 << ((idx) * 4)) |
41 | #define RGMII_FER_GMII(idx) (0x7 << ((idx) * 4)) | 41 | #define RGMII_FER_GMII(idx) (0x7 << ((idx) * 4)) |
42 | #define RGMII_FER_MII(idx) RGMII_FER_GMII(idx) | ||
42 | 43 | ||
43 | /* RGMIIx_SSR */ | 44 | /* RGMIIx_SSR */ |
44 | #define RGMII_SSR_MASK(idx) (0x7 << ((idx) * 8)) | 45 | #define RGMII_SSR_MASK(idx) (0x7 << ((idx) * 8)) |
@@ -49,6 +50,7 @@ | |||
49 | static inline int rgmii_valid_mode(int phy_mode) | 50 | static inline int rgmii_valid_mode(int phy_mode) |
50 | { | 51 | { |
51 | return phy_mode == PHY_MODE_GMII || | 52 | return phy_mode == PHY_MODE_GMII || |
53 | phy_mode == PHY_MODE_MII || | ||
52 | phy_mode == PHY_MODE_RGMII || | 54 | phy_mode == PHY_MODE_RGMII || |
53 | phy_mode == PHY_MODE_TBI || | 55 | phy_mode == PHY_MODE_TBI || |
54 | phy_mode == PHY_MODE_RTBI; | 56 | phy_mode == PHY_MODE_RTBI; |
@@ -63,6 +65,8 @@ static inline const char *rgmii_mode_name(int mode) | |||
63 | return "TBI"; | 65 | return "TBI"; |
64 | case PHY_MODE_GMII: | 66 | case PHY_MODE_GMII: |
65 | return "GMII"; | 67 | return "GMII"; |
68 | case PHY_MODE_MII: | ||
69 | return "MII"; | ||
66 | case PHY_MODE_RTBI: | 70 | case PHY_MODE_RTBI: |
67 | return "RTBI"; | 71 | return "RTBI"; |
68 | default: | 72 | default: |
@@ -79,6 +83,8 @@ static inline u32 rgmii_mode_mask(int mode, int input) | |||
79 | return RGMII_FER_TBI(input); | 83 | return RGMII_FER_TBI(input); |
80 | case PHY_MODE_GMII: | 84 | case PHY_MODE_GMII: |
81 | return RGMII_FER_GMII(input); | 85 | return RGMII_FER_GMII(input); |
86 | case PHY_MODE_MII: | ||
87 | return RGMII_FER_MII(input); | ||
82 | case PHY_MODE_RTBI: | 88 | case PHY_MODE_RTBI: |
83 | return RGMII_FER_RTBI(input); | 89 | return RGMII_FER_RTBI(input); |
84 | default: | 90 | default: |
diff --git a/drivers/net/irda/irda-usb.c b/drivers/net/irda/irda-usb.c index 6f50ed7b183f..18b471cd1447 100644 --- a/drivers/net/irda/irda-usb.c +++ b/drivers/net/irda/irda-usb.c | |||
@@ -1024,7 +1024,7 @@ static int irda_usb_is_receiving(struct irda_usb_cb *self) | |||
1024 | * Upload firmware code to SigmaTel 421X IRDA-USB dongle | 1024 | * Upload firmware code to SigmaTel 421X IRDA-USB dongle |
1025 | */ | 1025 | */ |
1026 | static int stir421x_fw_upload(struct irda_usb_cb *self, | 1026 | static int stir421x_fw_upload(struct irda_usb_cb *self, |
1027 | unsigned char *patch, | 1027 | const unsigned char *patch, |
1028 | const unsigned int patch_len) | 1028 | const unsigned int patch_len) |
1029 | { | 1029 | { |
1030 | int ret = -ENOMEM; | 1030 | int ret = -ENOMEM; |
@@ -1073,11 +1073,11 @@ static int stir421x_fw_upload(struct irda_usb_cb *self, | |||
1073 | */ | 1073 | */ |
1074 | static int stir421x_patch_device(struct irda_usb_cb *self) | 1074 | static int stir421x_patch_device(struct irda_usb_cb *self) |
1075 | { | 1075 | { |
1076 | unsigned int i; | 1076 | unsigned int i; |
1077 | int ret; | 1077 | int ret; |
1078 | char stir421x_fw_name[11]; | 1078 | char stir421x_fw_name[11]; |
1079 | const struct firmware *fw; | 1079 | const struct firmware *fw; |
1080 | unsigned char *fw_version_ptr; /* pointer to version string */ | 1080 | const unsigned char *fw_version_ptr; /* pointer to version string */ |
1081 | unsigned long fw_version = 0; | 1081 | unsigned long fw_version = 0; |
1082 | 1082 | ||
1083 | /* | 1083 | /* |
diff --git a/drivers/net/irda/pxaficp_ir.c b/drivers/net/irda/pxaficp_ir.c index d5c2d27f3ea4..f76b0b6c277d 100644 --- a/drivers/net/irda/pxaficp_ir.c +++ b/drivers/net/irda/pxaficp_ir.c | |||
@@ -13,16 +13,8 @@ | |||
13 | * | 13 | * |
14 | */ | 14 | */ |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/types.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/errno.h> | ||
19 | #include <linux/netdevice.h> | 16 | #include <linux/netdevice.h> |
20 | #include <linux/slab.h> | ||
21 | #include <linux/rtnetlink.h> | ||
22 | #include <linux/interrupt.h> | ||
23 | #include <linux/dma-mapping.h> | ||
24 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
25 | #include <linux/pm.h> | ||
26 | #include <linux/clk.h> | 18 | #include <linux/clk.h> |
27 | 19 | ||
28 | #include <net/irda/irda.h> | 20 | #include <net/irda/irda.h> |
@@ -30,17 +22,9 @@ | |||
30 | #include <net/irda/wrapper.h> | 22 | #include <net/irda/wrapper.h> |
31 | #include <net/irda/irda_device.h> | 23 | #include <net/irda/irda_device.h> |
32 | 24 | ||
33 | #include <asm/irq.h> | ||
34 | #include <asm/dma.h> | 25 | #include <asm/dma.h> |
35 | #include <asm/delay.h> | ||
36 | #include <asm/hardware.h> | ||
37 | #include <asm/arch/irda.h> | 26 | #include <asm/arch/irda.h> |
38 | #include <asm/arch/pxa-regs.h> | 27 | #include <asm/arch/pxa-regs.h> |
39 | #include <asm/arch/pxa2xx-gpio.h> | ||
40 | |||
41 | #ifdef CONFIG_MACH_MAINSTONE | ||
42 | #include <asm/arch/mainstone.h> | ||
43 | #endif | ||
44 | 28 | ||
45 | #define IrSR_RXPL_NEG_IS_ZERO (1<<4) | 29 | #define IrSR_RXPL_NEG_IS_ZERO (1<<4) |
46 | #define IrSR_RXPL_POS_IS_ZERO 0x0 | 30 | #define IrSR_RXPL_POS_IS_ZERO 0x0 |
@@ -163,10 +147,6 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed) | |||
163 | /* set board transceiver to SIR mode */ | 147 | /* set board transceiver to SIR mode */ |
164 | si->pdata->transceiver_mode(si->dev, IR_SIRMODE); | 148 | si->pdata->transceiver_mode(si->dev, IR_SIRMODE); |
165 | 149 | ||
166 | /* configure GPIO46/47 */ | ||
167 | pxa_gpio_mode(GPIO46_STRXD_MD); | ||
168 | pxa_gpio_mode(GPIO47_STTXD_MD); | ||
169 | |||
170 | /* enable the STUART clock */ | 150 | /* enable the STUART clock */ |
171 | pxa_irda_enable_sirclk(si); | 151 | pxa_irda_enable_sirclk(si); |
172 | } | 152 | } |
@@ -201,10 +181,6 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed) | |||
201 | /* set board transceiver to FIR mode */ | 181 | /* set board transceiver to FIR mode */ |
202 | si->pdata->transceiver_mode(si->dev, IR_FIRMODE); | 182 | si->pdata->transceiver_mode(si->dev, IR_FIRMODE); |
203 | 183 | ||
204 | /* configure GPIO46/47 */ | ||
205 | pxa_gpio_mode(GPIO46_ICPRXD_MD); | ||
206 | pxa_gpio_mode(GPIO47_ICPTXD_MD); | ||
207 | |||
208 | /* enable the FICP clock */ | 184 | /* enable the FICP clock */ |
209 | pxa_irda_enable_firclk(si); | 185 | pxa_irda_enable_firclk(si); |
210 | 186 | ||
diff --git a/drivers/net/macb.c b/drivers/net/macb.c index 50688a52658e..0496d16f9de5 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c | |||
@@ -1281,8 +1281,45 @@ static int __exit macb_remove(struct platform_device *pdev) | |||
1281 | return 0; | 1281 | return 0; |
1282 | } | 1282 | } |
1283 | 1283 | ||
1284 | #ifdef CONFIG_PM | ||
1285 | static int macb_suspend(struct platform_device *pdev, pm_message_t state) | ||
1286 | { | ||
1287 | struct net_device *netdev = platform_get_drvdata(pdev); | ||
1288 | struct macb *bp = netdev_priv(netdev); | ||
1289 | |||
1290 | netif_device_detach(netdev); | ||
1291 | |||
1292 | #ifndef CONFIG_ARCH_AT91 | ||
1293 | clk_disable(bp->hclk); | ||
1294 | #endif | ||
1295 | clk_disable(bp->pclk); | ||
1296 | |||
1297 | return 0; | ||
1298 | } | ||
1299 | |||
1300 | static int macb_resume(struct platform_device *pdev) | ||
1301 | { | ||
1302 | struct net_device *netdev = platform_get_drvdata(pdev); | ||
1303 | struct macb *bp = netdev_priv(netdev); | ||
1304 | |||
1305 | clk_enable(bp->pclk); | ||
1306 | #ifndef CONFIG_ARCH_AT91 | ||
1307 | clk_enable(bp->hclk); | ||
1308 | #endif | ||
1309 | |||
1310 | netif_device_attach(netdev); | ||
1311 | |||
1312 | return 0; | ||
1313 | } | ||
1314 | #else | ||
1315 | #define macb_suspend NULL | ||
1316 | #define macb_resume NULL | ||
1317 | #endif | ||
1318 | |||
1284 | static struct platform_driver macb_driver = { | 1319 | static struct platform_driver macb_driver = { |
1285 | .remove = __exit_p(macb_remove), | 1320 | .remove = __exit_p(macb_remove), |
1321 | .suspend = macb_suspend, | ||
1322 | .resume = macb_resume, | ||
1286 | .driver = { | 1323 | .driver = { |
1287 | .name = "macb", | 1324 | .name = "macb", |
1288 | .owner = THIS_MODULE, | 1325 | .owner = THIS_MODULE, |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 72745ce588c6..efbc15567dd3 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -20,7 +20,7 @@ | |||
20 | #include <linux/errno.h> | 20 | #include <linux/errno.h> |
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | #include <linux/string.h> | 22 | #include <linux/string.h> |
23 | #include <linux/list.h> | 23 | #include <linux/rculist.h> |
24 | #include <linux/notifier.h> | 24 | #include <linux/notifier.h> |
25 | #include <linux/netdevice.h> | 25 | #include <linux/netdevice.h> |
26 | #include <linux/etherdevice.h> | 26 | #include <linux/etherdevice.h> |
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c index d82f2751d2c7..2b5006b9be67 100644 --- a/drivers/net/mlx4/fw.c +++ b/drivers/net/mlx4/fw.c | |||
@@ -101,6 +101,34 @@ static void dump_dev_cap_flags(struct mlx4_dev *dev, u32 flags) | |||
101 | mlx4_dbg(dev, " %s\n", fname[i]); | 101 | mlx4_dbg(dev, " %s\n", fname[i]); |
102 | } | 102 | } |
103 | 103 | ||
104 | int mlx4_MOD_STAT_CFG(struct mlx4_dev *dev, struct mlx4_mod_stat_cfg *cfg) | ||
105 | { | ||
106 | struct mlx4_cmd_mailbox *mailbox; | ||
107 | u32 *inbox; | ||
108 | int err = 0; | ||
109 | |||
110 | #define MOD_STAT_CFG_IN_SIZE 0x100 | ||
111 | |||
112 | #define MOD_STAT_CFG_PG_SZ_M_OFFSET 0x002 | ||
113 | #define MOD_STAT_CFG_PG_SZ_OFFSET 0x003 | ||
114 | |||
115 | mailbox = mlx4_alloc_cmd_mailbox(dev); | ||
116 | if (IS_ERR(mailbox)) | ||
117 | return PTR_ERR(mailbox); | ||
118 | inbox = mailbox->buf; | ||
119 | |||
120 | memset(inbox, 0, MOD_STAT_CFG_IN_SIZE); | ||
121 | |||
122 | MLX4_PUT(inbox, cfg->log_pg_sz, MOD_STAT_CFG_PG_SZ_OFFSET); | ||
123 | MLX4_PUT(inbox, cfg->log_pg_sz_m, MOD_STAT_CFG_PG_SZ_M_OFFSET); | ||
124 | |||
125 | err = mlx4_cmd(dev, mailbox->dma, 0, 0, MLX4_CMD_MOD_STAT_CFG, | ||
126 | MLX4_CMD_TIME_CLASS_A); | ||
127 | |||
128 | mlx4_free_cmd_mailbox(dev, mailbox); | ||
129 | return err; | ||
130 | } | ||
131 | |||
104 | int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | 132 | int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) |
105 | { | 133 | { |
106 | struct mlx4_cmd_mailbox *mailbox; | 134 | struct mlx4_cmd_mailbox *mailbox; |
diff --git a/drivers/net/mlx4/fw.h b/drivers/net/mlx4/fw.h index 306cb9b0242d..a0e046c149b7 100644 --- a/drivers/net/mlx4/fw.h +++ b/drivers/net/mlx4/fw.h | |||
@@ -38,6 +38,11 @@ | |||
38 | #include "mlx4.h" | 38 | #include "mlx4.h" |
39 | #include "icm.h" | 39 | #include "icm.h" |
40 | 40 | ||
41 | struct mlx4_mod_stat_cfg { | ||
42 | u8 log_pg_sz; | ||
43 | u8 log_pg_sz_m; | ||
44 | }; | ||
45 | |||
41 | struct mlx4_dev_cap { | 46 | struct mlx4_dev_cap { |
42 | int max_srq_sz; | 47 | int max_srq_sz; |
43 | int max_qp_sz; | 48 | int max_qp_sz; |
@@ -162,5 +167,6 @@ int mlx4_SET_ICM_SIZE(struct mlx4_dev *dev, u64 icm_size, u64 *aux_pages); | |||
162 | int mlx4_MAP_ICM_AUX(struct mlx4_dev *dev, struct mlx4_icm *icm); | 167 | int mlx4_MAP_ICM_AUX(struct mlx4_dev *dev, struct mlx4_icm *icm); |
163 | int mlx4_UNMAP_ICM_AUX(struct mlx4_dev *dev); | 168 | int mlx4_UNMAP_ICM_AUX(struct mlx4_dev *dev); |
164 | int mlx4_NOP(struct mlx4_dev *dev); | 169 | int mlx4_NOP(struct mlx4_dev *dev); |
170 | int mlx4_MOD_STAT_CFG(struct mlx4_dev *dev, struct mlx4_mod_stat_cfg *cfg); | ||
165 | 171 | ||
166 | #endif /* MLX4_FW_H */ | 172 | #endif /* MLX4_FW_H */ |
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c index a6aa49fc1d68..d3736013fe9b 100644 --- a/drivers/net/mlx4/main.c +++ b/drivers/net/mlx4/main.c | |||
@@ -485,6 +485,7 @@ static int mlx4_init_hca(struct mlx4_dev *dev) | |||
485 | struct mlx4_priv *priv = mlx4_priv(dev); | 485 | struct mlx4_priv *priv = mlx4_priv(dev); |
486 | struct mlx4_adapter adapter; | 486 | struct mlx4_adapter adapter; |
487 | struct mlx4_dev_cap dev_cap; | 487 | struct mlx4_dev_cap dev_cap; |
488 | struct mlx4_mod_stat_cfg mlx4_cfg; | ||
488 | struct mlx4_profile profile; | 489 | struct mlx4_profile profile; |
489 | struct mlx4_init_hca_param init_hca; | 490 | struct mlx4_init_hca_param init_hca; |
490 | u64 icm_size; | 491 | u64 icm_size; |
@@ -502,6 +503,12 @@ static int mlx4_init_hca(struct mlx4_dev *dev) | |||
502 | return err; | 503 | return err; |
503 | } | 504 | } |
504 | 505 | ||
506 | mlx4_cfg.log_pg_sz_m = 1; | ||
507 | mlx4_cfg.log_pg_sz = 0; | ||
508 | err = mlx4_MOD_STAT_CFG(dev, &mlx4_cfg); | ||
509 | if (err) | ||
510 | mlx4_warn(dev, "Failed to override log_pg_sz parameter\n"); | ||
511 | |||
505 | err = mlx4_dev_cap(dev, &dev_cap); | 512 | err = mlx4_dev_cap(dev, &dev_cap); |
506 | if (err) { | 513 | if (err) { |
507 | mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting.\n"); | 514 | mlx4_err(dev, "QUERY_DEV_CAP command failed, aborting.\n"); |
diff --git a/drivers/net/mlx4/mcg.c b/drivers/net/mlx4/mcg.c index 57f7f1f0d4ec..b4b57870ddfd 100644 --- a/drivers/net/mlx4/mcg.c +++ b/drivers/net/mlx4/mcg.c | |||
@@ -38,6 +38,9 @@ | |||
38 | 38 | ||
39 | #include "mlx4.h" | 39 | #include "mlx4.h" |
40 | 40 | ||
41 | #define MGM_QPN_MASK 0x00FFFFFF | ||
42 | #define MGM_BLCK_LB_BIT 30 | ||
43 | |||
41 | struct mlx4_mgm { | 44 | struct mlx4_mgm { |
42 | __be32 next_gid_index; | 45 | __be32 next_gid_index; |
43 | __be32 members_count; | 46 | __be32 members_count; |
@@ -153,7 +156,8 @@ static int find_mgm(struct mlx4_dev *dev, | |||
153 | return err; | 156 | return err; |
154 | } | 157 | } |
155 | 158 | ||
156 | int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]) | 159 | int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], |
160 | int block_mcast_loopback) | ||
157 | { | 161 | { |
158 | struct mlx4_priv *priv = mlx4_priv(dev); | 162 | struct mlx4_priv *priv = mlx4_priv(dev); |
159 | struct mlx4_cmd_mailbox *mailbox; | 163 | struct mlx4_cmd_mailbox *mailbox; |
@@ -202,13 +206,18 @@ int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]) | |||
202 | } | 206 | } |
203 | 207 | ||
204 | for (i = 0; i < members_count; ++i) | 208 | for (i = 0; i < members_count; ++i) |
205 | if (mgm->qp[i] == cpu_to_be32(qp->qpn)) { | 209 | if ((be32_to_cpu(mgm->qp[i]) & MGM_QPN_MASK) == qp->qpn) { |
206 | mlx4_dbg(dev, "QP %06x already a member of MGM\n", qp->qpn); | 210 | mlx4_dbg(dev, "QP %06x already a member of MGM\n", qp->qpn); |
207 | err = 0; | 211 | err = 0; |
208 | goto out; | 212 | goto out; |
209 | } | 213 | } |
210 | 214 | ||
211 | mgm->qp[members_count++] = cpu_to_be32(qp->qpn); | 215 | if (block_mcast_loopback) |
216 | mgm->qp[members_count++] = cpu_to_be32((qp->qpn & MGM_QPN_MASK) | | ||
217 | (1 << MGM_BLCK_LB_BIT)); | ||
218 | else | ||
219 | mgm->qp[members_count++] = cpu_to_be32(qp->qpn & MGM_QPN_MASK); | ||
220 | |||
212 | mgm->members_count = cpu_to_be32(members_count); | 221 | mgm->members_count = cpu_to_be32(members_count); |
213 | 222 | ||
214 | err = mlx4_WRITE_MCG(dev, index, mailbox); | 223 | err = mlx4_WRITE_MCG(dev, index, mailbox); |
@@ -283,7 +292,7 @@ int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16]) | |||
283 | 292 | ||
284 | members_count = be32_to_cpu(mgm->members_count); | 293 | members_count = be32_to_cpu(mgm->members_count); |
285 | for (loc = -1, i = 0; i < members_count; ++i) | 294 | for (loc = -1, i = 0; i < members_count; ++i) |
286 | if (mgm->qp[i] == cpu_to_be32(qp->qpn)) | 295 | if ((be32_to_cpu(mgm->qp[i]) & MGM_QPN_MASK) == qp->qpn) |
287 | loc = i; | 296 | loc = i; |
288 | 297 | ||
289 | if (loc == -1) { | 298 | if (loc == -1) { |
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 9a68d2ea5f3e..b3981ed972bf 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
@@ -556,6 +556,7 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size) | |||
556 | unsigned crc, reread_crc; | 556 | unsigned crc, reread_crc; |
557 | const struct firmware *fw; | 557 | const struct firmware *fw; |
558 | struct device *dev = &mgp->pdev->dev; | 558 | struct device *dev = &mgp->pdev->dev; |
559 | unsigned char *fw_readback; | ||
559 | struct mcp_gen_header *hdr; | 560 | struct mcp_gen_header *hdr; |
560 | size_t hdr_offset; | 561 | size_t hdr_offset; |
561 | int status; | 562 | int status; |
@@ -598,9 +599,15 @@ static int myri10ge_load_hotplug_firmware(struct myri10ge_priv *mgp, u32 * size) | |||
598 | mb(); | 599 | mb(); |
599 | readb(mgp->sram); | 600 | readb(mgp->sram); |
600 | } | 601 | } |
602 | fw_readback = vmalloc(fw->size); | ||
603 | if (!fw_readback) { | ||
604 | status = -ENOMEM; | ||
605 | goto abort_with_fw; | ||
606 | } | ||
601 | /* corruption checking is good for parity recovery and buggy chipset */ | 607 | /* corruption checking is good for parity recovery and buggy chipset */ |
602 | memcpy_fromio(fw->data, mgp->sram + MYRI10GE_FW_OFFSET, fw->size); | 608 | memcpy_fromio(fw_readback, mgp->sram + MYRI10GE_FW_OFFSET, fw->size); |
603 | reread_crc = crc32(~0, fw->data, fw->size); | 609 | reread_crc = crc32(~0, fw_readback, fw->size); |
610 | vfree(fw_readback); | ||
604 | if (crc != reread_crc) { | 611 | if (crc != reread_crc) { |
605 | dev_err(dev, "CRC failed(fw-len=%u), got 0x%x (expect 0x%x)\n", | 612 | dev_err(dev, "CRC failed(fw-len=%u), got 0x%x (expect 0x%x)\n", |
606 | (unsigned)fw->size, reread_crc, crc); | 613 | (unsigned)fw->size, reread_crc, crc); |
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 665341e43055..387a13395015 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c | |||
@@ -585,8 +585,9 @@ static struct config_item_type netconsole_target_type = { | |||
585 | * Group operations and type for netconsole_subsys. | 585 | * Group operations and type for netconsole_subsys. |
586 | */ | 586 | */ |
587 | 587 | ||
588 | static struct config_item *make_netconsole_target(struct config_group *group, | 588 | static int make_netconsole_target(struct config_group *group, |
589 | const char *name) | 589 | const char *name, |
590 | struct config_item **new_item) | ||
590 | { | 591 | { |
591 | unsigned long flags; | 592 | unsigned long flags; |
592 | struct netconsole_target *nt; | 593 | struct netconsole_target *nt; |
@@ -598,7 +599,7 @@ static struct config_item *make_netconsole_target(struct config_group *group, | |||
598 | nt = kzalloc(sizeof(*nt), GFP_KERNEL); | 599 | nt = kzalloc(sizeof(*nt), GFP_KERNEL); |
599 | if (!nt) { | 600 | if (!nt) { |
600 | printk(KERN_ERR "netconsole: failed to allocate memory\n"); | 601 | printk(KERN_ERR "netconsole: failed to allocate memory\n"); |
601 | return NULL; | 602 | return -ENOMEM; |
602 | } | 603 | } |
603 | 604 | ||
604 | nt->np.name = "netconsole"; | 605 | nt->np.name = "netconsole"; |
@@ -615,7 +616,8 @@ static struct config_item *make_netconsole_target(struct config_group *group, | |||
615 | list_add(&nt->list, &target_list); | 616 | list_add(&nt->list, &target_list); |
616 | spin_unlock_irqrestore(&target_list_lock, flags); | 617 | spin_unlock_irqrestore(&target_list_lock, flags); |
617 | 618 | ||
618 | return &nt->item; | 619 | *new_item = &nt->item; |
620 | return 0; | ||
619 | } | 621 | } |
620 | 622 | ||
621 | static void drop_netconsole_target(struct config_group *group, | 623 | static void drop_netconsole_target(struct config_group *group, |
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index c926bf0b190e..6b1d7a8edf15 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/if_arp.h> | 39 | #include <linux/if_arp.h> |
40 | #include <linux/ip.h> | 40 | #include <linux/ip.h> |
41 | #include <linux/tcp.h> | 41 | #include <linux/tcp.h> |
42 | #include <linux/smp_lock.h> | ||
42 | #include <linux/spinlock.h> | 43 | #include <linux/spinlock.h> |
43 | #include <linux/rwsem.h> | 44 | #include <linux/rwsem.h> |
44 | #include <linux/stddef.h> | 45 | #include <linux/stddef.h> |
@@ -353,6 +354,7 @@ static const int npindex_to_ethertype[NUM_NP] = { | |||
353 | */ | 354 | */ |
354 | static int ppp_open(struct inode *inode, struct file *file) | 355 | static int ppp_open(struct inode *inode, struct file *file) |
355 | { | 356 | { |
357 | cycle_kernel_lock(); | ||
356 | /* | 358 | /* |
357 | * This could (should?) be enforced by the permissions on /dev/ppp. | 359 | * This could (should?) be enforced by the permissions on /dev/ppp. |
358 | */ | 360 | */ |
diff --git a/drivers/net/tokenring/smctr.c b/drivers/net/tokenring/smctr.c index 5f1c5072b96f..fa73e6eed6be 100644 --- a/drivers/net/tokenring/smctr.c +++ b/drivers/net/tokenring/smctr.c | |||
@@ -48,6 +48,7 @@ | |||
48 | #include <linux/skbuff.h> | 48 | #include <linux/skbuff.h> |
49 | #include <linux/trdevice.h> | 49 | #include <linux/trdevice.h> |
50 | #include <linux/bitops.h> | 50 | #include <linux/bitops.h> |
51 | #include <linux/firmware.h> | ||
51 | 52 | ||
52 | #include <asm/system.h> | 53 | #include <asm/system.h> |
53 | #include <asm/io.h> | 54 | #include <asm/io.h> |
@@ -59,7 +60,6 @@ | |||
59 | #endif | 60 | #endif |
60 | 61 | ||
61 | #include "smctr.h" /* Our Stuff */ | 62 | #include "smctr.h" /* Our Stuff */ |
62 | #include "smctr_firmware.h" /* SMC adapter firmware */ | ||
63 | 63 | ||
64 | static char version[] __initdata = KERN_INFO "smctr.c: v1.4 7/12/00 by jschlst@samba.org\n"; | 64 | static char version[] __initdata = KERN_INFO "smctr.c: v1.4 7/12/00 by jschlst@samba.org\n"; |
65 | static const char cardname[] = "smctr"; | 65 | static const char cardname[] = "smctr"; |
@@ -103,7 +103,8 @@ static int smctr_clear_trc_reset(int ioaddr); | |||
103 | static int smctr_close(struct net_device *dev); | 103 | static int smctr_close(struct net_device *dev); |
104 | 104 | ||
105 | /* D */ | 105 | /* D */ |
106 | static int smctr_decode_firmware(struct net_device *dev); | 106 | static int smctr_decode_firmware(struct net_device *dev, |
107 | const struct firmware *fw); | ||
107 | static int smctr_disable_16bit(struct net_device *dev); | 108 | static int smctr_disable_16bit(struct net_device *dev); |
108 | static int smctr_disable_adapter_ctrl_store(struct net_device *dev); | 109 | static int smctr_disable_adapter_ctrl_store(struct net_device *dev); |
109 | static int smctr_disable_bic_int(struct net_device *dev); | 110 | static int smctr_disable_bic_int(struct net_device *dev); |
@@ -748,7 +749,8 @@ static int smctr_close(struct net_device *dev) | |||
748 | return (0); | 749 | return (0); |
749 | } | 750 | } |
750 | 751 | ||
751 | static int smctr_decode_firmware(struct net_device *dev) | 752 | static int smctr_decode_firmware(struct net_device *dev, |
753 | const struct firmware *fw) | ||
752 | { | 754 | { |
753 | struct net_local *tp = netdev_priv(dev); | 755 | struct net_local *tp = netdev_priv(dev); |
754 | short bit = 0x80, shift = 12; | 756 | short bit = 0x80, shift = 12; |
@@ -762,10 +764,10 @@ static int smctr_decode_firmware(struct net_device *dev) | |||
762 | if(smctr_debug > 10) | 764 | if(smctr_debug > 10) |
763 | printk(KERN_DEBUG "%s: smctr_decode_firmware\n", dev->name); | 765 | printk(KERN_DEBUG "%s: smctr_decode_firmware\n", dev->name); |
764 | 766 | ||
765 | weight = *(long *)(tp->ptr_ucode + WEIGHT_OFFSET); | 767 | weight = *(long *)(fw->data + WEIGHT_OFFSET); |
766 | tsize = *(__u8 *)(tp->ptr_ucode + TREE_SIZE_OFFSET); | 768 | tsize = *(__u8 *)(fw->data + TREE_SIZE_OFFSET); |
767 | tree = (DECODE_TREE_NODE *)(tp->ptr_ucode + TREE_OFFSET); | 769 | tree = (DECODE_TREE_NODE *)(fw->data + TREE_OFFSET); |
768 | ucode = (__u8 *)(tp->ptr_ucode + TREE_OFFSET | 770 | ucode = (__u8 *)(fw->data + TREE_OFFSET |
769 | + (tsize * sizeof(DECODE_TREE_NODE))); | 771 | + (tsize * sizeof(DECODE_TREE_NODE))); |
770 | mem = (__u16 *)(tp->ram_access); | 772 | mem = (__u16 *)(tp->ram_access); |
771 | 773 | ||
@@ -2963,34 +2965,44 @@ static int smctr_link_tx_fcbs_to_bdbs(struct net_device *dev) | |||
2963 | static int smctr_load_firmware(struct net_device *dev) | 2965 | static int smctr_load_firmware(struct net_device *dev) |
2964 | { | 2966 | { |
2965 | struct net_local *tp = netdev_priv(dev); | 2967 | struct net_local *tp = netdev_priv(dev); |
2968 | const struct firmware *fw; | ||
2966 | __u16 i, checksum = 0; | 2969 | __u16 i, checksum = 0; |
2967 | int err = 0; | 2970 | int err = 0; |
2968 | 2971 | ||
2969 | if(smctr_debug > 10) | 2972 | if(smctr_debug > 10) |
2970 | printk(KERN_DEBUG "%s: smctr_load_firmware\n", dev->name); | 2973 | printk(KERN_DEBUG "%s: smctr_load_firmware\n", dev->name); |
2971 | 2974 | ||
2972 | tp->ptr_ucode = smctr_code; | 2975 | if (request_firmware(&fw, "tr_smctr.bin", &dev->dev)) { |
2976 | printk(KERN_ERR "%s: firmware not found\n", dev->name); | ||
2977 | return (UCODE_NOT_PRESENT); | ||
2978 | } | ||
2979 | |||
2973 | tp->num_of_tx_buffs = 4; | 2980 | tp->num_of_tx_buffs = 4; |
2974 | tp->mode_bits |= UMAC; | 2981 | tp->mode_bits |= UMAC; |
2975 | tp->receive_mask = 0; | 2982 | tp->receive_mask = 0; |
2976 | tp->max_packet_size = 4177; | 2983 | tp->max_packet_size = 4177; |
2977 | 2984 | ||
2978 | /* Can only upload the firmware once per adapter reset. */ | 2985 | /* Can only upload the firmware once per adapter reset. */ |
2979 | if(tp->microcode_version != 0) | 2986 | if (tp->microcode_version != 0) { |
2980 | return (UCODE_PRESENT); | 2987 | err = (UCODE_PRESENT); |
2988 | goto out; | ||
2989 | } | ||
2981 | 2990 | ||
2982 | /* Verify the firmware exists and is there in the right amount. */ | 2991 | /* Verify the firmware exists and is there in the right amount. */ |
2983 | if (!tp->ptr_ucode | 2992 | if (!fw->data |
2984 | || (*(tp->ptr_ucode + UCODE_VERSION_OFFSET) < UCODE_VERSION)) | 2993 | || (*(fw->data + UCODE_VERSION_OFFSET) < UCODE_VERSION)) |
2985 | { | 2994 | { |
2986 | return (UCODE_NOT_PRESENT); | 2995 | err = (UCODE_NOT_PRESENT); |
2996 | goto out; | ||
2987 | } | 2997 | } |
2988 | 2998 | ||
2989 | /* UCODE_SIZE is not included in Checksum. */ | 2999 | /* UCODE_SIZE is not included in Checksum. */ |
2990 | for(i = 0; i < *((__u16 *)(tp->ptr_ucode + UCODE_SIZE_OFFSET)); i += 2) | 3000 | for(i = 0; i < *((__u16 *)(fw->data + UCODE_SIZE_OFFSET)); i += 2) |
2991 | checksum += *((__u16 *)(tp->ptr_ucode + 2 + i)); | 3001 | checksum += *((__u16 *)(fw->data + 2 + i)); |
2992 | if(checksum) | 3002 | if (checksum) { |
2993 | return (UCODE_NOT_PRESENT); | 3003 | err = (UCODE_NOT_PRESENT); |
3004 | goto out; | ||
3005 | } | ||
2994 | 3006 | ||
2995 | /* At this point we have a valid firmware image, lets kick it on up. */ | 3007 | /* At this point we have a valid firmware image, lets kick it on up. */ |
2996 | smctr_enable_adapter_ram(dev); | 3008 | smctr_enable_adapter_ram(dev); |
@@ -2998,7 +3010,7 @@ static int smctr_load_firmware(struct net_device *dev) | |||
2998 | smctr_set_page(dev, (__u8 *)tp->ram_access); | 3010 | smctr_set_page(dev, (__u8 *)tp->ram_access); |
2999 | 3011 | ||
3000 | if((smctr_checksum_firmware(dev)) | 3012 | if((smctr_checksum_firmware(dev)) |
3001 | || (*(tp->ptr_ucode + UCODE_VERSION_OFFSET) | 3013 | || (*(fw->data + UCODE_VERSION_OFFSET) |
3002 | > tp->microcode_version)) | 3014 | > tp->microcode_version)) |
3003 | { | 3015 | { |
3004 | smctr_enable_adapter_ctrl_store(dev); | 3016 | smctr_enable_adapter_ctrl_store(dev); |
@@ -3007,9 +3019,9 @@ static int smctr_load_firmware(struct net_device *dev) | |||
3007 | for(i = 0; i < CS_RAM_SIZE; i += 2) | 3019 | for(i = 0; i < CS_RAM_SIZE; i += 2) |
3008 | *((__u16 *)(tp->ram_access + i)) = 0; | 3020 | *((__u16 *)(tp->ram_access + i)) = 0; |
3009 | 3021 | ||
3010 | smctr_decode_firmware(dev); | 3022 | smctr_decode_firmware(dev, fw); |
3011 | 3023 | ||
3012 | tp->microcode_version = *(tp->ptr_ucode + UCODE_VERSION_OFFSET); *((__u16 *)(tp->ram_access + CS_RAM_VERSION_OFFSET)) | 3024 | tp->microcode_version = *(fw->data + UCODE_VERSION_OFFSET); *((__u16 *)(tp->ram_access + CS_RAM_VERSION_OFFSET)) |
3013 | = (tp->microcode_version << 8); | 3025 | = (tp->microcode_version << 8); |
3014 | *((__u16 *)(tp->ram_access + CS_RAM_CHECKSUM_OFFSET)) | 3026 | *((__u16 *)(tp->ram_access + CS_RAM_CHECKSUM_OFFSET)) |
3015 | = ~(tp->microcode_version << 8) + 1; | 3027 | = ~(tp->microcode_version << 8) + 1; |
@@ -3023,7 +3035,8 @@ static int smctr_load_firmware(struct net_device *dev) | |||
3023 | err = UCODE_PRESENT; | 3035 | err = UCODE_PRESENT; |
3024 | 3036 | ||
3025 | smctr_disable_16bit(dev); | 3037 | smctr_disable_16bit(dev); |
3026 | 3038 | out: | |
3039 | release_firmware(fw); | ||
3027 | return (err); | 3040 | return (err); |
3028 | } | 3041 | } |
3029 | 3042 | ||
@@ -5651,6 +5664,7 @@ static int io[SMCTR_MAX_ADAPTERS]; | |||
5651 | static int irq[SMCTR_MAX_ADAPTERS]; | 5664 | static int irq[SMCTR_MAX_ADAPTERS]; |
5652 | 5665 | ||
5653 | MODULE_LICENSE("GPL"); | 5666 | MODULE_LICENSE("GPL"); |
5667 | MODULE_FIRMWARE("tr_smctr.bin"); | ||
5654 | 5668 | ||
5655 | module_param_array(io, int, NULL, 0); | 5669 | module_param_array(io, int, NULL, 0); |
5656 | module_param_array(irq, int, NULL, 0); | 5670 | module_param_array(irq, int, NULL, 0); |
diff --git a/drivers/net/tokenring/smctr.h b/drivers/net/tokenring/smctr.h index 88dfa2e01d6e..52df7dd815cc 100644 --- a/drivers/net/tokenring/smctr.h +++ b/drivers/net/tokenring/smctr.h | |||
@@ -1042,8 +1042,6 @@ typedef struct net_local { | |||
1042 | __u16 functional_address[2]; | 1042 | __u16 functional_address[2]; |
1043 | __u16 bitwise_group_address[2]; | 1043 | __u16 bitwise_group_address[2]; |
1044 | 1044 | ||
1045 | const __u8 *ptr_ucode; | ||
1046 | |||
1047 | __u8 cleanup; | 1045 | __u8 cleanup; |
1048 | 1046 | ||
1049 | struct sk_buff_head SendSkbQueue; | 1047 | struct sk_buff_head SendSkbQueue; |
diff --git a/drivers/net/tokenring/smctr_firmware.h b/drivers/net/tokenring/smctr_firmware.h deleted file mode 100644 index 292e50ddf01a..000000000000 --- a/drivers/net/tokenring/smctr_firmware.h +++ /dev/null | |||
@@ -1,978 +0,0 @@ | |||
1 | /* | ||
2 | * The firmware this driver downloads into the tokenring card is a | ||
3 | * separate program and is not GPL'd source code, even though the Linux | ||
4 | * side driver and the routine that loads this data into the card are. | ||
5 | * | ||
6 | * This firmware is licensed to you strictly for use in conjunction | ||
7 | * with the use of SMC TokenRing adapters. There is no waranty | ||
8 | * expressed or implied about its fitness for any purpose. | ||
9 | */ | ||
10 | |||
11 | /* smctr_firmware.h: SMC TokenRing driver firmware dump for Linux. | ||
12 | * | ||
13 | * Notes: | ||
14 | * - This is an 8K binary image. (MCT.BIN v6.3C1 03/01/95) | ||
15 | * | ||
16 | * Authors: | ||
17 | * - Jay Schulist <jschlst@samba.org> | ||
18 | */ | ||
19 | |||
20 | |||
21 | #if defined(CONFIG_SMCTR) || defined(CONFIG_SMCTR_MODULE) | ||
22 | |||
23 | static const unsigned char smctr_code[] = { | ||
24 | 0x0BC, 0x01D, 0x012, 0x03B, 0x063, 0x0B4, 0x0E9, 0x000, | ||
25 | 0x000, 0x01F, 0x000, 0x001, 0x001, 0x000, 0x002, 0x005, | ||
26 | 0x001, 0x000, 0x006, 0x003, 0x001, 0x000, 0x004, 0x009, | ||
27 | 0x001, 0x000, 0x00A, 0x007, 0x001, 0x000, 0x008, 0x00B, | ||
28 | 0x001, 0x000, 0x00C, 0x000, 0x000, 0x000, 0x000, 0x00F, | ||
29 | 0x001, 0x000, 0x010, 0x00D, 0x001, 0x000, 0x00E, 0x013, | ||
30 | 0x001, 0x000, 0x014, 0x011, 0x001, 0x000, 0x012, 0x000, | ||
31 | 0x000, 0x005, 0x000, 0x015, 0x001, 0x000, 0x016, 0x019, | ||
32 | 0x001, 0x000, 0x01A, 0x017, 0x001, 0x000, 0x018, 0x000, | ||
33 | 0x000, 0x00E, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, | ||
34 | 0x000, 0x004, 0x000, 0x01B, 0x001, 0x000, 0x01C, 0x000, | ||
35 | 0x000, 0x007, 0x000, 0x000, 0x000, 0x00F, 0x000, 0x000, | ||
36 | 0x000, 0x00B, 0x000, 0x01D, 0x001, 0x000, 0x01E, 0x000, | ||
37 | 0x000, 0x008, 0x000, 0x000, 0x000, 0x002, 0x000, 0x000, | ||
38 | 0x000, 0x00C, 0x000, 0x000, 0x000, 0x006, 0x000, 0x000, | ||
39 | 0x000, 0x00D, 0x000, 0x000, 0x000, 0x003, 0x000, 0x000, | ||
40 | 0x000, 0x00A, 0x000, 0x000, 0x000, 0x009, 0x000, 0x004, | ||
41 | 0x078, 0x0C6, 0x0BC, 0x001, 0x094, 0x004, 0x093, 0x080, | ||
42 | 0x0C8, 0x040, 0x062, 0x0E9, 0x0DA, 0x01C, 0x02C, 0x015, | ||
43 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x058, | ||
44 | 0x00B, 0x0E9, 0x0E5, 0x0D5, 0x095, 0x0C1, 0x09D, 0x077, | ||
45 | 0x0CE, 0x0BB, 0x0A0, 0x06E, 0x01C, 0x005, 0x0F6, 0x077, | ||
46 | 0x0C6, 0x002, 0x0FA, 0x096, 0x070, 0x0E8, 0x01D, 0x0C0, | ||
47 | 0x017, 0x00E, 0x002, 0x0FA, 0x058, 0x07D, 0x0C0, 0x05F, | ||
48 | 0x072, 0x0CE, 0x0EC, 0x0A4, 0x0C3, 0x084, 0x090, 0x07A, | ||
49 | 0x030, 0x0CD, 0x08D, 0x079, 0x019, 0x0E7, 0x06C, 0x024, | ||
50 | 0x027, 0x09C, 0x008, 0x039, 0x007, 0x038, 0x0A8, 0x04A, | ||
51 | 0x04C, 0x0EA, 0x04D, 0x098, 0x09B, 0x024, 0x04C, 0x0C0, | ||
52 | 0x026, 0x0D3, 0x0E7, 0x054, 0x05A, 0x04D, 0x0F2, 0x04C, | ||
53 | 0x00C, 0x013, 0x023, 0x049, 0x090, 0x032, 0x06E, 0x0A4, | ||
54 | 0x0DF, 0x093, 0x071, 0x013, 0x077, 0x026, 0x0E1, 0x026, | ||
55 | 0x0F8, 0x026, 0x00C, 0x04C, 0x012, 0x026, 0x008, 0x009, | ||
56 | 0x082, 0x082, 0x060, 0x0A9, 0x030, 0x079, 0x036, 0x0B0, | ||
57 | 0x0B2, 0x0A8, 0x0A7, 0x072, 0x064, 0x08F, 0x09B, 0x033, | ||
58 | 0x033, 0x0F9, 0x0B8, 0x039, 0x0D5, 0x011, 0x073, 0x0AA, | ||
59 | 0x075, 0x026, 0x05D, 0x026, 0x051, 0x093, 0x02A, 0x049, | ||
60 | 0x094, 0x0C9, 0x095, 0x089, 0x0BC, 0x04D, 0x0C8, 0x09B, | ||
61 | 0x080, 0x09B, 0x0A0, 0x099, 0x006, 0x04C, 0x086, 0x026, | ||
62 | 0x058, 0x09B, 0x0A4, 0x09B, 0x099, 0x037, 0x062, 0x06C, | ||
63 | 0x067, 0x09B, 0x033, 0x030, 0x0BF, 0x036, 0x066, 0x061, | ||
64 | 0x0BF, 0x036, 0x0EC, 0x0C5, 0x0BD, 0x066, 0x082, 0x05A, | ||
65 | 0x050, 0x031, 0x0D5, 0x09D, 0x098, 0x018, 0x029, 0x03C, | ||
66 | 0x098, 0x086, 0x04C, 0x017, 0x026, 0x03E, 0x02C, 0x0B8, | ||
67 | 0x069, 0x03B, 0x049, 0x02E, 0x0B4, 0x008, 0x043, 0x01A, | ||
68 | 0x0A4, 0x0F9, 0x0B3, 0x051, 0x0F1, 0x010, 0x0F3, 0x043, | ||
69 | 0x0CD, 0x008, 0x06F, 0x063, 0x079, 0x0B3, 0x033, 0x00E, | ||
70 | 0x013, 0x098, 0x049, 0x098, 0x004, 0x0DA, 0x07C, 0x0E0, | ||
71 | 0x052, 0x079, 0x031, 0x00C, 0x098, 0x02E, 0x04D, 0x0AC, | ||
72 | 0x02C, 0x084, 0x014, 0x0EE, 0x04C, 0x0FE, 0x067, 0x05E, | ||
73 | 0x0E4, 0x09A, 0x075, 0x029, 0x0D7, 0x0A9, 0x035, 0x03A, | ||
74 | 0x094, 0x05B, 0x0D5, 0x09B, 0x058, 0x0B4, 0x0AF, 0x075, | ||
75 | 0x066, 0x0AF, 0x014, 0x0A9, 0x0EF, 0x040, 0x095, 0x025, | ||
76 | 0x008, 0x0B9, 0x0AD, 0x042, 0x0FC, 0x0D8, 0x0D9, 0x08C, | ||
77 | 0x033, 0x00E, 0x013, 0x098, 0x066, 0x01E, 0x045, 0x0AC, | ||
78 | 0x0B0, 0x00C, 0x042, 0x0D3, 0x0CC, 0x0A6, 0x012, 0x062, | ||
79 | 0x0DE, 0x0B4, 0x0B1, 0x080, 0x049, 0x07D, 0x0A2, 0x0DE, | ||
80 | 0x0B4, 0x018, 0x0C0, 0x024, 0x084, 0x0E6, 0x054, 0x0F5, | ||
81 | 0x083, 0x046, 0x001, 0x068, 0x01A, 0x063, 0x00C, 0x0C6, | ||
82 | 0x012, 0x064, 0x0FA, 0x04C, 0x035, 0x01C, 0x02C, 0x00E, | ||
83 | 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, | ||
84 | 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AD, 0x0D7, 0x002, | ||
85 | 0x070, 0x0E0, 0x04C, 0x0F3, 0x0A1, 0x0C1, 0x0D5, 0x0C0, | ||
86 | 0x03C, 0x0B9, 0x069, 0x039, 0x060, 0x04E, 0x058, 0x077, | ||
87 | 0x002, 0x067, 0x093, 0x03C, 0x099, 0x0E4, 0x0CF, 0x038, | ||
88 | 0x01C, 0x097, 0x02E, 0x040, 0x01B, 0x090, 0x031, 0x046, | ||
89 | 0x0A3, 0x05E, 0x00E, 0x088, 0x034, 0x06A, 0x035, 0x0E0, | ||
90 | 0x0E8, 0x0AA, 0x035, 0x01A, 0x0A9, 0x0F5, 0x015, 0x046, | ||
91 | 0x0A3, 0x0EA, 0x07D, 0x04A, 0x0A3, 0x051, 0x0AA, 0x09F, | ||
92 | 0x070, 0x054, 0x0A6, 0x057, 0x02E, 0x0B4, 0x0CD, 0x0C8, | ||
93 | 0x0A3, 0x00C, 0x0C1, 0x0DA, 0x0C6, 0x0E1, 0x0CB, 0x07A, | ||
94 | 0x0D4, 0x01C, 0x068, 0x0FF, 0x0CF, 0x055, 0x0A8, 0x0C0, | ||
95 | 0x02D, 0x085, 0x011, 0x017, 0x044, 0x02A, 0x030, 0x00B, | ||
96 | 0x04A, 0x088, 0x0C2, 0x04D, 0x0B5, 0x020, 0x0D5, 0x026, | ||
97 | 0x001, 0x069, 0x051, 0x069, 0x052, 0x019, 0x052, 0x060, | ||
98 | 0x016, 0x095, 0x016, 0x082, 0x096, 0x054, 0x098, 0x005, | ||
99 | 0x0A5, 0x045, 0x0F3, 0x0DD, 0x06A, 0x0F9, 0x028, 0x018, | ||
100 | 0x0EF, 0x000, 0x030, 0x030, 0x051, 0x04E, 0x044, 0x05D, | ||
101 | 0x012, 0x0D1, 0x043, 0x0E6, 0x012, 0x06F, 0x09E, 0x0BA, | ||
102 | 0x0CC, 0x0DF, 0x025, 0x003, 0x01D, 0x0E0, 0x006, 0x006, | ||
103 | 0x00A, 0x030, 0x0CC, 0x0A9, 0x0EB, 0x02D, 0x000, 0x086, | ||
104 | 0x0A6, 0x012, 0x065, 0x04F, 0x056, 0x0D6, 0x065, 0x049, | ||
105 | 0x05F, 0x03D, 0x0E8, 0x037, 0x0C9, 0x040, 0x0C7, 0x078, | ||
106 | 0x001, 0x081, 0x082, 0x08C, 0x033, 0x018, 0x049, 0x080, | ||
107 | 0x0AE, 0x040, 0x0C5, 0x018, 0x005, 0x09C, 0x06D, 0x018, | ||
108 | 0x066, 0x00E, 0x0F3, 0x0A0, 0x0C6, 0x012, 0x062, 0x0DE, | ||
109 | 0x0F5, 0x004, 0x0B4, 0x0AC, 0x06B, 0x0C6, 0x019, 0x091, | ||
110 | 0x073, 0x005, 0x048, 0x02E, 0x072, 0x094, 0x080, 0x073, | ||
111 | 0x0A1, 0x0C8, 0x047, 0x036, 0x066, 0x064, 0x02F, 0x036, | ||
112 | 0x066, 0x064, 0x007, 0x099, 0x002, 0x091, 0x08E, 0x072, | ||
113 | 0x0D1, 0x00F, 0x09D, 0x006, 0x031, 0x073, 0x0A0, 0x0C3, | ||
114 | 0x051, 0x06A, 0x01A, 0x020, 0x0BF, 0x03A, 0x00C, 0x02C, | ||
115 | 0x073, 0x087, 0x043, 0x05E, 0x060, 0x002, 0x023, 0x0FC, | ||
116 | 0x0E0, 0x0D6, 0x035, 0x0EF, 0x09E, 0x0F5, 0x0EF, 0x092, | ||
117 | 0x081, 0x08E, 0x0F0, 0x003, 0x003, 0x005, 0x018, 0x066, | ||
118 | 0x045, 0x0CC, 0x00B, 0x048, 0x02E, 0x070, 0x00A, 0x040, | ||
119 | 0x039, 0x0D0, 0x0E4, 0x023, 0x09B, 0x033, 0x032, 0x017, | ||
120 | 0x09B, 0x033, 0x032, 0x003, 0x0CC, 0x085, 0x048, 0x0C7, | ||
121 | 0x038, 0x014, 0x0A5, 0x0CE, 0x029, 0x07E, 0x0D2, 0x080, | ||
122 | 0x0A1, 0x0A8, 0x0B4, 0x048, 0x088, 0x02F, 0x0CE, 0x083, | ||
123 | 0x00B, 0x01C, 0x0E1, 0x0D0, 0x0D7, 0x098, 0x004, 0x088, | ||
124 | 0x087, 0x0CE, 0x096, 0x031, 0x073, 0x0A5, 0x08F, 0x0F3, | ||
125 | 0x083, 0x058, 0x0D7, 0x0BE, 0x07B, 0x082, 0x0AF, 0x092, | ||
126 | 0x081, 0x08E, 0x0F0, 0x003, 0x003, 0x005, 0x018, 0x066, | ||
127 | 0x045, 0x0CC, 0x015, 0x020, 0x0B9, 0x0C8, 0x029, 0x000, | ||
128 | 0x0E7, 0x043, 0x090, 0x08E, 0x06C, 0x0CC, 0x0C8, 0x05E, | ||
129 | 0x06C, 0x0CC, 0x0C8, 0x00F, 0x032, 0x005, 0x023, 0x01C, | ||
130 | 0x0E4, 0x050, 0x0D4, 0x05A, 0x017, 0x088, 0x02F, 0x0CE, | ||
131 | 0x083, 0x010, 0x0F9, 0x0D0, 0x023, 0x017, 0x03A, 0x004, | ||
132 | 0x035, 0x0E6, 0x000, 0x022, 0x016, 0x039, 0x0C3, 0x0A3, | ||
133 | 0x0FC, 0x0E0, 0x0D6, 0x035, 0x0E0, 0x0BF, 0x0F4, 0x018, | ||
134 | 0x0F2, 0x02D, 0x04D, 0x043, 0x051, 0x06E, 0x05A, 0x022, | ||
135 | 0x01F, 0x030, 0x0D4, 0x017, 0x0E7, 0x041, 0x091, 0x073, | ||
136 | 0x005, 0x048, 0x02E, 0x077, 0x069, 0x000, 0x0E7, 0x043, | ||
137 | 0x090, 0x08E, 0x06C, 0x0CC, 0x0C8, 0x05E, 0x06C, 0x0CC, | ||
138 | 0x0C8, 0x00F, 0x032, 0x005, 0x023, 0x01C, 0x0EF, 0x04C, | ||
139 | 0x04E, 0x006, 0x004, 0x0C9, 0x09E, 0x00B, 0x0FF, 0x041, | ||
140 | 0x08F, 0x022, 0x0D4, 0x0D4, 0x035, 0x016, 0x0E5, 0x0A2, | ||
141 | 0x021, 0x0F3, 0x05A, 0x082, 0x0FC, 0x0E8, 0x032, 0x02E, | ||
142 | 0x060, 0x0A9, 0x005, 0x0CE, 0x013, 0x048, 0x007, 0x03A, | ||
143 | 0x01C, 0x084, 0x073, 0x066, 0x066, 0x042, 0x0F3, 0x066, | ||
144 | 0x066, 0x040, 0x079, 0x090, 0x029, 0x018, 0x0E7, 0x00A, | ||
145 | 0x098, 0x09C, 0x00A, 0x09E, 0x0B5, 0x012, 0x05C, 0x07C, | ||
146 | 0x0C3, 0x031, 0x08B, 0x098, 0x02A, 0x07C, 0x0D3, 0x0ED, | ||
147 | 0x038, 0x0E9, 0x0D3, 0x04E, 0x074, 0x0ED, 0x049, 0x09E, | ||
148 | 0x00B, 0x0FF, 0x041, 0x08F, 0x022, 0x0D4, 0x0D4, 0x035, | ||
149 | 0x016, 0x0E5, 0x0A2, 0x02D, 0x0EB, 0x045, 0x033, 0x08F, | ||
150 | 0x0FC, 0x0F7, 0x0A0, 0x05F, 0x025, 0x003, 0x01D, 0x0E4, | ||
151 | 0x00E, 0x006, 0x00A, 0x030, 0x0CC, 0x00C, 0x0F3, 0x0EB, | ||
152 | 0x040, 0x0DE, 0x061, 0x0A8, 0x070, 0x092, 0x00A, 0x000, | ||
153 | 0x0E1, 0x024, 0x01E, 0x000, 0x0E1, 0x024, 0x01E, 0x000, | ||
154 | 0x0E1, 0x024, 0x01E, 0x000, 0x0E1, 0x024, 0x01E, 0x000, | ||
155 | 0x0E1, 0x024, 0x01E, 0x001, 0x00F, 0x098, 0x02A, 0x00B, | ||
156 | 0x0F3, 0x0A0, 0x0C8, 0x0B9, 0x0A2, 0x0A4, 0x017, 0x03A, | ||
157 | 0x069, 0x000, 0x0E7, 0x043, 0x090, 0x08E, 0x075, 0x048, | ||
158 | 0x05E, 0x070, 0x069, 0x001, 0x0E6, 0x000, 0x052, 0x031, | ||
159 | 0x0CC, 0x018, 0x014, 0x0A5, 0x0CC, 0x009, 0x082, 0x094, | ||
160 | 0x073, 0x00C, 0x0A0, 0x091, 0x0F5, 0x025, 0x0CC, 0x007, | ||
161 | 0x006, 0x084, 0x084, 0x09F, 0x030, 0x0A2, 0x0A4, 0x07D, | ||
162 | 0x050, 0x075, 0x0A6, 0x065, 0x001, 0x04A, 0x08E, 0x0B4, | ||
163 | 0x0CC, 0x0C4, 0x035, 0x054, 0x075, 0x066, 0x0A4, 0x097, | ||
164 | 0x07A, 0x089, 0x050, 0x053, 0x013, 0x080, 0x019, 0x0E3, | ||
165 | 0x049, 0x05C, 0x06D, 0x0CE, 0x0A9, 0x040, 0x035, 0x006, | ||
166 | 0x078, 0x0D2, 0x057, 0x006, 0x0F1, 0x0B3, 0x02A, 0x08D, | ||
167 | 0x097, 0x023, 0x062, 0x092, 0x05D, 0x069, 0x099, 0x01C, | ||
168 | 0x06A, 0x036, 0x0E6, 0x0CD, 0x046, 0x012, 0x06F, 0x09E, | ||
169 | 0x0E1, 0x0AB, 0x0E4, 0x0A3, 0x00C, 0x0C0, 0x0DE, 0x0AC, | ||
170 | 0x0D4, 0x00D, 0x028, 0x01B, 0x0D0, 0x012, 0x0A5, 0x000, | ||
171 | 0x0F8, 0x04B, 0x0AD, 0x033, 0x028, 0x006, 0x0A0, 0x0DE, | ||
172 | 0x014, 0x097, 0x03A, 0x089, 0x05D, 0x0C0, 0x00D, 0x0E3, | ||
173 | 0x006, 0x090, 0x092, 0x05D, 0x069, 0x098, 0x066, 0x0B9, | ||
174 | 0x019, 0x095, 0x0E4, 0x0A8, 0x0CF, 0x09D, 0x033, 0x018, | ||
175 | 0x049, 0x0BE, 0x07B, 0x086, 0x0AF, 0x092, 0x08C, 0x033, | ||
176 | 0x024, 0x014, 0x00C, 0x0F4, 0x083, 0x024, 0x021, 0x0C2, | ||
177 | 0x070, 0x0BF, 0x0F4, 0x018, 0x0F2, 0x02D, 0x04D, 0x043, | ||
178 | 0x051, 0x06E, 0x05A, 0x022, 0x01F, 0x032, 0x0A8, 0x02F, | ||
179 | 0x0CE, 0x083, 0x022, 0x0E6, 0x005, 0x0A4, 0x017, 0x03A, | ||
180 | 0x069, 0x000, 0x0E7, 0x043, 0x090, 0x08E, 0x075, 0x048, | ||
181 | 0x05E, 0x070, 0x069, 0x001, 0x0E6, 0x042, 0x0A4, 0x063, | ||
182 | 0x098, 0x002, 0x029, 0x04B, 0x09A, 0x029, 0x078, 0x0E9, | ||
183 | 0x040, 0x053, 0x013, 0x081, 0x081, 0x032, 0x067, 0x082, | ||
184 | 0x0FF, 0x0D0, 0x063, 0x0C8, 0x0B5, 0x035, 0x00D, 0x045, | ||
185 | 0x0AE, 0x050, 0x008, 0x07C, 0x0E0, 0x0D0, 0x05F, 0x09D, | ||
186 | 0x006, 0x045, 0x0CC, 0x001, 0x0A4, 0x017, 0x03A, 0x069, | ||
187 | 0x000, 0x0E7, 0x043, 0x090, 0x08E, 0x075, 0x048, 0x05E, | ||
188 | 0x070, 0x069, 0x001, 0x0E6, 0x059, 0x0A4, 0x063, 0x098, | ||
189 | 0x01C, 0x052, 0x097, 0x03B, 0x030, 0x052, 0x08E, 0x07D, | ||
190 | 0x02A, 0x009, 0x01F, 0x051, 0x0EB, 0x0A4, 0x0A4, 0x00A, | ||
191 | 0x0B9, 0x094, 0x087, 0x0AE, 0x0C5, 0x031, 0x038, 0x002, | ||
192 | 0x0FF, 0x0D0, 0x063, 0x0C8, 0x0B5, 0x035, 0x00D, 0x045, | ||
193 | 0x0AE, 0x050, 0x008, 0x07C, 0x0EA, 0x020, 0x0BF, 0x03A, | ||
194 | 0x00C, 0x08B, 0x09A, 0x016, 0x090, 0x05C, 0x0E9, 0x0A4, | ||
195 | 0x003, 0x09D, 0x00E, 0x042, 0x039, 0x0D5, 0x021, 0x079, | ||
196 | 0x095, 0x048, 0x00F, 0x030, 0x00A, 0x091, 0x08E, 0x060, | ||
197 | 0x0EB, 0x029, 0x073, 0x000, 0x009, 0x054, 0x004, 0x0CA, | ||
198 | 0x082, 0x065, 0x052, 0x065, 0x0E4, 0x0CA, 0x022, 0x065, | ||
199 | 0x072, 0x065, 0x009, 0x032, 0x0E0, 0x099, 0x072, 0x04C, | ||
200 | 0x0C4, 0x0E0, 0x00B, 0x0FF, 0x041, 0x08F, 0x022, 0x0D4, | ||
201 | 0x0D4, 0x035, 0x016, 0x0B9, 0x040, 0x021, 0x0F3, 0x08A, | ||
202 | 0x082, 0x0FC, 0x0E8, 0x032, 0x02E, 0x060, 0x0A9, 0x005, | ||
203 | 0x0CE, 0x09A, 0x040, 0x039, 0x0D0, 0x0E4, 0x023, 0x09D, | ||
204 | 0x052, 0x017, 0x099, 0x054, 0x061, 0x099, 0x001, 0x0E6, | ||
205 | 0x040, 0x0A4, 0x063, 0x098, 0x004, 0x0B1, 0x084, 0x098, | ||
206 | 0x018, 0x0EF, 0x02D, 0x003, 0x005, 0x031, 0x038, 0x002, | ||
207 | 0x0FF, 0x0D0, 0x063, 0x0C8, 0x0B5, 0x035, 0x00D, 0x045, | ||
208 | 0x0B9, 0x068, 0x088, 0x07C, 0x0E0, 0x050, 0x05F, 0x09D, | ||
209 | 0x006, 0x045, 0x0CC, 0x081, 0x048, 0x02E, 0x071, 0x034, | ||
210 | 0x08F, 0x048, 0x001, 0x048, 0x015, 0x021, 0x005, 0x021, | ||
211 | 0x0E9, 0x00A, 0x052, 0x003, 0x0CE, 0x05A, 0x046, 0x039, | ||
212 | 0x0CF, 0x047, 0x08E, 0x060, 0x0AB, 0x01A, 0x0F3, 0x053, | ||
213 | 0x043, 0x0EB, 0x035, 0x024, 0x0B8, 0x01B, 0x030, 0x007, | ||
214 | 0x009, 0x08A, 0x074, 0x02F, 0x07E, 0x041, 0x074, 0x01E, | ||
215 | 0x01D, 0x00D, 0x087, 0x046, 0x049, 0x0D5, 0x095, 0x0D1, | ||
216 | 0x0D5, 0x0D5, 0x0BB, 0x0A9, 0x04E, 0x082, 0x09D, 0x005, | ||
217 | 0x03A, 0x00A, 0x074, 0x014, 0x0E8, 0x029, 0x0D0, 0x042, | ||
218 | 0x074, 0x05B, 0x0CE, 0x050, 0x0C4, 0x007, 0x045, 0x0BC, | ||
219 | 0x0E2, 0x00C, 0x040, 0x074, 0x05B, 0x0CE, 0x083, 0x004, | ||
220 | 0x0F9, 0x095, 0x04D, 0x013, 0x063, 0x05E, 0x06F, 0x031, | ||
221 | 0x03B, 0x0A0, 0x08B, 0x0A2, 0x0C5, 0x039, 0x08D, 0x078, | ||
222 | 0x03A, 0x022, 0x0A0, 0x000, 0x06B, 0x0C1, 0x0D1, 0x054, | ||
223 | 0x060, 0x016, 0x0D9, 0x091, 0x0A2, 0x0E7, 0x043, 0x08C, | ||
224 | 0x024, 0x0DC, 0x01C, 0x0E0, 0x051, 0x017, 0x039, 0x06B, | ||
225 | 0x03B, 0x0CC, 0x04B, 0x042, 0x02E, 0x06B, 0x050, 0x0BF, | ||
226 | 0x036, 0x036, 0x065, 0x04F, 0x07A, 0x018, 0x055, 0x025, | ||
227 | 0x078, 0x098, 0x023, 0x0E7, 0x050, 0x03E, 0x0F3, 0x081, | ||
228 | 0x04C, 0x002, 0x06D, 0x03E, 0x071, 0x053, 0x0AF, 0x078, | ||
229 | 0x0A9, 0x0D4, 0x0A6, 0x029, 0x0B1, 0x0BC, 0x0D9, 0x099, | ||
230 | 0x0B2, 0x08E, 0x062, 0x08F, 0x022, 0x02E, 0x075, 0x016, | ||
231 | 0x0B0, 0x0B2, 0x0AB, 0x023, 0x028, 0x016, 0x054, 0x052, | ||
232 | 0x031, 0x0BC, 0x0D9, 0x099, 0x0B2, 0x08E, 0x066, 0x019, | ||
233 | 0x002, 0x02E, 0x075, 0x016, 0x050, 0x02C, 0x0A9, 0x0C8, | ||
234 | 0x0C6, 0x0F5, 0x020, 0x0D3, 0x0E4, 0x07F, 0x04F, 0x09C, | ||
235 | 0x00A, 0x0D6, 0x016, 0x07F, 0x090, 0x0EE, 0x04C, 0x0EB, | ||
236 | 0x0CF, 0x0E2, 0x088, 0x0BA, 0x02F, 0x042, 0x086, 0x0AE, | ||
237 | 0x0BD, 0x0E5, 0x0A7, 0x052, 0x09F, 0x093, 0x063, 0x079, | ||
238 | 0x0EB, 0x033, 0x008, 0x0F9, 0x094, 0x052, 0x047, 0x0CD, | ||
239 | 0x099, 0x025, 0x06F, 0x03A, 0x00C, 0x013, 0x0E6, 0x055, | ||
240 | 0x034, 0x04C, 0x05A, 0x04D, 0x0B5, 0x023, 0x095, 0x0A5, | ||
241 | 0x048, 0x011, 0x05A, 0x00A, 0x043, 0x095, 0x0AC, 0x02C, | ||
242 | 0x0BA, 0x024, 0x005, 0x049, 0x0B1, 0x0BC, 0x0CA, 0x0A7, | ||
243 | 0x072, 0x06C, 0x06B, 0x0C5, 0x0BD, 0x0E8, 0x031, 0x069, | ||
244 | 0x052, 0x05D, 0x006, 0x012, 0x065, 0x03E, 0x0B1, 0x050, | ||
245 | 0x04C, 0x07D, 0x04F, 0x0AC, 0x00A, 0x030, 0x00B, 0x036, | ||
246 | 0x064, 0x011, 0x073, 0x08A, 0x083, 0x08E, 0x075, 0x012, | ||
247 | 0x09F, 0x07B, 0x0D2, 0x099, 0x058, 0x0EE, 0x082, 0x02E, | ||
248 | 0x077, 0x0A0, 0x0E3, 0x09D, 0x05D, 0x04F, 0x0BC, 0x02A, | ||
249 | 0x053, 0x029, 0x053, 0x0DE, 0x093, 0x024, 0x0BA, 0x0B3, | ||
250 | 0x036, 0x0AA, 0x04A, 0x0C6, 0x079, 0x0D4, 0x0B9, 0x0DE, | ||
251 | 0x062, 0x05A, 0x011, 0x073, 0x050, 0x050, 0x0BF, 0x037, | ||
252 | 0x036, 0x06F, 0x013, 0x023, 0x0BA, 0x00C, 0x024, 0x0CE, | ||
253 | 0x0BD, 0x0E2, 0x0A7, 0x052, 0x0B2, 0x08E, 0x06B, 0x060, | ||
254 | 0x062, 0x02E, 0x075, 0x013, 0x030, 0x0AC, 0x0A0, 0x059, | ||
255 | 0x0CA, 0x064, 0x063, 0x079, 0x0B3, 0x033, 0x065, 0x01C, | ||
256 | 0x0CC, 0x032, 0x004, 0x05C, 0x0EA, 0x02C, 0x0A0, 0x059, | ||
257 | 0x0DF, 0x023, 0x01B, 0x0D4, 0x083, 0x052, 0x047, 0x0DD, | ||
258 | 0x079, 0x096, 0x0D4, 0x09E, 0x0B3, 0x052, 0x04B, 0x0A2, | ||
259 | 0x05A, 0x01A, 0x08D, 0x05D, 0x07B, 0x082, 0x0A7, 0x052, | ||
260 | 0x0B2, 0x08E, 0x066, 0x019, 0x002, 0x02E, 0x075, 0x016, | ||
261 | 0x050, 0x02C, 0x08C, 0x032, 0x01D, 0x07B, 0x08E, 0x0A7, | ||
262 | 0x052, 0x0B1, 0x0BC, 0x0D9, 0x099, 0x098, 0x004, 0x0DA, | ||
263 | 0x07C, 0x0E2, 0x0AC, 0x0FE, 0x066, 0x019, 0x002, 0x02E, | ||
264 | 0x065, 0x050, 0x0BF, 0x033, 0x066, 0x064, 0x0FE, 0x074, | ||
265 | 0x018, 0x086, 0x04C, 0x017, 0x026, 0x0D6, 0x016, 0x052, | ||
266 | 0x039, 0x018, 0x0DE, 0x07A, 0x0CC, 0x0C2, 0x03E, 0x065, | ||
267 | 0x014, 0x091, 0x0F3, 0x066, 0x049, 0x008, 0x06E, 0x083, | ||
268 | 0x009, 0x033, 0x0AF, 0x031, 0x0ED, 0x00D, 0x09D, 0x006, | ||
269 | 0x012, 0x062, 0x02A, 0x031, 0x08D, 0x06D, 0x0E7, 0x041, | ||
270 | 0x082, 0x07C, 0x0CA, 0x0A6, 0x089, 0x087, 0x009, 0x02E, | ||
271 | 0x029, 0x0B1, 0x0AF, 0x010, 0x039, 0x0D6, 0x064, 0x097, | ||
272 | 0x030, 0x01D, 0x042, 0x075, 0x093, 0x044, 0x002, 0x08C, | ||
273 | 0x024, 0x0D2, 0x07A, 0x0B3, 0x050, 0x0F6, 0x089, 0x005, | ||
274 | 0x043, 0x05E, 0x061, 0x098, 0x0C0, 0x02C, 0x092, 0x025, | ||
275 | 0x03C, 0x08B, 0x024, 0x089, 0x049, 0x005, 0x049, 0x0E7, | ||
276 | 0x00C, 0x0B9, 0x084, 0x098, 0x0B7, 0x0AD, 0x033, 0x044, | ||
277 | 0x0AE, 0x05A, 0x051, 0x086, 0x060, 0x09F, 0x038, 0x0A9, | ||
278 | 0x0A2, 0x06C, 0x06B, 0x0C4, 0x08E, 0x0F4, 0x05E, 0x049, | ||
279 | 0x046, 0x012, 0x062, 0x0DE, 0x0B4, 0x0CD, 0x021, 0x05C, | ||
280 | 0x0B4, 0x0A3, 0x00C, 0x0C1, 0x03E, 0x072, 0x029, 0x0A2, | ||
281 | 0x06C, 0x06B, 0x0C6, 0x012, 0x062, 0x047, 0x0F0, 0x0E8, | ||
282 | 0x0C3, 0x032, 0x004, 0x035, 0x040, 0x092, 0x0A4, 0x082, | ||
283 | 0x088, 0x010, 0x092, 0x07C, 0x0CB, 0x0D4, 0x02F, 0x0A4, | ||
284 | 0x002, 0x011, 0x084, 0x098, 0x0B7, 0x0AD, 0x033, 0x044, | ||
285 | 0x0AE, 0x05A, 0x051, 0x086, 0x060, 0x09F, 0x038, 0x0A9, | ||
286 | 0x0A2, 0x06C, 0x06B, 0x0C4, 0x08E, 0x0F4, 0x05E, 0x049, | ||
287 | 0x044, 0x008, 0x049, 0x03E, 0x065, 0x0EA, 0x017, 0x0D2, | ||
288 | 0x001, 0x008, 0x0C2, 0x04C, 0x05B, 0x0D6, 0x099, 0x0A4, | ||
289 | 0x02B, 0x096, 0x094, 0x061, 0x098, 0x027, 0x0CE, 0x045, | ||
290 | 0x034, 0x04D, 0x08D, 0x078, 0x081, 0x009, 0x027, 0x0CC, | ||
291 | 0x0BD, 0x012, 0x028, 0x06C, 0x058, 0x0AF, 0x0B6, 0x0F3, | ||
292 | 0x0A0, 0x0C1, 0x03E, 0x065, 0x053, 0x044, 0x0D8, 0x0D7, | ||
293 | 0x092, 0x08E, 0x07D, 0x04B, 0x0C2, 0x0FA, 0x061, 0x026, | ||
294 | 0x006, 0x03A, 0x0B3, 0x06B, 0x003, 0x005, 0x049, 0x0E7, | ||
295 | 0x00C, 0x0B9, 0x06F, 0x05A, 0x066, 0x095, 0x05C, 0x0B4, | ||
296 | 0x0A3, 0x00C, 0x0C1, 0x03E, 0x070, 0x029, 0x0A2, 0x06E, | ||
297 | 0x0A4, 0x0DF, 0x093, 0x071, 0x013, 0x077, 0x026, 0x0E1, | ||
298 | 0x026, 0x0F8, 0x026, 0x0C6, 0x0BC, 0x094, 0x073, 0x0F9, | ||
299 | 0x02F, 0x00B, 0x0E9, 0x084, 0x098, 0x018, 0x0EA, 0x0CC, | ||
300 | 0x0EC, 0x00C, 0x015, 0x027, 0x09C, 0x032, 0x0FF, 0x03D, | ||
301 | 0x056, 0x0AF, 0x092, 0x08B, 0x07A, 0x0D3, 0x035, 0x0D5, | ||
302 | 0x0CB, 0x04A, 0x030, 0x0CC, 0x013, 0x0E7, 0x002, 0x09A, | ||
303 | 0x026, 0x0C6, 0x0BC, 0x094, 0x073, 0x041, 0x097, 0x091, | ||
304 | 0x0F4, 0x083, 0x0CE, 0x004, 0x020, 0x062, 0x08B, 0x005, | ||
305 | 0x016, 0x049, 0x08C, 0x024, 0x0C0, 0x0C7, 0x056, 0x090, | ||
306 | 0x0C0, 0x0C1, 0x052, 0x079, 0x0C3, 0x02E, 0x05B, 0x0D5, | ||
307 | 0x0A6, 0x072, 0x0D2, 0x094, 0x0FA, 0x0AD, 0x058, 0x0C8, | ||
308 | 0x0FA, 0x09F, 0x054, 0x0B3, 0x032, 0x04B, 0x0B9, 0x054, | ||
309 | 0x0A6, 0x051, 0x086, 0x06B, 0x079, 0x0D0, 0x060, 0x09F, | ||
310 | 0x032, 0x005, 0x034, 0x04D, 0x08D, 0x07A, 0x04D, 0x01E, | ||
311 | 0x07A, 0x0B3, 0x051, 0x000, 0x0A9, 0x03D, 0x059, 0x0A8, | ||
312 | 0x07B, 0x044, 0x082, 0x0A1, 0x0AF, 0x04A, 0x08D, 0x052, | ||
313 | 0x0A9, 0x052, 0x041, 0x049, 0x04F, 0x03A, 0x02E, 0x040, | ||
314 | 0x0A4, 0x099, 0x050, 0x0BE, 0x090, 0x008, 0x052, 0x079, | ||
315 | 0x0C3, 0x02E, 0x061, 0x026, 0x02D, 0x0EB, 0x04C, 0x0D0, | ||
316 | 0x015, 0x0CB, 0x04A, 0x030, 0x0CC, 0x013, 0x0E7, 0x002, | ||
317 | 0x09A, 0x026, 0x0C6, 0x0BC, 0x048, 0x0FE, 0x01D, 0x025, | ||
318 | 0x046, 0x0A9, 0x054, 0x0A9, 0x020, 0x0A4, 0x0A7, 0x09D, | ||
319 | 0x017, 0x020, 0x052, 0x04C, 0x0A8, 0x05F, 0x048, 0x004, | ||
320 | 0x023, 0x009, 0x031, 0x06F, 0x05A, 0x066, 0x080, 0x0AE, | ||
321 | 0x05A, 0x051, 0x086, 0x060, 0x09F, 0x038, 0x014, 0x0D1, | ||
322 | 0x036, 0x035, 0x0E4, 0x0A7, 0x09D, 0x017, 0x020, 0x052, | ||
323 | 0x04C, 0x0A2, 0x045, 0x00D, 0x08B, 0x015, 0x0F4, 0x091, | ||
324 | 0x0DE, 0x08B, 0x0C9, 0x028, 0x0C2, 0x04C, 0x05B, 0x0D6, | ||
325 | 0x099, 0x0A9, 0x05C, 0x0B4, 0x0A3, 0x00C, 0x0D6, 0x0F3, | ||
326 | 0x0A0, 0x0C1, 0x03E, 0x064, 0x00A, 0x068, 0x09B, 0x01A, | ||
327 | 0x0F1, 0x06D, 0x04C, 0x0AA, 0x092, 0x0E0, 0x036, 0x094, | ||
328 | 0x070, 0x09B, 0x029, 0x078, 0x013, 0x0AE, 0x0B3, 0x0AA, | ||
329 | 0x085, 0x0D4, 0x043, 0x075, 0x009, 0x03A, 0x0C9, 0x0EB, | ||
330 | 0x035, 0x024, 0x0B8, 0x01B, 0x032, 0x08E, 0x013, 0x048, | ||
331 | 0x07E, 0x04E, 0x0FD, 0x040, 0x0FD, 0x040, 0x0FD, 0x040, | ||
332 | 0x0FD, 0x040, 0x0FD, 0x040, 0x0FC, 0x013, 0x0F4, 0x021, | ||
333 | 0x0F9, 0x017, 0x045, 0x08A, 0x030, 0x00B, 0x033, 0x05F, | ||
334 | 0x083, 0x0A2, 0x02A, 0x030, 0x00B, 0x033, 0x05F, 0x083, | ||
335 | 0x0A2, 0x0A8, 0x0C0, 0x02D, 0x0B3, 0x020, 0x070, 0x092, | ||
336 | 0x013, 0x09A, 0x0DE, 0x074, 0x018, 0x027, 0x0CC, 0x0AA, | ||
337 | 0x068, 0x09B, 0x01A, 0x0F7, 0x007, 0x045, 0x051, 0x080, | ||
338 | 0x05B, 0x066, 0x047, 0x007, 0x038, 0x0A8, 0x023, 0x0E7, | ||
339 | 0x051, 0x011, 0x03F, 0x0E0, 0x0E8, 0x085, 0x046, 0x001, | ||
340 | 0x06D, 0x099, 0x006, 0x012, 0x065, 0x04F, 0x07A, 0x020, | ||
341 | 0x024, 0x0BA, 0x0B3, 0x032, 0x015, 0x025, 0x07B, 0x0AD, | ||
342 | 0x033, 0x078, 0x0AE, 0x00E, 0x073, 0x0D0, 0x047, 0x0CE, | ||
343 | 0x0A7, 0x030, 0x0CC, 0x044, 0x0FF, 0x083, 0x0A2, 0x0A8, | ||
344 | 0x0C0, 0x02C, 0x0D9, 0x091, 0x0C1, 0x0D1, 0x015, 0x018, | ||
345 | 0x005, 0x09B, 0x032, 0x008, 0x0BA, 0x02C, 0x051, 0x080, | ||
346 | 0x059, 0x0B3, 0x020, 0x070, 0x092, 0x0E2, 0x098, 0x089, | ||
347 | 0x0FD, 0x0BC, 0x0EE, 0x018, 0x090, 0x0FC, 0x08B, 0x0A2, | ||
348 | 0x0C5, 0x02B, 0x00D, 0x078, 0x03A, 0x022, 0x0A5, 0x061, | ||
349 | 0x0AF, 0x007, 0x045, 0x051, 0x080, 0x05B, 0x066, 0x044, | ||
350 | 0x09E, 0x0B3, 0x052, 0x04B, 0x083, 0x0AD, 0x0C7, 0x009, | ||
351 | 0x0BE, 0x01F, 0x09F, 0x074, 0x065, 0x05D, 0x00A, 0x017, | ||
352 | 0x07C, 0x0AB, 0x0A0, 0x0C2, 0x04C, 0x038, 0x049, 0x012, | ||
353 | 0x02E, 0x038, 0x049, 0x007, 0x0A3, 0x00C, 0x0C1, 0x03E, | ||
354 | 0x065, 0x053, 0x044, 0x0D8, 0x0D7, 0x0AD, 0x0E7, 0x000, | ||
355 | 0x032, 0x04B, 0x09B, 0x033, 0x034, 0x04A, 0x003, 0x000, | ||
356 | 0x09D, 0x025, 0x0CE, 0x083, 0x024, 0x0B8, 0x019, 0x099, | ||
357 | 0x08C, 0x002, 0x012, 0x04B, 0x0A1, 0x099, 0x0D8, 0x0C0, | ||
358 | 0x027, 0x049, 0x073, 0x0CF, 0x0F9, 0x03C, 0x0F4, 0x07C, | ||
359 | 0x0E7, 0x098, 0x004, 0x0E9, 0x02E, 0x07F, 0x039, 0x0E3, | ||
360 | 0x04F, 0x046, 0x053, 0x0C0, 0x060, 0x013, 0x0A4, 0x0B9, | ||
361 | 0x0E5, 0x03C, 0x003, 0x0DE, 0x08F, 0x09C, 0x0F3, 0x000, | ||
362 | 0x09C, 0x06F, 0x0CF, 0x03E, 0x085, 0x0F9, 0x0A3, 0x036, | ||
363 | 0x002, 0x01E, 0x060, 0x038, 0x092, 0x03E, 0x063, 0x01A, | ||
364 | 0x010, 0x09F, 0x0CF, 0x018, 0x010, 0x092, 0x0BC, 0x0D0, | ||
365 | 0x0A4, 0x00C, 0x0DC, 0x0C0, 0x00F, 0x09C, 0x097, 0x034, | ||
366 | 0x062, 0x0B6, 0x0E7, 0x0F3, 0x0F3, 0x0A5, 0x0CF, 0x018, | ||
367 | 0x042, 0x034, 0x01C, 0x0C2, 0x0CA, 0x0FA, 0x08E, 0x068, | ||
368 | 0x052, 0x006, 0x0AF, 0x03C, 0x0A3, 0x00D, 0x0BF, 0x09E, | ||
369 | 0x050, 0x0E1, 0x0D1, 0x073, 0x0CA, 0x0E0, 0x03A, 0x0FC, | ||
370 | 0x0C1, 0x009, 0x01A, 0x01E, 0x06A, 0x05C, 0x05B, 0x08E, | ||
371 | 0x063, 0x04E, 0x077, 0x073, 0x0CC, 0x061, 0x067, 0x0DD, | ||
372 | 0x0E6, 0x06C, 0x048, 0x0D1, 0x0F3, 0x01B, 0x024, 0x069, | ||
373 | 0x051, 0x008, 0x0D4, 0x042, 0x01B, 0x0F4, 0x067, 0x0D1, | ||
374 | 0x080, 0x04E, 0x02F, 0x0D0, 0x08C, 0x0D8, 0x030, 0x009, | ||
375 | 0x0C2, 0x01E, 0x080, 0x01C, 0x046, 0x001, 0x03A, 0x047, | ||
376 | 0x0D0, 0x031, 0x0A1, 0x006, 0x001, 0x03A, 0x07F, 0x046, | ||
377 | 0x030, 0x021, 0x018, 0x004, 0x0E9, 0x05E, 0x084, 0x029, | ||
378 | 0x000, 0x0C0, 0x027, 0x0CD, 0x0D0, 0x000, 0x07C, 0x098, | ||
379 | 0x004, 0x0F9, 0x02E, 0x084, 0x062, 0x08C, 0x002, 0x07D, | ||
380 | 0x0BA, 0x03E, 0x07E, 0x04C, 0x002, 0x07D, 0x02E, 0x08C, | ||
381 | 0x061, 0x008, 0x030, 0x009, 0x0F4, 0x01D, 0x001, 0x065, | ||
382 | 0x073, 0x000, 0x09F, 0x051, 0x0D0, 0x085, 0x020, 0x018, | ||
383 | 0x004, 0x0FA, 0x0BD, 0x019, 0x046, 0x018, 0x0C0, 0x027, | ||
384 | 0x0DF, 0x0D1, 0x094, 0x038, 0x04C, 0x002, 0x07D, 0x017, | ||
385 | 0x046, 0x057, 0x001, 0x030, 0x009, 0x0F5, 0x0FA, 0x001, | ||
386 | 0x009, 0x006, 0x001, 0x03E, 0x087, 0x0A1, 0x04B, 0x088, | ||
387 | 0x0C0, 0x027, 0x0DC, 0x074, 0x00D, 0x039, 0x0D3, 0x000, | ||
388 | 0x09F, 0x073, 0x0D0, 0x030, 0x0B3, 0x098, 0x004, 0x0FB, | ||
389 | 0x0BD, 0x006, 0x0C4, 0x083, 0x000, 0x09F, 0x047, 0x0D0, | ||
390 | 0x036, 0x048, 0x0CC, 0x002, 0x071, 0x0BF, 0x03F, 0x09A, | ||
391 | 0x017, 0x0E6, 0x03F, 0x008, 0x021, 0x0E6, 0x092, 0x0A4, | ||
392 | 0x08F, 0x09A, 0x010, 0x031, 0x0A7, 0x0F3, 0x010, 0x0B1, | ||
393 | 0x084, 0x0AF, 0x03A, 0x0AC, 0x0DC, 0x0F7, 0x073, 0x0F2, | ||
394 | 0x05C, 0x0C6, 0x02A, 0x0DB, 0x09E, 0x07E, 0x07E, 0x097, | ||
395 | 0x031, 0x008, 0x063, 0x0D0, 0x073, 0x07B, 0x043, 0x0A8, | ||
396 | 0x0E6, 0x03D, 0x034, 0x0EA, 0x0F3, 0x0E3, 0x015, 0x0BF, | ||
397 | 0x09F, 0x018, 0x05F, 0x045, 0x0CF, 0x0E8, 0x09F, 0x05F, | ||
398 | 0x09A, 0x05B, 0x003, 0x0D0, 0x0F3, 0x0D3, 0x0CE, 0x037, | ||
399 | 0x01C, 0x0D0, 0x00F, 0x0BB, 0x09E, 0x068, 0x078, 0x03B, | ||
400 | 0x0BC, 0x0CA, 0x031, 0x0E8, 0x0F9, 0x0A2, 0x002, 0x012, | ||
401 | 0x0A2, 0x073, 0x051, 0x008, 0x06F, 0x0D1, 0x0F3, 0x046, | ||
402 | 0x001, 0x038, 0x0BF, 0x040, 0x0FC, 0x023, 0x000, 0x09C, | ||
403 | 0x021, 0x0E8, 0x049, 0x051, 0x080, 0x04E, 0x091, 0x0F4, | ||
404 | 0x021, 0x003, 0x019, 0x080, 0x04E, 0x09F, 0x0D0, 0x021, | ||
405 | 0x063, 0x006, 0x001, 0x03A, 0x056, 0x08C, 0x002, 0x074, | ||
406 | 0x0FE, 0x075, 0x049, 0x05E, 0x063, 0x0D3, 0x04A, 0x054, | ||
407 | 0x042, 0x035, 0x013, 0x0A7, 0x0D1, 0x080, 0x04E, 0x095, | ||
408 | 0x0E8, 0x01E, 0x09A, 0x04C, 0x002, 0x07C, 0x0DD, 0x01B, | ||
409 | 0x0B9, 0x0E6, 0x001, 0x03E, 0x04B, 0x0A0, 0x062, 0x0A3, | ||
410 | 0x000, 0x09F, 0x06E, 0x08C, 0x0FC, 0x0F3, 0x000, 0x09F, | ||
411 | 0x04B, 0x0A0, 0x042, 0x018, 0x0CC, 0x002, 0x07D, 0x007, | ||
412 | 0x043, 0x0DA, 0x013, 0x000, 0x09F, 0x051, 0x0D0, 0x03D, | ||
413 | 0x034, 0x098, 0x004, 0x0FA, 0x0BD, 0x01C, 0x062, 0x08C, | ||
414 | 0x002, 0x07D, 0x0FD, 0x01C, 0x061, 0x073, 0x000, 0x09F, | ||
415 | 0x045, 0x0D1, 0x0F4, 0x04E, 0x060, 0x013, 0x0EB, 0x0F4, | ||
416 | 0x025, 0x0B0, 0x033, 0x000, 0x09F, 0x043, 0x0D1, 0x0A7, | ||
417 | 0x09C, 0x018, 0x004, 0x0FB, 0x08E, 0x084, 0x003, 0x0E9, | ||
418 | 0x080, 0x04F, 0x0B9, 0x0E8, 0x043, 0x0C1, 0x030, 0x009, | ||
419 | 0x0F7, 0x07A, 0x00A, 0x031, 0x098, 0x004, 0x0FA, 0x03E, | ||
420 | 0x084, 0x040, 0x041, 0x080, 0x04E, 0x082, 0x0E7, 0x041, | ||
421 | 0x087, 0x009, 0x023, 0x004, 0x023, 0x000, 0x09D, 0x005, | ||
422 | 0x0CE, 0x096, 0x01C, 0x024, 0x08C, 0x010, 0x08C, 0x002, | ||
423 | 0x074, 0x017, 0x03A, 0x004, 0x038, 0x049, 0x018, 0x021, | ||
424 | 0x018, 0x004, 0x0E8, 0x02E, 0x074, 0x050, 0x0E1, 0x024, | ||
425 | 0x060, 0x084, 0x060, 0x013, 0x0A0, 0x0B9, 0x0D4, 0x011, | ||
426 | 0x0C2, 0x048, 0x0C1, 0x008, 0x0C0, 0x027, 0x041, 0x073, | ||
427 | 0x0A8, 0x023, 0x084, 0x091, 0x082, 0x011, 0x080, 0x04E, | ||
428 | 0x082, 0x0E7, 0x052, 0x08E, 0x012, 0x046, 0x008, 0x046, | ||
429 | 0x001, 0x03A, 0x00B, 0x09D, 0x040, 0x01C, 0x024, 0x08C, | ||
430 | 0x010, 0x08C, 0x002, 0x074, 0x017, 0x03A, 0x009, 0x00E, | ||
431 | 0x012, 0x046, 0x008, 0x046, 0x001, 0x03A, 0x00B, 0x098, | ||
432 | 0x06A, 0x01C, 0x024, 0x0B0, 0x0E1, 0x018, 0x004, 0x0E8, | ||
433 | 0x02E, 0x06B, 0x050, 0x0E1, 0x025, 0x087, 0x008, 0x0C0, | ||
434 | 0x027, 0x041, 0x073, 0x005, 0x043, 0x084, 0x096, 0x01C, | ||
435 | 0x023, 0x000, 0x09D, 0x005, 0x0CC, 0x0AA, 0x01C, 0x024, | ||
436 | 0x0B0, 0x0E1, 0x018, 0x004, 0x0E8, 0x02E, 0x070, 0x068, | ||
437 | 0x070, 0x092, 0x0C3, 0x084, 0x060, 0x013, 0x0E5, 0x044, | ||
438 | 0x0F9, 0x040, 0x09D, 0x005, 0x0CE, 0x05A, 0x01C, 0x024, | ||
439 | 0x0B0, 0x0E1, 0x018, 0x004, 0x0F9, 0x0D1, 0x03E, 0x070, | ||
440 | 0x027, 0x0CF, 0x013, 0x0E5, 0x044, 0x02C, 0x0A0, 0x042, | ||
441 | 0x0CB, 0x089, 0x0F2, 0x021, 0x03A, 0x00B, 0x09C, 0x00A, | ||
442 | 0x01C, 0x024, 0x0B0, 0x0E1, 0x018, 0x004, 0x0F9, 0x0D1, | ||
443 | 0x00B, 0x038, 0x010, 0x0B3, 0x0C4, 0x021, 0x039, 0x036, | ||
444 | 0x05C, 0x042, 0x0C8, 0x084, 0x02B, 0x079, 0x0D0, 0x061, | ||
445 | 0x0C2, 0x074, 0x015, 0x024, 0x0BA, 0x0D3, 0x031, 0x0E5, | ||
446 | 0x059, 0x008, 0x029, 0x008, 0x0E0, 0x066, 0x063, 0x042, | ||
447 | 0x095, 0x012, 0x081, 0x000, 0x029, 0x00B, 0x0C1, 0x051, | ||
448 | 0x024, 0x0B8, 0x019, 0x099, 0x090, 0x022, 0x090, 0x0B4, | ||
449 | 0x018, 0x0A0, 0x091, 0x041, 0x001, 0x041, 0x041, 0x041, | ||
450 | 0x052, 0x083, 0x0CA, 0x040, 0x028, 0x068, 0x029, 0x008, | ||
451 | 0x0BA, 0x016, 0x010, 0x09C, 0x099, 0x00B, 0x056, 0x094, | ||
452 | 0x090, 0x052, 0x015, 0x074, 0x0C0, 0x027, 0x01A, 0x02A, | ||
453 | 0x0D2, 0x090, 0x025, 0x0D3, 0x000, 0x09D, 0x028, 0x0AB, | ||
454 | 0x04A, 0x042, 0x017, 0x04C, 0x002, 0x070, 0x0D4, 0x084, | ||
455 | 0x02E, 0x098, 0x004, 0x0E1, 0x02A, 0x042, 0x017, 0x04C, | ||
456 | 0x002, 0x070, 0x082, 0x090, 0x04B, 0x0A6, 0x001, 0x038, | ||
457 | 0x051, 0x048, 0x042, 0x0E9, 0x080, 0x04E, 0x015, 0x0A4, | ||
458 | 0x021, 0x074, 0x0C0, 0x027, 0x00F, 0x0A4, 0x012, 0x0E9, | ||
459 | 0x080, 0x04E, 0x082, 0x0AC, 0x080, 0x0AC, 0x0A0, 0x0AC, | ||
460 | 0x0A9, 0x059, 0x0E5, 0x064, 0x045, 0x065, 0x0CA, 0x0C8, | ||
461 | 0x04A, 0x0CE, 0x00A, 0x0CE, 0x04A, 0x0CE, 0x095, 0x091, | ||
462 | 0x095, 0x094, 0x095, 0x093, 0x029, 0x025, 0x0C0, 0x0CC, | ||
463 | 0x0CC, 0x088, 0x0A4, 0x097, 0x056, 0x036, 0x064, 0x072, | ||
464 | 0x090, 0x054, 0x08A, 0x09C, 0x045, 0x008, 0x0B9, 0x0B7, | ||
465 | 0x066, 0x012, 0x093, 0x009, 0x0C9, 0x0B2, 0x074, 0x08E, | ||
466 | 0x0BA, 0x060, 0x013, 0x0E5, 0x034, 0x08E, 0x0BA, 0x060, | ||
467 | 0x013, 0x0E4, 0x074, 0x08E, 0x0BA, 0x060, 0x013, 0x0E5, | ||
468 | 0x069, 0x01D, 0x074, 0x0C0, 0x027, 0x0CA, 0x029, 0x01D, | ||
469 | 0x074, 0x0C0, 0x027, 0x0CE, 0x0D2, 0x025, 0x0D3, 0x000, | ||
470 | 0x09F, 0x038, 0x0A4, 0x04B, 0x0A6, 0x001, 0x03E, 0x05E, | ||
471 | 0x091, 0x02E, 0x098, 0x004, 0x0F9, 0x015, 0x022, 0x05D, | ||
472 | 0x030, 0x009, 0x0F3, 0x0E9, 0x012, 0x0E9, 0x080, 0x04F, | ||
473 | 0x090, 0x052, 0x025, 0x0D3, 0x000, 0x09D, 0x0C5, 0x048, | ||
474 | 0x025, 0x0D3, 0x000, 0x09C, 0x045, 0x0CE, 0x0CD, 0x009, | ||
475 | 0x0C9, 0x0B2, 0x01A, 0x044, 0x0BA, 0x060, 0x013, 0x0E7, | ||
476 | 0x034, 0x089, 0x074, 0x0C0, 0x027, 0x01C, 0x027, 0x0B7, | ||
477 | 0x09C, 0x080, 0x0C2, 0x0D7, 0x076, 0x059, 0x09B, 0x093, | ||
478 | 0x00C, 0x064, 0x0C3, 0x01D, 0x01B, 0x0F4, 0x045, 0x04B, | ||
479 | 0x0C7, 0x0C6, 0x03A, 0x037, 0x0E8, 0x081, 0x04B, 0x0C7, | ||
480 | 0x0C6, 0x03A, 0x037, 0x0E8, 0x091, 0x04B, 0x0C7, 0x0C6, | ||
481 | 0x032, 0x061, 0x08E, 0x0B3, 0x0BC, 0x0C3, 0x04A, 0x022, | ||
482 | 0x0E6, 0x0B5, 0x024, 0x097, 0x071, 0x0C9, 0x087, 0x0B4, | ||
483 | 0x031, 0x0AE, 0x073, 0x0A2, 0x0CF, 0x039, 0x0D2, 0x05D, | ||
484 | 0x004, 0x044, 0x042, 0x0C0, 0x0D6, 0x0DE, 0x071, 0x006, | ||
485 | 0x016, 0x0BB, 0x0DB, 0x0CE, 0x083, 0x00C, 0x064, 0x0C3, | ||
486 | 0x01D, 0x031, 0x013, 0x004, 0x0F9, 0x095, 0x04D, 0x013, | ||
487 | 0x032, 0x093, 0x063, 0x05E, 0x066, 0x014, 0x0CC, 0x029, | ||
488 | 0x02A, 0x053, 0x030, 0x0A6, 0x061, 0x04C, 0x0C2, 0x099, | ||
489 | 0x085, 0x03A, 0x072, 0x0CC, 0x0C2, 0x099, 0x085, 0x006, | ||
490 | 0x01B, 0x0B3, 0x00A, 0x066, 0x014, 0x014, 0x024, 0x099, | ||
491 | 0x085, 0x033, 0x00A, 0x008, 0x0B1, 0x086, 0x061, 0x04C, | ||
492 | 0x0C2, 0x084, 0x021, 0x068, 0x073, 0x03B, 0x030, 0x0A6, | ||
493 | 0x061, 0x041, 0x04E, 0x0A5, 0x098, 0x053, 0x030, 0x0AC, | ||
494 | 0x059, 0x076, 0x061, 0x04C, 0x0C2, 0x0B0, 0x08D, 0x0D6, | ||
495 | 0x061, 0x04C, 0x0C2, 0x0B0, 0x02C, 0x0F6, 0x061, 0x04C, | ||
496 | 0x0C2, 0x0B1, 0x08C, 0x0A5, 0x098, 0x053, 0x030, 0x0AC, | ||
497 | 0x00F, 0x024, 0x0CC, 0x029, 0x098, 0x056, 0x00F, 0x028, | ||
498 | 0x066, 0x015, 0x092, 0x01A, 0x019, 0x085, 0x033, 0x00A, | ||
499 | 0x0CA, 0x085, 0x00C, 0x0C2, 0x099, 0x085, 0x065, 0x0C3, | ||
500 | 0x0D9, 0x085, 0x033, 0x00A, 0x0CE, 0x070, 0x086, 0x061, | ||
501 | 0x04C, 0x0C2, 0x0B3, 0x097, 0x071, 0x00C, 0x099, 0x03B, | ||
502 | 0x0CC, 0x083, 0x058, 0x00B, 0x0EA, 0x077, 0x09D, 0x006, | ||
503 | 0x04A, 0x0BE, 0x004, 0x074, 0x060, 0x0E0, 0x0D1, 0x04E, | ||
504 | 0x038, 0x04C, 0x03E, 0x0EE, 0x03E, 0x0EE, 0x03E, 0x0EE, | ||
505 | 0x03E, 0x0EE, 0x030, 0x0BB, 0x0CA, 0x0E1, 0x01F, 0x077, | ||
506 | 0x01F, 0x077, 0x01F, 0x077, 0x01F, 0x077, 0x027, 0x070, | ||
507 | 0x08F, 0x0BB, 0x080, 0x00E, 0x011, 0x0F7, 0x071, 0x0F7, | ||
508 | 0x07C, 0x06F, 0x03C, 0x0B3, 0x036, 0x002, 0x0FB, 0x08D, | ||
509 | 0x0E6, 0x055, 0x070, 0x07F, 0x02D, 0x024, 0x069, 0x055, | ||
510 | 0x04F, 0x058, 0x0A9, 0x023, 0x01F, 0x054, 0x0F7, 0x08A, | ||
511 | 0x095, 0x025, 0x02B, 0x075, 0x00C, 0x0CC, 0x0AC, 0x056, | ||
512 | 0x051, 0x0CC, 0x051, 0x0E4, 0x045, 0x0CE, 0x0A2, 0x012, | ||
513 | 0x039, 0x0C0, 0x0A0, 0x0AF, 0x056, 0x06A, 0x049, 0x07F, | ||
514 | 0x002, 0x08C, 0x009, 0x0F8, 0x00B, 0x0EB, 0x0AF, 0x056, | ||
515 | 0x076, 0x067, 0x052, 0x0B2, 0x08E, 0x069, 0x0A7, 0x011, | ||
516 | 0x073, 0x0A8, 0x0B1, 0x0BC, 0x0CA, 0x0A0, 0x0A9, 0x036, | ||
517 | 0x050, 0x02C, 0x098, 0x0E7, 0x00A, 0x0F5, 0x066, 0x0A4, | ||
518 | 0x097, 0x0E2, 0x05A, 0x030, 0x027, 0x0BA, 0x0F7, 0x083, | ||
519 | 0x04E, 0x0A5, 0x033, 0x00A, 0x066, 0x015, 0x08D, 0x0E6, | ||
520 | 0x055, 0x039, 0x0D2, 0x0A7, 0x0AC, 0x054, 0x060, 0x016, | ||
521 | 0x070, 0x01B, 0x072, 0x08E, 0x062, 0x08F, 0x022, 0x02E, | ||
522 | 0x075, 0x016, 0x002, 0x0FB, 0x08D, 0x0E6, 0x00A, 0x095, | ||
523 | 0x03D, 0x062, 0x0A3, 0x000, 0x0B7, 0x001, 0x0B5, 0x053, | ||
524 | 0x0DE, 0x02A, 0x054, 0x094, 0x0AD, 0x0D4, 0x033, 0x032, | ||
525 | 0x0B1, 0x059, 0x047, 0x031, 0x047, 0x091, 0x017, 0x03A, | ||
526 | 0x088, 0x048, 0x0E7, 0x002, 0x0B0, 0x017, 0x0DC, 0x067, | ||
527 | 0x09D, 0x04B, 0x08D, 0x0E7, 0x052, 0x0AA, 0x07B, 0x0D4, | ||
528 | 0x0AA, 0x092, 0x0BD, 0x0D6, 0x099, 0x0BC, 0x056, 0x002, | ||
529 | 0x0FB, 0x08C, 0x0F3, 0x066, 0x066, 0x0C6, 0x0F3, 0x066, | ||
530 | 0x066, 0x062, 0x099, 0x02A, 0x0F8, 0x018, 0x068, 0x070, | ||
531 | 0x0B0, 0x08A, 0x00D, 0x055, 0x055, 0x055, 0x055, 0x052, | ||
532 | 0x032, 0x0E1, 0x040, 0x05C, 0x038, 0x00B, 0x0EA, 0x09B, | ||
533 | 0x087, 0x001, 0x07D, 0x0C0, 0x05F, 0x070, 0x017, 0x0DC, | ||
534 | 0x005, 0x0F5, 0x0DC, 0x09B, 0x001, 0x07D, 0x061, 0x04D, | ||
535 | 0x080, 0x0BE, 0x0A7, 0x079, 0x082, 0x0A2, 0x01F, 0x050, | ||
536 | 0x015, 0x02A, 0x08F, 0x08B, 0x01C, 0x0E5, 0x0A5, 0x013, | ||
537 | 0x084, 0x058, 0x0E7, 0x002, 0x091, 0x054, 0x005, 0x002, | ||
538 | 0x04B, 0x0BD, 0x022, 0x01A, 0x094, 0x07F, 0x09C, 0x01A, | ||
539 | 0x0C0, 0x05F, 0x042, 0x01A, 0x021, 0x0D1, 0x080, 0x059, | ||
540 | 0x0C0, 0x06D, 0x01C, 0x02C, 0x00A, 0x083, 0x055, 0x055, | ||
541 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, | ||
542 | 0x055, 0x054, 0x01C, 0x0B8, 0x05C, 0x06E, 0x017, 0x09C, | ||
543 | 0x02F, 0x038, 0x05E, 0x070, 0x0E7, 0x0B8, 0x05E, 0x070, | ||
544 | 0x0BC, 0x0E1, 0x079, 0x0C2, 0x0F3, 0x085, 0x0E7, 0x00B, | ||
545 | 0x0CE, 0x017, 0x09C, 0x029, 0x09C, 0x029, 0x09C, 0x029, | ||
546 | 0x09C, 0x023, 0x00F, 0x058, 0x014, 0x0EE, 0x035, 0x077, | ||
547 | 0x026, 0x021, 0x093, 0x005, 0x0C9, 0x0B0, 0x017, 0x0D2, | ||
548 | 0x01D, 0x018, 0x08A, 0x021, 0x093, 0x005, 0x0C9, 0x0B0, | ||
549 | 0x017, 0x0D1, 0x087, 0x0AC, 0x00A, 0x074, 0x00F, 0x0AE, | ||
550 | 0x0F5, 0x05A, 0x082, 0x0A3, 0x0E4, 0x03A, 0x031, 0x014, | ||
551 | 0x0BB, 0x0D7, 0x059, 0x099, 0x074, 0x0A2, 0x019, 0x030, | ||
552 | 0x05C, 0x09B, 0x001, 0x07D, 0x018, 0x07A, 0x0C0, 0x0A7, | ||
553 | 0x040, 0x0F8, 0x043, 0x0D4, 0x063, 0x089, 0x025, 0x0D0, | ||
554 | 0x010, 0x0D6, 0x01C, 0x06A, 0x010, 0x0F5, 0x055, 0x089, | ||
555 | 0x025, 0x0D1, 0x051, 0x066, 0x01F, 0x051, 0x0F5, 0x091, | ||
556 | 0x049, 0x02E, 0x089, 0x015, 0x098, 0x06A, 0x0A3, 0x0E0, | ||
557 | 0x08A, 0x094, 0x065, 0x064, 0x00E, 0x013, 0x017, 0x038, | ||
558 | 0x0A8, 0x086, 0x04C, 0x017, 0x026, 0x0C0, 0x05F, 0x046, | ||
559 | 0x01E, 0x0B0, 0x028, 0x063, 0x01F, 0x008, 0x07A, 0x08C, | ||
560 | 0x071, 0x024, 0x0BA, 0x002, 0x01A, 0x0D0, 0x00D, 0x042, | ||
561 | 0x01E, 0x0AA, 0x0B1, 0x024, 0x0BA, 0x02A, 0x02D, 0x031, | ||
562 | 0x0F5, 0x01F, 0x058, 0x074, 0x092, 0x0E8, 0x087, 0x05A, | ||
563 | 0x063, 0x052, 0x0DE, 0x0F4, 0x051, 0x069, 0x04A, 0x03E, | ||
564 | 0x009, 0x069, 0x046, 0x050, 0x0F0, 0x0E1, 0x031, 0x073, | ||
565 | 0x005, 0x045, 0x0BD, 0x059, 0x08D, 0x08B, 0x04A, 0x07C, | ||
566 | 0x0D3, 0x0ED, 0x038, 0x0E9, 0x0D3, 0x04E, 0x074, 0x0ED, | ||
567 | 0x044, 0x032, 0x060, 0x0B9, 0x036, 0x002, 0x0FA, 0x05B, | ||
568 | 0x0DE, 0x08A, 0x02D, 0x029, 0x0D0, 0x0E1, 0x021, 0x0F5, | ||
569 | 0x0A3, 0x092, 0x021, 0x0F2, 0x019, 0x030, 0x05C, 0x09B, | ||
570 | 0x001, 0x07D, 0x021, 0x0F5, 0x0A0, 0x0C6, 0x001, 0x067, | ||
571 | 0x001, 0x0B4, 0x045, 0x0CE, 0x0A5, 0x012, 0x039, 0x0D4, | ||
572 | 0x01C, 0x005, 0x0F4, 0x040, 0x0A1, 0x0C2, 0x0C3, 0x050, | ||
573 | 0x06A, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, | ||
574 | 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x081, 0x0AF, | ||
575 | 0x086, 0x09F, 0x019, 0x01B, 0x0E7, 0x081, 0x0F3, 0x065, | ||
576 | 0x0F2, 0x080, 0x0BE, 0x070, 0x017, 0x0DF, 0x0DF, 0x038, | ||
577 | 0x00B, 0x0EB, 0x00D, 0x0C3, 0x080, 0x0BE, 0x0A7, 0x00F, | ||
578 | 0x095, 0x04F, 0x05A, 0x094, 0x0C0, 0x02C, 0x0D8, 0x0B1, | ||
579 | 0x0A7, 0x0CE, 0x05A, 0x011, 0x073, 0x0A8, 0x03A, 0x0C2, | ||
580 | 0x0CC, 0x0B6, 0x030, 0x017, 0x0DC, 0x06F, 0x035, 0x0A9, | ||
581 | 0x080, 0x04D, 0x0A7, 0x0CE, 0x02A, 0x018, 0x079, 0x0C5, | ||
582 | 0x049, 0x0DE, 0x061, 0x0A8, 0x022, 0x0E7, 0x050, 0x033, | ||
583 | 0x0F9, 0x098, 0x064, 0x008, 0x0B9, 0x095, 0x042, 0x0FC, | ||
584 | 0x0CC, 0x0D9, 0x095, 0x03D, 0x062, 0x0A2, 0x048, 0x0D4, | ||
585 | 0x048, 0x0E7, 0x002, 0x088, 0x0B9, 0x0C1, 0x0A0, 0x0E3, | ||
586 | 0x09D, 0x04E, 0x062, 0x0E6, 0x0CC, 0x0C6, 0x06B, 0x0CE, | ||
587 | 0x083, 0x010, 0x0C9, 0x082, 0x0E4, 0x0DA, 0x0C2, 0x0C8, | ||
588 | 0x01E, 0x0C3, 0x0B9, 0x036, 0x002, 0x0FA, 0x0A9, 0x0EB, | ||
589 | 0x04E, 0x030, 0x030, 0x0FA, 0x00D, 0x0F0, 0x0A9, 0x0EB, | ||
590 | 0x040, 0x0B9, 0x00F, 0x0AA, 0x07A, 0x0D2, 0x0C2, 0x0C8, | ||
591 | 0x0FA, 0x0A7, 0x0AD, 0x041, 0x00A, 0x047, 0x0D5, 0x03D, | ||
592 | 0x068, 0x0AC, 0x0F1, 0x0F5, 0x04F, 0x05A, 0x097, 0x054, | ||
593 | 0x07D, 0x04F, 0x0A8, 0x0AA, 0x055, 0x01F, 0x011, 0x073, | ||
594 | 0x05A, 0x0B0, 0x017, 0x0DE, 0x05D, 0x059, 0x0A9, 0x025, | ||
595 | 0x0D0, 0x055, 0x02A, 0x046, 0x0BC, 0x0B8, 0x022, 0x0AE, | ||
596 | 0x045, 0x029, 0x03E, 0x014, 0x0FA, 0x0E1, 0x099, 0x094, | ||
597 | 0x0CA, 0x04A, 0x0BE, 0x03D, 0x0D6, 0x099, 0x092, 0x05D, | ||
598 | 0x015, 0x017, 0x0C8, 0x0D7, 0x0DC, 0x015, 0x017, 0x08A, | ||
599 | 0x040, 0x01F, 0x00A, 0x09E, 0x0AC, 0x0C9, 0x065, 0x049, | ||
600 | 0x05C, 0x01D, 0x010, 0x068, 0x04A, 0x03E, 0x05B, 0x0DE, | ||
601 | 0x083, 0x016, 0x095, 0x080, 0x0BE, 0x091, 0x074, 0x058, | ||
602 | 0x0A4, 0x000, 0x07C, 0x038, 0x0E7, 0x056, 0x030, 0x017, | ||
603 | 0x0DF, 0x075, 0x0A6, 0x064, 0x097, 0x045, 0x020, 0x09D, | ||
604 | 0x003, 0x05F, 0x070, 0x054, 0x05E, 0x029, 0x01D, 0x0F0, | ||
605 | 0x0A9, 0x0EA, 0x0CC, 0x086, 0x054, 0x095, 0x0C1, 0x0D1, | ||
606 | 0x006, 0x083, 0x00F, 0x0AA, 0x07B, 0x0D0, 0x065, 0x049, | ||
607 | 0x045, 0x0BD, 0x0E9, 0x062, 0x0D2, 0x091, 0x0DF, 0x004, | ||
608 | 0x05D, 0x016, 0x029, 0x01C, 0x07D, 0x04F, 0x0AC, 0x01A, | ||
609 | 0x047, 0x01A, 0x0A9, 0x0F5, 0x067, 0x066, 0x053, 0x028, | ||
610 | 0x0B7, 0x0BD, 0x02C, 0x05A, 0x052, 0x03B, 0x0E3, 0x0DD, | ||
611 | 0x059, 0x0A9, 0x025, 0x0D1, 0x0A8, 0x0AC, 0x008, 0x06B, | ||
612 | 0x0EE, 0x008, 0x0AB, 0x0C5, 0x020, 0x02F, 0x085, 0x04F, | ||
613 | 0x056, 0x066, 0x075, 0x049, 0x05C, 0x01C, 0x018, 0x01D, | ||
614 | 0x081, 0x0C2, 0x064, 0x005, 0x0F0, 0x080, 0x0BE, 0x035, | ||
615 | 0x05C, 0x0D0, 0x017, 0x0C2, 0x055, 0x0F0, 0x095, 0x07C, | ||
616 | 0x025, 0x05F, 0x008, 0x00B, 0x0E1, 0x001, 0x07C, 0x07B, | ||
617 | 0x0AB, 0x035, 0x024, 0x0BA, 0x010, 0x055, 0x093, 0x01A, | ||
618 | 0x0FB, 0x082, 0x02A, 0x0F1, 0x048, 0x0D7, 0x0C2, 0x0A7, | ||
619 | 0x0AB, 0x031, 0x0B2, 0x0A4, 0x0AC, 0x063, 0x09D, 0x04A, | ||
620 | 0x08D, 0x07C, 0x07B, 0x0AB, 0x035, 0x024, 0x0BA, 0x010, | ||
621 | 0x054, 0x030, 0x08D, 0x07D, 0x0C1, 0x015, 0x078, 0x0AC, | ||
622 | 0x06F, 0x05A, 0x094, 0x060, 0x01A, 0x0E3, 0x079, 0x0D4, | ||
623 | 0x0AA, 0x04F, 0x085, 0x04F, 0x056, 0x066, 0x0D5, 0x049, | ||
624 | 0x058, 0x0C7, 0x03A, 0x095, 0x049, 0x0F0, 0x045, 0x0D1, | ||
625 | 0x062, 0x094, 0x086, 0x0BC, 0x01D, 0x013, 0x0D2, 0x090, | ||
626 | 0x0FF, 0x0CF, 0x07A, 0x083, 0x0F2, 0x050, 0x031, 0x0DE, | ||
627 | 0x000, 0x060, 0x060, 0x0A1, 0x017, 0x035, 0x0A8, 0x05F, | ||
628 | 0x09B, 0x01B, 0x037, 0x007, 0x044, 0x01A, 0x030, 0x00B, | ||
629 | 0x038, 0x00D, 0x0BC, 0x01C, 0x0E0, 0x0D0, 0x047, 0x0CE, | ||
630 | 0x0A0, 0x0AA, 0x07A, 0x0A1, 0x098, 0x06A, 0x092, 0x095, | ||
631 | 0x03D, 0x068, 0x031, 0x080, 0x05B, 0x080, 0x0DA, 0x0A9, | ||
632 | 0x0EF, 0x041, 0x095, 0x025, 0x016, 0x0F7, 0x0A5, 0x08B, | ||
633 | 0x04A, 0x0C6, 0x079, 0x0B3, 0x033, 0x060, 0x02F, 0x0AA, | ||
634 | 0x09E, 0x0B1, 0x051, 0x080, 0x059, 0x09E, 0x0CA, 0x0A7, | ||
635 | 0x0AC, 0x00A, 0x030, 0x00B, 0x067, 0x0B2, 0x0AD, 0x0D5, | ||
636 | 0x0DA, 0x092, 0x05D, 0x017, 0x0A3, 0x000, 0x0B3, 0x02D, | ||
637 | 0x095, 0x06E, 0x008, 0x0A9, 0x058, 0x0A1, 0x017, 0x03A, | ||
638 | 0x08B, 0x001, 0x07D, 0x054, 0x0F7, 0x08E, 0x095, 0x025, | ||
639 | 0x008, 0x01C, 0x0E0, 0x056, 0x002, 0x0FB, 0x0C1, 0x0D1, | ||
640 | 0x015, 0x018, 0x005, 0x092, 0x06B, 0x03C, 0x01D, 0x012, | ||
641 | 0x028, 0x0C0, 0x02C, 0x0A5, 0x06C, 0x011, 0x070, 0x017, | ||
642 | 0x0B2, 0x038, 0x04D, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0B4, | ||
643 | 0x0EC, 0x04A, 0x0ED, 0x0B3, 0x09E, 0x002, 0x0FB, 0x080, | ||
644 | 0x0BE, 0x0E0, 0x02F, 0x0B1, 0x039, 0x093, 0x03E, 0x06D, | ||
645 | 0x0E7, 0x010, 0x060, 0x09F, 0x032, 0x0A9, 0x0A2, 0x06C, | ||
646 | 0x005, 0x0F4, 0x040, 0x0E6, 0x00A, 0x095, 0x03D, 0x06A, | ||
647 | 0x023, 0x000, 0x0B3, 0x080, 0x0DA, 0x0A7, 0x0D6, 0x02A, | ||
648 | 0x003, 0x00D, 0x070, 0x017, 0x0D2, 0x02E, 0x076, 0x029, | ||
649 | 0x04F, 0x0BC, 0x054, 0x0A6, 0x051, 0x06F, 0x07A, 0x058, | ||
650 | 0x0B4, 0x0AC, 0x005, 0x0F4, 0x08B, 0x0A2, 0x0F4, 0x00E, | ||
651 | 0x035, 0x00D, 0x049, 0x02E, 0x0B4, 0x0CC, 0x018, 0x0A5, | ||
652 | 0x0C8, 0x0F8, 0x04A, 0x097, 0x023, 0x0E1, 0x005, 0x02E, | ||
653 | 0x047, 0x0C2, 0x08A, 0x05C, 0x08F, 0x085, 0x069, 0x072, | ||
654 | 0x03E, 0x01F, 0x04A, 0x0C3, 0x055, 0x01F, 0x056, 0x043, | ||
655 | 0x032, 0x08C, 0x0A3, 0x05E, 0x060, 0x0A8, 0x045, 0x0CE, | ||
656 | 0x00D, 0x060, 0x02F, 0x0A3, 0x084, 0x09D, 0x0D8, 0x0F0, | ||
657 | 0x017, 0x0D2, 0x02E, 0x00E, 0x01B, 0x023, 0x084, 0x0D8, | ||
658 | 0x00B, 0x0EB, 0x089, 0x0F3, 0x080, 0x0BE, 0x0E0, 0x02F, | ||
659 | 0x0BB, 0x039, 0x085, 0x0DF, 0x022, 0x003, 0x0E7, 0x001, | ||
660 | 0x07D, 0x0C0, 0x05F, 0x070, 0x017, 0x0D1, 0x017, 0x038, | ||
661 | 0x014, 0x05B, 0x0D6, 0x0A2, 0x074, 0x00D, 0x04B, 0x07A, | ||
662 | 0x0B3, 0x031, 0x096, 0x094, 0x06B, 0x0CC, 0x035, 0x023, | ||
663 | 0x0D7, 0x049, 0x048, 0x015, 0x073, 0x029, 0x00F, 0x05D, | ||
664 | 0x08A, 0x0C0, 0x05F, 0x04D, 0x079, 0x084, 0x035, 0x080, | ||
665 | 0x0BE, 0x088, 0x01C, 0x0C3, 0x052, 0x09F, 0x059, 0x068, | ||
666 | 0x0C0, 0x02C, 0x0E0, 0x036, 0x0AA, 0x07B, 0x0CD, 0x04A, | ||
667 | 0x092, 0x0BE, 0x0F3, 0x081, 0x04A, 0x07D, 0x05B, 0x059, | ||
668 | 0x094, 0x0CA, 0x01C, 0x024, 0x0EE, 0x0C7, 0x080, 0x0BE, | ||
669 | 0x088, 0x01C, 0x0C3, 0x052, 0x09F, 0x059, 0x068, 0x0C0, | ||
670 | 0x02C, 0x0E0, 0x036, 0x0AA, 0x07B, 0x0CD, 0x04A, 0x092, | ||
671 | 0x0BE, 0x0F3, 0x081, 0x043, 0x084, 0x09C, 0x07B, 0x038, | ||
672 | 0x00B, 0x0EB, 0x0AF, 0x070, 0x0D4, 0x0EA, 0x053, 0x000, | ||
673 | 0x09B, 0x04F, 0x09C, 0x054, 0x030, 0x0F3, 0x08A, 0x094, | ||
674 | 0x0FA, 0x0B6, 0x0B3, 0x029, 0x094, 0x022, 0x0E6, 0x01A, | ||
675 | 0x085, 0x0F9, 0x0B0, 0x059, 0x093, 0x0F9, 0x0D2, 0x0C4, | ||
676 | 0x032, 0x060, 0x0B9, 0x036, 0x0B0, 0x0B3, 0x090, 0x0D9, | ||
677 | 0x077, 0x026, 0x01C, 0x027, 0x022, 0x0E8, 0x096, 0x0B4, | ||
678 | 0x023, 0x0EA, 0x09E, 0x0B5, 0x011, 0x080, 0x059, 0x065, | ||
679 | 0x086, 0x020, 0x073, 0x096, 0x08D, 0x079, 0x0AD, 0x058, | ||
680 | 0x00B, 0x0E9, 0x017, 0x044, 0x08A, 0x04A, 0x007, 0x0D7, | ||
681 | 0x07A, 0x082, 0x0A1, 0x090, 0x0FA, 0x0EF, 0x001, 0x054, | ||
682 | 0x0BA, 0x050, 0x0D4, 0x059, 0x01E, 0x02C, 0x0E9, 0x0F3, | ||
683 | 0x08A, 0x099, 0x085, 0x06B, 0x00B, 0x023, 0x015, 0x097, | ||
684 | 0x072, 0x061, 0x017, 0x030, 0x0D4, 0x02C, 0x073, 0x087, | ||
685 | 0x048, 0x0AA, 0x002, 0x081, 0x025, 0x0DE, 0x091, 0x00D, | ||
686 | 0x04A, 0x0C0, 0x05F, 0x07E, 0x0D2, 0x080, 0x0A5, 0x03E, | ||
687 | 0x0B2, 0x0D0, 0x0C8, 0x06B, 0x080, 0x0BE, 0x088, 0x01C, | ||
688 | 0x0EA, 0x009, 0x017, 0x044, 0x01A, 0x037, 0x01A, 0x091, | ||
689 | 0x074, 0x058, 0x0A3, 0x071, 0x0AF, 0x007, 0x044, 0x054, | ||
690 | 0x06E, 0x035, 0x0E0, 0x0E8, 0x0AA, 0x064, 0x00F, 0x090, | ||
691 | 0x0FA, 0x0D0, 0x063, 0x000, 0x0B3, 0x080, 0x0DA, 0x02C, | ||
692 | 0x073, 0x087, 0x048, 0x0AA, 0x002, 0x081, 0x025, 0x0DE, | ||
693 | 0x091, 0x00D, 0x04A, 0x0C0, 0x05F, 0x048, 0x0BA, 0x027, | ||
694 | 0x0A3, 0x000, 0x0B7, 0x001, 0x0B7, 0x04F, 0x09C, 0x0B4, | ||
695 | 0x06B, 0x0CC, 0x035, 0x016, 0x0F5, 0x066, 0x063, 0x02D, | ||
696 | 0x029, 0x01E, 0x0BA, 0x04A, 0x040, 0x0AB, 0x099, 0x048, | ||
697 | 0x07A, 0x0EC, 0x050, 0x08B, 0x09C, 0x008, 0x022, 0x0FC, | ||
698 | 0x0F9, 0x0B2, 0x055, 0x03D, 0x062, 0x0A9, 0x023, 0x051, | ||
699 | 0x023, 0x09C, 0x00A, 0x03C, 0x073, 0x00D, 0x044, 0x05C, | ||
700 | 0x0E1, 0x050, 0x071, 0x0CE, 0x0A1, 0x01F, 0x0E7, 0x015, | ||
701 | 0x06B, 0x00B, 0x025, 0x0ED, 0x00B, 0x093, 0x060, 0x02F, | ||
702 | 0x0AA, 0x09E, 0x0AC, 0x036, 0x065, 0x049, 0x05F, 0x07A, | ||
703 | 0x020, 0x050, 0x008, 0x07F, 0x0EF, 0x039, 0x014, 0x049, | ||
704 | 0x001, 0x011, 0x081, 0x004, 0x060, 0x040, 0x0CC, 0x059, | ||
705 | 0x0C0, 0x0AD, 0x023, 0x0EB, 0x041, 0x0B0, 0x081, 0x0F2, | ||
706 | 0x03A, 0x041, 0x0AA, 0x050, 0x043, 0x0E4, 0x0D4, 0x086, | ||
707 | 0x054, 0x0A0, 0x087, 0x0C1, 0x052, 0x0CA, 0x093, 0x001, | ||
708 | 0x032, 0x054, 0x09D, 0x024, 0x002, 0x000, 0x000, 0x052, | ||
709 | 0x0AF, 0x016, 0x046, 0x0A7, 0x091, 0x067, 0x008, 0x0B4, | ||
710 | 0x004, 0x051, 0x0F1, 0x065, 0x019, 0x0B4, 0x06E, 0x02D, | ||
711 | 0x0C0, 0x0AD, 0x049, 0x000, 0x092, 0x057, 0x01B, 0x074, | ||
712 | 0x045, 0x05F, 0x023, 0x051, 0x0B7, 0x044, 0x00A, 0x010, | ||
713 | 0x006, 0x0A3, 0x06E, 0x08B, 0x06B, 0x008, 0x01F, 0x019, | ||
714 | 0x0D1, 0x0E6, 0x080, 0x082, 0x080, 0x054, 0x004, 0x02A, | ||
715 | 0x045, 0x091, 0x0A9, 0x0E4, 0x059, 0x0C2, 0x02D, 0x001, | ||
716 | 0x014, 0x004, 0x050, 0x0D3, 0x0FC, 0x055, 0x084, 0x061, | ||
717 | 0x0D9, 0x080, 0x051, 0x02F, 0x0E2, 0x01F, 0x046, 0x05F, | ||
718 | 0x040, 0x0E0, 0x020, 0x015, 0x04A, 0x0BC, 0x059, 0x01A, | ||
719 | 0x09E, 0x045, 0x09C, 0x022, 0x0D0, 0x011, 0x048, 0x0CB, | ||
720 | 0x0E8, 0x014, 0x008, 0x001, 0x054, 0x015, 0x0E2, 0x0C8, | ||
721 | 0x0D4, 0x0F2, 0x02C, 0x0E1, 0x016, 0x080, 0x08A, 0x046, | ||
722 | 0x05F, 0x052, 0x07C, 0x0D9, 0x0A8, 0x0F8, 0x088, 0x0D0, | ||
723 | 0x05A, 0x03C, 0x0D2, 0x05C, 0x05B, 0x080, 0x0DA, 0x0A7, | ||
724 | 0x0D6, 0x05A, 0x008, 0x086, 0x0A4, 0x05D, 0x017, 0x0A0, | ||
725 | 0x0C3, 0x052, 0x02E, 0x088, 0x0A8, 0x022, 0x01F, 0x053, | ||
726 | 0x0EA, 0x0DA, 0x0CC, 0x0A6, 0x050, 0x0E1, 0x027, 0x076, | ||
727 | 0x03C, 0x005, 0x0F5, 0x04F, 0x0AB, 0x06B, 0x032, 0x099, | ||
728 | 0x043, 0x084, 0x09C, 0x07B, 0x038, 0x00B, 0x0E9, 0x027, | ||
729 | 0x0AC, 0x0D4, 0x092, 0x0E0, 0x00E, 0x0DA, 0x038, 0x04D, | ||
730 | 0x080, 0x0BE, 0x0E6, 0x07D, 0x050, 0x0BA, 0x051, 0x0AE, | ||
731 | 0x066, 0x0EF, 0x0BC, 0x0DC, 0x07B, 0x087, 0x01E, 0x002, | ||
732 | 0x0FA, 0x093, 0x0E6, 0x0CD, 0x047, 0x0C4, 0x043, 0x0CD, | ||
733 | 0x00F, 0x034, 0x09D, 0x0A3, 0x000, 0x0B0, 0x055, 0x001, | ||
734 | 0x0AE, 0x003, 0x084, 0x004, 0x0CE, 0x001, 0x0D0, 0x0E1, | ||
735 | 0x070, 0x002, 0x080, 0x00E, 0x089, 0x0E9, 0x022, 0x01F, | ||
736 | 0x0E0, 0x0E8, 0x096, 0x0B0, 0x011, 0x0F4, 0x0C2, 0x0CE, | ||
737 | 0x003, 0x06A, 0x044, 0x02D, 0x0C0, 0x06D, 0x048, 0x005, | ||
738 | 0x0B8, 0x00D, 0x0A3, 0x000, 0x0B7, 0x076, 0x0D5, 0x0DE, | ||
739 | 0x0B1, 0x050, 0x0DC, 0x07D, 0x077, 0x0BC, 0x054, 0x0BA, | ||
740 | 0x052, 0x07F, 0x058, 0x014, 0x034, 0x00F, 0x09A, 0x0F3, | ||
741 | 0x081, 0x058, 0x00B, 0x0EA, 0x0EF, 0x058, 0x014, 0x060, | ||
742 | 0x016, 0x0A5, 0x06C, 0x02E, 0x0F7, 0x081, 0x04B, 0x0A5, | ||
743 | 0x06F, 0x07D, 0x05D, 0x0EE, 0x0B5, 0x02E, 0x095, 0x080, | ||
744 | 0x0BE, 0x0F0, 0x073, 0x0BD, 0x004, 0x07C, 0x0EA, 0x0FE, | ||
745 | 0x0EB, 0x04C, 0x0DE, 0x029, 0x053, 0x0DD, 0x06A, 0x054, | ||
746 | 0x094, 0x0A9, 0x0EA, 0x00A, 0x08C, 0x002, 0x0D6, 0x04C, | ||
747 | 0x03C, 0x005, 0x0F4, 0x000, 0x0EA, 0x0CD, 0x056, 0x0AF, | ||
748 | 0x0C0, 0x047, 0x0D2, 0x09C, 0x08D, 0x029, 0x0CA, 0x0E0, | ||
749 | 0x02F, 0x0AE, 0x0BD, 0x075, 0x099, 0x09D, 0x04A, 0x0F9, | ||
750 | 0x0EF, 0x051, 0x07C, 0x094, 0x00C, 0x077, 0x080, 0x018, | ||
751 | 0x018, 0x029, 0x02A, 0x0F8, 0x0E0, 0x0E8, 0x0AA, 0x030, | ||
752 | 0x00B, 0x02A, 0x098, 0x07C, 0x01D, 0x011, 0x051, 0x080, | ||
753 | 0x059, 0x054, 0x0C3, 0x051, 0x0F5, 0x01B, 0x033, 0x024, | ||
754 | 0x0BB, 0x082, 0x0A5, 0x019, 0x05C, 0x01D, 0x010, 0x028, | ||
755 | 0x0C0, 0x02C, 0x09A, 0x0C7, 0x0C1, 0x0D1, 0x022, 0x08C, | ||
756 | 0x002, 0x0C9, 0x094, 0x064, 0x05C, 0x00C, 0x0D6, 0x08E, | ||
757 | 0x013, 0x060, 0x02F, 0x0B8, 0x00B, 0x0EA, 0x030, 0x0E3, | ||
758 | 0x0C0, 0x05F, 0x048, 0x0DC, 0x078, 0x00B, 0x0E8, 0x000, | ||
759 | 0x0E3, 0x0C0, 0x05F, 0x06C, 0x038, 0x0D5, 0x02E, 0x035, | ||
760 | 0x04F, 0x05A, 0x08A, 0x061, 0x0AA, 0x09F, 0x056, 0x01B, | ||
761 | 0x032, 0x099, 0x046, 0x042, 0x0C8, 0x001, 0x00C, 0x045, | ||
762 | 0x0CE, 0x0A5, 0x017, 0x0E6, 0x0C6, 0x0CE, 0x0A9, 0x0EB, | ||
763 | 0x015, 0x016, 0x046, 0x0A2, 0x047, 0x038, 0x014, 0x043, | ||
764 | 0x026, 0x022, 0x0E7, 0x03D, 0x060, 0x02F, 0x0AA, 0x09E, | ||
765 | 0x0B5, 0x012, 0x0E0, 0x07F, 0x001, 0x07D, 0x0E3, 0x0E7, | ||
766 | 0x002, 0x093, 0x0F9, 0x095, 0x044, 0x05C, 0x0E5, 0x0A0, | ||
767 | 0x0E3, 0x09D, 0x04A, 0x07F, 0x09C, 0x054, 0x0A9, 0x0EB, | ||
768 | 0x051, 0x005, 0x046, 0x0B9, 0x0FC, 0x0C0, 0x01B, 0x022, | ||
769 | 0x02E, 0x064, 0x054, 0x02F, 0x0CD, 0x046, 0x0CC, 0x0A7, | ||
770 | 0x0D5, 0x086, 0x0CC, 0x0A6, 0x050, 0x055, 0x0C6, 0x045, | ||
771 | 0x0CE, 0x05A, 0x00E, 0x039, 0x0D4, 0x0A7, 0x0F9, 0x0C5, | ||
772 | 0x04A, 0x09E, 0x0B5, 0x011, 0x080, 0x059, 0x0C0, 0x06D, | ||
773 | 0x0CF, 0x0E6, 0x000, 0x0D9, 0x011, 0x073, 0x022, 0x0A1, | ||
774 | 0x07E, 0x06A, 0x036, 0x065, 0x03E, 0x0AC, 0x036, 0x065, | ||
775 | 0x032, 0x0B0, 0x017, 0x0DD, 0x03E, 0x072, 0x0D2, 0x079, | ||
776 | 0x031, 0x00C, 0x098, 0x02E, 0x04C, 0x020, 0x073, 0x02A, | ||
777 | 0x08F, 0x0F3, 0x08A, 0x0AD, 0x0E7, 0x041, 0x082, 0x07C, | ||
778 | 0x0CA, 0x0A6, 0x089, 0x0B5, 0x085, 0x09F, 0x0B0, 0x0F0, | ||
779 | 0x017, 0x0D5, 0x01F, 0x054, 0x054, 0x025, 0x01A, 0x0A8, | ||
780 | 0x0FF, 0x02A, 0x094, 0x065, 0x011, 0x0D7, 0x049, 0x044, | ||
781 | 0x0D5, 0x0CC, 0x0A0, 0x055, 0x0D8, 0x0AE, 0x00E, 0x088, | ||
782 | 0x014, 0x060, 0x016, 0x04D, 0x063, 0x022, 0x0E0, 0x072, | ||
783 | 0x086, 0x038, 0x04D, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0B8, | ||
784 | 0x00B, 0x0EE, 0x002, 0x0FB, 0x081, 0x038, 0x0F0, 0x017, | ||
785 | 0x0D7, 0x0D7, 0x01E, 0x002, 0x0FA, 0x0FA, 0x0E3, 0x0C0, | ||
786 | 0x05F, 0x04C, 0x085, 0x090, 0x002, 0x018, 0x0C8, 0x05B, | ||
787 | 0x080, 0x0DA, 0x030, 0x00B, 0x070, 0x01B, 0x04C, 0x022, | ||
788 | 0x0D3, 0x04C, 0x033, 0x003, 0x08C, 0x02E, 0x04C, 0x043, | ||
789 | 0x026, 0x0D0, 0x0F5, 0x063, 0x066, 0x0D0, 0x095, 0x0A7, | ||
790 | 0x0CE, 0x045, 0x033, 0x00A, 0x0D6, 0x016, 0x042, 0x038, | ||
791 | 0x06E, 0x0E4, 0x0CE, 0x0BD, 0x059, 0x02C, 0x0D2, 0x0AB, | ||
792 | 0x0BA, 0x094, 0x09D, 0x0E6, 0x01A, 0x0B0, 0x017, 0x0D5, | ||
793 | 0x04F, 0x05A, 0x08B, 0x009, 0x01A, 0x088, 0x0B9, 0x0C5, | ||
794 | 0x042, 0x047, 0x030, 0x0D4, 0x032, 0x016, 0x072, 0x088, | ||
795 | 0x065, 0x0BD, 0x059, 0x099, 0x025, 0x0A5, 0x060, 0x02F, | ||
796 | 0x0B8, 0x060, 0x0F3, 0x008, 0x0B7, 0x04A, 0x01A, 0x08F, | ||
797 | 0x0AB, 0x00D, 0x099, 0x046, 0x051, 0x0AF, 0x038, 0x0A8, | ||
798 | 0x08E, 0x090, 0x065, 0x013, 0x052, 0x018, 0x0A0, 0x054, | ||
799 | 0x0B1, 0x042, 0x02E, 0x061, 0x0A8, 0x048, 0x0E7, 0x02D, | ||
800 | 0x016, 0x0F7, 0x0A8, 0x005, 0x0A5, 0x060, 0x02F, 0x0A4, | ||
801 | 0x075, 0x0D2, 0x051, 0x035, 0x073, 0x028, 0x015, 0x076, | ||
802 | 0x02B, 0x083, 0x0A2, 0x005, 0x018, 0x005, 0x093, 0x058, | ||
803 | 0x0C8, 0x0B8, 0x006, 0x028, 0x063, 0x084, 0x0D8, 0x00B, | ||
804 | 0x0EE, 0x002, 0x0FB, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0A0, | ||
805 | 0x043, 0x0A7, 0x001, 0x07D, 0x04C, 0x0E3, 0x0C0, 0x05F, | ||
806 | 0x070, 0x017, 0x0DC, 0x005, 0x0F4, 0x064, 0x02D, 0x0C0, | ||
807 | 0x06D, 0x018, 0x005, 0x0B8, 0x00D, 0x0A5, 0x0BD, 0x06A, | ||
808 | 0x023, 0x086, 0x0AA, 0x09E, 0x0B5, 0x011, 0x0A4, 0x06A, | ||
809 | 0x0A3, 0x0EA, 0x08A, 0x08D, 0x023, 0x0E1, 0x017, 0x038, | ||
810 | 0x034, 0x069, 0x071, 0x098, 0x045, 0x0A6, 0x098, 0x06A, | ||
811 | 0x03E, 0x0AC, 0x036, 0x065, 0x019, 0x046, 0x0BC, 0x0E2, | ||
812 | 0x0A2, 0x03A, 0x041, 0x094, 0x04D, 0x048, 0x062, 0x081, | ||
813 | 0x052, 0x0C5, 0x016, 0x0F7, 0x0A8, 0x08B, 0x04A, 0x054, | ||
814 | 0x0F5, 0x0A8, 0x08C, 0x002, 0x0DC, 0x006, 0x0D1, 0x003, | ||
815 | 0x09C, 0x0B4, 0x0A9, 0x0EE, 0x00A, 0x095, 0x025, 0x02A, | ||
816 | 0x07A, 0x0AD, 0x046, 0x001, 0x067, 0x001, 0x0B5, 0x0D7, | ||
817 | 0x0AC, 0x00A, 0x030, 0x00B, 0x06C, 0x049, 0x035, 0x0E6, | ||
818 | 0x0B5, 0x067, 0x0F3, 0x000, 0x06C, 0x088, 0x0B9, 0x091, | ||
819 | 0x050, 0x0BF, 0x031, 0x01B, 0x032, 0x0A7, 0x0B8, 0x068, | ||
820 | 0x095, 0x025, 0x07B, 0x0AD, 0x033, 0x078, 0x0A7, 0x0CD, | ||
821 | 0x03E, 0x0D3, 0x08E, 0x09D, 0x034, 0x0E7, 0x04E, 0x0D4, | ||
822 | 0x022, 0x0E7, 0x006, 0x084, 0x08E, 0x060, 0x0A8, 0x0FF, | ||
823 | 0x038, 0x0AB, 0x083, 0x09C, 0x02A, 0x008, 0x0F9, 0x0D4, | ||
824 | 0x020, 0x063, 0x0BC, 0x01A, 0x006, 0x00A, 0x0C0, 0x05F, | ||
825 | 0x046, 0x042, 0x0DC, 0x006, 0x0D1, 0x080, 0x05B, 0x080, | ||
826 | 0x0DA, 0x022, 0x0E6, 0x01A, 0x084, 0x08E, 0x072, 0x0D1, | ||
827 | 0x06F, 0x05A, 0x080, 0x087, 0x01A, 0x0AA, 0x07A, 0x0D4, | ||
828 | 0x048, 0x0C8, 0x0D5, 0x047, 0x0D5, 0x015, 0x023, 0x023, | ||
829 | 0x0E1, 0x017, 0x038, 0x034, 0x08C, 0x0BA, 0x04B, 0x07B, | ||
830 | 0x0D4, 0x002, 0x0D2, 0x08C, 0x022, 0x0DC, 0x006, 0x0D5, | ||
831 | 0x01F, 0x056, 0x01B, 0x032, 0x08C, 0x0A3, 0x05E, 0x071, | ||
832 | 0x051, 0x01D, 0x020, 0x0CA, 0x026, 0x0A4, 0x031, 0x040, | ||
833 | 0x0A9, 0x062, 0x0B0, 0x017, 0x0DF, 0x09E, 0x0F4, 0x0B7, | ||
834 | 0x0C9, 0x040, 0x0C7, 0x078, 0x001, 0x081, 0x082, 0x0B8, | ||
835 | 0x038, 0x039, 0x049, 0x01C, 0x026, 0x0C0, 0x05F, 0x070, | ||
836 | 0x017, 0x0D4, 0x0AB, 0x0E1, 0x02A, 0x0F8, 0x04A, 0x0BE, | ||
837 | 0x012, 0x0AF, 0x08F, 0x097, 0x04F, 0x0CB, 0x0A7, 0x001, | ||
838 | 0x07D, 0x0DA, 0x080, 0x0AA, 0x091, 0x064, 0x07F, 0x04A, | ||
839 | 0x081, 0x0D5, 0x022, 0x0C8, 0x0FE, 0x082, 0x080, 0x025, | ||
840 | 0x048, 0x0B2, 0x03E, 0x0BB, 0x0DC, 0x035, 0x02E, 0x094, | ||
841 | 0x007, 0x0E8, 0x08A, 0x09C, 0x003, 0x0E2, 0x04B, 0x0A5, | ||
842 | 0x077, 0x0AB, 0x0B3, 0x032, 0x0E9, 0x04B, 0x0BD, 0x059, | ||
843 | 0x086, 0x084, 0x097, 0x07A, 0x004, 0x0BA, 0x053, 0x0E1, | ||
844 | 0x032, 0x0EF, 0x050, 0x0D4, 0x0E6, 0x035, 0x053, 0x0EB, | ||
845 | 0x002, 0x09C, 0x0C7, 0x0D7, 0x07A, 0x0B3, 0x030, 0x0D2, | ||
846 | 0x05D, 0x0EA, 0x002, 0x0E9, 0x044, 0x05D, 0x016, 0x028, | ||
847 | 0x0C0, 0x02C, 0x0E0, 0x036, 0x091, 0x074, 0x045, 0x059, | ||
848 | 0x018, 0x0D5, 0x04F, 0x0AC, 0x00A, 0x0C4, 0x035, 0x030, | ||
849 | 0x08B, 0x038, 0x069, 0x02B, 0x0BD, 0x059, 0x098, 0x069, | ||
850 | 0x02E, 0x0F5, 0x012, 0x0E9, 0x058, 0x067, 0x04A, 0x0EF, | ||
851 | 0x050, 0x0D5, 0x08E, 0x03E, 0x01C, 0x0A4, 0x0B0, 0x0CE, | ||
852 | 0x093, 0x021, 0x06E, 0x01A, 0x048, 0x01F, 0x0A2, 0x02A, | ||
853 | 0x0C3, 0x00D, 0x057, 0x07A, 0x0B3, 0x00D, 0x009, 0x02E, | ||
854 | 0x0F4, 0x043, 0x05D, 0x028, 0x08B, 0x083, 0x020, 0x092, | ||
855 | 0x038, 0x04D, 0x080, 0x0BE, 0x0E0, 0x02F, 0x0AC, 0x017, | ||
856 | 0x049, 0x0B3, 0x0A5, 0x082, 0x0E9, 0x03E, 0x0E9, 0x036, | ||
857 | 0x074, 0x0E0, 0x02F, 0x0A6, 0x0CE, 0x09C, 0x005, 0x0F4, | ||
858 | 0x0C2, 0x02C, 0x08C, 0x052, 0x057, 0x07A, 0x0D4, 0x08D, | ||
859 | 0x048, 0x0FA, 0x0EF, 0x050, 0x0D5, 0x0AE, 0x035, 0x053, | ||
860 | 0x0EB, 0x002, 0x086, 0x021, 0x0AA, 0x0EF, 0x056, 0x066, | ||
861 | 0x01A, 0x04B, 0x0BD, 0x044, 0x0BA, 0x050, 0x0C4, 0x0E9, | ||
862 | 0x053, 0x0EB, 0x002, 0x086, 0x081, 0x0F5, 0x0DE, 0x0A1, | ||
863 | 0x0A8, 0x062, 0x01F, 0x05D, 0x0FE, 0x0A2, 0x05D, 0x029, | ||
864 | 0x077, 0x0A8, 0x06A, 0x061, 0x08D, 0x040, 0x0FD, 0x011, | ||
865 | 0x053, 0x00C, 0x06A, 0x0A7, 0x0D6, 0x005, 0x030, 0x0C7, | ||
866 | 0x0D7, 0x07F, 0x0A9, 0x057, 0x04A, 0x05D, 0x0EB, 0x048, | ||
867 | 0x01B, 0x00C, 0x07C, 0x08B, 0x09D, 0x08A, 0x053, 0x0EF, | ||
868 | 0x066, 0x094, 0x0CA, 0x054, 0x0F5, 0x0A0, 0x0C6, 0x001, | ||
869 | 0x06E, 0x003, 0x06A, 0x09F, 0x056, 0x076, 0x065, 0x032, | ||
870 | 0x08B, 0x07B, 0x0D2, 0x0C5, 0x0A5, 0x060, 0x02F, 0x0AA, | ||
871 | 0x07D, 0x065, 0x0A3, 0x000, 0x0B7, 0x001, 0x0B4, 0x0C8, | ||
872 | 0x05A, 0x007, 0x08F, 0x0ED, 0x001, 0x0D5, 0x027, 0x091, | ||
873 | 0x067, 0x001, 0x0B4, 0x08B, 0x09C, 0x054, 0x01C, 0x073, | ||
874 | 0x0A8, 0x084, 0x05C, 0x0C1, 0x050, 0x0BF, 0x036, 0x056, | ||
875 | 0x060, 0x0AB, 0x08C, 0x08B, 0x09C, 0x054, 0x01C, 0x073, | ||
876 | 0x0A8, 0x084, 0x05C, 0x0C1, 0x050, 0x0BF, 0x036, 0x056, | ||
877 | 0x06C, 0x005, 0x0F5, 0x053, 0x0D6, 0x0A2, 0x030, 0x00B, | ||
878 | 0x029, 0x05B, 0x019, 0x0FC, 0x0F6, 0x094, 0x045, 0x0CF, | ||
879 | 0x015, 0x00B, 0x0F3, 0x03C, 0x0B3, 0x02A, 0x07A, 0x0C5, | ||
880 | 0x046, 0x001, 0x064, 0x08A, 0x031, 0x023, 0x09C, 0x00A, | ||
881 | 0x05D, 0x0EA, 0x034, 0x033, 0x02E, 0x095, 0x0C7, 0x0CE, | ||
882 | 0x02A, 0x04F, 0x0E6, 0x050, 0x020, 0x0B9, 0x031, 0x00C, | ||
883 | 0x09B, 0x0EF, 0x039, 0x014, 0x045, 0x0CE, 0x045, 0x007, | ||
884 | 0x01C, 0x0EA, 0x046, 0x087, 0x0AB, 0x01B, 0x036, 0x084, | ||
885 | 0x0A7, 0x05E, 0x0AC, 0x096, 0x067, 0x052, 0x0B0, 0x017, | ||
886 | 0x0DC, 0x0FE, 0x07B, 0x04A, 0x022, 0x0E7, 0x08A, 0x085, | ||
887 | 0x0F9, 0x09E, 0x059, 0x097, 0x07A, 0x08D, 0x00C, 0x0CB, | ||
888 | 0x0A5, 0x027, 0x0F3, 0x0A0, 0x044, 0x032, 0x060, 0x0B9, | ||
889 | 0x037, 0x0DE, 0x072, 0x028, 0x08B, 0x09C, 0x08A, 0x00E, | ||
890 | 0x039, 0x0D4, 0x08C, 0x005, 0x0F7, 0x0E7, 0x0B8, 0x02A, | ||
891 | 0x0F9, 0x028, 0x018, 0x0EF, 0x000, 0x030, 0x030, 0x057, | ||
892 | 0x007, 0x044, 0x00A, 0x050, 0x08F, 0x0F0, 0x073, 0x091, | ||
893 | 0x041, 0x01F, 0x03A, 0x090, 0x045, 0x0C0, 0x0BB, 0x018, | ||
894 | 0x0E1, 0x036, 0x002, 0x0FB, 0x0FB, 0x09E, 0x002, 0x0FA, | ||
895 | 0x0EE, 0x0E7, 0x0F5, 0x0CF, 0x001, 0x07D, 0x010, 0x05C, | ||
896 | 0x0F0, 0x017, 0x0D1, 0x005, 0x0CF, 0x001, 0x07D, 0x053, | ||
897 | 0x0EB, 0x02D, 0x018, 0x005, 0x0B8, 0x00D, 0x0A6, 0x042, | ||
898 | 0x0DC, 0x006, 0x0D3, 0x017, 0x035, 0x0A8, 0x08B, 0x09C, | ||
899 | 0x00A, 0x00E, 0x039, 0x0D4, 0x00C, 0x0FE, 0x07B, 0x04A, | ||
900 | 0x022, 0x0E6, 0x055, 0x00B, 0x0F3, 0x031, 0x0B3, 0x060, | ||
901 | 0x02F, 0x0BC, 0x07C, 0x0E2, 0x0A4, 0x0FE, 0x065, 0x051, | ||
902 | 0x017, 0x038, 0x014, 0x01C, 0x073, 0x0A8, 0x019, 0x0FC, | ||
903 | 0x0F6, 0x094, 0x045, 0x0CC, 0x0AA, 0x017, 0x0E6, 0x063, | ||
904 | 0x066, 0x00A, 0x0B8, 0x0CC, 0x085, 0x0A1, 0x058, 0x0F6, | ||
905 | 0x0A2, 0x035, 0x048, 0x048, 0x07F, 0x04A, 0x089, 0x095, | ||
906 | 0x021, 0x021, 0x0FD, 0x005, 0x002, 0x054, 0x09E, 0x045, | ||
907 | 0x091, 0x00E, 0x03C, 0x005, 0x0F5, 0x007, 0x040, 0x055, | ||
908 | 0x048, 0x052, 0x03E, 0x086, 0x0A0, 0x075, 0x048, 0x052, | ||
909 | 0x03E, 0x0B5, 0x000, 0x04A, 0x09C, 0x000, 0x06B, 0x0C7, | ||
910 | 0x0CE, 0x045, 0x027, 0x0F3, 0x02A, 0x084, 0x037, 0x035, | ||
911 | 0x0DE, 0x0A0, 0x0AB, 0x023, 0x01A, 0x0AE, 0x0F5, 0x083, | ||
912 | 0x059, 0x018, 0x0D7, 0x043, 0x0DE, 0x02A, 0x0D0, 0x094, | ||
913 | 0x0EB, 0x0DE, 0x005, 0x03A, 0x095, 0x09F, 0x0CC, 0x0C3, | ||
914 | 0x020, 0x045, 0x0CC, 0x0AA, 0x017, 0x0E6, 0x066, 0x0CC, | ||
915 | 0x043, 0x026, 0x04F, 0x0E7, 0x041, 0x022, 0x02E, 0x070, | ||
916 | 0x068, 0x038, 0x0E7, 0x053, 0x0E0, 0x02F, 0x0AB, 0x0BC, | ||
917 | 0x012, 0x0D2, 0x0E9, 0x058, 0x00B, 0x0EA, 0x0A7, 0x0AD, | ||
918 | 0x045, 0x0A1, 0x01F, 0x0C0, 0x05F, 0x078, 0x039, 0x0C8, | ||
919 | 0x0A0, 0x08F, 0x09D, 0x048, 0x01C, 0x024, 0x0EE, 0x0C7, | ||
920 | 0x080, 0x0BE, 0x0BA, 0x0F5, 0x06D, 0x066, 0x049, 0x077, | ||
921 | 0x00D, 0x04E, 0x0A5, 0x030, 0x009, 0x0B4, 0x0F9, 0x0C5, | ||
922 | 0x043, 0x00F, 0x038, 0x0A9, 0x03F, 0x09D, 0x002, 0x0FB, | ||
923 | 0x0CE, 0x045, 0x011, 0x073, 0x091, 0x041, 0x0C7, 0x03A, | ||
924 | 0x091, 0x09F, 0x0CF, 0x069, 0x044, 0x05C, 0x0F1, 0x050, | ||
925 | 0x0BF, 0x033, 0x0CB, 0x032, 0x0A7, 0x0AC, 0x054, 0x090, | ||
926 | 0x08D, 0x044, 0x08E, 0x070, 0x029, 0x077, 0x0A8, 0x0D0, | ||
927 | 0x0CC, 0x0BA, 0x056, 0x0B0, 0x0B2, 0x09D, 0x08C, 0x086, | ||
928 | 0x04C, 0x017, 0x026, 0x077, 0x026, 0x01C, 0x027, 0x01C, | ||
929 | 0x024, 0x09E, 0x023, 0x061, 0x0BE, 0x08E, 0x012, 0x04F, | ||
930 | 0x011, 0x087, 0x01C, 0x0EA, 0x05C, 0x005, 0x0F5, 0x0D7, | ||
931 | 0x0B8, 0x06A, 0x075, 0x029, 0x077, 0x0AB, 0x00D, 0x099, | ||
932 | 0x074, 0x0A5, 0x04F, 0x072, 0x0A0, 0x0AA, 0x04A, 0x0C6, | ||
933 | 0x0F3, 0x066, 0x066, 0x0C6, 0x039, 0x082, 0x0AF, 0x075, | ||
934 | 0x0A6, 0x06F, 0x014, 0x06B, 0x0CE, 0x005, 0x070, 0x073, | ||
935 | 0x096, 0x082, 0x03E, 0x075, 0x028, 0x0E1, 0x03A, 0x0A7, | ||
936 | 0x0AD, 0x044, 0x060, 0x016, 0x052, 0x0B6, 0x01D, 0x07A, | ||
937 | 0x0B6, 0x0B3, 0x024, 0x0BB, 0x086, 0x0A7, 0x052, 0x098, | ||
938 | 0x004, 0x0DA, 0x07C, 0x0E2, 0x0A1, 0x087, 0x09C, 0x055, | ||
939 | 0x0F7, 0x09C, 0x0B5, 0x0AC, 0x02C, 0x095, 0x033, 0x0B9, | ||
940 | 0x031, 0x005, 0x0D9, 0x053, 0x0D6, 0x0A2, 0x030, 0x00B, | ||
941 | 0x029, 0x05B, 0x002, 0x02E, 0x061, 0x05A, 0x017, 0x0E6, | ||
942 | 0x09C, 0x0B3, 0x02A, 0x07A, 0x0C5, 0x040, 0x021, 0x0A8, | ||
943 | 0x091, 0x0CE, 0x005, 0x027, 0x0F3, 0x0A5, 0x088, 0x064, | ||
944 | 0x0C1, 0x072, 0x065, 0x04F, 0x058, 0x014, 0x00C, 0x08D, | ||
945 | 0x07E, 0x0F3, 0x081, 0x044, 0x05C, 0x0EF, 0x041, 0x0C7, | ||
946 | 0x03A, 0x0BE, 0x002, 0x0FA, 0x0A9, 0x0EA, 0x0CE, 0x0CC, | ||
947 | 0x0A9, 0x029, 0x053, 0x0D6, 0x0A2, 0x046, 0x047, 0x0DD, | ||
948 | 0x07A, 0x0C0, 0x0A3, 0x000, 0x086, 0x0E2, 0x09B, 0x029, | ||
949 | 0x078, 0x08B, 0x081, 0x009, 0x098, 0x070, 0x09B, 0x029, | ||
950 | 0x079, 0x05D, 0x0D9, 0x072, 0x0ED, 0x094, 0x0BC, 0x0B9, | ||
951 | 0x076, 0x013, 0x03B, 0x02A, 0x05D, 0x0B2, 0x097, 0x095, | ||
952 | 0x02E, 0x0D9, 0x04B, 0x0CA, 0x07D, 0x05B, 0x059, 0x094, | ||
953 | 0x0CA, 0x01C, 0x024, 0x0EE, 0x0C7, 0x094, 0x0BC, 0x0C0, | ||
954 | 0x026, 0x0D3, 0x0E7, 0x015, 0x00C, 0x03C, 0x0E2, 0x0AC, | ||
955 | 0x0FE, 0x07B, 0x04A, 0x022, 0x0E7, 0x08A, 0x085, 0x0F9, | ||
956 | 0x09E, 0x059, 0x097, 0x07A, 0x08D, 0x00C, 0x0CB, 0x0A5, | ||
957 | 0x027, 0x0F3, 0x0A0, 0x041, 0x072, 0x062, 0x019, 0x037, | ||
958 | 0x0DE, 0x070, 0x028, 0x08B, 0x09C, 0x08A, 0x00E, 0x039, | ||
959 | 0x0D4, 0x08D, 0x00F, 0x056, 0x036, 0x06D, 0x009, 0x04E, | ||
960 | 0x0BD, 0x059, 0x02C, 0x0CE, 0x0A5, 0x06B, 0x00B, 0x022, | ||
961 | 0x0D9, 0x09D, 0x0C9, 0x0B2, 0x097, 0x0BE, 0x0F3, 0x081, | ||
962 | 0x04A, 0x07D, 0x065, 0x0A3, 0x000, 0x093, 0x08F, 0x067, | ||
963 | 0x029, 0x078, 0x0C2, 0x04D, 0x0C1, 0x0D1, 0x006, 0x082, | ||
964 | 0x031, 0x0AF, 0x007, 0x038, 0x034, 0x011, 0x0F3, 0x0A8, | ||
965 | 0x02A, 0x09E, 0x0A8, 0x066, 0x01A, 0x0A4, 0x0A5, 0x04F, | ||
966 | 0x05A, 0x00C, 0x011, 0x08F, 0x0AA, 0x07B, 0x0D0, 0x065, | ||
967 | 0x049, 0x045, 0x0BD, 0x0E9, 0x062, 0x0D2, 0x0B1, 0x09E, | ||
968 | 0x06C, 0x0CC, 0x0C6, 0x019, 0x087, 0x009, 0x0C3, 0x08E, | ||
969 | 0x075, 0x041, 0x01F, 0x03A, 0x0A5, 0x013, 0x0D5, 0x055, | ||
970 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, | ||
971 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, | ||
972 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, | ||
973 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, | ||
974 | 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, | ||
975 | 0x055, 0x055, 0x055, 0x05A, 0x0CC, 0x090 | ||
976 | }; | ||
977 | |||
978 | #endif /* defined(CONFIG_SMCTR) || defined(CONFIG_SMCTR_MODULE) */ | ||
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 901551c8ca0e..a82b32b40131 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <linux/kernel.h> | 44 | #include <linux/kernel.h> |
45 | #include <linux/major.h> | 45 | #include <linux/major.h> |
46 | #include <linux/slab.h> | 46 | #include <linux/slab.h> |
47 | #include <linux/smp_lock.h> | ||
47 | #include <linux/poll.h> | 48 | #include <linux/poll.h> |
48 | #include <linux/fcntl.h> | 49 | #include <linux/fcntl.h> |
49 | #include <linux/init.h> | 50 | #include <linux/init.h> |
@@ -938,22 +939,26 @@ static int tun_chr_fasync(int fd, struct file *file, int on) | |||
938 | 939 | ||
939 | DBG(KERN_INFO "%s: tun_chr_fasync %d\n", tun->dev->name, on); | 940 | DBG(KERN_INFO "%s: tun_chr_fasync %d\n", tun->dev->name, on); |
940 | 941 | ||
942 | lock_kernel(); | ||
941 | if ((ret = fasync_helper(fd, file, on, &tun->fasync)) < 0) | 943 | if ((ret = fasync_helper(fd, file, on, &tun->fasync)) < 0) |
942 | return ret; | 944 | goto out; |
943 | 945 | ||
944 | if (on) { | 946 | if (on) { |
945 | ret = __f_setown(file, task_pid(current), PIDTYPE_PID, 0); | 947 | ret = __f_setown(file, task_pid(current), PIDTYPE_PID, 0); |
946 | if (ret) | 948 | if (ret) |
947 | return ret; | 949 | goto out; |
948 | tun->flags |= TUN_FASYNC; | 950 | tun->flags |= TUN_FASYNC; |
949 | } else | 951 | } else |
950 | tun->flags &= ~TUN_FASYNC; | 952 | tun->flags &= ~TUN_FASYNC; |
951 | 953 | ret = 0; | |
952 | return 0; | 954 | out: |
955 | unlock_kernel(); | ||
956 | return ret; | ||
953 | } | 957 | } |
954 | 958 | ||
955 | static int tun_chr_open(struct inode *inode, struct file * file) | 959 | static int tun_chr_open(struct inode *inode, struct file * file) |
956 | { | 960 | { |
961 | cycle_kernel_lock(); | ||
957 | DBG1(KERN_INFO "tunX: tun_chr_open\n"); | 962 | DBG1(KERN_INFO "tunX: tun_chr_open\n"); |
958 | file->private_data = NULL; | 963 | file->private_data = NULL; |
959 | return 0; | 964 | return 0; |
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c index c1b55bc7eab7..756ba10b79d6 100644 --- a/drivers/net/ucc_geth.c +++ b/drivers/net/ucc_geth.c | |||
@@ -28,8 +28,8 @@ | |||
28 | #include <linux/mii.h> | 28 | #include <linux/mii.h> |
29 | #include <linux/phy.h> | 29 | #include <linux/phy.h> |
30 | #include <linux/workqueue.h> | 30 | #include <linux/workqueue.h> |
31 | #include <linux/of_platform.h> | ||
31 | 32 | ||
32 | #include <asm/of_platform.h> | ||
33 | #include <asm/uaccess.h> | 33 | #include <asm/uaccess.h> |
34 | #include <asm/irq.h> | 34 | #include <asm/irq.h> |
35 | #include <asm/io.h> | 35 | #include <asm/io.h> |
diff --git a/drivers/net/ucc_geth_mii.c b/drivers/net/ucc_geth_mii.c index 940474736922..6d9e7ad9fda9 100644 --- a/drivers/net/ucc_geth_mii.c +++ b/drivers/net/ucc_geth_mii.c | |||
@@ -36,8 +36,8 @@ | |||
36 | #include <linux/mii.h> | 36 | #include <linux/mii.h> |
37 | #include <linux/phy.h> | 37 | #include <linux/phy.h> |
38 | #include <linux/fsl_devices.h> | 38 | #include <linux/fsl_devices.h> |
39 | #include <linux/of_platform.h> | ||
39 | 40 | ||
40 | #include <asm/of_platform.h> | ||
41 | #include <asm/io.h> | 41 | #include <asm/io.h> |
42 | #include <asm/irq.h> | 42 | #include <asm/irq.h> |
43 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
diff --git a/drivers/net/usb/kaweth.c b/drivers/net/usb/kaweth.c index 7c66b052f55a..d6829db51b45 100644 --- a/drivers/net/usb/kaweth.c +++ b/drivers/net/usb/kaweth.c | |||
@@ -57,13 +57,12 @@ | |||
57 | #include <linux/ethtool.h> | 57 | #include <linux/ethtool.h> |
58 | #include <linux/dma-mapping.h> | 58 | #include <linux/dma-mapping.h> |
59 | #include <linux/wait.h> | 59 | #include <linux/wait.h> |
60 | #include <linux/firmware.h> | ||
60 | #include <asm/uaccess.h> | 61 | #include <asm/uaccess.h> |
61 | #include <asm/byteorder.h> | 62 | #include <asm/byteorder.h> |
62 | 63 | ||
63 | #undef DEBUG | 64 | #undef DEBUG |
64 | 65 | ||
65 | #include "kawethfw.h" | ||
66 | |||
67 | #define KAWETH_MTU 1514 | 66 | #define KAWETH_MTU 1514 |
68 | #define KAWETH_BUF_SIZE 1664 | 67 | #define KAWETH_BUF_SIZE 1664 |
69 | #define KAWETH_TX_TIMEOUT (5 * HZ) | 68 | #define KAWETH_TX_TIMEOUT (5 * HZ) |
@@ -108,6 +107,10 @@ | |||
108 | MODULE_AUTHOR("Michael Zappe <zapman@interlan.net>, Stephane Alnet <stephane@u-picardie.fr>, Brad Hards <bhards@bigpond.net.au> and Oliver Neukum <oliver@neukum.org>"); | 107 | MODULE_AUTHOR("Michael Zappe <zapman@interlan.net>, Stephane Alnet <stephane@u-picardie.fr>, Brad Hards <bhards@bigpond.net.au> and Oliver Neukum <oliver@neukum.org>"); |
109 | MODULE_DESCRIPTION("KL5USB101 USB Ethernet driver"); | 108 | MODULE_DESCRIPTION("KL5USB101 USB Ethernet driver"); |
110 | MODULE_LICENSE("GPL"); | 109 | MODULE_LICENSE("GPL"); |
110 | MODULE_FIRMWARE("kaweth/new_code.bin"); | ||
111 | MODULE_FIRMWARE("kaweth/new_code_fix.bin"); | ||
112 | MODULE_FIRMWARE("kaweth/trigger_code.bin"); | ||
113 | MODULE_FIRMWARE("kaweth/trigger_code_fix.bin"); | ||
111 | 114 | ||
112 | static const char driver_name[] = "kaweth"; | 115 | static const char driver_name[] = "kaweth"; |
113 | 116 | ||
@@ -385,17 +388,28 @@ static int kaweth_set_receive_filter(struct kaweth_device *kaweth, | |||
385 | * kaweth_download_firmware | 388 | * kaweth_download_firmware |
386 | ****************************************************************/ | 389 | ****************************************************************/ |
387 | static int kaweth_download_firmware(struct kaweth_device *kaweth, | 390 | static int kaweth_download_firmware(struct kaweth_device *kaweth, |
388 | __u8 *data, | 391 | const char *fwname, |
389 | __u16 data_len, | ||
390 | __u8 interrupt, | 392 | __u8 interrupt, |
391 | __u8 type) | 393 | __u8 type) |
392 | { | 394 | { |
393 | if(data_len > KAWETH_FIRMWARE_BUF_SIZE) { | 395 | const struct firmware *fw; |
394 | err("Firmware too big: %d", data_len); | 396 | int data_len; |
397 | int ret; | ||
398 | |||
399 | ret = request_firmware(&fw, fwname, &kaweth->dev->dev); | ||
400 | if (ret) { | ||
401 | err("Firmware request failed\n"); | ||
402 | return ret; | ||
403 | } | ||
404 | |||
405 | if (fw->size > KAWETH_FIRMWARE_BUF_SIZE) { | ||
406 | err("Firmware too big: %zu", fw->size); | ||
395 | return -ENOSPC; | 407 | return -ENOSPC; |
396 | } | 408 | } |
409 | data_len = fw->size; | ||
410 | memcpy(kaweth->firmware_buf, fw->data, fw->size); | ||
397 | 411 | ||
398 | memcpy(kaweth->firmware_buf, data, data_len); | 412 | release_firmware(fw); |
399 | 413 | ||
400 | kaweth->firmware_buf[2] = (data_len & 0xFF) - 7; | 414 | kaweth->firmware_buf[2] = (data_len & 0xFF) - 7; |
401 | kaweth->firmware_buf[3] = data_len >> 8; | 415 | kaweth->firmware_buf[3] = data_len >> 8; |
@@ -406,8 +420,7 @@ static int kaweth_download_firmware(struct kaweth_device *kaweth, | |||
406 | kaweth->firmware_buf[2]); | 420 | kaweth->firmware_buf[2]); |
407 | 421 | ||
408 | dbg("Downloading firmware at %p to kaweth device at %p", | 422 | dbg("Downloading firmware at %p to kaweth device at %p", |
409 | data, | 423 | fw->data, kaweth); |
410 | kaweth); | ||
411 | dbg("Firmware length: %d", data_len); | 424 | dbg("Firmware length: %d", data_len); |
412 | 425 | ||
413 | return kaweth_control(kaweth, | 426 | return kaweth_control(kaweth, |
@@ -1009,8 +1022,7 @@ static int kaweth_probe( | |||
1009 | info("Downloading firmware..."); | 1022 | info("Downloading firmware..."); |
1010 | kaweth->firmware_buf = (__u8 *)__get_free_page(GFP_KERNEL); | 1023 | kaweth->firmware_buf = (__u8 *)__get_free_page(GFP_KERNEL); |
1011 | if ((result = kaweth_download_firmware(kaweth, | 1024 | if ((result = kaweth_download_firmware(kaweth, |
1012 | kaweth_new_code, | 1025 | "kaweth/new_code.bin", |
1013 | len_kaweth_new_code, | ||
1014 | 100, | 1026 | 100, |
1015 | 2)) < 0) { | 1027 | 2)) < 0) { |
1016 | err("Error downloading firmware (%d)", result); | 1028 | err("Error downloading firmware (%d)", result); |
@@ -1018,8 +1030,7 @@ static int kaweth_probe( | |||
1018 | } | 1030 | } |
1019 | 1031 | ||
1020 | if ((result = kaweth_download_firmware(kaweth, | 1032 | if ((result = kaweth_download_firmware(kaweth, |
1021 | kaweth_new_code_fix, | 1033 | "kaweth/new_code_fix.bin", |
1022 | len_kaweth_new_code_fix, | ||
1023 | 100, | 1034 | 100, |
1024 | 3)) < 0) { | 1035 | 3)) < 0) { |
1025 | err("Error downloading firmware fix (%d)", result); | 1036 | err("Error downloading firmware fix (%d)", result); |
@@ -1027,8 +1038,7 @@ static int kaweth_probe( | |||
1027 | } | 1038 | } |
1028 | 1039 | ||
1029 | if ((result = kaweth_download_firmware(kaweth, | 1040 | if ((result = kaweth_download_firmware(kaweth, |
1030 | kaweth_trigger_code, | 1041 | "kaweth/trigger_code.bin", |
1031 | len_kaweth_trigger_code, | ||
1032 | 126, | 1042 | 126, |
1033 | 2)) < 0) { | 1043 | 2)) < 0) { |
1034 | err("Error downloading trigger code (%d)", result); | 1044 | err("Error downloading trigger code (%d)", result); |
@@ -1037,8 +1047,7 @@ static int kaweth_probe( | |||
1037 | } | 1047 | } |
1038 | 1048 | ||
1039 | if ((result = kaweth_download_firmware(kaweth, | 1049 | if ((result = kaweth_download_firmware(kaweth, |
1040 | kaweth_trigger_code_fix, | 1050 | "kaweth/trigger_code_fix.bin", |
1041 | len_kaweth_trigger_code_fix, | ||
1042 | 126, | 1051 | 126, |
1043 | 3)) < 0) { | 1052 | 3)) < 0) { |
1044 | err("Error downloading trigger code fix (%d)", result); | 1053 | err("Error downloading trigger code fix (%d)", result); |
diff --git a/drivers/net/usb/kawethfw.h b/drivers/net/usb/kawethfw.h deleted file mode 100644 index cf85fcb0d1a6..000000000000 --- a/drivers/net/usb/kawethfw.h +++ /dev/null | |||
@@ -1,557 +0,0 @@ | |||
1 | /******************************************/ | ||
2 | /* NOTE: B6/C3 is data header signature */ | ||
3 | /* 0xAA/0xBB is data length = total */ | ||
4 | /* bytes - 7, 0xCC is type, 0xDD is */ | ||
5 | /* interrupt to use. */ | ||
6 | /******************************************/ | ||
7 | |||
8 | /**************************************************************** | ||
9 | * kaweth_trigger_code | ||
10 | ****************************************************************/ | ||
11 | static __u8 kaweth_trigger_code[] = | ||
12 | { | ||
13 | 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, | ||
14 | 0xc8, 0x07, 0xa0, 0x00, 0xf0, 0x07, 0x5e, 0x00, | ||
15 | 0x06, 0x00, 0xf0, 0x07, 0x0a, 0x00, 0x08, 0x00, | ||
16 | 0xf0, 0x09, 0x00, 0x00, 0x02, 0x00, 0xe7, 0x07, | ||
17 | 0x36, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, | ||
18 | 0x04, 0x00, 0xe7, 0x07, 0x50, 0xc3, 0x10, 0xc0, | ||
19 | 0xf0, 0x09, 0x0e, 0xc0, 0x00, 0x00, 0xe7, 0x87, | ||
20 | 0x01, 0x00, 0x0e, 0xc0, 0x97, 0xcf, 0xd7, 0x09, | ||
21 | 0x00, 0xc0, 0x17, 0x02, 0xc8, 0x07, 0xa0, 0x00, | ||
22 | 0xe7, 0x17, 0x50, 0xc3, 0x10, 0xc0, 0x30, 0xd8, | ||
23 | 0x04, 0x00, 0x30, 0x5c, 0x08, 0x00, 0x04, 0x00, | ||
24 | 0xb0, 0xc0, 0x06, 0x00, 0xc8, 0x05, 0xe7, 0x05, | ||
25 | 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0x49, 0xaf, | ||
26 | 0xc0, 0x07, 0x00, 0x00, 0x60, 0xaf, 0x4a, 0xaf, | ||
27 | 0x00, 0x0c, 0x0c, 0x00, 0x40, 0xd2, 0x00, 0x1c, | ||
28 | 0x0c, 0x00, 0x40, 0xd2, 0x30, 0x00, 0x08, 0x00, | ||
29 | 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x07, | ||
30 | 0x86, 0x00, 0x06, 0x00, 0x67, 0xcf, 0x27, 0x0c, | ||
31 | 0x02, 0x00, 0x00, 0x00, 0x27, 0x0c, 0x00, 0x00, | ||
32 | 0x0e, 0xc0, 0x49, 0xaf, 0x64, 0xaf, 0xc0, 0x07, | ||
33 | 0x00, 0x00, 0x4b, 0xaf, 0x4a, 0xaf, 0x5a, 0xcf, | ||
34 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
35 | 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, | ||
36 | 0x00, 0x00 | ||
37 | }; | ||
38 | /**************************************************************** | ||
39 | * kaweth_trigger_code_fix | ||
40 | ****************************************************************/ | ||
41 | static __u8 kaweth_trigger_code_fix[] = | ||
42 | { | ||
43 | 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, | ||
44 | 0x02, 0x00, 0x06, 0x00, 0x18, 0x00, 0x3e, 0x00, | ||
45 | 0x80, 0x00, 0x98, 0x00, 0xaa, 0x00, | ||
46 | 0x00, 0x00 | ||
47 | }; | ||
48 | |||
49 | /**************************************************************** | ||
50 | * kaweth_new_code | ||
51 | ****************************************************************/ | ||
52 | static __u8 kaweth_new_code[] = | ||
53 | { | ||
54 | 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, | ||
55 | 0x9f, 0xcf, 0xde, 0x06, 0xe7, 0x57, 0x00, 0x00, | ||
56 | 0xc4, 0x06, 0x97, 0xc1, 0xe7, 0x67, 0xff, 0x1f, | ||
57 | 0x28, 0xc0, 0xe7, 0x87, 0x00, 0x04, 0x24, 0xc0, | ||
58 | 0xe7, 0x67, 0xff, 0xf9, 0x22, 0xc0, 0x97, 0xcf, | ||
59 | 0xd7, 0x09, 0x00, 0xc0, 0xe7, 0x09, 0xa2, 0xc0, | ||
60 | 0xbe, 0x06, 0x9f, 0xaf, 0x36, 0x00, 0xe7, 0x05, | ||
61 | 0x00, 0xc0, 0xa7, 0xcf, 0xbc, 0x06, 0x97, 0xcf, | ||
62 | 0xe7, 0x57, 0x00, 0x00, 0xb8, 0x06, 0xa7, 0xa1, | ||
63 | 0xb8, 0x06, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, | ||
64 | 0x14, 0x08, 0x0a, 0xc0, 0xe7, 0x57, 0x00, 0x00, | ||
65 | 0xa4, 0xc0, 0xa7, 0xc0, 0x7a, 0x06, 0x9f, 0xaf, | ||
66 | 0x92, 0x07, 0xe7, 0x07, 0x00, 0x00, 0x14, 0x08, | ||
67 | 0xe7, 0x57, 0xff, 0xff, 0xba, 0x06, 0x9f, 0xa0, | ||
68 | 0x38, 0x00, 0xe7, 0x59, 0xba, 0x06, 0xbe, 0x06, | ||
69 | 0x9f, 0xa0, 0x38, 0x00, 0xc8, 0x09, 0xca, 0x06, | ||
70 | 0x08, 0x62, 0x9f, 0xa1, 0x36, 0x08, 0xc0, 0x09, | ||
71 | 0x76, 0x06, 0x00, 0x60, 0xa7, 0xc0, 0x7a, 0x06, | ||
72 | 0x9f, 0xaf, 0xcc, 0x02, 0xe7, 0x57, 0x00, 0x00, | ||
73 | 0xb8, 0x06, 0xa7, 0xc1, 0x7a, 0x06, 0x9f, 0xaf, | ||
74 | 0x04, 0x00, 0xe7, 0x57, 0x00, 0x00, 0x8e, 0x06, | ||
75 | 0x0a, 0xc1, 0xe7, 0x09, 0x20, 0xc0, 0x10, 0x08, | ||
76 | 0xe7, 0xd0, 0x10, 0x08, 0xe7, 0x67, 0x40, 0x00, | ||
77 | 0x10, 0x08, 0x9f, 0xaf, 0x92, 0x0c, 0xc0, 0x09, | ||
78 | 0xd0, 0x06, 0x00, 0x60, 0x05, 0xc4, 0xc0, 0x59, | ||
79 | 0xbe, 0x06, 0x02, 0xc0, 0x9f, 0xaf, 0xec, 0x00, | ||
80 | 0x9f, 0xaf, 0x34, 0x02, 0xe7, 0x57, 0x00, 0x00, | ||
81 | 0xa6, 0x06, 0x9f, 0xa0, 0x7a, 0x02, 0xa7, 0xcf, | ||
82 | 0x7a, 0x06, 0x48, 0x02, 0xe7, 0x09, 0xbe, 0x06, | ||
83 | 0xd0, 0x06, 0xc8, 0x37, 0x04, 0x00, 0x9f, 0xaf, | ||
84 | 0x08, 0x03, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, | ||
85 | 0xce, 0x06, 0x97, 0xc0, 0xd7, 0x09, 0x00, 0xc0, | ||
86 | 0xc1, 0xdf, 0xc8, 0x09, 0xc6, 0x06, 0x08, 0x62, | ||
87 | 0x14, 0xc0, 0x27, 0x04, 0xc6, 0x06, 0x10, 0x94, | ||
88 | 0xf0, 0x07, 0x10, 0x08, 0x02, 0x00, 0xc1, 0x07, | ||
89 | 0x01, 0x00, 0x70, 0x00, 0x04, 0x00, 0xf0, 0x07, | ||
90 | 0x30, 0x01, 0x06, 0x00, 0x50, 0xaf, 0xe7, 0x07, | ||
91 | 0xff, 0xff, 0xd0, 0x06, 0xe7, 0x07, 0x00, 0x00, | ||
92 | 0xce, 0x06, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, | ||
93 | 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x48, 0x02, | ||
94 | 0xd0, 0x09, 0xc6, 0x06, 0x27, 0x02, 0xc6, 0x06, | ||
95 | 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0x48, 0x02, | ||
96 | 0xc8, 0x37, 0x04, 0x00, 0x00, 0x0c, 0x0c, 0x00, | ||
97 | 0x00, 0x60, 0x21, 0xc0, 0xc0, 0x37, 0x3e, 0x00, | ||
98 | 0x23, 0xc9, 0xc0, 0x57, 0xb4, 0x05, 0x1b, 0xc8, | ||
99 | 0xc0, 0x17, 0x3f, 0x00, 0xc0, 0x67, 0xc0, 0xff, | ||
100 | 0x30, 0x00, 0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, | ||
101 | 0x04, 0x00, 0x00, 0x02, 0xc0, 0x17, 0x4c, 0x00, | ||
102 | 0x30, 0x00, 0x06, 0x00, 0xf0, 0x07, 0xa0, 0x01, | ||
103 | 0x0a, 0x00, 0x48, 0x02, 0xc1, 0x07, 0x02, 0x00, | ||
104 | 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x51, 0xaf, | ||
105 | 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, 0x9f, 0xaf, | ||
106 | 0x08, 0x03, 0x9f, 0xaf, 0x7a, 0x02, 0x97, 0xcf, | ||
107 | 0x9f, 0xaf, 0x7a, 0x02, 0xc9, 0x37, 0x04, 0x00, | ||
108 | 0xc1, 0xdf, 0xc8, 0x09, 0xa2, 0x06, 0x50, 0x02, | ||
109 | 0x67, 0x02, 0xa2, 0x06, 0xd1, 0x07, 0x00, 0x00, | ||
110 | 0x27, 0xd8, 0xaa, 0x06, 0xc0, 0xdf, 0x9f, 0xaf, | ||
111 | 0xc4, 0x01, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, | ||
112 | 0xd2, 0x06, 0x97, 0xc1, 0xe7, 0x57, 0x01, 0x00, | ||
113 | 0xa8, 0x06, 0x97, 0xc0, 0xc8, 0x09, 0xa0, 0x06, | ||
114 | 0x08, 0x62, 0x97, 0xc0, 0x00, 0x02, 0xc0, 0x17, | ||
115 | 0x0e, 0x00, 0x27, 0x00, 0x34, 0x01, 0x27, 0x0c, | ||
116 | 0x0c, 0x00, 0x36, 0x01, 0xe7, 0x07, 0x50, 0xc3, | ||
117 | 0x12, 0xc0, 0xe7, 0x07, 0xcc, 0x0b, 0x02, 0x00, | ||
118 | 0xe7, 0x07, 0x01, 0x00, 0xa8, 0x06, 0xe7, 0x07, | ||
119 | 0x05, 0x00, 0x90, 0xc0, 0x97, 0xcf, 0xc8, 0x09, | ||
120 | 0xa4, 0x06, 0x08, 0x62, 0x02, 0xc0, 0x10, 0x64, | ||
121 | 0x07, 0xc1, 0xe7, 0x07, 0x00, 0x00, 0x9e, 0x06, | ||
122 | 0xe7, 0x07, 0x72, 0x04, 0x24, 0x00, 0x97, 0xcf, | ||
123 | 0x27, 0x04, 0xa4, 0x06, 0xc8, 0x17, 0x0e, 0x00, | ||
124 | 0x27, 0x02, 0x9e, 0x06, 0xe7, 0x07, 0x80, 0x04, | ||
125 | 0x24, 0x00, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, | ||
126 | 0xc1, 0xdf, 0xe7, 0x57, 0x00, 0x00, 0x90, 0x06, | ||
127 | 0x13, 0xc1, 0x9f, 0xaf, 0x06, 0x02, 0xe7, 0x57, | ||
128 | 0x00, 0x00, 0x9e, 0x06, 0x13, 0xc0, 0xe7, 0x09, | ||
129 | 0x9e, 0x06, 0x30, 0x01, 0xe7, 0x07, 0xf2, 0x05, | ||
130 | 0x32, 0x01, 0xe7, 0x07, 0x10, 0x00, 0x96, 0xc0, | ||
131 | 0xe7, 0x09, 0x9e, 0x06, 0x90, 0x06, 0x04, 0xcf, | ||
132 | 0xe7, 0x57, 0x00, 0x00, 0x9e, 0x06, 0x02, 0xc1, | ||
133 | 0x9f, 0xaf, 0x06, 0x02, 0xe7, 0x05, 0x00, 0xc0, | ||
134 | 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, | ||
135 | 0x08, 0x92, 0xe7, 0x57, 0x02, 0x00, 0xaa, 0x06, | ||
136 | 0x02, 0xc3, 0xc8, 0x09, 0xa4, 0x06, 0x27, 0x02, | ||
137 | 0xa6, 0x06, 0x08, 0x62, 0x03, 0xc1, 0xe7, 0x05, | ||
138 | 0x00, 0xc0, 0x97, 0xcf, 0x27, 0x04, 0xa4, 0x06, | ||
139 | 0xe7, 0x05, 0x00, 0xc0, 0xf0, 0x07, 0x40, 0x00, | ||
140 | 0x08, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, | ||
141 | 0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00, | ||
142 | 0x06, 0x00, 0xf0, 0x07, 0x46, 0x01, 0x0a, 0x00, | ||
143 | 0xc8, 0x17, 0x04, 0x00, 0xc1, 0x07, 0x02, 0x00, | ||
144 | 0x51, 0xaf, 0x97, 0xcf, 0xe7, 0x57, 0x00, 0x00, | ||
145 | 0x96, 0x06, 0x97, 0xc0, 0xc1, 0xdf, 0xc8, 0x09, | ||
146 | 0x96, 0x06, 0x27, 0x04, 0x96, 0x06, 0x27, 0x52, | ||
147 | 0x98, 0x06, 0x03, 0xc1, 0xe7, 0x07, 0x96, 0x06, | ||
148 | 0x98, 0x06, 0xc0, 0xdf, 0x17, 0x02, 0xc8, 0x17, | ||
149 | 0x0e, 0x00, 0x9f, 0xaf, 0xba, 0x03, 0xc8, 0x05, | ||
150 | 0x00, 0x60, 0x03, 0xc0, 0x9f, 0xaf, 0x24, 0x03, | ||
151 | 0x97, 0xcf, 0x9f, 0xaf, 0x08, 0x03, 0x97, 0xcf, | ||
152 | 0x57, 0x02, 0xc9, 0x07, 0xa4, 0x06, 0xd7, 0x09, | ||
153 | 0x00, 0xc0, 0xc1, 0xdf, 0x08, 0x62, 0x1b, 0xc0, | ||
154 | 0x50, 0x04, 0x11, 0x02, 0xe7, 0x05, 0x00, 0xc0, | ||
155 | 0xc9, 0x05, 0x97, 0xcf, 0x97, 0x02, 0xca, 0x09, | ||
156 | 0xd6, 0x06, 0xf2, 0x17, 0x01, 0x00, 0x04, 0x00, | ||
157 | 0xf2, 0x27, 0x00, 0x00, 0x06, 0x00, 0xca, 0x17, | ||
158 | 0x2c, 0x00, 0xf8, 0x77, 0x01, 0x00, 0x0e, 0x00, | ||
159 | 0x06, 0xc0, 0xca, 0xd9, 0xf8, 0x57, 0xff, 0x00, | ||
160 | 0x0e, 0x00, 0x01, 0xc1, 0xca, 0xd9, 0x22, 0x1c, | ||
161 | 0x0c, 0x00, 0xe2, 0x27, 0x00, 0x00, 0xe2, 0x17, | ||
162 | 0x01, 0x00, 0xe2, 0x27, 0x00, 0x00, 0xca, 0x05, | ||
163 | 0x00, 0x0c, 0x0c, 0x00, 0xc0, 0x17, 0x41, 0x00, | ||
164 | 0xc0, 0x67, 0xc0, 0xff, 0x30, 0x00, 0x08, 0x00, | ||
165 | 0x00, 0x02, 0xc0, 0x17, 0x0c, 0x00, 0x30, 0x00, | ||
166 | 0x06, 0x00, 0xf0, 0x07, 0xda, 0x00, 0x0a, 0x00, | ||
167 | 0xf0, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, | ||
168 | 0x08, 0x00, 0x40, 0xd1, 0x01, 0x00, 0xc0, 0x19, | ||
169 | 0xce, 0x06, 0xc0, 0x59, 0xc2, 0x06, 0x04, 0xc9, | ||
170 | 0x49, 0xaf, 0x9f, 0xaf, 0xec, 0x00, 0x4a, 0xaf, | ||
171 | 0x67, 0x10, 0xce, 0x06, 0xc8, 0x17, 0x04, 0x00, | ||
172 | 0xc1, 0x07, 0x01, 0x00, 0xd7, 0x09, 0x00, 0xc0, | ||
173 | 0xc1, 0xdf, 0x50, 0xaf, 0xe7, 0x05, 0x00, 0xc0, | ||
174 | 0x97, 0xcf, 0xc0, 0x07, 0x01, 0x00, 0xc1, 0x09, | ||
175 | 0xac, 0x06, 0xc1, 0x77, 0x01, 0x00, 0x97, 0xc1, | ||
176 | 0xd8, 0x77, 0x01, 0x00, 0x12, 0xc0, 0xc9, 0x07, | ||
177 | 0x6a, 0x06, 0x9f, 0xaf, 0x08, 0x04, 0x04, 0xc1, | ||
178 | 0xc1, 0x77, 0x08, 0x00, 0x13, 0xc0, 0x97, 0xcf, | ||
179 | 0xc1, 0x77, 0x02, 0x00, 0x97, 0xc1, 0xc1, 0x77, | ||
180 | 0x10, 0x00, 0x0c, 0xc0, 0x9f, 0xaf, 0x2c, 0x04, | ||
181 | 0x97, 0xcf, 0xc1, 0x77, 0x04, 0x00, 0x06, 0xc0, | ||
182 | 0xc9, 0x07, 0x70, 0x06, 0x9f, 0xaf, 0x08, 0x04, | ||
183 | 0x97, 0xc0, 0x00, 0xcf, 0x00, 0x90, 0x97, 0xcf, | ||
184 | 0x50, 0x54, 0x97, 0xc1, 0x70, 0x5c, 0x02, 0x00, | ||
185 | 0x02, 0x00, 0x97, 0xc1, 0x70, 0x5c, 0x04, 0x00, | ||
186 | 0x04, 0x00, 0x97, 0xcf, 0x80, 0x01, 0xc0, 0x00, | ||
187 | 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0c, 0x00, | ||
188 | 0x06, 0x00, 0x00, 0x00, 0xcb, 0x09, 0xb2, 0x06, | ||
189 | 0xcc, 0x09, 0xb4, 0x06, 0x0b, 0x53, 0x11, 0xc0, | ||
190 | 0xc9, 0x02, 0xca, 0x07, 0x1c, 0x04, 0x9f, 0xaf, | ||
191 | 0x08, 0x04, 0x97, 0xc0, 0x0a, 0xc8, 0x82, 0x08, | ||
192 | 0x0a, 0xcf, 0x82, 0x08, 0x9f, 0xaf, 0x08, 0x04, | ||
193 | 0x97, 0xc0, 0x05, 0xc2, 0x89, 0x30, 0x82, 0x60, | ||
194 | 0x78, 0xc1, 0x00, 0x90, 0x97, 0xcf, 0x89, 0x10, | ||
195 | 0x09, 0x53, 0x79, 0xc2, 0x89, 0x30, 0x82, 0x08, | ||
196 | 0x7a, 0xcf, 0xc0, 0xdf, 0x97, 0xcf, 0xc0, 0xdf, | ||
197 | 0x97, 0xcf, 0xe7, 0x09, 0x96, 0xc0, 0x92, 0x06, | ||
198 | 0xe7, 0x09, 0x98, 0xc0, 0x94, 0x06, 0x0f, 0xcf, | ||
199 | 0xe7, 0x09, 0x96, 0xc0, 0x92, 0x06, 0xe7, 0x09, | ||
200 | 0x98, 0xc0, 0x94, 0x06, 0xe7, 0x09, 0x9e, 0x06, | ||
201 | 0x30, 0x01, 0xe7, 0x07, 0xf2, 0x05, 0x32, 0x01, | ||
202 | 0xe7, 0x07, 0x10, 0x00, 0x96, 0xc0, 0xd7, 0x09, | ||
203 | 0x00, 0xc0, 0x17, 0x02, 0xc8, 0x09, 0x90, 0x06, | ||
204 | 0xc8, 0x37, 0x0e, 0x00, 0xe7, 0x77, 0x2a, 0x00, | ||
205 | 0x92, 0x06, 0x30, 0xc0, 0x97, 0x02, 0xca, 0x09, | ||
206 | 0xd6, 0x06, 0xe7, 0x77, 0x20, 0x00, 0x92, 0x06, | ||
207 | 0x0e, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x10, 0x00, | ||
208 | 0xf2, 0x27, 0x00, 0x00, 0x12, 0x00, 0xe7, 0x77, | ||
209 | 0x0a, 0x00, 0x92, 0x06, 0xca, 0x05, 0x1e, 0xc0, | ||
210 | 0x97, 0x02, 0xca, 0x09, 0xd6, 0x06, 0xf2, 0x17, | ||
211 | 0x01, 0x00, 0x0c, 0x00, 0xf2, 0x27, 0x00, 0x00, | ||
212 | 0x0e, 0x00, 0xe7, 0x77, 0x02, 0x00, 0x92, 0x06, | ||
213 | 0x07, 0xc0, 0xf2, 0x17, 0x01, 0x00, 0x44, 0x00, | ||
214 | 0xf2, 0x27, 0x00, 0x00, 0x46, 0x00, 0x06, 0xcf, | ||
215 | 0xf2, 0x17, 0x01, 0x00, 0x60, 0x00, 0xf2, 0x27, | ||
216 | 0x00, 0x00, 0x62, 0x00, 0xca, 0x05, 0x9f, 0xaf, | ||
217 | 0x08, 0x03, 0x0f, 0xcf, 0x57, 0x02, 0x09, 0x02, | ||
218 | 0xf1, 0x09, 0x94, 0x06, 0x0c, 0x00, 0xf1, 0xda, | ||
219 | 0x0c, 0x00, 0xc8, 0x09, 0x98, 0x06, 0x50, 0x02, | ||
220 | 0x67, 0x02, 0x98, 0x06, 0xd1, 0x07, 0x00, 0x00, | ||
221 | 0xc9, 0x05, 0xe7, 0x09, 0x9e, 0x06, 0x90, 0x06, | ||
222 | 0xe7, 0x57, 0x00, 0x00, 0x90, 0x06, 0x02, 0xc0, | ||
223 | 0x9f, 0xaf, 0x06, 0x02, 0xc8, 0x05, 0xe7, 0x05, | ||
224 | 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, 0xd7, 0x09, | ||
225 | 0x00, 0xc0, 0x17, 0x00, 0x17, 0x02, 0x97, 0x02, | ||
226 | 0xc0, 0x09, 0x92, 0xc0, 0xe7, 0x07, 0x04, 0x00, | ||
227 | 0x90, 0xc0, 0xca, 0x09, 0xd6, 0x06, 0xe7, 0x07, | ||
228 | 0x00, 0x00, 0xa8, 0x06, 0xe7, 0x07, 0x6a, 0x04, | ||
229 | 0x02, 0x00, 0xc0, 0x77, 0x02, 0x00, 0x08, 0xc0, | ||
230 | 0xf2, 0x17, 0x01, 0x00, 0x50, 0x00, 0xf2, 0x27, | ||
231 | 0x00, 0x00, 0x52, 0x00, 0x9f, 0xcf, 0x24, 0x06, | ||
232 | 0xc0, 0x77, 0x10, 0x00, 0x06, 0xc0, 0xf2, 0x17, | ||
233 | 0x01, 0x00, 0x58, 0x00, 0xf2, 0x27, 0x00, 0x00, | ||
234 | 0x5a, 0x00, 0xc0, 0x77, 0x80, 0x00, 0x06, 0xc0, | ||
235 | 0xf2, 0x17, 0x01, 0x00, 0x70, 0x00, 0xf2, 0x27, | ||
236 | 0x00, 0x00, 0x72, 0x00, 0xc0, 0x77, 0x08, 0x00, | ||
237 | 0x1d, 0xc1, 0xf2, 0x17, 0x01, 0x00, 0x08, 0x00, | ||
238 | 0xf2, 0x27, 0x00, 0x00, 0x0a, 0x00, 0xc0, 0x77, | ||
239 | 0x00, 0x02, 0x06, 0xc0, 0xf2, 0x17, 0x01, 0x00, | ||
240 | 0x64, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x66, 0x00, | ||
241 | 0xc0, 0x77, 0x40, 0x00, 0x06, 0xc0, 0xf2, 0x17, | ||
242 | 0x01, 0x00, 0x5c, 0x00, 0xf2, 0x27, 0x00, 0x00, | ||
243 | 0x5e, 0x00, 0xc0, 0x77, 0x01, 0x00, 0x01, 0xc0, | ||
244 | 0x1b, 0xcf, 0x1a, 0xcf, 0xf2, 0x17, 0x01, 0x00, | ||
245 | 0x00, 0x00, 0xf2, 0x27, 0x00, 0x00, 0x02, 0x00, | ||
246 | 0xc8, 0x09, 0x34, 0x01, 0xca, 0x17, 0x14, 0x00, | ||
247 | 0xd8, 0x77, 0x01, 0x00, 0x05, 0xc0, 0xca, 0xd9, | ||
248 | 0xd8, 0x57, 0xff, 0x00, 0x01, 0xc0, 0xca, 0xd9, | ||
249 | 0xe2, 0x19, 0x94, 0xc0, 0xe2, 0x27, 0x00, 0x00, | ||
250 | 0xe2, 0x17, 0x01, 0x00, 0xe2, 0x27, 0x00, 0x00, | ||
251 | 0x9f, 0xaf, 0x40, 0x06, 0x9f, 0xaf, 0xc4, 0x01, | ||
252 | 0xe7, 0x57, 0x00, 0x00, 0xd2, 0x06, 0x9f, 0xa1, | ||
253 | 0x0e, 0x0a, 0xca, 0x05, 0xc8, 0x05, 0xc0, 0x05, | ||
254 | 0xe7, 0x05, 0x00, 0xc0, 0xc0, 0xdf, 0x97, 0xcf, | ||
255 | 0xc8, 0x09, 0xa0, 0x06, 0x08, 0x62, 0x97, 0xc0, | ||
256 | 0x27, 0x04, 0xa0, 0x06, 0x27, 0x52, 0xa2, 0x06, | ||
257 | 0x03, 0xc1, 0xe7, 0x07, 0xa0, 0x06, 0xa2, 0x06, | ||
258 | 0x9f, 0xaf, 0x08, 0x03, 0xe7, 0x57, 0x00, 0x00, | ||
259 | 0xaa, 0x06, 0x02, 0xc0, 0x27, 0xda, 0xaa, 0x06, | ||
260 | 0x97, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
261 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
262 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
263 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
264 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
265 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
266 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
267 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
268 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
269 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
270 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
271 | 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
272 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
273 | 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
274 | 0x00, 0x00, 0xff, 0xff, 0xfb, 0x13, 0xe7, 0x57, | ||
275 | 0x00, 0x80, 0xb2, 0x00, 0x06, 0xc2, 0xe7, 0x07, | ||
276 | 0xee, 0x0b, 0x12, 0x00, 0xe7, 0x07, 0x34, 0x0c, | ||
277 | 0xb2, 0x00, 0xe7, 0x07, 0xc6, 0x07, 0xf2, 0x02, | ||
278 | 0xc8, 0x09, 0xb4, 0x00, 0xf8, 0x07, 0x02, 0x00, | ||
279 | 0x0d, 0x00, 0xd7, 0x09, 0x0e, 0xc0, 0xe7, 0x07, | ||
280 | 0x00, 0x00, 0x0e, 0xc0, 0xc8, 0x09, 0xde, 0x00, | ||
281 | 0xc8, 0x17, 0x09, 0x00, 0xc9, 0x07, 0xda, 0x06, | ||
282 | 0xc0, 0x07, 0x04, 0x00, 0x68, 0x0a, 0x00, 0xda, | ||
283 | 0x7d, 0xc1, 0xe7, 0x09, 0xc0, 0x00, 0x7c, 0x06, | ||
284 | 0xe7, 0x09, 0xbe, 0x00, 0x78, 0x06, 0xe7, 0x09, | ||
285 | 0x10, 0x00, 0xbc, 0x06, 0xc8, 0x07, 0xd6, 0x07, | ||
286 | 0x9f, 0xaf, 0xae, 0x07, 0x9f, 0xaf, 0x00, 0x0a, | ||
287 | 0xc8, 0x09, 0xde, 0x00, 0x00, 0x0e, 0x0f, 0x00, | ||
288 | 0x41, 0x90, 0x9f, 0xde, 0x06, 0x00, 0x44, 0xaf, | ||
289 | 0x27, 0x00, 0xb2, 0x06, 0x27, 0x00, 0xb4, 0x06, | ||
290 | 0x27, 0x00, 0xb6, 0x06, 0xc0, 0x07, 0x74, 0x00, | ||
291 | 0x44, 0xaf, 0x27, 0x00, 0xd6, 0x06, 0x08, 0x00, | ||
292 | 0x00, 0x90, 0xc1, 0x07, 0x3a, 0x00, 0x20, 0x00, | ||
293 | 0x01, 0xda, 0x7d, 0xc1, 0x9f, 0xaf, 0xba, 0x09, | ||
294 | 0xc0, 0x07, 0x44, 0x00, 0x48, 0xaf, 0x27, 0x00, | ||
295 | 0x7a, 0x06, 0x9f, 0xaf, 0x96, 0x0a, 0xe7, 0x07, | ||
296 | 0x01, 0x00, 0xc0, 0x06, 0xe7, 0x05, 0x0e, 0xc0, | ||
297 | 0x97, 0xcf, 0x49, 0xaf, 0xe7, 0x87, 0x43, 0x00, | ||
298 | 0x0e, 0xc0, 0xe7, 0x07, 0xff, 0xff, 0xbe, 0x06, | ||
299 | 0x9f, 0xaf, 0xae, 0x0a, 0xc0, 0x07, 0x01, 0x00, | ||
300 | 0x60, 0xaf, 0x4a, 0xaf, 0x97, 0xcf, 0x00, 0x08, | ||
301 | 0x09, 0x08, 0x11, 0x08, 0x00, 0xda, 0x7c, 0xc1, | ||
302 | 0x97, 0xcf, 0x67, 0x04, 0xcc, 0x02, 0xc0, 0xdf, | ||
303 | 0x51, 0x94, 0xb1, 0xaf, 0x06, 0x00, 0xc1, 0xdf, | ||
304 | 0xc9, 0x09, 0xcc, 0x02, 0x49, 0x62, 0x75, 0xc1, | ||
305 | 0xc0, 0xdf, 0xa7, 0xcf, 0xd6, 0x02, 0x0e, 0x00, | ||
306 | 0x24, 0x00, 0x80, 0x04, 0x22, 0x00, 0x4e, 0x05, | ||
307 | 0xd0, 0x00, 0x0e, 0x0a, 0xaa, 0x00, 0x30, 0x08, | ||
308 | 0xbe, 0x00, 0x4a, 0x0a, 0x10, 0x00, 0x20, 0x00, | ||
309 | 0x04, 0x00, 0x6e, 0x04, 0x02, 0x00, 0x6a, 0x04, | ||
310 | 0x06, 0x00, 0x00, 0x00, 0x24, 0xc0, 0x04, 0x04, | ||
311 | 0x28, 0xc0, 0xfe, 0xfb, 0x1e, 0xc0, 0x00, 0x04, | ||
312 | 0x22, 0xc0, 0xff, 0xf4, 0xc0, 0x00, 0x90, 0x09, | ||
313 | 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x08, | ||
314 | 0x60, 0x08, 0xd0, 0x08, 0xda, 0x08, 0x00, 0x09, | ||
315 | 0x04, 0x09, 0x08, 0x09, 0x32, 0x09, 0x42, 0x09, | ||
316 | 0x50, 0x09, 0x52, 0x09, 0x5a, 0x09, 0x5a, 0x09, | ||
317 | 0x27, 0x02, 0xca, 0x06, 0x97, 0xcf, 0xe7, 0x07, | ||
318 | 0x00, 0x00, 0xca, 0x06, 0x0a, 0x0e, 0x01, 0x00, | ||
319 | 0xca, 0x57, 0x0e, 0x00, 0x9f, 0xc3, 0x5a, 0x09, | ||
320 | 0xca, 0x37, 0x00, 0x00, 0x9f, 0xc2, 0x5a, 0x09, | ||
321 | 0x0a, 0xd2, 0xb2, 0xcf, 0x16, 0x08, 0xc8, 0x09, | ||
322 | 0xde, 0x00, 0x07, 0x06, 0x9f, 0xcf, 0x6c, 0x09, | ||
323 | 0x17, 0x02, 0xc8, 0x09, 0xde, 0x00, 0x00, 0x0e, | ||
324 | 0x0f, 0x00, 0x41, 0x90, 0x9f, 0xde, 0x06, 0x00, | ||
325 | 0xc8, 0x05, 0x30, 0x50, 0x06, 0x00, 0x9f, 0xc8, | ||
326 | 0x5a, 0x09, 0x27, 0x0c, 0x02, 0x00, 0xb0, 0x06, | ||
327 | 0xc0, 0x09, 0xb2, 0x06, 0x27, 0x00, 0xb4, 0x06, | ||
328 | 0xe7, 0x07, 0x00, 0x00, 0xae, 0x06, 0x27, 0x00, | ||
329 | 0x80, 0x06, 0x00, 0x1c, 0x06, 0x00, 0x27, 0x00, | ||
330 | 0xb6, 0x06, 0x41, 0x90, 0x67, 0x50, 0xb0, 0x06, | ||
331 | 0x0d, 0xc0, 0x67, 0x00, 0x7e, 0x06, 0x27, 0x0c, | ||
332 | 0x06, 0x00, 0x82, 0x06, 0xe7, 0x07, 0xbc, 0x08, | ||
333 | 0x84, 0x06, 0xc8, 0x07, 0x7e, 0x06, 0x41, 0x90, | ||
334 | 0x51, 0xaf, 0x97, 0xcf, 0x9f, 0xaf, 0x48, 0x0c, | ||
335 | 0xe7, 0x09, 0xb6, 0x06, 0xb4, 0x06, 0xe7, 0x09, | ||
336 | 0xb0, 0x06, 0xae, 0x06, 0x59, 0xaf, 0x97, 0xcf, | ||
337 | 0x27, 0x0c, 0x02, 0x00, 0xac, 0x06, 0x59, 0xaf, | ||
338 | 0x97, 0xcf, 0x09, 0x0c, 0x02, 0x00, 0x09, 0xda, | ||
339 | 0x49, 0xd2, 0xc9, 0x19, 0xd6, 0x06, 0xc8, 0x07, | ||
340 | 0x7e, 0x06, 0xe0, 0x07, 0x00, 0x00, 0x60, 0x02, | ||
341 | 0xe0, 0x07, 0x04, 0x00, 0xd0, 0x07, 0xcc, 0x08, | ||
342 | 0x48, 0xdb, 0x41, 0x90, 0x50, 0xaf, 0x97, 0xcf, | ||
343 | 0x59, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf, | ||
344 | 0xf0, 0x57, 0x06, 0x00, 0x06, 0x00, 0x25, 0xc1, | ||
345 | 0xe7, 0x07, 0x70, 0x06, 0x80, 0x06, 0x41, 0x90, | ||
346 | 0x67, 0x00, 0x7e, 0x06, 0x27, 0x0c, 0x06, 0x00, | ||
347 | 0x82, 0x06, 0xe7, 0x07, 0x8c, 0x09, 0x84, 0x06, | ||
348 | 0xc8, 0x07, 0x7e, 0x06, 0x41, 0x90, 0x51, 0xaf, | ||
349 | 0x97, 0xcf, 0x07, 0x0c, 0x06, 0x00, 0xc7, 0x57, | ||
350 | 0x06, 0x00, 0x0f, 0xc1, 0xc8, 0x07, 0x70, 0x06, | ||
351 | 0x15, 0xcf, 0x00, 0x0c, 0x02, 0x00, 0x00, 0xda, | ||
352 | 0x40, 0xd1, 0x27, 0x00, 0xc2, 0x06, 0x1e, 0xcf, | ||
353 | 0x1d, 0xcf, 0x27, 0x0c, 0x02, 0x00, 0xcc, 0x06, | ||
354 | 0x19, 0xcf, 0x27, 0x02, 0x20, 0x01, 0xe7, 0x07, | ||
355 | 0x08, 0x00, 0x22, 0x01, 0xe7, 0x07, 0x13, 0x00, | ||
356 | 0xb0, 0xc0, 0x97, 0xcf, 0x41, 0x90, 0x67, 0x00, | ||
357 | 0x7e, 0x06, 0xe7, 0x01, 0x82, 0x06, 0x27, 0x02, | ||
358 | 0x80, 0x06, 0xe7, 0x07, 0x8c, 0x09, 0x84, 0x06, | ||
359 | 0xc8, 0x07, 0x7e, 0x06, 0xc1, 0x07, 0x00, 0x80, | ||
360 | 0x50, 0xaf, 0x97, 0xcf, 0x59, 0xaf, 0x97, 0xcf, | ||
361 | 0x00, 0x60, 0x05, 0xc0, 0xe7, 0x07, 0x00, 0x00, | ||
362 | 0xc4, 0x06, 0xa7, 0xcf, 0x7c, 0x06, 0x9f, 0xaf, | ||
363 | 0x00, 0x0a, 0xe7, 0x07, 0x01, 0x00, 0xc4, 0x06, | ||
364 | 0x49, 0xaf, 0xd7, 0x09, 0x00, 0xc0, 0x07, 0xaf, | ||
365 | 0xe7, 0x05, 0x00, 0xc0, 0x4a, 0xaf, 0xa7, 0xcf, | ||
366 | 0x7c, 0x06, 0xc0, 0x07, 0xfe, 0x7f, 0x44, 0xaf, | ||
367 | 0x40, 0x00, 0xc0, 0x37, 0x00, 0x01, 0x41, 0x90, | ||
368 | 0xc0, 0x37, 0x08, 0x00, 0xdf, 0xde, 0x50, 0x06, | ||
369 | 0xc0, 0x57, 0x10, 0x00, 0x02, 0xc2, 0xc0, 0x07, | ||
370 | 0x10, 0x00, 0x27, 0x00, 0x9a, 0x06, 0x41, 0x90, | ||
371 | 0x9f, 0xde, 0x40, 0x06, 0x44, 0xaf, 0x27, 0x00, | ||
372 | 0x9c, 0x06, 0xc0, 0x09, 0x9a, 0x06, 0x41, 0x90, | ||
373 | 0x00, 0xd2, 0x00, 0xd8, 0x9f, 0xde, 0x08, 0x00, | ||
374 | 0x44, 0xaf, 0x27, 0x00, 0xc8, 0x06, 0x97, 0xcf, | ||
375 | 0xe7, 0x87, 0x00, 0x84, 0x28, 0xc0, 0xe7, 0x67, | ||
376 | 0xff, 0xfb, 0x24, 0xc0, 0x97, 0xcf, 0xe7, 0x87, | ||
377 | 0x01, 0x00, 0xd2, 0x06, 0xe7, 0x57, 0x00, 0x00, | ||
378 | 0xa8, 0x06, 0x97, 0xc1, 0x9f, 0xaf, 0x00, 0x0a, | ||
379 | 0xe7, 0x87, 0x00, 0x06, 0x22, 0xc0, 0xe7, 0x07, | ||
380 | 0x00, 0x00, 0x90, 0xc0, 0xe7, 0x67, 0xfe, 0xff, | ||
381 | 0x3e, 0xc0, 0xe7, 0x07, 0x26, 0x00, 0x0a, 0xc0, | ||
382 | 0xe7, 0x87, 0x01, 0x00, 0x3e, 0xc0, 0xe7, 0x07, | ||
383 | 0xff, 0xff, 0xbe, 0x06, 0x9f, 0xaf, 0x10, 0x0b, | ||
384 | 0x97, 0xcf, 0x17, 0x00, 0xa7, 0xaf, 0x78, 0x06, | ||
385 | 0xc0, 0x05, 0x27, 0x00, 0x76, 0x06, 0xe7, 0x87, | ||
386 | 0x01, 0x00, 0xd2, 0x06, 0x9f, 0xaf, 0x00, 0x0a, | ||
387 | 0xe7, 0x07, 0x0c, 0x00, 0x40, 0xc0, 0x9f, 0xaf, | ||
388 | 0x10, 0x0b, 0x00, 0x90, 0x27, 0x00, 0xa6, 0x06, | ||
389 | 0x27, 0x00, 0xaa, 0x06, 0xe7, 0x09, 0xb2, 0x06, | ||
390 | 0xb4, 0x06, 0x27, 0x00, 0xae, 0x06, 0x27, 0x00, | ||
391 | 0xac, 0x06, 0x9f, 0xaf, 0xae, 0x0a, 0xc0, 0x07, | ||
392 | 0x00, 0x00, 0x27, 0x00, 0xb2, 0x02, 0x27, 0x00, | ||
393 | 0xb4, 0x02, 0x27, 0x00, 0x8e, 0x06, 0xc0, 0x07, | ||
394 | 0x06, 0x00, 0xc8, 0x09, 0xde, 0x00, 0xc8, 0x17, | ||
395 | 0x03, 0x00, 0xc9, 0x07, 0x70, 0x06, 0x29, 0x0a, | ||
396 | 0x00, 0xda, 0x7d, 0xc1, 0x97, 0xcf, 0xd7, 0x09, | ||
397 | 0x00, 0xc0, 0xc1, 0xdf, 0x00, 0x90, 0x27, 0x00, | ||
398 | 0x96, 0x06, 0xe7, 0x07, 0x96, 0x06, 0x98, 0x06, | ||
399 | 0x27, 0x00, 0xa0, 0x06, 0xe7, 0x07, 0xa0, 0x06, | ||
400 | 0xa2, 0x06, 0x27, 0x00, 0xa6, 0x06, 0x27, 0x00, | ||
401 | 0x90, 0x06, 0x27, 0x00, 0x9e, 0x06, 0xc8, 0x09, | ||
402 | 0x9c, 0x06, 0xc1, 0x09, 0x9a, 0x06, 0xc9, 0x07, | ||
403 | 0xa4, 0x06, 0x11, 0x02, 0x09, 0x02, 0xc8, 0x17, | ||
404 | 0x40, 0x06, 0x01, 0xda, 0x7a, 0xc1, 0x51, 0x94, | ||
405 | 0xc8, 0x09, 0xc8, 0x06, 0xc9, 0x07, 0xc6, 0x06, | ||
406 | 0xc1, 0x09, 0x9a, 0x06, 0x11, 0x02, 0x09, 0x02, | ||
407 | 0xc8, 0x17, 0x08, 0x00, 0x01, 0xda, 0x7a, 0xc1, | ||
408 | 0x51, 0x94, 0xe7, 0x05, 0x00, 0xc0, 0x97, 0xcf, | ||
409 | 0xe7, 0x57, 0x00, 0x00, 0x76, 0x06, 0x97, 0xc0, | ||
410 | 0x9f, 0xaf, 0x04, 0x00, 0xe7, 0x09, 0xbe, 0x06, | ||
411 | 0xba, 0x06, 0xe7, 0x57, 0xff, 0xff, 0xba, 0x06, | ||
412 | 0x04, 0xc1, 0xe7, 0x07, 0x10, 0x0b, 0xb8, 0x06, | ||
413 | 0x97, 0xcf, 0xe7, 0x17, 0x32, 0x00, 0xba, 0x06, | ||
414 | 0xe7, 0x67, 0xff, 0x07, 0xba, 0x06, 0xe7, 0x07, | ||
415 | 0x46, 0x0b, 0xb8, 0x06, 0x97, 0xcf, 0xe7, 0x57, | ||
416 | 0x00, 0x00, 0xc0, 0x06, 0x23, 0xc0, 0xe7, 0x07, | ||
417 | 0x04, 0x00, 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x80, | ||
418 | 0x80, 0xc0, 0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0, | ||
419 | 0xe7, 0x07, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x07, | ||
420 | 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xc0, 0x07, | ||
421 | 0x00, 0x00, 0xe7, 0x07, 0x00, 0x00, 0x80, 0xc0, | ||
422 | 0xe7, 0x07, 0x00, 0x80, 0x80, 0xc0, 0xe7, 0x07, | ||
423 | 0x00, 0x80, 0x40, 0xc0, 0xc0, 0x07, 0x00, 0x00, | ||
424 | 0xe7, 0x07, 0x00, 0x00, 0x40, 0xc0, 0xe7, 0x07, | ||
425 | 0x00, 0x00, 0x80, 0xc0, 0xe7, 0x07, 0x04, 0x00, | ||
426 | 0x90, 0xc0, 0xe7, 0x07, 0x00, 0x02, 0x40, 0xc0, | ||
427 | 0xe7, 0x07, 0x0c, 0x02, 0x40, 0xc0, 0xe7, 0x07, | ||
428 | 0x00, 0x00, 0xc0, 0x06, 0xe7, 0x07, 0x00, 0x00, | ||
429 | 0xb8, 0x06, 0xe7, 0x07, 0x00, 0x00, 0xd2, 0x06, | ||
430 | 0xd7, 0x09, 0x00, 0xc0, 0xc1, 0xdf, 0x9f, 0xaf, | ||
431 | 0x34, 0x02, 0xe7, 0x05, 0x00, 0xc0, 0x9f, 0xaf, | ||
432 | 0xc4, 0x01, 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, | ||
433 | 0x17, 0x00, 0x17, 0x02, 0x97, 0x02, 0xe7, 0x57, | ||
434 | 0x00, 0x00, 0xa8, 0x06, 0x06, 0xc0, 0xc0, 0x09, | ||
435 | 0x92, 0xc0, 0xc0, 0x77, 0x09, 0x02, 0x9f, 0xc1, | ||
436 | 0x5c, 0x05, 0x9f, 0xcf, 0x32, 0x06, 0xd7, 0x09, | ||
437 | 0x0e, 0xc0, 0xe7, 0x07, 0x00, 0x00, 0x0e, 0xc0, | ||
438 | 0x9f, 0xaf, 0x02, 0x0c, 0xe7, 0x05, 0x0e, 0xc0, | ||
439 | 0x97, 0xcf, 0xd7, 0x09, 0x00, 0xc0, 0x17, 0x02, | ||
440 | 0xc8, 0x09, 0xb0, 0xc0, 0xe7, 0x67, 0xfe, 0x7f, | ||
441 | 0xb0, 0xc0, 0xc8, 0x77, 0x00, 0x20, 0x9f, 0xc1, | ||
442 | 0x64, 0xeb, 0xe7, 0x57, 0x00, 0x00, 0xc8, 0x02, | ||
443 | 0x9f, 0xc1, 0x80, 0xeb, 0xc8, 0x99, 0xca, 0x02, | ||
444 | 0xc8, 0x67, 0x04, 0x00, 0x9f, 0xc1, 0x96, 0xeb, | ||
445 | 0x9f, 0xcf, 0x4c, 0xeb, 0xe7, 0x07, 0x00, 0x00, | ||
446 | 0xa6, 0xc0, 0xe7, 0x09, 0xb0, 0xc0, 0xc8, 0x02, | ||
447 | 0xe7, 0x07, 0x03, 0x00, 0xb0, 0xc0, 0x97, 0xcf, | ||
448 | 0xc0, 0x09, 0xb0, 0x06, 0xc0, 0x37, 0x01, 0x00, | ||
449 | 0x97, 0xc9, 0xc9, 0x09, 0xb2, 0x06, 0x02, 0x00, | ||
450 | 0x41, 0x90, 0x48, 0x02, 0xc9, 0x17, 0x06, 0x00, | ||
451 | 0x9f, 0xaf, 0x08, 0x04, 0x9f, 0xa2, 0x72, 0x0c, | ||
452 | 0x02, 0xda, 0x77, 0xc1, 0x41, 0x60, 0x71, 0xc1, | ||
453 | 0x97, 0xcf, 0x17, 0x02, 0x57, 0x02, 0x43, 0x04, | ||
454 | 0x21, 0x04, 0xe0, 0x00, 0x43, 0x04, 0x21, 0x04, | ||
455 | 0xe0, 0x00, 0x43, 0x04, 0x21, 0x04, 0xe0, 0x00, | ||
456 | 0xc1, 0x07, 0x01, 0x00, 0xc9, 0x05, 0xc8, 0x05, | ||
457 | 0x97, 0xcf, 0xe7, 0x07, 0x01, 0x00, 0x8e, 0x06, | ||
458 | 0xc8, 0x07, 0x86, 0x06, 0xe7, 0x07, 0x00, 0x00, | ||
459 | 0x86, 0x06, 0xe7, 0x07, 0x10, 0x08, 0x88, 0x06, | ||
460 | 0xe7, 0x07, 0x04, 0x00, 0x8a, 0x06, 0xe7, 0x07, | ||
461 | 0xbc, 0x0c, 0x8c, 0x06, 0xc1, 0x07, 0x03, 0x80, | ||
462 | 0x50, 0xaf, 0x97, 0xcf, 0xe7, 0x07, 0x00, 0x00, | ||
463 | 0x8e, 0x06, 0x97, 0xcf, | ||
464 | 0x00, 0x00 | ||
465 | }; | ||
466 | |||
467 | /**************************************************************** | ||
468 | * kaweth_new_code_fix | ||
469 | ****************************************************************/ | ||
470 | static __u8 kaweth_new_code_fix[] = | ||
471 | { | ||
472 | 0xB6, 0xC3, 0xAA, 0xBB, 0xCC, 0xDD, | ||
473 | 0x02, 0x00, 0x08, 0x00, 0x28, 0x00, 0x2c, 0x00, | ||
474 | 0x34, 0x00, 0x3c, 0x00, 0x40, 0x00, 0x48, 0x00, | ||
475 | 0x54, 0x00, 0x58, 0x00, 0x5e, 0x00, 0x64, 0x00, | ||
476 | 0x68, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x72, 0x00, | ||
477 | 0x76, 0x00, 0x7c, 0x00, 0x80, 0x00, 0x86, 0x00, | ||
478 | 0x8a, 0x00, 0x90, 0x00, 0x94, 0x00, 0x98, 0x00, | ||
479 | 0x9e, 0x00, 0xa6, 0x00, 0xaa, 0x00, 0xb0, 0x00, | ||
480 | 0xb4, 0x00, 0xb8, 0x00, 0xc0, 0x00, 0xc6, 0x00, | ||
481 | 0xca, 0x00, 0xd0, 0x00, 0xd4, 0x00, 0xd8, 0x00, | ||
482 | 0xe0, 0x00, 0xde, 0x00, 0xe8, 0x00, 0xf0, 0x00, | ||
483 | 0xfc, 0x00, 0x04, 0x01, 0x0a, 0x01, 0x18, 0x01, | ||
484 | 0x22, 0x01, 0x28, 0x01, 0x3a, 0x01, 0x3e, 0x01, | ||
485 | 0x7e, 0x01, 0x98, 0x01, 0x9c, 0x01, 0xa2, 0x01, | ||
486 | 0xac, 0x01, 0xb2, 0x01, 0xba, 0x01, 0xc0, 0x01, | ||
487 | 0xc8, 0x01, 0xd0, 0x01, 0xd6, 0x01, 0xf4, 0x01, | ||
488 | 0xfc, 0x01, 0x08, 0x02, 0x16, 0x02, 0x1a, 0x02, | ||
489 | 0x22, 0x02, 0x2a, 0x02, 0x2e, 0x02, 0x3e, 0x02, | ||
490 | 0x44, 0x02, 0x4a, 0x02, 0x50, 0x02, 0x64, 0x02, | ||
491 | 0x62, 0x02, 0x6c, 0x02, 0x72, 0x02, 0x86, 0x02, | ||
492 | 0x8c, 0x02, 0x90, 0x02, 0x9e, 0x02, 0xbc, 0x02, | ||
493 | 0xd0, 0x02, 0xd8, 0x02, 0xdc, 0x02, 0xe0, 0x02, | ||
494 | 0xe8, 0x02, 0xe6, 0x02, 0xf4, 0x02, 0xfe, 0x02, | ||
495 | 0x04, 0x03, 0x0c, 0x03, 0x28, 0x03, 0x7c, 0x03, | ||
496 | 0x90, 0x03, 0x94, 0x03, 0x9c, 0x03, 0xa2, 0x03, | ||
497 | 0xc0, 0x03, 0xd0, 0x03, 0xd4, 0x03, 0xee, 0x03, | ||
498 | 0xfa, 0x03, 0xfe, 0x03, 0x2e, 0x04, 0x32, 0x04, | ||
499 | 0x3c, 0x04, 0x40, 0x04, 0x4e, 0x04, 0x76, 0x04, | ||
500 | 0x7c, 0x04, 0x84, 0x04, 0x8a, 0x04, 0x8e, 0x04, | ||
501 | 0xa6, 0x04, 0xb0, 0x04, 0xb8, 0x04, 0xbe, 0x04, | ||
502 | 0xd2, 0x04, 0xdc, 0x04, 0xee, 0x04, 0x10, 0x05, | ||
503 | 0x1a, 0x05, 0x24, 0x05, 0x2a, 0x05, 0x36, 0x05, | ||
504 | 0x34, 0x05, 0x3c, 0x05, 0x42, 0x05, 0x64, 0x05, | ||
505 | 0x6a, 0x05, 0x6e, 0x05, 0x86, 0x05, 0x22, 0x06, | ||
506 | 0x26, 0x06, 0x2c, 0x06, 0x30, 0x06, 0x42, 0x06, | ||
507 | 0x4a, 0x06, 0x4e, 0x06, 0x56, 0x06, 0x54, 0x06, | ||
508 | 0x5a, 0x06, 0x60, 0x06, 0x66, 0x06, 0xe8, 0x06, | ||
509 | 0xee, 0x06, 0xf4, 0x06, 0x16, 0x07, 0x26, 0x07, | ||
510 | 0x2c, 0x07, 0x32, 0x07, 0x36, 0x07, 0x3a, 0x07, | ||
511 | 0x3e, 0x07, 0x52, 0x07, 0x56, 0x07, 0x5a, 0x07, | ||
512 | 0x64, 0x07, 0x76, 0x07, 0x7a, 0x07, 0x80, 0x07, | ||
513 | 0x84, 0x07, 0x8a, 0x07, 0x9e, 0x07, 0xa2, 0x07, | ||
514 | 0xda, 0x07, 0xde, 0x07, 0xe2, 0x07, 0xe6, 0x07, | ||
515 | 0xea, 0x07, 0xee, 0x07, 0xf2, 0x07, 0xf6, 0x07, | ||
516 | 0x0e, 0x08, 0x16, 0x08, 0x18, 0x08, 0x1a, 0x08, | ||
517 | 0x1c, 0x08, 0x1e, 0x08, 0x20, 0x08, 0x22, 0x08, | ||
518 | 0x24, 0x08, 0x26, 0x08, 0x28, 0x08, 0x2a, 0x08, | ||
519 | 0x2c, 0x08, 0x2e, 0x08, 0x32, 0x08, 0x3a, 0x08, | ||
520 | 0x46, 0x08, 0x4e, 0x08, 0x54, 0x08, 0x5e, 0x08, | ||
521 | 0x78, 0x08, 0x7e, 0x08, 0x82, 0x08, 0x86, 0x08, | ||
522 | 0x8c, 0x08, 0x90, 0x08, 0x98, 0x08, 0x9e, 0x08, | ||
523 | 0xa4, 0x08, 0xaa, 0x08, 0xb0, 0x08, 0xae, 0x08, | ||
524 | 0xb4, 0x08, 0xbe, 0x08, 0xc4, 0x08, 0xc2, 0x08, | ||
525 | 0xca, 0x08, 0xc8, 0x08, 0xd4, 0x08, 0xe4, 0x08, | ||
526 | 0xe8, 0x08, 0xf6, 0x08, 0x14, 0x09, 0x12, 0x09, | ||
527 | 0x1a, 0x09, 0x20, 0x09, 0x26, 0x09, 0x24, 0x09, | ||
528 | 0x2a, 0x09, 0x3e, 0x09, 0x4c, 0x09, 0x56, 0x09, | ||
529 | 0x70, 0x09, 0x74, 0x09, 0x78, 0x09, 0x7e, 0x09, | ||
530 | 0x7c, 0x09, 0x82, 0x09, 0x98, 0x09, 0x9c, 0x09, | ||
531 | 0xa0, 0x09, 0xa6, 0x09, 0xb8, 0x09, 0xdc, 0x09, | ||
532 | 0xe8, 0x09, 0xec, 0x09, 0xfc, 0x09, 0x12, 0x0a, | ||
533 | 0x18, 0x0a, 0x1e, 0x0a, 0x42, 0x0a, 0x46, 0x0a, | ||
534 | 0x4e, 0x0a, 0x54, 0x0a, 0x5a, 0x0a, 0x5e, 0x0a, | ||
535 | 0x68, 0x0a, 0x6e, 0x0a, 0x72, 0x0a, 0x78, 0x0a, | ||
536 | 0x76, 0x0a, 0x7c, 0x0a, 0x80, 0x0a, 0x84, 0x0a, | ||
537 | 0x94, 0x0a, 0xa4, 0x0a, 0xb8, 0x0a, 0xbe, 0x0a, | ||
538 | 0xbc, 0x0a, 0xc2, 0x0a, 0xc8, 0x0a, 0xc6, 0x0a, | ||
539 | 0xcc, 0x0a, 0xd0, 0x0a, 0xd4, 0x0a, 0xd8, 0x0a, | ||
540 | 0xdc, 0x0a, 0xe0, 0x0a, 0xf2, 0x0a, 0xf6, 0x0a, | ||
541 | 0xfa, 0x0a, 0x14, 0x0b, 0x1a, 0x0b, 0x20, 0x0b, | ||
542 | 0x1e, 0x0b, 0x26, 0x0b, 0x2e, 0x0b, 0x2c, 0x0b, | ||
543 | 0x36, 0x0b, 0x3c, 0x0b, 0x42, 0x0b, 0x40, 0x0b, | ||
544 | 0x4a, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, 0xb6, 0x0b, | ||
545 | 0xc0, 0x0b, 0xc8, 0x0b, 0xda, 0x0b, 0xe8, 0x0b, | ||
546 | 0xec, 0x0b, 0xfa, 0x0b, 0x4a, 0x0c, 0x54, 0x0c, | ||
547 | 0x62, 0x0c, 0x66, 0x0c, 0x96, 0x0c, 0x9a, 0x0c, | ||
548 | 0xa0, 0x0c, 0xa6, 0x0c, 0xa4, 0x0c, 0xac, 0x0c, | ||
549 | 0xb2, 0x0c, 0xb0, 0x0c, 0xc0, 0x0c, | ||
550 | 0x00, 0x00 | ||
551 | }; | ||
552 | |||
553 | |||
554 | static const int len_kaweth_trigger_code = sizeof(kaweth_trigger_code); | ||
555 | static const int len_kaweth_trigger_code_fix = sizeof(kaweth_trigger_code_fix); | ||
556 | static const int len_kaweth_new_code = sizeof(kaweth_new_code); | ||
557 | static const int len_kaweth_new_code_fix = sizeof(kaweth_new_code_fix); | ||
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c index b0fce1387eaf..5827324e9d9f 100644 --- a/drivers/net/wan/cosa.c +++ b/drivers/net/wan/cosa.c | |||
@@ -92,6 +92,7 @@ | |||
92 | #include <linux/spinlock.h> | 92 | #include <linux/spinlock.h> |
93 | #include <linux/mutex.h> | 93 | #include <linux/mutex.h> |
94 | #include <linux/device.h> | 94 | #include <linux/device.h> |
95 | #include <linux/smp_lock.h> | ||
95 | 96 | ||
96 | #undef COSA_SLOW_IO /* for testing purposes only */ | 97 | #undef COSA_SLOW_IO /* for testing purposes only */ |
97 | 98 | ||
@@ -970,15 +971,21 @@ static int cosa_open(struct inode *inode, struct file *file) | |||
970 | struct channel_data *chan; | 971 | struct channel_data *chan; |
971 | unsigned long flags; | 972 | unsigned long flags; |
972 | int n; | 973 | int n; |
974 | int ret = 0; | ||
973 | 975 | ||
976 | lock_kernel(); | ||
974 | if ((n=iminor(file->f_path.dentry->d_inode)>>CARD_MINOR_BITS) | 977 | if ((n=iminor(file->f_path.dentry->d_inode)>>CARD_MINOR_BITS) |
975 | >= nr_cards) | 978 | >= nr_cards) { |
976 | return -ENODEV; | 979 | ret = -ENODEV; |
980 | goto out; | ||
981 | } | ||
977 | cosa = cosa_cards+n; | 982 | cosa = cosa_cards+n; |
978 | 983 | ||
979 | if ((n=iminor(file->f_path.dentry->d_inode) | 984 | if ((n=iminor(file->f_path.dentry->d_inode) |
980 | & ((1<<CARD_MINOR_BITS)-1)) >= cosa->nchannels) | 985 | & ((1<<CARD_MINOR_BITS)-1)) >= cosa->nchannels) { |
981 | return -ENODEV; | 986 | ret = -ENODEV; |
987 | goto out; | ||
988 | } | ||
982 | chan = cosa->chan + n; | 989 | chan = cosa->chan + n; |
983 | 990 | ||
984 | file->private_data = chan; | 991 | file->private_data = chan; |
@@ -987,7 +994,8 @@ static int cosa_open(struct inode *inode, struct file *file) | |||
987 | 994 | ||
988 | if (chan->usage < 0) { /* in netdev mode */ | 995 | if (chan->usage < 0) { /* in netdev mode */ |
989 | spin_unlock_irqrestore(&cosa->lock, flags); | 996 | spin_unlock_irqrestore(&cosa->lock, flags); |
990 | return -EBUSY; | 997 | ret = -EBUSY; |
998 | goto out; | ||
991 | } | 999 | } |
992 | cosa->usage++; | 1000 | cosa->usage++; |
993 | chan->usage++; | 1001 | chan->usage++; |
@@ -996,7 +1004,9 @@ static int cosa_open(struct inode *inode, struct file *file) | |||
996 | chan->setup_rx = chrdev_setup_rx; | 1004 | chan->setup_rx = chrdev_setup_rx; |
997 | chan->rx_done = chrdev_rx_done; | 1005 | chan->rx_done = chrdev_rx_done; |
998 | spin_unlock_irqrestore(&cosa->lock, flags); | 1006 | spin_unlock_irqrestore(&cosa->lock, flags); |
999 | return 0; | 1007 | out: |
1008 | unlock_kernel(); | ||
1009 | return ret; | ||
1000 | } | 1010 | } |
1001 | 1011 | ||
1002 | static int cosa_release(struct inode *inode, struct file *file) | 1012 | static int cosa_release(struct inode *inode, struct file *file) |
diff --git a/drivers/net/wireless/atmel.c b/drivers/net/wireless/atmel.c index 28b6ff3eaa37..bd35bb0a1480 100644 --- a/drivers/net/wireless/atmel.c +++ b/drivers/net/wireless/atmel.c | |||
@@ -559,7 +559,7 @@ static const struct { | |||
559 | static void build_wpa_mib(struct atmel_private *priv); | 559 | static void build_wpa_mib(struct atmel_private *priv); |
560 | static int atmel_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); | 560 | static int atmel_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); |
561 | static void atmel_copy_to_card(struct net_device *dev, u16 dest, | 561 | static void atmel_copy_to_card(struct net_device *dev, u16 dest, |
562 | unsigned char *src, u16 len); | 562 | const unsigned char *src, u16 len); |
563 | static void atmel_copy_to_host(struct net_device *dev, unsigned char *dest, | 563 | static void atmel_copy_to_host(struct net_device *dev, unsigned char *dest, |
564 | u16 src, u16 len); | 564 | u16 src, u16 len); |
565 | static void atmel_set_gcr(struct net_device *dev, u16 mask); | 565 | static void atmel_set_gcr(struct net_device *dev, u16 mask); |
@@ -3855,7 +3855,7 @@ static int reset_atmel_card(struct net_device *dev) | |||
3855 | if (priv->card_type == CARD_TYPE_EEPROM) { | 3855 | if (priv->card_type == CARD_TYPE_EEPROM) { |
3856 | /* copy in firmware if needed */ | 3856 | /* copy in firmware if needed */ |
3857 | const struct firmware *fw_entry = NULL; | 3857 | const struct firmware *fw_entry = NULL; |
3858 | unsigned char *fw; | 3858 | const unsigned char *fw; |
3859 | int len = priv->firmware_length; | 3859 | int len = priv->firmware_length; |
3860 | if (!(fw = priv->firmware)) { | 3860 | if (!(fw = priv->firmware)) { |
3861 | if (priv->firmware_type == ATMEL_FW_TYPE_NONE) { | 3861 | if (priv->firmware_type == ATMEL_FW_TYPE_NONE) { |
@@ -4122,7 +4122,7 @@ static void atmel_writeAR(struct net_device *dev, u16 data) | |||
4122 | } | 4122 | } |
4123 | 4123 | ||
4124 | static void atmel_copy_to_card(struct net_device *dev, u16 dest, | 4124 | static void atmel_copy_to_card(struct net_device *dev, u16 dest, |
4125 | unsigned char *src, u16 len) | 4125 | const unsigned char *src, u16 len) |
4126 | { | 4126 | { |
4127 | int i; | 4127 | int i; |
4128 | atmel_writeAR(dev, dest); | 4128 | atmel_writeAR(dev, dest); |
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c index cc70d53fadd3..04d7a251e3f0 100644 --- a/drivers/net/wireless/libertas/if_cs.c +++ b/drivers/net/wireless/libertas/if_cs.c | |||
@@ -122,7 +122,7 @@ static inline void if_cs_write16(struct if_cs_card *card, uint reg, u16 val) | |||
122 | static inline void if_cs_write16_rep( | 122 | static inline void if_cs_write16_rep( |
123 | struct if_cs_card *card, | 123 | struct if_cs_card *card, |
124 | uint reg, | 124 | uint reg, |
125 | void *buf, | 125 | const void *buf, |
126 | unsigned long count) | 126 | unsigned long count) |
127 | { | 127 | { |
128 | if (debug_output) | 128 | if (debug_output) |
diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 51f664bbee9d..b54e2ea8346b 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/net/wireless/libertas/if_sdio.c | 2 | * linux/drivers/net/wireless/libertas/if_sdio.c |
3 | * | 3 | * |
4 | * Copyright 2007 Pierre Ossman | 4 | * Copyright 2007-2008 Pierre Ossman |
5 | * | 5 | * |
6 | * Inspired by if_cs.c, Copyright 2007 Holger Schurig | 6 | * Inspired by if_cs.c, Copyright 2007 Holger Schurig |
7 | * | 7 | * |
@@ -266,13 +266,10 @@ static int if_sdio_card_to_host(struct if_sdio_card *card) | |||
266 | 266 | ||
267 | /* | 267 | /* |
268 | * The transfer must be in one transaction or the firmware | 268 | * The transfer must be in one transaction or the firmware |
269 | * goes suicidal. | 269 | * goes suicidal. There's no way to guarantee that for all |
270 | * controllers, but we can at least try. | ||
270 | */ | 271 | */ |
271 | chunk = size; | 272 | chunk = sdio_align_size(card->func, size); |
272 | if ((chunk > card->func->cur_blksize) || (chunk > 512)) { | ||
273 | chunk = (chunk + card->func->cur_blksize - 1) / | ||
274 | card->func->cur_blksize * card->func->cur_blksize; | ||
275 | } | ||
276 | 273 | ||
277 | ret = sdio_readsb(card->func, card->buffer, card->ioport, chunk); | 274 | ret = sdio_readsb(card->func, card->buffer, card->ioport, chunk); |
278 | if (ret) | 275 | if (ret) |
@@ -392,7 +389,7 @@ static int if_sdio_prog_helper(struct if_sdio_card *card) | |||
392 | unsigned long timeout; | 389 | unsigned long timeout; |
393 | u8 *chunk_buffer; | 390 | u8 *chunk_buffer; |
394 | u32 chunk_size; | 391 | u32 chunk_size; |
395 | u8 *firmware; | 392 | const u8 *firmware; |
396 | size_t size; | 393 | size_t size; |
397 | 394 | ||
398 | lbs_deb_enter(LBS_DEB_SDIO); | 395 | lbs_deb_enter(LBS_DEB_SDIO); |
@@ -508,7 +505,7 @@ static int if_sdio_prog_real(struct if_sdio_card *card) | |||
508 | unsigned long timeout; | 505 | unsigned long timeout; |
509 | u8 *chunk_buffer; | 506 | u8 *chunk_buffer; |
510 | u32 chunk_size; | 507 | u32 chunk_size; |
511 | u8 *firmware; | 508 | const u8 *firmware; |
512 | size_t size, req_size; | 509 | size_t size, req_size; |
513 | 510 | ||
514 | lbs_deb_enter(LBS_DEB_SDIO); | 511 | lbs_deb_enter(LBS_DEB_SDIO); |
@@ -696,13 +693,10 @@ static int if_sdio_host_to_card(struct lbs_private *priv, | |||
696 | 693 | ||
697 | /* | 694 | /* |
698 | * The transfer must be in one transaction or the firmware | 695 | * The transfer must be in one transaction or the firmware |
699 | * goes suicidal. | 696 | * goes suicidal. There's no way to guarantee that for all |
697 | * controllers, but we can at least try. | ||
700 | */ | 698 | */ |
701 | size = nb + 4; | 699 | size = sdio_align_size(card->func, nb + 4); |
702 | if ((size > card->func->cur_blksize) || (size > 512)) { | ||
703 | size = (size + card->func->cur_blksize - 1) / | ||
704 | card->func->cur_blksize * card->func->cur_blksize; | ||
705 | } | ||
706 | 700 | ||
707 | packet = kzalloc(sizeof(struct if_sdio_packet) + size, | 701 | packet = kzalloc(sizeof(struct if_sdio_packet) + size, |
708 | GFP_ATOMIC); | 702 | GFP_ATOMIC); |
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index a8b4abce5bfa..632c291404ab 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c | |||
@@ -310,7 +310,7 @@ static void if_usb_disconnect(struct usb_interface *intf) | |||
310 | static int if_usb_send_fw_pkt(struct if_usb_card *cardp) | 310 | static int if_usb_send_fw_pkt(struct if_usb_card *cardp) |
311 | { | 311 | { |
312 | struct fwdata *fwdata = cardp->ep_out_buf; | 312 | struct fwdata *fwdata = cardp->ep_out_buf; |
313 | uint8_t *firmware = cardp->fw->data; | 313 | const uint8_t *firmware = cardp->fw->data; |
314 | 314 | ||
315 | /* If we got a CRC failure on the last block, back | 315 | /* If we got a CRC failure on the last block, back |
316 | up and retry it */ | 316 | up and retry it */ |
@@ -768,7 +768,7 @@ static int if_usb_issue_boot_command(struct if_usb_card *cardp, int ivalue) | |||
768 | * len image length | 768 | * len image length |
769 | * @return 0 or -1 | 769 | * @return 0 or -1 |
770 | */ | 770 | */ |
771 | static int check_fwfile_format(uint8_t *data, uint32_t totlen) | 771 | static int check_fwfile_format(const uint8_t *data, uint32_t totlen) |
772 | { | 772 | { |
773 | uint32_t bincmd, exit; | 773 | uint32_t bincmd, exit; |
774 | uint32_t blksize, offset, len; | 774 | uint32_t blksize, offset, len; |
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c index 1610a7308c1d..815c095ef797 100644 --- a/drivers/net/wireless/p54/p54usb.c +++ b/drivers/net/wireless/p54/p54usb.c | |||
@@ -376,7 +376,8 @@ static int p54u_upload_firmware_3887(struct ieee80211_hw *dev) | |||
376 | const struct firmware *fw_entry = NULL; | 376 | const struct firmware *fw_entry = NULL; |
377 | int err, alen; | 377 | int err, alen; |
378 | u8 carry = 0; | 378 | u8 carry = 0; |
379 | u8 *buf, *tmp, *data; | 379 | u8 *buf, *tmp; |
380 | const u8 *data; | ||
380 | unsigned int left, remains, block_size; | 381 | unsigned int left, remains, block_size; |
381 | struct x2_header *hdr; | 382 | struct x2_header *hdr; |
382 | unsigned long timeout; | 383 | unsigned long timeout; |
@@ -523,7 +524,7 @@ static int p54u_upload_firmware_net2280(struct ieee80211_hw *dev) | |||
523 | void *buf; | 524 | void *buf; |
524 | __le32 reg; | 525 | __le32 reg; |
525 | unsigned int remains, offset; | 526 | unsigned int remains, offset; |
526 | u8 *data; | 527 | const u8 *data; |
527 | 528 | ||
528 | buf = kmalloc(512, GFP_KERNEL); | 529 | buf = kmalloc(512, GFP_KERNEL); |
529 | if (!buf) { | 530 | if (!buf) { |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 9fab0df18c3c..07b03b3c7ef1 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -487,8 +487,8 @@ struct rt2x00lib_ops { | |||
487 | */ | 487 | */ |
488 | int (*probe_hw) (struct rt2x00_dev *rt2x00dev); | 488 | int (*probe_hw) (struct rt2x00_dev *rt2x00dev); |
489 | char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev); | 489 | char *(*get_firmware_name) (struct rt2x00_dev *rt2x00dev); |
490 | u16 (*get_firmware_crc) (void *data, const size_t len); | 490 | u16 (*get_firmware_crc) (const void *data, const size_t len); |
491 | int (*load_firmware) (struct rt2x00_dev *rt2x00dev, void *data, | 491 | int (*load_firmware) (struct rt2x00_dev *rt2x00dev, const void *data, |
492 | const size_t len); | 492 | const size_t len); |
493 | 493 | ||
494 | /* | 494 | /* |
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.h b/drivers/net/wireless/rt2x00/rt2x00pci.h index 50c6df4f81db..80bf97c03e2d 100644 --- a/drivers/net/wireless/rt2x00/rt2x00pci.h +++ b/drivers/net/wireless/rt2x00/rt2x00pci.h | |||
@@ -82,7 +82,7 @@ static inline void rt2x00pci_register_write(struct rt2x00_dev *rt2x00dev, | |||
82 | static inline void | 82 | static inline void |
83 | rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev, | 83 | rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev, |
84 | const unsigned long offset, | 84 | const unsigned long offset, |
85 | void *value, const u16 length) | 85 | const void *value, const u16 length) |
86 | { | 86 | { |
87 | memcpy_toio(rt2x00dev->csr.base + offset, value, length); | 87 | memcpy_toio(rt2x00dev->csr.base + offset, value, length); |
88 | } | 88 | } |
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index 70ef7bf434ab..f7c1f92c1448 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -926,7 +926,7 @@ static char *rt61pci_get_firmware_name(struct rt2x00_dev *rt2x00dev) | |||
926 | return fw_name; | 926 | return fw_name; |
927 | } | 927 | } |
928 | 928 | ||
929 | static u16 rt61pci_get_firmware_crc(void *data, const size_t len) | 929 | static u16 rt61pci_get_firmware_crc(const void *data, const size_t len) |
930 | { | 930 | { |
931 | u16 crc; | 931 | u16 crc; |
932 | 932 | ||
@@ -943,7 +943,7 @@ static u16 rt61pci_get_firmware_crc(void *data, const size_t len) | |||
943 | return crc; | 943 | return crc; |
944 | } | 944 | } |
945 | 945 | ||
946 | static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, void *data, | 946 | static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data, |
947 | const size_t len) | 947 | const size_t len) |
948 | { | 948 | { |
949 | int i; | 949 | int i; |
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index 34c6ff27afc4..d383735ab8f2 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c | |||
@@ -867,7 +867,7 @@ static char *rt73usb_get_firmware_name(struct rt2x00_dev *rt2x00dev) | |||
867 | return FIRMWARE_RT2571; | 867 | return FIRMWARE_RT2571; |
868 | } | 868 | } |
869 | 869 | ||
870 | static u16 rt73usb_get_firmware_crc(void *data, const size_t len) | 870 | static u16 rt73usb_get_firmware_crc(const void *data, const size_t len) |
871 | { | 871 | { |
872 | u16 crc; | 872 | u16 crc; |
873 | 873 | ||
@@ -884,13 +884,13 @@ static u16 rt73usb_get_firmware_crc(void *data, const size_t len) | |||
884 | return crc; | 884 | return crc; |
885 | } | 885 | } |
886 | 886 | ||
887 | static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, void *data, | 887 | static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data, |
888 | const size_t len) | 888 | const size_t len) |
889 | { | 889 | { |
890 | unsigned int i; | 890 | unsigned int i; |
891 | int status; | 891 | int status; |
892 | u32 reg; | 892 | u32 reg; |
893 | char *ptr = data; | 893 | const char *ptr = data; |
894 | char *cache; | 894 | char *cache; |
895 | int buflen; | 895 | int buflen; |
896 | 896 | ||
diff --git a/drivers/net/wireless/zd1201.c b/drivers/net/wireless/zd1201.c index 07e4d1f73207..b16ec6e5f0e3 100644 --- a/drivers/net/wireless/zd1201.c +++ b/drivers/net/wireless/zd1201.c | |||
@@ -49,7 +49,7 @@ MODULE_DEVICE_TABLE(usb, zd1201_table); | |||
49 | static int zd1201_fw_upload(struct usb_device *dev, int apfw) | 49 | static int zd1201_fw_upload(struct usb_device *dev, int apfw) |
50 | { | 50 | { |
51 | const struct firmware *fw_entry; | 51 | const struct firmware *fw_entry; |
52 | char *data; | 52 | const char *data; |
53 | unsigned long len; | 53 | unsigned long len; |
54 | int err; | 54 | int err; |
55 | unsigned char ret; | 55 | unsigned char ret; |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index d26f69b0184f..ef671d1a3bf0 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
@@ -1324,7 +1324,7 @@ static int setup_netfront(struct xenbus_device *dev, struct netfront_info *info) | |||
1324 | goto fail; | 1324 | goto fail; |
1325 | } | 1325 | } |
1326 | 1326 | ||
1327 | txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL); | 1327 | txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_NOIO | __GFP_HIGH); |
1328 | if (!txs) { | 1328 | if (!txs) { |
1329 | err = -ENOMEM; | 1329 | err = -ENOMEM; |
1330 | xenbus_dev_fatal(dev, err, "allocating tx ring page"); | 1330 | xenbus_dev_fatal(dev, err, "allocating tx ring page"); |
@@ -1340,7 +1340,7 @@ static int setup_netfront(struct xenbus_device *dev, struct netfront_info *info) | |||
1340 | } | 1340 | } |
1341 | 1341 | ||
1342 | info->tx_ring_ref = err; | 1342 | info->tx_ring_ref = err; |
1343 | rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL); | 1343 | rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_NOIO | __GFP_HIGH); |
1344 | if (!rxs) { | 1344 | if (!rxs) { |
1345 | err = -ENOMEM; | 1345 | err = -ENOMEM; |
1346 | xenbus_dev_fatal(dev, err, "allocating rx ring page"); | 1346 | xenbus_dev_fatal(dev, err, "allocating rx ring page"); |