diff options
241 files changed, 4609 insertions, 2857 deletions
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index 3be8ab2a886a..82fafe0429fe 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
| @@ -157,6 +157,9 @@ struct virtqueue | |||
| 157 | 157 | ||
| 158 | /* The routine to call when the Guest pings us. */ | 158 | /* The routine to call when the Guest pings us. */ |
| 159 | void (*handle_output)(int fd, struct virtqueue *me); | 159 | void (*handle_output)(int fd, struct virtqueue *me); |
| 160 | |||
| 161 | /* Outstanding buffers */ | ||
| 162 | unsigned int inflight; | ||
| 160 | }; | 163 | }; |
| 161 | 164 | ||
| 162 | /* Remember the arguments to the program so we can "reboot" */ | 165 | /* Remember the arguments to the program so we can "reboot" */ |
| @@ -702,6 +705,7 @@ static unsigned get_vq_desc(struct virtqueue *vq, | |||
| 702 | errx(1, "Looped descriptor"); | 705 | errx(1, "Looped descriptor"); |
| 703 | } while ((i = next_desc(vq, i)) != vq->vring.num); | 706 | } while ((i = next_desc(vq, i)) != vq->vring.num); |
| 704 | 707 | ||
| 708 | vq->inflight++; | ||
| 705 | return head; | 709 | return head; |
| 706 | } | 710 | } |
| 707 | 711 | ||
| @@ -719,6 +723,7 @@ static void add_used(struct virtqueue *vq, unsigned int head, int len) | |||
| 719 | /* Make sure buffer is written before we update index. */ | 723 | /* Make sure buffer is written before we update index. */ |
| 720 | wmb(); | 724 | wmb(); |
| 721 | vq->vring.used->idx++; | 725 | vq->vring.used->idx++; |
| 726 | vq->inflight--; | ||
| 722 | } | 727 | } |
| 723 | 728 | ||
| 724 | /* This actually sends the interrupt for this virtqueue */ | 729 | /* This actually sends the interrupt for this virtqueue */ |
| @@ -726,8 +731,9 @@ static void trigger_irq(int fd, struct virtqueue *vq) | |||
| 726 | { | 731 | { |
| 727 | unsigned long buf[] = { LHREQ_IRQ, vq->config.irq }; | 732 | unsigned long buf[] = { LHREQ_IRQ, vq->config.irq }; |
| 728 | 733 | ||
| 729 | /* If they don't want an interrupt, don't send one. */ | 734 | /* If they don't want an interrupt, don't send one, unless empty. */ |
| 730 | if (vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT) | 735 | if ((vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT) |
| 736 | && vq->inflight) | ||
| 731 | return; | 737 | return; |
| 732 | 738 | ||
| 733 | /* Send the Guest an interrupt tell them we used something up. */ | 739 | /* Send the Guest an interrupt tell them we used something up. */ |
| @@ -1107,6 +1113,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs, | |||
| 1107 | vq->next = NULL; | 1113 | vq->next = NULL; |
| 1108 | vq->last_avail_idx = 0; | 1114 | vq->last_avail_idx = 0; |
| 1109 | vq->dev = dev; | 1115 | vq->dev = dev; |
| 1116 | vq->inflight = 0; | ||
| 1110 | 1117 | ||
| 1111 | /* Initialize the configuration. */ | 1118 | /* Initialize the configuration. */ |
| 1112 | vq->config.num = num_descs; | 1119 | vq->config.num = num_descs; |
| @@ -1368,6 +1375,7 @@ static void setup_tun_net(const char *arg) | |||
| 1368 | 1375 | ||
| 1369 | /* Tell Guest what MAC address to use. */ | 1376 | /* Tell Guest what MAC address to use. */ |
| 1370 | add_feature(dev, VIRTIO_NET_F_MAC); | 1377 | add_feature(dev, VIRTIO_NET_F_MAC); |
| 1378 | add_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY); | ||
| 1371 | set_config(dev, sizeof(conf), &conf); | 1379 | set_config(dev, sizeof(conf), &conf); |
| 1372 | 1380 | ||
| 1373 | /* We don't need the socket any more; setup is done. */ | 1381 | /* We don't need the socket any more; setup is done. */ |
| @@ -1,7 +1,7 @@ | |||
| 1 | VERSION = 2 | 1 | VERSION = 2 |
| 2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
| 3 | SUBLEVEL = 26 | 3 | SUBLEVEL = 26 |
| 4 | EXTRAVERSION = -rc3 | 4 | EXTRAVERSION = -rc4 |
| 5 | NAME = Funky Weasel is Jiggy wit it | 5 | NAME = Funky Weasel is Jiggy wit it |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/avr32/configs/atngw100_defconfig b/arch/avr32/configs/atngw100_defconfig index 06046074d68b..119edb839ac3 100644 --- a/arch/avr32/configs/atngw100_defconfig +++ b/arch/avr32/configs/atngw100_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 23:20:41 2008 | 4 | # Mon May 26 13:30:59 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -37,17 +37,15 @@ CONFIG_POSIX_MQUEUE=y | |||
| 37 | CONFIG_BSD_PROCESS_ACCT=y | 37 | CONFIG_BSD_PROCESS_ACCT=y |
| 38 | CONFIG_BSD_PROCESS_ACCT_V3=y | 38 | CONFIG_BSD_PROCESS_ACCT_V3=y |
| 39 | # CONFIG_TASKSTATS is not set | 39 | # CONFIG_TASKSTATS is not set |
| 40 | # CONFIG_USER_NS is not set | ||
| 41 | # CONFIG_PID_NS is not set | ||
| 42 | # CONFIG_AUDIT is not set | 40 | # CONFIG_AUDIT is not set |
| 43 | # CONFIG_IKCONFIG is not set | 41 | # CONFIG_IKCONFIG is not set |
| 44 | CONFIG_LOG_BUF_SHIFT=14 | 42 | CONFIG_LOG_BUF_SHIFT=14 |
| 45 | # CONFIG_CGROUPS is not set | 43 | # CONFIG_CGROUPS is not set |
| 46 | CONFIG_FAIR_GROUP_SCHED=y | 44 | # CONFIG_GROUP_SCHED is not set |
| 47 | CONFIG_FAIR_USER_SCHED=y | ||
| 48 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
| 49 | CONFIG_SYSFS_DEPRECATED=y | 45 | CONFIG_SYSFS_DEPRECATED=y |
| 46 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 50 | # CONFIG_RELAY is not set | 47 | # CONFIG_RELAY is not set |
| 48 | # CONFIG_NAMESPACES is not set | ||
| 51 | CONFIG_BLK_DEV_INITRD=y | 49 | CONFIG_BLK_DEV_INITRD=y |
| 52 | CONFIG_INITRAMFS_SOURCE="" | 50 | CONFIG_INITRAMFS_SOURCE="" |
| 53 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 51 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| @@ -61,11 +59,13 @@ CONFIG_HOTPLUG=y | |||
| 61 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 62 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 63 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | ||
| 64 | # CONFIG_BASE_FULL is not set | 63 | # CONFIG_BASE_FULL is not set |
| 65 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 66 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
| 67 | CONFIG_EPOLL=y | 66 | CONFIG_EPOLL=y |
| 68 | CONFIG_SIGNALFD=y | 67 | CONFIG_SIGNALFD=y |
| 68 | CONFIG_TIMERFD=y | ||
| 69 | CONFIG_EVENTFD=y | 69 | CONFIG_EVENTFD=y |
| 70 | CONFIG_SHMEM=y | 70 | CONFIG_SHMEM=y |
| 71 | CONFIG_VM_EVENT_COUNTERS=y | 71 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -73,11 +73,21 @@ CONFIG_SLUB_DEBUG=y | |||
| 73 | # CONFIG_SLAB is not set | 73 | # CONFIG_SLAB is not set |
| 74 | CONFIG_SLUB=y | 74 | CONFIG_SLUB=y |
| 75 | # CONFIG_SLOB is not set | 75 | # CONFIG_SLOB is not set |
| 76 | CONFIG_PROFILING=y | ||
| 77 | # CONFIG_MARKERS is not set | ||
| 78 | CONFIG_OPROFILE=m | ||
| 79 | CONFIG_HAVE_OPROFILE=y | ||
| 80 | CONFIG_KPROBES=y | ||
| 81 | CONFIG_HAVE_KPROBES=y | ||
| 82 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 83 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 84 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 76 | CONFIG_SLABINFO=y | 85 | CONFIG_SLABINFO=y |
| 77 | CONFIG_RT_MUTEXES=y | 86 | CONFIG_RT_MUTEXES=y |
| 78 | # CONFIG_TINY_SHMEM is not set | 87 | # CONFIG_TINY_SHMEM is not set |
| 79 | CONFIG_BASE_SMALL=1 | 88 | CONFIG_BASE_SMALL=1 |
| 80 | CONFIG_MODULES=y | 89 | CONFIG_MODULES=y |
| 90 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 81 | CONFIG_MODULE_UNLOAD=y | 91 | CONFIG_MODULE_UNLOAD=y |
| 82 | CONFIG_MODULE_FORCE_UNLOAD=y | 92 | CONFIG_MODULE_FORCE_UNLOAD=y |
| 83 | # CONFIG_MODVERSIONS is not set | 93 | # CONFIG_MODVERSIONS is not set |
| @@ -101,10 +111,15 @@ CONFIG_IOSCHED_CFQ=y | |||
| 101 | CONFIG_DEFAULT_CFQ=y | 111 | CONFIG_DEFAULT_CFQ=y |
| 102 | # CONFIG_DEFAULT_NOOP is not set | 112 | # CONFIG_DEFAULT_NOOP is not set |
| 103 | CONFIG_DEFAULT_IOSCHED="cfq" | 113 | CONFIG_DEFAULT_IOSCHED="cfq" |
| 114 | CONFIG_CLASSIC_RCU=y | ||
| 104 | 115 | ||
| 105 | # | 116 | # |
| 106 | # System Type and features | 117 | # System Type and features |
| 107 | # | 118 | # |
| 119 | CONFIG_TICK_ONESHOT=y | ||
| 120 | CONFIG_NO_HZ=y | ||
| 121 | CONFIG_HIGH_RES_TIMERS=y | ||
| 122 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 108 | CONFIG_SUBARCH_AVR32B=y | 123 | CONFIG_SUBARCH_AVR32B=y |
| 109 | CONFIG_MMU=y | 124 | CONFIG_MMU=y |
| 110 | CONFIG_PERFORMANCE_COUNTERS=y | 125 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -141,16 +156,19 @@ CONFIG_FLATMEM=y | |||
| 141 | CONFIG_FLAT_NODE_MEM_MAP=y | 156 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 142 | # CONFIG_SPARSEMEM_STATIC is not set | 157 | # CONFIG_SPARSEMEM_STATIC is not set |
| 143 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 158 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 159 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 144 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 160 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 145 | # CONFIG_RESOURCES_64BIT is not set | 161 | # CONFIG_RESOURCES_64BIT is not set |
| 146 | CONFIG_ZONE_DMA_FLAG=0 | 162 | CONFIG_ZONE_DMA_FLAG=0 |
| 147 | CONFIG_VIRT_TO_BUS=y | 163 | CONFIG_VIRT_TO_BUS=y |
| 148 | # CONFIG_OWNERSHIP_TRACE is not set | 164 | # CONFIG_OWNERSHIP_TRACE is not set |
| 165 | CONFIG_NMI_DEBUGGING=y | ||
| 149 | # CONFIG_HZ_100 is not set | 166 | # CONFIG_HZ_100 is not set |
| 150 | CONFIG_HZ_250=y | 167 | CONFIG_HZ_250=y |
| 151 | # CONFIG_HZ_300 is not set | 168 | # CONFIG_HZ_300 is not set |
| 152 | # CONFIG_HZ_1000 is not set | 169 | # CONFIG_HZ_1000 is not set |
| 153 | CONFIG_HZ=250 | 170 | CONFIG_HZ=250 |
| 171 | # CONFIG_SCHED_HRTICK is not set | ||
| 154 | CONFIG_CMDLINE="" | 172 | CONFIG_CMDLINE="" |
| 155 | 173 | ||
| 156 | # | 174 | # |
| @@ -164,9 +182,10 @@ CONFIG_CPU_FREQ=y | |||
| 164 | CONFIG_CPU_FREQ_TABLE=y | 182 | CONFIG_CPU_FREQ_TABLE=y |
| 165 | # CONFIG_CPU_FREQ_DEBUG is not set | 183 | # CONFIG_CPU_FREQ_DEBUG is not set |
| 166 | # CONFIG_CPU_FREQ_STAT is not set | 184 | # CONFIG_CPU_FREQ_STAT is not set |
| 167 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 185 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
| 186 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 168 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 187 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 169 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 188 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
| 170 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 189 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| 171 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 190 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 172 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 191 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| @@ -202,6 +221,7 @@ CONFIG_XFRM=y | |||
| 202 | CONFIG_XFRM_USER=y | 221 | CONFIG_XFRM_USER=y |
| 203 | # CONFIG_XFRM_SUB_POLICY is not set | 222 | # CONFIG_XFRM_SUB_POLICY is not set |
| 204 | # CONFIG_XFRM_MIGRATE is not set | 223 | # CONFIG_XFRM_MIGRATE is not set |
| 224 | # CONFIG_XFRM_STATISTICS is not set | ||
| 205 | CONFIG_NET_KEY=y | 225 | CONFIG_NET_KEY=y |
| 206 | # CONFIG_NET_KEY_MIGRATE is not set | 226 | # CONFIG_NET_KEY_MIGRATE is not set |
| 207 | CONFIG_INET=y | 227 | CONFIG_INET=y |
| @@ -255,87 +275,40 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=y | |||
| 255 | CONFIG_INET6_XFRM_MODE_BEET=y | 275 | CONFIG_INET6_XFRM_MODE_BEET=y |
| 256 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 276 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 257 | CONFIG_IPV6_SIT=y | 277 | CONFIG_IPV6_SIT=y |
| 278 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
| 258 | # CONFIG_IPV6_TUNNEL is not set | 279 | # CONFIG_IPV6_TUNNEL is not set |
| 259 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 280 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 281 | # CONFIG_IPV6_MROUTE is not set | ||
| 260 | # CONFIG_NETWORK_SECMARK is not set | 282 | # CONFIG_NETWORK_SECMARK is not set |
| 261 | CONFIG_NETFILTER=y | 283 | CONFIG_NETFILTER=y |
| 262 | # CONFIG_NETFILTER_DEBUG is not set | 284 | # CONFIG_NETFILTER_DEBUG is not set |
| 263 | CONFIG_BRIDGE_NETFILTER=y | 285 | # CONFIG_NETFILTER_ADVANCED is not set |
| 264 | 286 | ||
| 265 | # | 287 | # |
| 266 | # Core Netfilter Configuration | 288 | # Core Netfilter Configuration |
| 267 | # | 289 | # |
| 268 | # CONFIG_NETFILTER_NETLINK is not set | 290 | CONFIG_NETFILTER_NETLINK=m |
| 269 | CONFIG_NF_CONNTRACK_ENABLED=m | 291 | CONFIG_NETFILTER_NETLINK_LOG=m |
| 270 | CONFIG_NF_CONNTRACK=m | 292 | CONFIG_NF_CONNTRACK=m |
| 271 | CONFIG_NF_CT_ACCT=y | ||
| 272 | CONFIG_NF_CONNTRACK_MARK=y | ||
| 273 | # CONFIG_NF_CONNTRACK_EVENTS is not set | ||
| 274 | CONFIG_NF_CT_PROTO_GRE=m | ||
| 275 | # CONFIG_NF_CT_PROTO_SCTP is not set | ||
| 276 | # CONFIG_NF_CT_PROTO_UDPLITE is not set | ||
| 277 | CONFIG_NF_CONNTRACK_AMANDA=m | ||
| 278 | CONFIG_NF_CONNTRACK_FTP=m | 293 | CONFIG_NF_CONNTRACK_FTP=m |
| 279 | CONFIG_NF_CONNTRACK_H323=m | ||
| 280 | CONFIG_NF_CONNTRACK_IRC=m | 294 | CONFIG_NF_CONNTRACK_IRC=m |
| 281 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | ||
| 282 | CONFIG_NF_CONNTRACK_PPTP=m | ||
| 283 | CONFIG_NF_CONNTRACK_SANE=m | ||
| 284 | CONFIG_NF_CONNTRACK_SIP=m | 295 | CONFIG_NF_CONNTRACK_SIP=m |
| 285 | CONFIG_NF_CONNTRACK_TFTP=m | 296 | CONFIG_NF_CT_NETLINK=m |
| 286 | CONFIG_NETFILTER_XTABLES=y | 297 | CONFIG_NETFILTER_XTABLES=y |
| 287 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
| 288 | # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set | ||
| 289 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||
| 290 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 298 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
| 291 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
| 292 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 299 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
| 293 | # CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set | ||
| 294 | # CONFIG_NETFILTER_XT_TARGET_TRACE is not set | ||
| 295 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 300 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
| 296 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
| 297 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | ||
| 298 | # CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set | ||
| 299 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | ||
| 300 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 301 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
| 301 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | ||
| 302 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
| 303 | CONFIG_NETFILTER_XT_MATCH_ESP=m | ||
| 304 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
| 305 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
| 306 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
| 307 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
| 308 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 302 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
| 309 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 303 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
| 310 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
| 311 | # CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set | ||
| 312 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
| 313 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | ||
| 314 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
| 315 | # CONFIG_NETFILTER_XT_MATCH_SCTP is not set | ||
| 316 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 304 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
| 317 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | ||
| 318 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
| 319 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
| 320 | # CONFIG_NETFILTER_XT_MATCH_TIME is not set | ||
| 321 | # CONFIG_NETFILTER_XT_MATCH_U32 is not set | ||
| 322 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
| 323 | 305 | ||
| 324 | # | 306 | # |
| 325 | # IP: Netfilter Configuration | 307 | # IP: Netfilter Configuration |
| 326 | # | 308 | # |
| 327 | CONFIG_NF_CONNTRACK_IPV4=m | 309 | CONFIG_NF_CONNTRACK_IPV4=m |
| 328 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 310 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
| 329 | # CONFIG_IP_NF_QUEUE is not set | ||
| 330 | CONFIG_IP_NF_IPTABLES=m | 311 | CONFIG_IP_NF_IPTABLES=m |
| 331 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
| 332 | CONFIG_IP_NF_MATCH_TOS=m | ||
| 333 | CONFIG_IP_NF_MATCH_RECENT=m | ||
| 334 | CONFIG_IP_NF_MATCH_ECN=m | ||
| 335 | CONFIG_IP_NF_MATCH_AH=m | ||
| 336 | CONFIG_IP_NF_MATCH_TTL=m | ||
| 337 | CONFIG_IP_NF_MATCH_OWNER=m | ||
| 338 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
| 339 | CONFIG_IP_NF_FILTER=m | 312 | CONFIG_IP_NF_FILTER=m |
| 340 | CONFIG_IP_NF_TARGET_REJECT=m | 313 | CONFIG_IP_NF_TARGET_REJECT=m |
| 341 | CONFIG_IP_NF_TARGET_LOG=m | 314 | CONFIG_IP_NF_TARGET_LOG=m |
| @@ -343,54 +316,25 @@ CONFIG_IP_NF_TARGET_LOG=m | |||
| 343 | CONFIG_NF_NAT=m | 316 | CONFIG_NF_NAT=m |
| 344 | CONFIG_NF_NAT_NEEDED=y | 317 | CONFIG_NF_NAT_NEEDED=y |
| 345 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 318 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
| 346 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
| 347 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
| 348 | CONFIG_IP_NF_TARGET_SAME=m | ||
| 349 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
| 350 | CONFIG_NF_NAT_PROTO_GRE=m | ||
| 351 | CONFIG_NF_NAT_FTP=m | 319 | CONFIG_NF_NAT_FTP=m |
| 352 | CONFIG_NF_NAT_IRC=m | 320 | CONFIG_NF_NAT_IRC=m |
| 353 | CONFIG_NF_NAT_TFTP=m | 321 | # CONFIG_NF_NAT_TFTP is not set |
| 354 | CONFIG_NF_NAT_AMANDA=m | 322 | # CONFIG_NF_NAT_AMANDA is not set |
| 355 | CONFIG_NF_NAT_PPTP=m | 323 | # CONFIG_NF_NAT_PPTP is not set |
| 356 | CONFIG_NF_NAT_H323=m | 324 | # CONFIG_NF_NAT_H323 is not set |
| 357 | CONFIG_NF_NAT_SIP=m | 325 | CONFIG_NF_NAT_SIP=m |
| 358 | CONFIG_IP_NF_MANGLE=m | 326 | CONFIG_IP_NF_MANGLE=m |
| 359 | CONFIG_IP_NF_TARGET_TOS=m | ||
| 360 | CONFIG_IP_NF_TARGET_ECN=m | ||
| 361 | CONFIG_IP_NF_TARGET_TTL=m | ||
| 362 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
| 363 | CONFIG_IP_NF_RAW=m | ||
| 364 | CONFIG_IP_NF_ARPTABLES=m | ||
| 365 | CONFIG_IP_NF_ARPFILTER=m | ||
| 366 | CONFIG_IP_NF_ARP_MANGLE=m | ||
| 367 | 327 | ||
| 368 | # | 328 | # |
| 369 | # IPv6: Netfilter Configuration (EXPERIMENTAL) | 329 | # IPv6: Netfilter Configuration |
| 370 | # | 330 | # |
| 371 | CONFIG_NF_CONNTRACK_IPV6=m | 331 | CONFIG_NF_CONNTRACK_IPV6=m |
| 372 | CONFIG_IP6_NF_QUEUE=m | ||
| 373 | CONFIG_IP6_NF_IPTABLES=m | 332 | CONFIG_IP6_NF_IPTABLES=m |
| 374 | CONFIG_IP6_NF_MATCH_RT=m | ||
| 375 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
| 376 | CONFIG_IP6_NF_MATCH_FRAG=m | ||
| 377 | CONFIG_IP6_NF_MATCH_HL=m | ||
| 378 | CONFIG_IP6_NF_MATCH_OWNER=m | ||
| 379 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 333 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
| 380 | CONFIG_IP6_NF_MATCH_AH=m | ||
| 381 | CONFIG_IP6_NF_MATCH_MH=m | ||
| 382 | CONFIG_IP6_NF_MATCH_EUI64=m | ||
| 383 | CONFIG_IP6_NF_FILTER=m | 334 | CONFIG_IP6_NF_FILTER=m |
| 384 | CONFIG_IP6_NF_TARGET_LOG=m | 335 | CONFIG_IP6_NF_TARGET_LOG=m |
| 385 | CONFIG_IP6_NF_TARGET_REJECT=m | 336 | CONFIG_IP6_NF_TARGET_REJECT=m |
| 386 | CONFIG_IP6_NF_MANGLE=m | 337 | CONFIG_IP6_NF_MANGLE=m |
| 387 | CONFIG_IP6_NF_TARGET_HL=m | ||
| 388 | CONFIG_IP6_NF_RAW=m | ||
| 389 | |||
| 390 | # | ||
| 391 | # Bridge: Netfilter Configuration | ||
| 392 | # | ||
| 393 | # CONFIG_BRIDGE_NF_EBTABLES is not set | ||
| 394 | # CONFIG_IP_DCCP is not set | 338 | # CONFIG_IP_DCCP is not set |
| 395 | # CONFIG_IP_SCTP is not set | 339 | # CONFIG_IP_SCTP is not set |
| 396 | # CONFIG_TIPC is not set | 340 | # CONFIG_TIPC is not set |
| @@ -407,7 +351,6 @@ CONFIG_LLC=m | |||
| 407 | # CONFIG_ECONET is not set | 351 | # CONFIG_ECONET is not set |
| 408 | # CONFIG_WAN_ROUTER is not set | 352 | # CONFIG_WAN_ROUTER is not set |
| 409 | # CONFIG_NET_SCHED is not set | 353 | # CONFIG_NET_SCHED is not set |
| 410 | CONFIG_NET_CLS_ROUTE=y | ||
| 411 | 354 | ||
| 412 | # | 355 | # |
| 413 | # Network testing | 356 | # Network testing |
| @@ -415,6 +358,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
| 415 | # CONFIG_NET_PKTGEN is not set | 358 | # CONFIG_NET_PKTGEN is not set |
| 416 | # CONFIG_NET_TCPPROBE is not set | 359 | # CONFIG_NET_TCPPROBE is not set |
| 417 | # CONFIG_HAMRADIO is not set | 360 | # CONFIG_HAMRADIO is not set |
| 361 | # CONFIG_CAN is not set | ||
| 418 | # CONFIG_IRDA is not set | 362 | # CONFIG_IRDA is not set |
| 419 | # CONFIG_BT is not set | 363 | # CONFIG_BT is not set |
| 420 | # CONFIG_AF_RXRPC is not set | 364 | # CONFIG_AF_RXRPC is not set |
| @@ -450,6 +394,7 @@ CONFIG_MTD=y | |||
| 450 | CONFIG_MTD_PARTITIONS=y | 394 | CONFIG_MTD_PARTITIONS=y |
| 451 | # CONFIG_MTD_REDBOOT_PARTS is not set | 395 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 452 | CONFIG_MTD_CMDLINE_PARTS=y | 396 | CONFIG_MTD_CMDLINE_PARTS=y |
| 397 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 453 | 398 | ||
| 454 | # | 399 | # |
| 455 | # User Modules And Translation Layers | 400 | # User Modules And Translation Layers |
| @@ -531,11 +476,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 531 | CONFIG_BLK_DEV_RAM=m | 476 | CONFIG_BLK_DEV_RAM=m |
| 532 | CONFIG_BLK_DEV_RAM_COUNT=16 | 477 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 533 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 478 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 534 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 479 | # CONFIG_BLK_DEV_XIP is not set |
| 535 | # CONFIG_CDROM_PKTCDVD is not set | 480 | # CONFIG_CDROM_PKTCDVD is not set |
| 536 | # CONFIG_ATA_OVER_ETH is not set | 481 | # CONFIG_ATA_OVER_ETH is not set |
| 537 | # CONFIG_MISC_DEVICES is not set | 482 | CONFIG_MISC_DEVICES=y |
| 538 | # CONFIG_IDE is not set | 483 | # CONFIG_ATMEL_PWM is not set |
| 484 | CONFIG_ATMEL_TCLIB=y | ||
| 485 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
| 486 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
| 487 | # CONFIG_EEPROM_93CX6 is not set | ||
| 488 | # CONFIG_ATMEL_SSC is not set | ||
| 489 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 490 | # CONFIG_HAVE_IDE is not set | ||
| 539 | 491 | ||
| 540 | # | 492 | # |
| 541 | # SCSI device support | 493 | # SCSI device support |
| @@ -568,11 +520,13 @@ CONFIG_PHYLIB=y | |||
| 568 | # CONFIG_SMSC_PHY is not set | 520 | # CONFIG_SMSC_PHY is not set |
| 569 | # CONFIG_BROADCOM_PHY is not set | 521 | # CONFIG_BROADCOM_PHY is not set |
| 570 | # CONFIG_ICPLUS_PHY is not set | 522 | # CONFIG_ICPLUS_PHY is not set |
| 523 | # CONFIG_REALTEK_PHY is not set | ||
| 571 | # CONFIG_FIXED_PHY is not set | 524 | # CONFIG_FIXED_PHY is not set |
| 572 | # CONFIG_MDIO_BITBANG is not set | 525 | # CONFIG_MDIO_BITBANG is not set |
| 573 | CONFIG_NET_ETHERNET=y | 526 | CONFIG_NET_ETHERNET=y |
| 574 | # CONFIG_MII is not set | 527 | # CONFIG_MII is not set |
| 575 | CONFIG_MACB=y | 528 | CONFIG_MACB=y |
| 529 | # CONFIG_ENC28J60 is not set | ||
| 576 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 530 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 577 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 531 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| 578 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 532 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
| @@ -586,6 +540,7 @@ CONFIG_MACB=y | |||
| 586 | # | 540 | # |
| 587 | # CONFIG_WLAN_PRE80211 is not set | 541 | # CONFIG_WLAN_PRE80211 is not set |
| 588 | # CONFIG_WLAN_80211 is not set | 542 | # CONFIG_WLAN_80211 is not set |
| 543 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 589 | # CONFIG_WAN is not set | 544 | # CONFIG_WAN is not set |
| 590 | CONFIG_PPP=m | 545 | CONFIG_PPP=m |
| 591 | # CONFIG_PPP_MULTILINK is not set | 546 | # CONFIG_PPP_MULTILINK is not set |
| @@ -599,7 +554,6 @@ CONFIG_PPPOE=m | |||
| 599 | # CONFIG_PPPOL2TP is not set | 554 | # CONFIG_PPPOL2TP is not set |
| 600 | # CONFIG_SLIP is not set | 555 | # CONFIG_SLIP is not set |
| 601 | CONFIG_SLHC=m | 556 | CONFIG_SLHC=m |
| 602 | # CONFIG_SHAPER is not set | ||
| 603 | # CONFIG_NETCONSOLE is not set | 557 | # CONFIG_NETCONSOLE is not set |
| 604 | # CONFIG_NETPOLL is not set | 558 | # CONFIG_NETPOLL is not set |
| 605 | # CONFIG_NET_POLL_CONTROLLER is not set | 559 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -621,6 +575,7 @@ CONFIG_SLHC=m | |||
| 621 | # Character devices | 575 | # Character devices |
| 622 | # | 576 | # |
| 623 | # CONFIG_VT is not set | 577 | # CONFIG_VT is not set |
| 578 | # CONFIG_DEVKMEM is not set | ||
| 624 | # CONFIG_SERIAL_NONSTANDARD is not set | 579 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 625 | 580 | ||
| 626 | # | 581 | # |
| @@ -633,6 +588,7 @@ CONFIG_SLHC=m | |||
| 633 | # | 588 | # |
| 634 | CONFIG_SERIAL_ATMEL=y | 589 | CONFIG_SERIAL_ATMEL=y |
| 635 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 590 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 591 | CONFIG_SERIAL_ATMEL_PDC=y | ||
| 636 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 592 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 637 | CONFIG_SERIAL_CORE=y | 593 | CONFIG_SERIAL_CORE=y |
| 638 | CONFIG_SERIAL_CORE_CONSOLE=y | 594 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -640,21 +596,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 640 | # CONFIG_LEGACY_PTYS is not set | 596 | # CONFIG_LEGACY_PTYS is not set |
| 641 | # CONFIG_IPMI_HANDLER is not set | 597 | # CONFIG_IPMI_HANDLER is not set |
| 642 | # CONFIG_HW_RANDOM is not set | 598 | # CONFIG_HW_RANDOM is not set |
| 643 | # CONFIG_RTC is not set | ||
| 644 | # CONFIG_GEN_RTC is not set | ||
| 645 | # CONFIG_R3964 is not set | 599 | # CONFIG_R3964 is not set |
| 646 | # CONFIG_RAW_DRIVER is not set | 600 | # CONFIG_RAW_DRIVER is not set |
| 647 | # CONFIG_TCG_TPM is not set | 601 | # CONFIG_TCG_TPM is not set |
| 648 | CONFIG_I2C=m | 602 | CONFIG_I2C=m |
| 649 | CONFIG_I2C_BOARDINFO=y | 603 | CONFIG_I2C_BOARDINFO=y |
| 650 | CONFIG_I2C_CHARDEV=m | 604 | CONFIG_I2C_CHARDEV=m |
| 651 | |||
| 652 | # | ||
| 653 | # I2C Algorithms | ||
| 654 | # | ||
| 655 | CONFIG_I2C_ALGOBIT=m | 605 | CONFIG_I2C_ALGOBIT=m |
| 656 | # CONFIG_I2C_ALGOPCF is not set | ||
| 657 | # CONFIG_I2C_ALGOPCA is not set | ||
| 658 | 606 | ||
| 659 | # | 607 | # |
| 660 | # I2C Hardware Bus support | 608 | # I2C Hardware Bus support |
| @@ -665,27 +613,23 @@ CONFIG_I2C_GPIO=m | |||
| 665 | # CONFIG_I2C_SIMTEC is not set | 613 | # CONFIG_I2C_SIMTEC is not set |
| 666 | # CONFIG_I2C_TAOS_EVM is not set | 614 | # CONFIG_I2C_TAOS_EVM is not set |
| 667 | # CONFIG_I2C_STUB is not set | 615 | # CONFIG_I2C_STUB is not set |
| 616 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 668 | 617 | ||
| 669 | # | 618 | # |
| 670 | # Miscellaneous I2C Chip support | 619 | # Miscellaneous I2C Chip support |
| 671 | # | 620 | # |
| 672 | # CONFIG_SENSORS_DS1337 is not set | ||
| 673 | # CONFIG_SENSORS_DS1374 is not set | ||
| 674 | # CONFIG_DS1682 is not set | 621 | # CONFIG_DS1682 is not set |
| 675 | # CONFIG_SENSORS_EEPROM is not set | 622 | # CONFIG_SENSORS_EEPROM is not set |
| 676 | # CONFIG_SENSORS_PCF8574 is not set | 623 | # CONFIG_SENSORS_PCF8574 is not set |
| 677 | # CONFIG_SENSORS_PCA9539 is not set | 624 | # CONFIG_PCF8575 is not set |
| 678 | # CONFIG_SENSORS_PCF8591 is not set | 625 | # CONFIG_SENSORS_PCF8591 is not set |
| 626 | # CONFIG_TPS65010 is not set | ||
| 679 | # CONFIG_SENSORS_MAX6875 is not set | 627 | # CONFIG_SENSORS_MAX6875 is not set |
| 680 | # CONFIG_SENSORS_TSL2550 is not set | 628 | # CONFIG_SENSORS_TSL2550 is not set |
| 681 | # CONFIG_I2C_DEBUG_CORE is not set | 629 | # CONFIG_I2C_DEBUG_CORE is not set |
| 682 | # CONFIG_I2C_DEBUG_ALGO is not set | 630 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 683 | # CONFIG_I2C_DEBUG_BUS is not set | 631 | # CONFIG_I2C_DEBUG_BUS is not set |
| 684 | # CONFIG_I2C_DEBUG_CHIP is not set | 632 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 685 | |||
| 686 | # | ||
| 687 | # SPI support | ||
| 688 | # | ||
| 689 | CONFIG_SPI=y | 633 | CONFIG_SPI=y |
| 690 | # CONFIG_SPI_DEBUG is not set | 634 | # CONFIG_SPI_DEBUG is not set |
| 691 | CONFIG_SPI_MASTER=y | 635 | CONFIG_SPI_MASTER=y |
| @@ -702,9 +646,27 @@ CONFIG_SPI_ATMEL=y | |||
| 702 | # CONFIG_SPI_AT25 is not set | 646 | # CONFIG_SPI_AT25 is not set |
| 703 | CONFIG_SPI_SPIDEV=m | 647 | CONFIG_SPI_SPIDEV=m |
| 704 | # CONFIG_SPI_TLE62X0 is not set | 648 | # CONFIG_SPI_TLE62X0 is not set |
| 649 | CONFIG_HAVE_GPIO_LIB=y | ||
| 650 | |||
| 651 | # | ||
| 652 | # GPIO Support | ||
| 653 | # | ||
| 654 | # CONFIG_DEBUG_GPIO is not set | ||
| 655 | |||
| 656 | # | ||
| 657 | # I2C GPIO expanders: | ||
| 658 | # | ||
| 659 | # CONFIG_GPIO_PCA953X is not set | ||
| 660 | # CONFIG_GPIO_PCF857X is not set | ||
| 661 | |||
| 662 | # | ||
| 663 | # SPI GPIO expanders: | ||
| 664 | # | ||
| 665 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 705 | # CONFIG_W1 is not set | 666 | # CONFIG_W1 is not set |
| 706 | # CONFIG_POWER_SUPPLY is not set | 667 | # CONFIG_POWER_SUPPLY is not set |
| 707 | # CONFIG_HWMON is not set | 668 | # CONFIG_HWMON is not set |
| 669 | # CONFIG_THERMAL is not set | ||
| 708 | CONFIG_WATCHDOG=y | 670 | CONFIG_WATCHDOG=y |
| 709 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 671 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 710 | 672 | ||
| @@ -724,12 +686,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 724 | # Multifunction device drivers | 686 | # Multifunction device drivers |
| 725 | # | 687 | # |
| 726 | # CONFIG_MFD_SM501 is not set | 688 | # CONFIG_MFD_SM501 is not set |
| 689 | # CONFIG_HTC_PASIC3 is not set | ||
| 727 | 690 | ||
| 728 | # | 691 | # |
| 729 | # Multimedia devices | 692 | # Multimedia devices |
| 730 | # | 693 | # |
| 694 | |||
| 695 | # | ||
| 696 | # Multimedia core support | ||
| 697 | # | ||
| 731 | # CONFIG_VIDEO_DEV is not set | 698 | # CONFIG_VIDEO_DEV is not set |
| 732 | # CONFIG_DVB_CORE is not set | 699 | # CONFIG_DVB_CORE is not set |
| 700 | # CONFIG_VIDEO_MEDIA is not set | ||
| 701 | |||
| 702 | # | ||
| 703 | # Multimedia drivers | ||
| 704 | # | ||
| 733 | # CONFIG_DAB is not set | 705 | # CONFIG_DAB is not set |
| 734 | 706 | ||
| 735 | # | 707 | # |
| @@ -753,14 +725,12 @@ CONFIG_USB_SUPPORT=y | |||
| 753 | # CONFIG_USB_ARCH_HAS_HCD is not set | 725 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 754 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 726 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 755 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 727 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 728 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 729 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 756 | 730 | ||
| 757 | # | 731 | # |
| 758 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 732 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 759 | # | 733 | # |
| 760 | |||
| 761 | # | ||
| 762 | # USB Gadget Support | ||
| 763 | # | ||
| 764 | CONFIG_USB_GADGET=y | 734 | CONFIG_USB_GADGET=y |
| 765 | # CONFIG_USB_GADGET_DEBUG is not set | 735 | # CONFIG_USB_GADGET_DEBUG is not set |
| 766 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 736 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| @@ -772,6 +742,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 772 | # CONFIG_USB_GADGET_NET2280 is not set | 742 | # CONFIG_USB_GADGET_NET2280 is not set |
| 773 | # CONFIG_USB_GADGET_PXA2XX is not set | 743 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 774 | # CONFIG_USB_GADGET_M66592 is not set | 744 | # CONFIG_USB_GADGET_M66592 is not set |
| 745 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 775 | # CONFIG_USB_GADGET_GOKU is not set | 746 | # CONFIG_USB_GADGET_GOKU is not set |
| 776 | # CONFIG_USB_GADGET_LH7A40X is not set | 747 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 777 | # CONFIG_USB_GADGET_OMAP is not set | 748 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -787,6 +758,7 @@ CONFIG_USB_FILE_STORAGE=m | |||
| 787 | # CONFIG_USB_FILE_STORAGE_TEST is not set | 758 | # CONFIG_USB_FILE_STORAGE_TEST is not set |
| 788 | CONFIG_USB_G_SERIAL=m | 759 | CONFIG_USB_G_SERIAL=m |
| 789 | # CONFIG_USB_MIDI_GADGET is not set | 760 | # CONFIG_USB_MIDI_GADGET is not set |
| 761 | # CONFIG_USB_G_PRINTER is not set | ||
| 790 | CONFIG_MMC=m | 762 | CONFIG_MMC=m |
| 791 | # CONFIG_MMC_DEBUG is not set | 763 | # CONFIG_MMC_DEBUG is not set |
| 792 | # CONFIG_MMC_UNSAFE_RESUME is not set | 764 | # CONFIG_MMC_UNSAFE_RESUME is not set |
| @@ -797,11 +769,13 @@ CONFIG_MMC=m | |||
| 797 | CONFIG_MMC_BLOCK=m | 769 | CONFIG_MMC_BLOCK=m |
| 798 | CONFIG_MMC_BLOCK_BOUNCE=y | 770 | CONFIG_MMC_BLOCK_BOUNCE=y |
| 799 | # CONFIG_SDIO_UART is not set | 771 | # CONFIG_SDIO_UART is not set |
| 772 | # CONFIG_MMC_TEST is not set | ||
| 800 | 773 | ||
| 801 | # | 774 | # |
| 802 | # MMC/SD Host Controller Drivers | 775 | # MMC/SD Host Controller Drivers |
| 803 | # | 776 | # |
| 804 | CONFIG_MMC_SPI=m | 777 | CONFIG_MMC_SPI=m |
| 778 | # CONFIG_MEMSTICK is not set | ||
| 805 | CONFIG_NEW_LEDS=y | 779 | CONFIG_NEW_LEDS=y |
| 806 | CONFIG_LEDS_CLASS=y | 780 | CONFIG_LEDS_CLASS=y |
| 807 | 781 | ||
| @@ -816,6 +790,8 @@ CONFIG_LEDS_GPIO=y | |||
| 816 | CONFIG_LEDS_TRIGGERS=y | 790 | CONFIG_LEDS_TRIGGERS=y |
| 817 | CONFIG_LEDS_TRIGGER_TIMER=y | 791 | CONFIG_LEDS_TRIGGER_TIMER=y |
| 818 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 792 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
| 793 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 794 | # CONFIG_ACCESSIBILITY is not set | ||
| 819 | CONFIG_RTC_LIB=y | 795 | CONFIG_RTC_LIB=y |
| 820 | CONFIG_RTC_CLASS=y | 796 | CONFIG_RTC_CLASS=y |
| 821 | CONFIG_RTC_HCTOSYS=y | 797 | CONFIG_RTC_HCTOSYS=y |
| @@ -844,19 +820,22 @@ CONFIG_RTC_INTF_DEV=y | |||
| 844 | # CONFIG_RTC_DRV_PCF8563 is not set | 820 | # CONFIG_RTC_DRV_PCF8563 is not set |
| 845 | # CONFIG_RTC_DRV_PCF8583 is not set | 821 | # CONFIG_RTC_DRV_PCF8583 is not set |
| 846 | # CONFIG_RTC_DRV_M41T80 is not set | 822 | # CONFIG_RTC_DRV_M41T80 is not set |
| 823 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 847 | 824 | ||
| 848 | # | 825 | # |
| 849 | # SPI RTC drivers | 826 | # SPI RTC drivers |
| 850 | # | 827 | # |
| 851 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 852 | # CONFIG_RTC_DRV_MAX6902 is not set | 828 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 829 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 830 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 853 | 831 | ||
| 854 | # | 832 | # |
| 855 | # Platform RTC drivers | 833 | # Platform RTC drivers |
| 856 | # | 834 | # |
| 835 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 857 | # CONFIG_RTC_DRV_DS1553 is not set | 836 | # CONFIG_RTC_DRV_DS1553 is not set |
| 858 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 859 | # CONFIG_RTC_DRV_DS1742 is not set | 837 | # CONFIG_RTC_DRV_DS1742 is not set |
| 838 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 860 | # CONFIG_RTC_DRV_M48T86 is not set | 839 | # CONFIG_RTC_DRV_M48T86 is not set |
| 861 | # CONFIG_RTC_DRV_M48T59 is not set | 840 | # CONFIG_RTC_DRV_M48T59 is not set |
| 862 | # CONFIG_RTC_DRV_V3020 is not set | 841 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -865,10 +844,6 @@ CONFIG_RTC_INTF_DEV=y | |||
| 865 | # on-CPU RTC drivers | 844 | # on-CPU RTC drivers |
| 866 | # | 845 | # |
| 867 | CONFIG_RTC_DRV_AT32AP700X=y | 846 | CONFIG_RTC_DRV_AT32AP700X=y |
| 868 | |||
| 869 | # | ||
| 870 | # Userspace I/O | ||
| 871 | # | ||
| 872 | # CONFIG_UIO is not set | 847 | # CONFIG_UIO is not set |
| 873 | 848 | ||
| 874 | # | 849 | # |
| @@ -885,14 +860,11 @@ CONFIG_JBD=m | |||
| 885 | # CONFIG_JFS_FS is not set | 860 | # CONFIG_JFS_FS is not set |
| 886 | # CONFIG_FS_POSIX_ACL is not set | 861 | # CONFIG_FS_POSIX_ACL is not set |
| 887 | # CONFIG_XFS_FS is not set | 862 | # CONFIG_XFS_FS is not set |
| 888 | # CONFIG_GFS2_FS is not set | ||
| 889 | # CONFIG_OCFS2_FS is not set | 863 | # CONFIG_OCFS2_FS is not set |
| 890 | # CONFIG_MINIX_FS is not set | 864 | # CONFIG_DNOTIFY is not set |
| 891 | # CONFIG_ROMFS_FS is not set | ||
| 892 | CONFIG_INOTIFY=y | 865 | CONFIG_INOTIFY=y |
| 893 | CONFIG_INOTIFY_USER=y | 866 | CONFIG_INOTIFY_USER=y |
| 894 | # CONFIG_QUOTA is not set | 867 | # CONFIG_QUOTA is not set |
| 895 | # CONFIG_DNOTIFY is not set | ||
| 896 | # CONFIG_AUTOFS_FS is not set | 868 | # CONFIG_AUTOFS_FS is not set |
| 897 | # CONFIG_AUTOFS4_FS is not set | 869 | # CONFIG_AUTOFS4_FS is not set |
| 898 | CONFIG_FUSE_FS=m | 870 | CONFIG_FUSE_FS=m |
| @@ -948,8 +920,10 @@ CONFIG_JFFS2_RTIME=y | |||
| 948 | # CONFIG_JFFS2_RUBIN is not set | 920 | # CONFIG_JFFS2_RUBIN is not set |
| 949 | # CONFIG_CRAMFS is not set | 921 | # CONFIG_CRAMFS is not set |
| 950 | # CONFIG_VXFS_FS is not set | 922 | # CONFIG_VXFS_FS is not set |
| 923 | # CONFIG_MINIX_FS is not set | ||
| 951 | # CONFIG_HPFS_FS is not set | 924 | # CONFIG_HPFS_FS is not set |
| 952 | # CONFIG_QNX4FS_FS is not set | 925 | # CONFIG_QNX4FS_FS is not set |
| 926 | # CONFIG_ROMFS_FS is not set | ||
| 953 | # CONFIG_SYSV_FS is not set | 927 | # CONFIG_SYSV_FS is not set |
| 954 | # CONFIG_UFS_FS is not set | 928 | # CONFIG_UFS_FS is not set |
| 955 | CONFIG_NETWORK_FILESYSTEMS=y | 929 | CONFIG_NETWORK_FILESYSTEMS=y |
| @@ -957,12 +931,10 @@ CONFIG_NFS_FS=y | |||
| 957 | CONFIG_NFS_V3=y | 931 | CONFIG_NFS_V3=y |
| 958 | # CONFIG_NFS_V3_ACL is not set | 932 | # CONFIG_NFS_V3_ACL is not set |
| 959 | # CONFIG_NFS_V4 is not set | 933 | # CONFIG_NFS_V4 is not set |
| 960 | # CONFIG_NFS_DIRECTIO is not set | ||
| 961 | CONFIG_NFSD=m | 934 | CONFIG_NFSD=m |
| 962 | CONFIG_NFSD_V3=y | 935 | CONFIG_NFSD_V3=y |
| 963 | # CONFIG_NFSD_V3_ACL is not set | 936 | # CONFIG_NFSD_V3_ACL is not set |
| 964 | # CONFIG_NFSD_V4 is not set | 937 | # CONFIG_NFSD_V4 is not set |
| 965 | CONFIG_NFSD_TCP=y | ||
| 966 | CONFIG_ROOT_NFS=y | 938 | CONFIG_ROOT_NFS=y |
| 967 | CONFIG_LOCKD=y | 939 | CONFIG_LOCKD=y |
| 968 | CONFIG_LOCKD_V4=y | 940 | CONFIG_LOCKD_V4=y |
| @@ -1030,11 +1002,6 @@ CONFIG_NLS_ISO8859_1=m | |||
| 1030 | # CONFIG_NLS_KOI8_U is not set | 1002 | # CONFIG_NLS_KOI8_U is not set |
| 1031 | CONFIG_NLS_UTF8=m | 1003 | CONFIG_NLS_UTF8=m |
| 1032 | # CONFIG_DLM is not set | 1004 | # CONFIG_DLM is not set |
| 1033 | CONFIG_INSTRUMENTATION=y | ||
| 1034 | CONFIG_PROFILING=y | ||
| 1035 | CONFIG_OPROFILE=m | ||
| 1036 | CONFIG_KPROBES=y | ||
| 1037 | # CONFIG_MARKERS is not set | ||
| 1038 | 1005 | ||
| 1039 | # | 1006 | # |
| 1040 | # Kernel hacking | 1007 | # Kernel hacking |
| @@ -1042,6 +1009,7 @@ CONFIG_KPROBES=y | |||
| 1042 | # CONFIG_PRINTK_TIME is not set | 1009 | # CONFIG_PRINTK_TIME is not set |
| 1043 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1010 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1044 | CONFIG_ENABLE_MUST_CHECK=y | 1011 | CONFIG_ENABLE_MUST_CHECK=y |
| 1012 | CONFIG_FRAME_WARN=1024 | ||
| 1045 | CONFIG_MAGIC_SYSRQ=y | 1013 | CONFIG_MAGIC_SYSRQ=y |
| 1046 | # CONFIG_UNUSED_SYMBOLS is not set | 1014 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1047 | # CONFIG_DEBUG_FS is not set | 1015 | # CONFIG_DEBUG_FS is not set |
| @@ -1052,7 +1020,9 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1052 | CONFIG_SCHED_DEBUG=y | 1020 | CONFIG_SCHED_DEBUG=y |
| 1053 | # CONFIG_SCHEDSTATS is not set | 1021 | # CONFIG_SCHEDSTATS is not set |
| 1054 | # CONFIG_TIMER_STATS is not set | 1022 | # CONFIG_TIMER_STATS is not set |
| 1023 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1055 | # CONFIG_SLUB_DEBUG_ON is not set | 1024 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1025 | # CONFIG_SLUB_STATS is not set | ||
| 1056 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1026 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1057 | # CONFIG_RT_MUTEX_TESTER is not set | 1027 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1058 | # CONFIG_DEBUG_SPINLOCK is not set | 1028 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -1066,12 +1036,14 @@ CONFIG_SCHED_DEBUG=y | |||
| 1066 | CONFIG_DEBUG_BUGVERBOSE=y | 1036 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1067 | # CONFIG_DEBUG_INFO is not set | 1037 | # CONFIG_DEBUG_INFO is not set |
| 1068 | # CONFIG_DEBUG_VM is not set | 1038 | # CONFIG_DEBUG_VM is not set |
| 1039 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1069 | # CONFIG_DEBUG_LIST is not set | 1040 | # CONFIG_DEBUG_LIST is not set |
| 1070 | # CONFIG_DEBUG_SG is not set | 1041 | # CONFIG_DEBUG_SG is not set |
| 1071 | CONFIG_FRAME_POINTER=y | 1042 | CONFIG_FRAME_POINTER=y |
| 1072 | # CONFIG_FORCED_INLINING is not set | ||
| 1073 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1043 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 1074 | # CONFIG_RCU_TORTURE_TEST is not set | 1044 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1045 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
| 1046 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 1075 | # CONFIG_LKDTM is not set | 1047 | # CONFIG_LKDTM is not set |
| 1076 | # CONFIG_FAULT_INJECTION is not set | 1048 | # CONFIG_FAULT_INJECTION is not set |
| 1077 | # CONFIG_SAMPLES is not set | 1049 | # CONFIG_SAMPLES is not set |
| @@ -1083,52 +1055,90 @@ CONFIG_FRAME_POINTER=y | |||
| 1083 | # CONFIG_SECURITY is not set | 1055 | # CONFIG_SECURITY is not set |
| 1084 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1056 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 1085 | CONFIG_CRYPTO=y | 1057 | CONFIG_CRYPTO=y |
| 1058 | |||
| 1059 | # | ||
| 1060 | # Crypto core or helper | ||
| 1061 | # | ||
| 1086 | CONFIG_CRYPTO_ALGAPI=y | 1062 | CONFIG_CRYPTO_ALGAPI=y |
| 1063 | CONFIG_CRYPTO_AEAD=y | ||
| 1087 | CONFIG_CRYPTO_BLKCIPHER=y | 1064 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1088 | CONFIG_CRYPTO_HASH=y | 1065 | CONFIG_CRYPTO_HASH=y |
| 1089 | CONFIG_CRYPTO_MANAGER=y | 1066 | CONFIG_CRYPTO_MANAGER=y |
| 1067 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1068 | # CONFIG_CRYPTO_NULL is not set | ||
| 1069 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1070 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1071 | # CONFIG_CRYPTO_TEST is not set | ||
| 1072 | |||
| 1073 | # | ||
| 1074 | # Authenticated Encryption with Associated Data | ||
| 1075 | # | ||
| 1076 | # CONFIG_CRYPTO_CCM is not set | ||
| 1077 | # CONFIG_CRYPTO_GCM is not set | ||
| 1078 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1079 | |||
| 1080 | # | ||
| 1081 | # Block modes | ||
| 1082 | # | ||
| 1083 | CONFIG_CRYPTO_CBC=y | ||
| 1084 | # CONFIG_CRYPTO_CTR is not set | ||
| 1085 | # CONFIG_CRYPTO_CTS is not set | ||
| 1086 | CONFIG_CRYPTO_ECB=m | ||
| 1087 | # CONFIG_CRYPTO_LRW is not set | ||
| 1088 | CONFIG_CRYPTO_PCBC=m | ||
| 1089 | # CONFIG_CRYPTO_XTS is not set | ||
| 1090 | |||
| 1091 | # | ||
| 1092 | # Hash modes | ||
| 1093 | # | ||
| 1090 | CONFIG_CRYPTO_HMAC=y | 1094 | CONFIG_CRYPTO_HMAC=y |
| 1091 | # CONFIG_CRYPTO_XCBC is not set | 1095 | # CONFIG_CRYPTO_XCBC is not set |
| 1092 | # CONFIG_CRYPTO_NULL is not set | 1096 | |
| 1097 | # | ||
| 1098 | # Digest | ||
| 1099 | # | ||
| 1100 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1093 | # CONFIG_CRYPTO_MD4 is not set | 1101 | # CONFIG_CRYPTO_MD4 is not set |
| 1094 | CONFIG_CRYPTO_MD5=y | 1102 | CONFIG_CRYPTO_MD5=y |
| 1103 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1095 | CONFIG_CRYPTO_SHA1=y | 1104 | CONFIG_CRYPTO_SHA1=y |
| 1096 | # CONFIG_CRYPTO_SHA256 is not set | 1105 | # CONFIG_CRYPTO_SHA256 is not set |
| 1097 | # CONFIG_CRYPTO_SHA512 is not set | 1106 | # CONFIG_CRYPTO_SHA512 is not set |
| 1098 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1099 | # CONFIG_CRYPTO_TGR192 is not set | 1107 | # CONFIG_CRYPTO_TGR192 is not set |
| 1100 | # CONFIG_CRYPTO_GF128MUL is not set | 1108 | # CONFIG_CRYPTO_WP512 is not set |
| 1101 | CONFIG_CRYPTO_ECB=m | 1109 | |
| 1102 | CONFIG_CRYPTO_CBC=y | 1110 | # |
| 1103 | CONFIG_CRYPTO_PCBC=m | 1111 | # Ciphers |
| 1104 | # CONFIG_CRYPTO_LRW is not set | 1112 | # |
| 1105 | # CONFIG_CRYPTO_XTS is not set | ||
| 1106 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1107 | CONFIG_CRYPTO_DES=y | ||
| 1108 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1109 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1110 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1111 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1112 | # CONFIG_CRYPTO_AES is not set | 1113 | # CONFIG_CRYPTO_AES is not set |
| 1114 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1115 | CONFIG_CRYPTO_ARC4=m | ||
| 1116 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1117 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1113 | # CONFIG_CRYPTO_CAST5 is not set | 1118 | # CONFIG_CRYPTO_CAST5 is not set |
| 1114 | # CONFIG_CRYPTO_CAST6 is not set | 1119 | # CONFIG_CRYPTO_CAST6 is not set |
| 1115 | # CONFIG_CRYPTO_TEA is not set | 1120 | CONFIG_CRYPTO_DES=y |
| 1116 | CONFIG_CRYPTO_ARC4=m | 1121 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1117 | # CONFIG_CRYPTO_KHAZAD is not set | 1122 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1118 | # CONFIG_CRYPTO_ANUBIS is not set | 1123 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1119 | # CONFIG_CRYPTO_SEED is not set | 1124 | # CONFIG_CRYPTO_SEED is not set |
| 1125 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1126 | # CONFIG_CRYPTO_TEA is not set | ||
| 1127 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1128 | |||
| 1129 | # | ||
| 1130 | # Compression | ||
| 1131 | # | ||
| 1120 | CONFIG_CRYPTO_DEFLATE=y | 1132 | CONFIG_CRYPTO_DEFLATE=y |
| 1121 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1133 | # CONFIG_CRYPTO_LZO is not set |
| 1122 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1123 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1124 | # CONFIG_CRYPTO_TEST is not set | ||
| 1125 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1126 | CONFIG_CRYPTO_HW=y | 1134 | CONFIG_CRYPTO_HW=y |
| 1127 | 1135 | ||
| 1128 | # | 1136 | # |
| 1129 | # Library routines | 1137 | # Library routines |
| 1130 | # | 1138 | # |
| 1131 | CONFIG_BITREVERSE=y | 1139 | CONFIG_BITREVERSE=y |
| 1140 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1141 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 1132 | CONFIG_CRC_CCITT=m | 1142 | CONFIG_CRC_CCITT=m |
| 1133 | # CONFIG_CRC16 is not set | 1143 | # CONFIG_CRC16 is not set |
| 1134 | CONFIG_CRC_ITU_T=m | 1144 | CONFIG_CRC_ITU_T=m |
| @@ -1137,10 +1147,6 @@ CONFIG_CRC7=m | |||
| 1137 | # CONFIG_LIBCRC32C is not set | 1147 | # CONFIG_LIBCRC32C is not set |
| 1138 | CONFIG_ZLIB_INFLATE=y | 1148 | CONFIG_ZLIB_INFLATE=y |
| 1139 | CONFIG_ZLIB_DEFLATE=y | 1149 | CONFIG_ZLIB_DEFLATE=y |
| 1140 | CONFIG_TEXTSEARCH=y | ||
| 1141 | CONFIG_TEXTSEARCH_KMP=m | ||
| 1142 | CONFIG_TEXTSEARCH_BM=m | ||
| 1143 | CONFIG_TEXTSEARCH_FSM=m | ||
| 1144 | CONFIG_PLIST=y | 1150 | CONFIG_PLIST=y |
| 1145 | CONFIG_HAS_IOMEM=y | 1151 | CONFIG_HAS_IOMEM=y |
| 1146 | CONFIG_HAS_IOPORT=y | 1152 | CONFIG_HAS_IOPORT=y |
diff --git a/arch/avr32/configs/atstk1002_defconfig b/arch/avr32/configs/atstk1002_defconfig index 2fb2ede5f2b4..c6d02eac8791 100644 --- a/arch/avr32/configs/atstk1002_defconfig +++ b/arch/avr32/configs/atstk1002_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 23:07:43 2008 | 4 | # Mon May 26 13:30:20 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -36,15 +36,15 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
| 36 | CONFIG_POSIX_MQUEUE=y | 36 | CONFIG_POSIX_MQUEUE=y |
| 37 | # CONFIG_BSD_PROCESS_ACCT is not set | 37 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 38 | # CONFIG_TASKSTATS is not set | 38 | # CONFIG_TASKSTATS is not set |
| 39 | # CONFIG_USER_NS is not set | ||
| 40 | # CONFIG_PID_NS is not set | ||
| 41 | # CONFIG_AUDIT is not set | 39 | # CONFIG_AUDIT is not set |
| 42 | # CONFIG_IKCONFIG is not set | 40 | # CONFIG_IKCONFIG is not set |
| 43 | CONFIG_LOG_BUF_SHIFT=14 | 41 | CONFIG_LOG_BUF_SHIFT=14 |
| 44 | # CONFIG_CGROUPS is not set | 42 | # CONFIG_CGROUPS is not set |
| 45 | # CONFIG_FAIR_GROUP_SCHED is not set | 43 | # CONFIG_GROUP_SCHED is not set |
| 46 | CONFIG_SYSFS_DEPRECATED=y | 44 | CONFIG_SYSFS_DEPRECATED=y |
| 45 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 47 | CONFIG_RELAY=y | 46 | CONFIG_RELAY=y |
| 47 | # CONFIG_NAMESPACES is not set | ||
| 48 | CONFIG_BLK_DEV_INITRD=y | 48 | CONFIG_BLK_DEV_INITRD=y |
| 49 | CONFIG_INITRAMFS_SOURCE="" | 49 | CONFIG_INITRAMFS_SOURCE="" |
| 50 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 50 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| @@ -58,11 +58,13 @@ CONFIG_HOTPLUG=y | |||
| 58 | CONFIG_PRINTK=y | 58 | CONFIG_PRINTK=y |
| 59 | CONFIG_BUG=y | 59 | CONFIG_BUG=y |
| 60 | CONFIG_ELF_CORE=y | 60 | CONFIG_ELF_CORE=y |
| 61 | # CONFIG_COMPAT_BRK is not set | ||
| 61 | # CONFIG_BASE_FULL is not set | 62 | # CONFIG_BASE_FULL is not set |
| 62 | CONFIG_FUTEX=y | 63 | CONFIG_FUTEX=y |
| 63 | CONFIG_ANON_INODES=y | 64 | CONFIG_ANON_INODES=y |
| 64 | CONFIG_EPOLL=y | 65 | CONFIG_EPOLL=y |
| 65 | CONFIG_SIGNALFD=y | 66 | CONFIG_SIGNALFD=y |
| 67 | CONFIG_TIMERFD=y | ||
| 66 | CONFIG_EVENTFD=y | 68 | CONFIG_EVENTFD=y |
| 67 | CONFIG_SHMEM=y | 69 | CONFIG_SHMEM=y |
| 68 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -70,11 +72,21 @@ CONFIG_SLUB_DEBUG=y | |||
| 70 | # CONFIG_SLAB is not set | 72 | # CONFIG_SLAB is not set |
| 71 | CONFIG_SLUB=y | 73 | CONFIG_SLUB=y |
| 72 | # CONFIG_SLOB is not set | 74 | # CONFIG_SLOB is not set |
| 75 | CONFIG_PROFILING=y | ||
| 76 | # CONFIG_MARKERS is not set | ||
| 77 | CONFIG_OPROFILE=m | ||
| 78 | CONFIG_HAVE_OPROFILE=y | ||
| 79 | CONFIG_KPROBES=y | ||
| 80 | CONFIG_HAVE_KPROBES=y | ||
| 81 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 83 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 73 | CONFIG_SLABINFO=y | 84 | CONFIG_SLABINFO=y |
| 74 | CONFIG_RT_MUTEXES=y | 85 | CONFIG_RT_MUTEXES=y |
| 75 | # CONFIG_TINY_SHMEM is not set | 86 | # CONFIG_TINY_SHMEM is not set |
| 76 | CONFIG_BASE_SMALL=1 | 87 | CONFIG_BASE_SMALL=1 |
| 77 | CONFIG_MODULES=y | 88 | CONFIG_MODULES=y |
| 89 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 78 | CONFIG_MODULE_UNLOAD=y | 90 | CONFIG_MODULE_UNLOAD=y |
| 79 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 91 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 80 | # CONFIG_MODVERSIONS is not set | 92 | # CONFIG_MODVERSIONS is not set |
| @@ -98,10 +110,15 @@ CONFIG_IOSCHED_CFQ=y | |||
| 98 | CONFIG_DEFAULT_CFQ=y | 110 | CONFIG_DEFAULT_CFQ=y |
| 99 | # CONFIG_DEFAULT_NOOP is not set | 111 | # CONFIG_DEFAULT_NOOP is not set |
| 100 | CONFIG_DEFAULT_IOSCHED="cfq" | 112 | CONFIG_DEFAULT_IOSCHED="cfq" |
| 113 | CONFIG_CLASSIC_RCU=y | ||
| 101 | 114 | ||
| 102 | # | 115 | # |
| 103 | # System Type and features | 116 | # System Type and features |
| 104 | # | 117 | # |
| 118 | CONFIG_TICK_ONESHOT=y | ||
| 119 | CONFIG_NO_HZ=y | ||
| 120 | CONFIG_HIGH_RES_TIMERS=y | ||
| 121 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 105 | CONFIG_SUBARCH_AVR32B=y | 122 | CONFIG_SUBARCH_AVR32B=y |
| 106 | CONFIG_MMU=y | 123 | CONFIG_MMU=y |
| 107 | CONFIG_PERFORMANCE_COUNTERS=y | 124 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -147,16 +164,19 @@ CONFIG_FLATMEM=y | |||
| 147 | CONFIG_FLAT_NODE_MEM_MAP=y | 164 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 148 | # CONFIG_SPARSEMEM_STATIC is not set | 165 | # CONFIG_SPARSEMEM_STATIC is not set |
| 149 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 166 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 167 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 150 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 168 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 151 | # CONFIG_RESOURCES_64BIT is not set | 169 | # CONFIG_RESOURCES_64BIT is not set |
| 152 | CONFIG_ZONE_DMA_FLAG=0 | 170 | CONFIG_ZONE_DMA_FLAG=0 |
| 153 | CONFIG_VIRT_TO_BUS=y | 171 | CONFIG_VIRT_TO_BUS=y |
| 154 | # CONFIG_OWNERSHIP_TRACE is not set | 172 | # CONFIG_OWNERSHIP_TRACE is not set |
| 173 | CONFIG_NMI_DEBUGGING=y | ||
| 155 | # CONFIG_HZ_100 is not set | 174 | # CONFIG_HZ_100 is not set |
| 156 | CONFIG_HZ_250=y | 175 | CONFIG_HZ_250=y |
| 157 | # CONFIG_HZ_300 is not set | 176 | # CONFIG_HZ_300 is not set |
| 158 | # CONFIG_HZ_1000 is not set | 177 | # CONFIG_HZ_1000 is not set |
| 159 | CONFIG_HZ=250 | 178 | CONFIG_HZ=250 |
| 179 | # CONFIG_SCHED_HRTICK is not set | ||
| 160 | CONFIG_CMDLINE="" | 180 | CONFIG_CMDLINE="" |
| 161 | 181 | ||
| 162 | # | 182 | # |
| @@ -170,9 +190,10 @@ CONFIG_CPU_FREQ=y | |||
| 170 | CONFIG_CPU_FREQ_TABLE=y | 190 | CONFIG_CPU_FREQ_TABLE=y |
| 171 | # CONFIG_CPU_FREQ_DEBUG is not set | 191 | # CONFIG_CPU_FREQ_DEBUG is not set |
| 172 | # CONFIG_CPU_FREQ_STAT is not set | 192 | # CONFIG_CPU_FREQ_STAT is not set |
| 173 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 193 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
| 194 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 174 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 175 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 196 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
| 176 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| 177 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 198 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 178 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 199 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| @@ -208,6 +229,7 @@ CONFIG_XFRM=y | |||
| 208 | CONFIG_XFRM_USER=m | 229 | CONFIG_XFRM_USER=m |
| 209 | # CONFIG_XFRM_SUB_POLICY is not set | 230 | # CONFIG_XFRM_SUB_POLICY is not set |
| 210 | # CONFIG_XFRM_MIGRATE is not set | 231 | # CONFIG_XFRM_MIGRATE is not set |
| 232 | # CONFIG_XFRM_STATISTICS is not set | ||
| 211 | CONFIG_NET_KEY=m | 233 | CONFIG_NET_KEY=m |
| 212 | # CONFIG_NET_KEY_MIGRATE is not set | 234 | # CONFIG_NET_KEY_MIGRATE is not set |
| 213 | CONFIG_INET=y | 235 | CONFIG_INET=y |
| @@ -252,8 +274,10 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m | |||
| 252 | CONFIG_INET6_XFRM_MODE_BEET=m | 274 | CONFIG_INET6_XFRM_MODE_BEET=m |
| 253 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 275 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 254 | CONFIG_IPV6_SIT=m | 276 | CONFIG_IPV6_SIT=m |
| 277 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
| 255 | CONFIG_IPV6_TUNNEL=m | 278 | CONFIG_IPV6_TUNNEL=m |
| 256 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 279 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 280 | # CONFIG_IPV6_MROUTE is not set | ||
| 257 | # CONFIG_NETWORK_SECMARK is not set | 281 | # CONFIG_NETWORK_SECMARK is not set |
| 258 | # CONFIG_NETFILTER is not set | 282 | # CONFIG_NETFILTER is not set |
| 259 | # CONFIG_IP_DCCP is not set | 283 | # CONFIG_IP_DCCP is not set |
| @@ -279,6 +303,7 @@ CONFIG_LLC=m | |||
| 279 | # CONFIG_NET_PKTGEN is not set | 303 | # CONFIG_NET_PKTGEN is not set |
| 280 | # CONFIG_NET_TCPPROBE is not set | 304 | # CONFIG_NET_TCPPROBE is not set |
| 281 | # CONFIG_HAMRADIO is not set | 305 | # CONFIG_HAMRADIO is not set |
| 306 | # CONFIG_CAN is not set | ||
| 282 | # CONFIG_IRDA is not set | 307 | # CONFIG_IRDA is not set |
| 283 | # CONFIG_BT is not set | 308 | # CONFIG_BT is not set |
| 284 | # CONFIG_AF_RXRPC is not set | 309 | # CONFIG_AF_RXRPC is not set |
| @@ -314,6 +339,7 @@ CONFIG_MTD=y | |||
| 314 | CONFIG_MTD_PARTITIONS=y | 339 | CONFIG_MTD_PARTITIONS=y |
| 315 | # CONFIG_MTD_REDBOOT_PARTS is not set | 340 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 316 | CONFIG_MTD_CMDLINE_PARTS=y | 341 | CONFIG_MTD_CMDLINE_PARTS=y |
| 342 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 317 | 343 | ||
| 318 | # | 344 | # |
| 319 | # User Modules And Translation Layers | 345 | # User Modules And Translation Layers |
| @@ -368,6 +394,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 368 | # | 394 | # |
| 369 | CONFIG_MTD_DATAFLASH=m | 395 | CONFIG_MTD_DATAFLASH=m |
| 370 | CONFIG_MTD_M25P80=m | 396 | CONFIG_MTD_M25P80=m |
| 397 | CONFIG_M25PXX_USE_FAST_READ=y | ||
| 371 | # CONFIG_MTD_SLRAM is not set | 398 | # CONFIG_MTD_SLRAM is not set |
| 372 | # CONFIG_MTD_PHRAM is not set | 399 | # CONFIG_MTD_PHRAM is not set |
| 373 | # CONFIG_MTD_MTDRAM is not set | 400 | # CONFIG_MTD_MTDRAM is not set |
| @@ -395,13 +422,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 395 | CONFIG_BLK_DEV_RAM=m | 422 | CONFIG_BLK_DEV_RAM=m |
| 396 | CONFIG_BLK_DEV_RAM_COUNT=16 | 423 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 397 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 424 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 398 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 425 | # CONFIG_BLK_DEV_XIP is not set |
| 399 | # CONFIG_CDROM_PKTCDVD is not set | 426 | # CONFIG_CDROM_PKTCDVD is not set |
| 400 | # CONFIG_ATA_OVER_ETH is not set | 427 | # CONFIG_ATA_OVER_ETH is not set |
| 401 | CONFIG_MISC_DEVICES=y | 428 | CONFIG_MISC_DEVICES=y |
| 429 | CONFIG_ATMEL_PWM=m | ||
| 430 | CONFIG_ATMEL_TCLIB=y | ||
| 431 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
| 432 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
| 402 | # CONFIG_EEPROM_93CX6 is not set | 433 | # CONFIG_EEPROM_93CX6 is not set |
| 403 | CONFIG_ATMEL_SSC=m | 434 | CONFIG_ATMEL_SSC=m |
| 404 | # CONFIG_IDE is not set | 435 | # CONFIG_ENCLOSURE_SERVICES is not set |
| 436 | # CONFIG_HAVE_IDE is not set | ||
| 405 | 437 | ||
| 406 | # | 438 | # |
| 407 | # SCSI device support | 439 | # SCSI device support |
| @@ -444,6 +476,9 @@ CONFIG_SCSI_WAIT_SCAN=m | |||
| 444 | # CONFIG_SCSI_LOWLEVEL is not set | 476 | # CONFIG_SCSI_LOWLEVEL is not set |
| 445 | CONFIG_ATA=m | 477 | CONFIG_ATA=m |
| 446 | # CONFIG_ATA_NONSTANDARD is not set | 478 | # CONFIG_ATA_NONSTANDARD is not set |
| 479 | # CONFIG_SATA_PMP is not set | ||
| 480 | CONFIG_ATA_SFF=y | ||
| 481 | # CONFIG_SATA_MV is not set | ||
| 447 | CONFIG_PATA_AT32=m | 482 | CONFIG_PATA_AT32=m |
| 448 | # CONFIG_PATA_PLATFORM is not set | 483 | # CONFIG_PATA_PLATFORM is not set |
| 449 | # CONFIG_MD is not set | 484 | # CONFIG_MD is not set |
| @@ -469,11 +504,13 @@ CONFIG_PHYLIB=y | |||
| 469 | # CONFIG_SMSC_PHY is not set | 504 | # CONFIG_SMSC_PHY is not set |
| 470 | # CONFIG_BROADCOM_PHY is not set | 505 | # CONFIG_BROADCOM_PHY is not set |
| 471 | # CONFIG_ICPLUS_PHY is not set | 506 | # CONFIG_ICPLUS_PHY is not set |
| 507 | # CONFIG_REALTEK_PHY is not set | ||
| 472 | # CONFIG_FIXED_PHY is not set | 508 | # CONFIG_FIXED_PHY is not set |
| 473 | # CONFIG_MDIO_BITBANG is not set | 509 | # CONFIG_MDIO_BITBANG is not set |
| 474 | CONFIG_NET_ETHERNET=y | 510 | CONFIG_NET_ETHERNET=y |
| 475 | # CONFIG_MII is not set | 511 | # CONFIG_MII is not set |
| 476 | CONFIG_MACB=y | 512 | CONFIG_MACB=y |
| 513 | # CONFIG_ENC28J60 is not set | ||
| 477 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 514 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 478 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 515 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| 479 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 516 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
| @@ -487,6 +524,7 @@ CONFIG_MACB=y | |||
| 487 | # | 524 | # |
| 488 | # CONFIG_WLAN_PRE80211 is not set | 525 | # CONFIG_WLAN_PRE80211 is not set |
| 489 | # CONFIG_WLAN_80211 is not set | 526 | # CONFIG_WLAN_80211 is not set |
| 527 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 490 | # CONFIG_WAN is not set | 528 | # CONFIG_WAN is not set |
| 491 | CONFIG_PPP=m | 529 | CONFIG_PPP=m |
| 492 | # CONFIG_PPP_MULTILINK is not set | 530 | # CONFIG_PPP_MULTILINK is not set |
| @@ -500,7 +538,6 @@ CONFIG_PPP_BSDCOMP=m | |||
| 500 | # CONFIG_PPPOL2TP is not set | 538 | # CONFIG_PPPOL2TP is not set |
| 501 | # CONFIG_SLIP is not set | 539 | # CONFIG_SLIP is not set |
| 502 | CONFIG_SLHC=m | 540 | CONFIG_SLHC=m |
| 503 | # CONFIG_SHAPER is not set | ||
| 504 | # CONFIG_NETCONSOLE is not set | 541 | # CONFIG_NETCONSOLE is not set |
| 505 | # CONFIG_NETPOLL is not set | 542 | # CONFIG_NETPOLL is not set |
| 506 | # CONFIG_NET_POLL_CONTROLLER is not set | 543 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -556,6 +593,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 556 | # Character devices | 593 | # Character devices |
| 557 | # | 594 | # |
| 558 | # CONFIG_VT is not set | 595 | # CONFIG_VT is not set |
| 596 | # CONFIG_DEVKMEM is not set | ||
| 559 | # CONFIG_SERIAL_NONSTANDARD is not set | 597 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 560 | 598 | ||
| 561 | # | 599 | # |
| @@ -568,6 +606,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 568 | # | 606 | # |
| 569 | CONFIG_SERIAL_ATMEL=y | 607 | CONFIG_SERIAL_ATMEL=y |
| 570 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 608 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 609 | CONFIG_SERIAL_ATMEL_PDC=y | ||
| 571 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 610 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 572 | CONFIG_SERIAL_CORE=y | 611 | CONFIG_SERIAL_CORE=y |
| 573 | CONFIG_SERIAL_CORE_CONSOLE=y | 612 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -575,21 +614,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 575 | # CONFIG_LEGACY_PTYS is not set | 614 | # CONFIG_LEGACY_PTYS is not set |
| 576 | # CONFIG_IPMI_HANDLER is not set | 615 | # CONFIG_IPMI_HANDLER is not set |
| 577 | # CONFIG_HW_RANDOM is not set | 616 | # CONFIG_HW_RANDOM is not set |
| 578 | # CONFIG_RTC is not set | ||
| 579 | # CONFIG_GEN_RTC is not set | ||
| 580 | # CONFIG_R3964 is not set | 617 | # CONFIG_R3964 is not set |
| 581 | # CONFIG_RAW_DRIVER is not set | 618 | # CONFIG_RAW_DRIVER is not set |
| 582 | # CONFIG_TCG_TPM is not set | 619 | # CONFIG_TCG_TPM is not set |
| 583 | CONFIG_I2C=m | 620 | CONFIG_I2C=m |
| 584 | CONFIG_I2C_BOARDINFO=y | 621 | CONFIG_I2C_BOARDINFO=y |
| 585 | CONFIG_I2C_CHARDEV=m | 622 | CONFIG_I2C_CHARDEV=m |
| 586 | |||
| 587 | # | ||
| 588 | # I2C Algorithms | ||
| 589 | # | ||
| 590 | CONFIG_I2C_ALGOBIT=m | 623 | CONFIG_I2C_ALGOBIT=m |
| 591 | # CONFIG_I2C_ALGOPCF is not set | ||
| 592 | # CONFIG_I2C_ALGOPCA is not set | ||
| 593 | 624 | ||
| 594 | # | 625 | # |
| 595 | # I2C Hardware Bus support | 626 | # I2C Hardware Bus support |
| @@ -600,27 +631,23 @@ CONFIG_I2C_GPIO=m | |||
| 600 | # CONFIG_I2C_SIMTEC is not set | 631 | # CONFIG_I2C_SIMTEC is not set |
| 601 | # CONFIG_I2C_TAOS_EVM is not set | 632 | # CONFIG_I2C_TAOS_EVM is not set |
| 602 | # CONFIG_I2C_STUB is not set | 633 | # CONFIG_I2C_STUB is not set |
| 634 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 603 | 635 | ||
| 604 | # | 636 | # |
| 605 | # Miscellaneous I2C Chip support | 637 | # Miscellaneous I2C Chip support |
| 606 | # | 638 | # |
| 607 | # CONFIG_SENSORS_DS1337 is not set | ||
| 608 | # CONFIG_SENSORS_DS1374 is not set | ||
| 609 | # CONFIG_DS1682 is not set | 639 | # CONFIG_DS1682 is not set |
| 610 | # CONFIG_SENSORS_EEPROM is not set | 640 | # CONFIG_SENSORS_EEPROM is not set |
| 611 | # CONFIG_SENSORS_PCF8574 is not set | 641 | # CONFIG_SENSORS_PCF8574 is not set |
| 612 | # CONFIG_SENSORS_PCA9539 is not set | 642 | # CONFIG_PCF8575 is not set |
| 613 | # CONFIG_SENSORS_PCF8591 is not set | 643 | # CONFIG_SENSORS_PCF8591 is not set |
| 644 | # CONFIG_TPS65010 is not set | ||
| 614 | # CONFIG_SENSORS_MAX6875 is not set | 645 | # CONFIG_SENSORS_MAX6875 is not set |
| 615 | # CONFIG_SENSORS_TSL2550 is not set | 646 | # CONFIG_SENSORS_TSL2550 is not set |
| 616 | # CONFIG_I2C_DEBUG_CORE is not set | 647 | # CONFIG_I2C_DEBUG_CORE is not set |
| 617 | # CONFIG_I2C_DEBUG_ALGO is not set | 648 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 618 | # CONFIG_I2C_DEBUG_BUS is not set | 649 | # CONFIG_I2C_DEBUG_BUS is not set |
| 619 | # CONFIG_I2C_DEBUG_CHIP is not set | 650 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 620 | |||
| 621 | # | ||
| 622 | # SPI support | ||
| 623 | # | ||
| 624 | CONFIG_SPI=y | 651 | CONFIG_SPI=y |
| 625 | # CONFIG_SPI_DEBUG is not set | 652 | # CONFIG_SPI_DEBUG is not set |
| 626 | CONFIG_SPI_MASTER=y | 653 | CONFIG_SPI_MASTER=y |
| @@ -637,9 +664,27 @@ CONFIG_SPI_ATMEL=y | |||
| 637 | # CONFIG_SPI_AT25 is not set | 664 | # CONFIG_SPI_AT25 is not set |
| 638 | CONFIG_SPI_SPIDEV=m | 665 | CONFIG_SPI_SPIDEV=m |
| 639 | # CONFIG_SPI_TLE62X0 is not set | 666 | # CONFIG_SPI_TLE62X0 is not set |
| 667 | CONFIG_HAVE_GPIO_LIB=y | ||
| 668 | |||
| 669 | # | ||
| 670 | # GPIO Support | ||
| 671 | # | ||
| 672 | # CONFIG_DEBUG_GPIO is not set | ||
| 673 | |||
| 674 | # | ||
| 675 | # I2C GPIO expanders: | ||
| 676 | # | ||
| 677 | # CONFIG_GPIO_PCA953X is not set | ||
| 678 | # CONFIG_GPIO_PCF857X is not set | ||
| 679 | |||
| 680 | # | ||
| 681 | # SPI GPIO expanders: | ||
| 682 | # | ||
| 683 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 640 | # CONFIG_W1 is not set | 684 | # CONFIG_W1 is not set |
| 641 | # CONFIG_POWER_SUPPLY is not set | 685 | # CONFIG_POWER_SUPPLY is not set |
| 642 | # CONFIG_HWMON is not set | 686 | # CONFIG_HWMON is not set |
| 687 | # CONFIG_THERMAL is not set | ||
| 643 | CONFIG_WATCHDOG=y | 688 | CONFIG_WATCHDOG=y |
| 644 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 689 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 645 | 690 | ||
| @@ -659,12 +704,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 659 | # Multifunction device drivers | 704 | # Multifunction device drivers |
| 660 | # | 705 | # |
| 661 | # CONFIG_MFD_SM501 is not set | 706 | # CONFIG_MFD_SM501 is not set |
| 707 | # CONFIG_HTC_PASIC3 is not set | ||
| 662 | 708 | ||
| 663 | # | 709 | # |
| 664 | # Multimedia devices | 710 | # Multimedia devices |
| 665 | # | 711 | # |
| 712 | |||
| 713 | # | ||
| 714 | # Multimedia core support | ||
| 715 | # | ||
| 666 | # CONFIG_VIDEO_DEV is not set | 716 | # CONFIG_VIDEO_DEV is not set |
| 667 | # CONFIG_DVB_CORE is not set | 717 | # CONFIG_DVB_CORE is not set |
| 718 | # CONFIG_VIDEO_MEDIA is not set | ||
| 719 | |||
| 720 | # | ||
| 721 | # Multimedia drivers | ||
| 722 | # | ||
| 668 | # CONFIG_DAB is not set | 723 | # CONFIG_DAB is not set |
| 669 | 724 | ||
| 670 | # | 725 | # |
| @@ -682,8 +737,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 682 | # CONFIG_FB_SYS_FILLRECT is not set | 737 | # CONFIG_FB_SYS_FILLRECT is not set |
| 683 | # CONFIG_FB_SYS_COPYAREA is not set | 738 | # CONFIG_FB_SYS_COPYAREA is not set |
| 684 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 739 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 740 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 685 | # CONFIG_FB_SYS_FOPS is not set | 741 | # CONFIG_FB_SYS_FOPS is not set |
| 686 | CONFIG_FB_DEFERRED_IO=y | ||
| 687 | # CONFIG_FB_SVGALIB is not set | 742 | # CONFIG_FB_SVGALIB is not set |
| 688 | # CONFIG_FB_MACMODES is not set | 743 | # CONFIG_FB_MACMODES is not set |
| 689 | # CONFIG_FB_BACKLIGHT is not set | 744 | # CONFIG_FB_BACKLIGHT is not set |
| @@ -749,7 +804,11 @@ CONFIG_SND_AT73C213_TARGET_BITRATE=48000 | |||
| 749 | # CONFIG_SND_SOC is not set | 804 | # CONFIG_SND_SOC is not set |
| 750 | 805 | ||
| 751 | # | 806 | # |
| 752 | # SoC Audio support for SuperH | 807 | # ALSA SoC audio for Freescale SOCs |
| 808 | # | ||
| 809 | |||
| 810 | # | ||
| 811 | # SoC Audio for the Texas Instruments OMAP | ||
| 753 | # | 812 | # |
| 754 | 813 | ||
| 755 | # | 814 | # |
| @@ -761,14 +820,12 @@ CONFIG_USB_SUPPORT=y | |||
| 761 | # CONFIG_USB_ARCH_HAS_HCD is not set | 820 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 762 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 821 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 763 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 822 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 823 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 824 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 764 | 825 | ||
| 765 | # | 826 | # |
| 766 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 827 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 767 | # | 828 | # |
| 768 | |||
| 769 | # | ||
| 770 | # USB Gadget Support | ||
| 771 | # | ||
| 772 | CONFIG_USB_GADGET=y | 829 | CONFIG_USB_GADGET=y |
| 773 | # CONFIG_USB_GADGET_DEBUG is not set | 830 | # CONFIG_USB_GADGET_DEBUG is not set |
| 774 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 831 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| @@ -781,6 +838,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 781 | # CONFIG_USB_GADGET_NET2280 is not set | 838 | # CONFIG_USB_GADGET_NET2280 is not set |
| 782 | # CONFIG_USB_GADGET_PXA2XX is not set | 839 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 783 | # CONFIG_USB_GADGET_M66592 is not set | 840 | # CONFIG_USB_GADGET_M66592 is not set |
| 841 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 784 | # CONFIG_USB_GADGET_GOKU is not set | 842 | # CONFIG_USB_GADGET_GOKU is not set |
| 785 | # CONFIG_USB_GADGET_LH7A40X is not set | 843 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 786 | # CONFIG_USB_GADGET_OMAP is not set | 844 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -796,6 +854,7 @@ CONFIG_USB_FILE_STORAGE=m | |||
| 796 | # CONFIG_USB_FILE_STORAGE_TEST is not set | 854 | # CONFIG_USB_FILE_STORAGE_TEST is not set |
| 797 | CONFIG_USB_G_SERIAL=m | 855 | CONFIG_USB_G_SERIAL=m |
| 798 | # CONFIG_USB_MIDI_GADGET is not set | 856 | # CONFIG_USB_MIDI_GADGET is not set |
| 857 | # CONFIG_USB_G_PRINTER is not set | ||
| 799 | CONFIG_MMC=m | 858 | CONFIG_MMC=m |
| 800 | # CONFIG_MMC_DEBUG is not set | 859 | # CONFIG_MMC_DEBUG is not set |
| 801 | # CONFIG_MMC_UNSAFE_RESUME is not set | 860 | # CONFIG_MMC_UNSAFE_RESUME is not set |
| @@ -806,17 +865,20 @@ CONFIG_MMC=m | |||
| 806 | CONFIG_MMC_BLOCK=m | 865 | CONFIG_MMC_BLOCK=m |
| 807 | CONFIG_MMC_BLOCK_BOUNCE=y | 866 | CONFIG_MMC_BLOCK_BOUNCE=y |
| 808 | # CONFIG_SDIO_UART is not set | 867 | # CONFIG_SDIO_UART is not set |
| 868 | CONFIG_MMC_TEST=m | ||
| 809 | 869 | ||
| 810 | # | 870 | # |
| 811 | # MMC/SD Host Controller Drivers | 871 | # MMC/SD Host Controller Drivers |
| 812 | # | 872 | # |
| 813 | CONFIG_MMC_SPI=m | 873 | CONFIG_MMC_SPI=m |
| 874 | # CONFIG_MEMSTICK is not set | ||
| 814 | CONFIG_NEW_LEDS=y | 875 | CONFIG_NEW_LEDS=y |
| 815 | CONFIG_LEDS_CLASS=m | 876 | CONFIG_LEDS_CLASS=m |
| 816 | 877 | ||
| 817 | # | 878 | # |
| 818 | # LED drivers | 879 | # LED drivers |
| 819 | # | 880 | # |
| 881 | CONFIG_LEDS_ATMEL_PWM=m | ||
| 820 | CONFIG_LEDS_GPIO=m | 882 | CONFIG_LEDS_GPIO=m |
| 821 | 883 | ||
| 822 | # | 884 | # |
| @@ -825,6 +887,8 @@ CONFIG_LEDS_GPIO=m | |||
| 825 | CONFIG_LEDS_TRIGGERS=y | 887 | CONFIG_LEDS_TRIGGERS=y |
| 826 | CONFIG_LEDS_TRIGGER_TIMER=m | 888 | CONFIG_LEDS_TRIGGER_TIMER=m |
| 827 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | 889 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m |
| 890 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=m | ||
| 891 | # CONFIG_ACCESSIBILITY is not set | ||
| 828 | CONFIG_RTC_LIB=y | 892 | CONFIG_RTC_LIB=y |
| 829 | CONFIG_RTC_CLASS=y | 893 | CONFIG_RTC_CLASS=y |
| 830 | CONFIG_RTC_HCTOSYS=y | 894 | CONFIG_RTC_HCTOSYS=y |
| @@ -853,19 +917,22 @@ CONFIG_RTC_INTF_DEV=y | |||
| 853 | # CONFIG_RTC_DRV_PCF8563 is not set | 917 | # CONFIG_RTC_DRV_PCF8563 is not set |
| 854 | # CONFIG_RTC_DRV_PCF8583 is not set | 918 | # CONFIG_RTC_DRV_PCF8583 is not set |
| 855 | # CONFIG_RTC_DRV_M41T80 is not set | 919 | # CONFIG_RTC_DRV_M41T80 is not set |
| 920 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 856 | 921 | ||
| 857 | # | 922 | # |
| 858 | # SPI RTC drivers | 923 | # SPI RTC drivers |
| 859 | # | 924 | # |
| 860 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 861 | # CONFIG_RTC_DRV_MAX6902 is not set | 925 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 926 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 927 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 862 | 928 | ||
| 863 | # | 929 | # |
| 864 | # Platform RTC drivers | 930 | # Platform RTC drivers |
| 865 | # | 931 | # |
| 932 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 866 | # CONFIG_RTC_DRV_DS1553 is not set | 933 | # CONFIG_RTC_DRV_DS1553 is not set |
| 867 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 868 | # CONFIG_RTC_DRV_DS1742 is not set | 934 | # CONFIG_RTC_DRV_DS1742 is not set |
| 935 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 869 | # CONFIG_RTC_DRV_M48T86 is not set | 936 | # CONFIG_RTC_DRV_M48T86 is not set |
| 870 | # CONFIG_RTC_DRV_M48T59 is not set | 937 | # CONFIG_RTC_DRV_M48T59 is not set |
| 871 | # CONFIG_RTC_DRV_V3020 is not set | 938 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -874,10 +941,6 @@ CONFIG_RTC_INTF_DEV=y | |||
| 874 | # on-CPU RTC drivers | 941 | # on-CPU RTC drivers |
| 875 | # | 942 | # |
| 876 | CONFIG_RTC_DRV_AT32AP700X=y | 943 | CONFIG_RTC_DRV_AT32AP700X=y |
| 877 | |||
| 878 | # | ||
| 879 | # Userspace I/O | ||
| 880 | # | ||
| 881 | # CONFIG_UIO is not set | 944 | # CONFIG_UIO is not set |
| 882 | 945 | ||
| 883 | # | 946 | # |
| @@ -895,14 +958,11 @@ CONFIG_JBD=m | |||
| 895 | # CONFIG_JFS_FS is not set | 958 | # CONFIG_JFS_FS is not set |
| 896 | # CONFIG_FS_POSIX_ACL is not set | 959 | # CONFIG_FS_POSIX_ACL is not set |
| 897 | # CONFIG_XFS_FS is not set | 960 | # CONFIG_XFS_FS is not set |
| 898 | # CONFIG_GFS2_FS is not set | ||
| 899 | # CONFIG_OCFS2_FS is not set | 961 | # CONFIG_OCFS2_FS is not set |
| 900 | CONFIG_MINIX_FS=m | 962 | # CONFIG_DNOTIFY is not set |
| 901 | # CONFIG_ROMFS_FS is not set | ||
| 902 | CONFIG_INOTIFY=y | 963 | CONFIG_INOTIFY=y |
| 903 | CONFIG_INOTIFY_USER=y | 964 | CONFIG_INOTIFY_USER=y |
| 904 | # CONFIG_QUOTA is not set | 965 | # CONFIG_QUOTA is not set |
| 905 | # CONFIG_DNOTIFY is not set | ||
| 906 | # CONFIG_AUTOFS_FS is not set | 966 | # CONFIG_AUTOFS_FS is not set |
| 907 | # CONFIG_AUTOFS4_FS is not set | 967 | # CONFIG_AUTOFS4_FS is not set |
| 908 | CONFIG_FUSE_FS=m | 968 | CONFIG_FUSE_FS=m |
| @@ -957,8 +1017,10 @@ CONFIG_JFFS2_RTIME=y | |||
| 957 | # CONFIG_JFFS2_RUBIN is not set | 1017 | # CONFIG_JFFS2_RUBIN is not set |
| 958 | # CONFIG_CRAMFS is not set | 1018 | # CONFIG_CRAMFS is not set |
| 959 | # CONFIG_VXFS_FS is not set | 1019 | # CONFIG_VXFS_FS is not set |
| 1020 | CONFIG_MINIX_FS=m | ||
| 960 | # CONFIG_HPFS_FS is not set | 1021 | # CONFIG_HPFS_FS is not set |
| 961 | # CONFIG_QNX4FS_FS is not set | 1022 | # CONFIG_QNX4FS_FS is not set |
| 1023 | # CONFIG_ROMFS_FS is not set | ||
| 962 | # CONFIG_SYSV_FS is not set | 1024 | # CONFIG_SYSV_FS is not set |
| 963 | # CONFIG_UFS_FS is not set | 1025 | # CONFIG_UFS_FS is not set |
| 964 | CONFIG_NETWORK_FILESYSTEMS=y | 1026 | CONFIG_NETWORK_FILESYSTEMS=y |
| @@ -966,7 +1028,6 @@ CONFIG_NFS_FS=y | |||
| 966 | CONFIG_NFS_V3=y | 1028 | CONFIG_NFS_V3=y |
| 967 | # CONFIG_NFS_V3_ACL is not set | 1029 | # CONFIG_NFS_V3_ACL is not set |
| 968 | # CONFIG_NFS_V4 is not set | 1030 | # CONFIG_NFS_V4 is not set |
| 969 | # CONFIG_NFS_DIRECTIO is not set | ||
| 970 | # CONFIG_NFSD is not set | 1031 | # CONFIG_NFSD is not set |
| 971 | CONFIG_ROOT_NFS=y | 1032 | CONFIG_ROOT_NFS=y |
| 972 | CONFIG_LOCKD=y | 1033 | CONFIG_LOCKD=y |
| @@ -1028,11 +1089,6 @@ CONFIG_NLS_ISO8859_1=m | |||
| 1028 | # CONFIG_NLS_KOI8_U is not set | 1089 | # CONFIG_NLS_KOI8_U is not set |
| 1029 | CONFIG_NLS_UTF8=m | 1090 | CONFIG_NLS_UTF8=m |
| 1030 | # CONFIG_DLM is not set | 1091 | # CONFIG_DLM is not set |
| 1031 | CONFIG_INSTRUMENTATION=y | ||
| 1032 | CONFIG_PROFILING=y | ||
| 1033 | CONFIG_OPROFILE=m | ||
| 1034 | CONFIG_KPROBES=y | ||
| 1035 | # CONFIG_MARKERS is not set | ||
| 1036 | 1092 | ||
| 1037 | # | 1093 | # |
| 1038 | # Kernel hacking | 1094 | # Kernel hacking |
| @@ -1040,6 +1096,7 @@ CONFIG_KPROBES=y | |||
| 1040 | # CONFIG_PRINTK_TIME is not set | 1096 | # CONFIG_PRINTK_TIME is not set |
| 1041 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1097 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1042 | CONFIG_ENABLE_MUST_CHECK=y | 1098 | CONFIG_ENABLE_MUST_CHECK=y |
| 1099 | CONFIG_FRAME_WARN=1024 | ||
| 1043 | CONFIG_MAGIC_SYSRQ=y | 1100 | CONFIG_MAGIC_SYSRQ=y |
| 1044 | # CONFIG_UNUSED_SYMBOLS is not set | 1101 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1045 | CONFIG_DEBUG_FS=y | 1102 | CONFIG_DEBUG_FS=y |
| @@ -1050,7 +1107,9 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1050 | CONFIG_SCHED_DEBUG=y | 1107 | CONFIG_SCHED_DEBUG=y |
| 1051 | # CONFIG_SCHEDSTATS is not set | 1108 | # CONFIG_SCHEDSTATS is not set |
| 1052 | # CONFIG_TIMER_STATS is not set | 1109 | # CONFIG_TIMER_STATS is not set |
| 1110 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1053 | # CONFIG_SLUB_DEBUG_ON is not set | 1111 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1112 | # CONFIG_SLUB_STATS is not set | ||
| 1054 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1113 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1055 | # CONFIG_RT_MUTEX_TESTER is not set | 1114 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1056 | # CONFIG_DEBUG_SPINLOCK is not set | 1115 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -1064,12 +1123,14 @@ CONFIG_SCHED_DEBUG=y | |||
| 1064 | CONFIG_DEBUG_BUGVERBOSE=y | 1123 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1065 | # CONFIG_DEBUG_INFO is not set | 1124 | # CONFIG_DEBUG_INFO is not set |
| 1066 | # CONFIG_DEBUG_VM is not set | 1125 | # CONFIG_DEBUG_VM is not set |
| 1126 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1067 | # CONFIG_DEBUG_LIST is not set | 1127 | # CONFIG_DEBUG_LIST is not set |
| 1068 | # CONFIG_DEBUG_SG is not set | 1128 | # CONFIG_DEBUG_SG is not set |
| 1069 | CONFIG_FRAME_POINTER=y | 1129 | CONFIG_FRAME_POINTER=y |
| 1070 | CONFIG_FORCED_INLINING=y | ||
| 1071 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1130 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 1072 | # CONFIG_RCU_TORTURE_TEST is not set | 1131 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1132 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
| 1133 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 1073 | # CONFIG_LKDTM is not set | 1134 | # CONFIG_LKDTM is not set |
| 1074 | # CONFIG_FAULT_INJECTION is not set | 1135 | # CONFIG_FAULT_INJECTION is not set |
| 1075 | # CONFIG_SAMPLES is not set | 1136 | # CONFIG_SAMPLES is not set |
| @@ -1081,52 +1142,90 @@ CONFIG_FORCED_INLINING=y | |||
| 1081 | # CONFIG_SECURITY is not set | 1142 | # CONFIG_SECURITY is not set |
| 1082 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1143 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 1083 | CONFIG_CRYPTO=y | 1144 | CONFIG_CRYPTO=y |
| 1145 | |||
| 1146 | # | ||
| 1147 | # Crypto core or helper | ||
| 1148 | # | ||
| 1084 | CONFIG_CRYPTO_ALGAPI=m | 1149 | CONFIG_CRYPTO_ALGAPI=m |
| 1150 | CONFIG_CRYPTO_AEAD=m | ||
| 1085 | CONFIG_CRYPTO_BLKCIPHER=m | 1151 | CONFIG_CRYPTO_BLKCIPHER=m |
| 1086 | CONFIG_CRYPTO_HASH=m | 1152 | CONFIG_CRYPTO_HASH=m |
| 1087 | CONFIG_CRYPTO_MANAGER=m | 1153 | CONFIG_CRYPTO_MANAGER=m |
| 1154 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1155 | # CONFIG_CRYPTO_NULL is not set | ||
| 1156 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1157 | CONFIG_CRYPTO_AUTHENC=m | ||
| 1158 | # CONFIG_CRYPTO_TEST is not set | ||
| 1159 | |||
| 1160 | # | ||
| 1161 | # Authenticated Encryption with Associated Data | ||
| 1162 | # | ||
| 1163 | # CONFIG_CRYPTO_CCM is not set | ||
| 1164 | # CONFIG_CRYPTO_GCM is not set | ||
| 1165 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1166 | |||
| 1167 | # | ||
| 1168 | # Block modes | ||
| 1169 | # | ||
| 1170 | CONFIG_CRYPTO_CBC=m | ||
| 1171 | # CONFIG_CRYPTO_CTR is not set | ||
| 1172 | # CONFIG_CRYPTO_CTS is not set | ||
| 1173 | # CONFIG_CRYPTO_ECB is not set | ||
| 1174 | # CONFIG_CRYPTO_LRW is not set | ||
| 1175 | # CONFIG_CRYPTO_PCBC is not set | ||
| 1176 | # CONFIG_CRYPTO_XTS is not set | ||
| 1177 | |||
| 1178 | # | ||
| 1179 | # Hash modes | ||
| 1180 | # | ||
| 1088 | CONFIG_CRYPTO_HMAC=m | 1181 | CONFIG_CRYPTO_HMAC=m |
| 1089 | # CONFIG_CRYPTO_XCBC is not set | 1182 | # CONFIG_CRYPTO_XCBC is not set |
| 1090 | # CONFIG_CRYPTO_NULL is not set | 1183 | |
| 1184 | # | ||
| 1185 | # Digest | ||
| 1186 | # | ||
| 1187 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1091 | # CONFIG_CRYPTO_MD4 is not set | 1188 | # CONFIG_CRYPTO_MD4 is not set |
| 1092 | CONFIG_CRYPTO_MD5=m | 1189 | CONFIG_CRYPTO_MD5=m |
| 1190 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1093 | CONFIG_CRYPTO_SHA1=m | 1191 | CONFIG_CRYPTO_SHA1=m |
| 1094 | # CONFIG_CRYPTO_SHA256 is not set | 1192 | # CONFIG_CRYPTO_SHA256 is not set |
| 1095 | # CONFIG_CRYPTO_SHA512 is not set | 1193 | # CONFIG_CRYPTO_SHA512 is not set |
| 1096 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1097 | # CONFIG_CRYPTO_TGR192 is not set | 1194 | # CONFIG_CRYPTO_TGR192 is not set |
| 1098 | # CONFIG_CRYPTO_GF128MUL is not set | 1195 | # CONFIG_CRYPTO_WP512 is not set |
| 1099 | # CONFIG_CRYPTO_ECB is not set | 1196 | |
| 1100 | CONFIG_CRYPTO_CBC=m | 1197 | # |
| 1101 | # CONFIG_CRYPTO_PCBC is not set | 1198 | # Ciphers |
| 1102 | # CONFIG_CRYPTO_LRW is not set | 1199 | # |
| 1103 | # CONFIG_CRYPTO_XTS is not set | ||
| 1104 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1105 | CONFIG_CRYPTO_DES=m | ||
| 1106 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1107 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1108 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1109 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1110 | # CONFIG_CRYPTO_AES is not set | 1200 | # CONFIG_CRYPTO_AES is not set |
| 1201 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1202 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1203 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1204 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1111 | # CONFIG_CRYPTO_CAST5 is not set | 1205 | # CONFIG_CRYPTO_CAST5 is not set |
| 1112 | # CONFIG_CRYPTO_CAST6 is not set | 1206 | # CONFIG_CRYPTO_CAST6 is not set |
| 1113 | # CONFIG_CRYPTO_TEA is not set | 1207 | CONFIG_CRYPTO_DES=m |
| 1114 | # CONFIG_CRYPTO_ARC4 is not set | 1208 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1115 | # CONFIG_CRYPTO_KHAZAD is not set | 1209 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1116 | # CONFIG_CRYPTO_ANUBIS is not set | 1210 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1117 | # CONFIG_CRYPTO_SEED is not set | 1211 | # CONFIG_CRYPTO_SEED is not set |
| 1212 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1213 | # CONFIG_CRYPTO_TEA is not set | ||
| 1214 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1215 | |||
| 1216 | # | ||
| 1217 | # Compression | ||
| 1218 | # | ||
| 1118 | CONFIG_CRYPTO_DEFLATE=m | 1219 | CONFIG_CRYPTO_DEFLATE=m |
| 1119 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1220 | # CONFIG_CRYPTO_LZO is not set |
| 1120 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1121 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1122 | # CONFIG_CRYPTO_TEST is not set | ||
| 1123 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1124 | # CONFIG_CRYPTO_HW is not set | 1221 | # CONFIG_CRYPTO_HW is not set |
| 1125 | 1222 | ||
| 1126 | # | 1223 | # |
| 1127 | # Library routines | 1224 | # Library routines |
| 1128 | # | 1225 | # |
| 1129 | CONFIG_BITREVERSE=y | 1226 | CONFIG_BITREVERSE=y |
| 1227 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1228 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 1130 | CONFIG_CRC_CCITT=m | 1229 | CONFIG_CRC_CCITT=m |
| 1131 | # CONFIG_CRC16 is not set | 1230 | # CONFIG_CRC16 is not set |
| 1132 | CONFIG_CRC_ITU_T=m | 1231 | CONFIG_CRC_ITU_T=m |
diff --git a/arch/avr32/configs/atstk1003_defconfig b/arch/avr32/configs/atstk1003_defconfig index 45e23e03f074..5a4ae6b5d28f 100644 --- a/arch/avr32/configs/atstk1003_defconfig +++ b/arch/avr32/configs/atstk1003_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 22:54:34 2008 | 4 | # Mon May 26 13:33:05 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -39,17 +39,15 @@ CONFIG_BSD_PROCESS_ACCT_V3=y | |||
| 39 | CONFIG_TASKSTATS=y | 39 | CONFIG_TASKSTATS=y |
| 40 | CONFIG_TASK_DELAY_ACCT=y | 40 | CONFIG_TASK_DELAY_ACCT=y |
| 41 | # CONFIG_TASK_XACCT is not set | 41 | # CONFIG_TASK_XACCT is not set |
| 42 | # CONFIG_USER_NS is not set | ||
| 43 | # CONFIG_PID_NS is not set | ||
| 44 | CONFIG_AUDIT=y | 42 | CONFIG_AUDIT=y |
| 45 | # CONFIG_IKCONFIG is not set | 43 | # CONFIG_IKCONFIG is not set |
| 46 | CONFIG_LOG_BUF_SHIFT=14 | 44 | CONFIG_LOG_BUF_SHIFT=14 |
| 47 | # CONFIG_CGROUPS is not set | 45 | # CONFIG_CGROUPS is not set |
| 48 | CONFIG_FAIR_GROUP_SCHED=y | 46 | # CONFIG_GROUP_SCHED is not set |
| 49 | CONFIG_FAIR_USER_SCHED=y | ||
| 50 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
| 51 | CONFIG_SYSFS_DEPRECATED=y | 47 | CONFIG_SYSFS_DEPRECATED=y |
| 48 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 52 | CONFIG_RELAY=y | 49 | CONFIG_RELAY=y |
| 50 | # CONFIG_NAMESPACES is not set | ||
| 53 | CONFIG_BLK_DEV_INITRD=y | 51 | CONFIG_BLK_DEV_INITRD=y |
| 54 | CONFIG_INITRAMFS_SOURCE="" | 52 | CONFIG_INITRAMFS_SOURCE="" |
| 55 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 53 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| @@ -63,11 +61,13 @@ CONFIG_HOTPLUG=y | |||
| 63 | CONFIG_PRINTK=y | 61 | CONFIG_PRINTK=y |
| 64 | CONFIG_BUG=y | 62 | CONFIG_BUG=y |
| 65 | CONFIG_ELF_CORE=y | 63 | CONFIG_ELF_CORE=y |
| 64 | # CONFIG_COMPAT_BRK is not set | ||
| 66 | # CONFIG_BASE_FULL is not set | 65 | # CONFIG_BASE_FULL is not set |
| 67 | CONFIG_FUTEX=y | 66 | CONFIG_FUTEX=y |
| 68 | CONFIG_ANON_INODES=y | 67 | CONFIG_ANON_INODES=y |
| 69 | CONFIG_EPOLL=y | 68 | CONFIG_EPOLL=y |
| 70 | CONFIG_SIGNALFD=y | 69 | CONFIG_SIGNALFD=y |
| 70 | CONFIG_TIMERFD=y | ||
| 71 | CONFIG_EVENTFD=y | 71 | CONFIG_EVENTFD=y |
| 72 | CONFIG_SHMEM=y | 72 | CONFIG_SHMEM=y |
| 73 | CONFIG_VM_EVENT_COUNTERS=y | 73 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -75,11 +75,20 @@ CONFIG_VM_EVENT_COUNTERS=y | |||
| 75 | # CONFIG_SLAB is not set | 75 | # CONFIG_SLAB is not set |
| 76 | CONFIG_SLUB=y | 76 | CONFIG_SLUB=y |
| 77 | # CONFIG_SLOB is not set | 77 | # CONFIG_SLOB is not set |
| 78 | CONFIG_SLABINFO=y | 78 | CONFIG_PROFILING=y |
| 79 | # CONFIG_MARKERS is not set | ||
| 80 | CONFIG_OPROFILE=m | ||
| 81 | CONFIG_HAVE_OPROFILE=y | ||
| 82 | CONFIG_KPROBES=y | ||
| 83 | CONFIG_HAVE_KPROBES=y | ||
| 84 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 85 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 86 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 79 | CONFIG_RT_MUTEXES=y | 87 | CONFIG_RT_MUTEXES=y |
| 80 | # CONFIG_TINY_SHMEM is not set | 88 | # CONFIG_TINY_SHMEM is not set |
| 81 | CONFIG_BASE_SMALL=1 | 89 | CONFIG_BASE_SMALL=1 |
| 82 | CONFIG_MODULES=y | 90 | CONFIG_MODULES=y |
| 91 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 83 | CONFIG_MODULE_UNLOAD=y | 92 | CONFIG_MODULE_UNLOAD=y |
| 84 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 93 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 85 | # CONFIG_MODVERSIONS is not set | 94 | # CONFIG_MODVERSIONS is not set |
| @@ -103,10 +112,15 @@ CONFIG_IOSCHED_CFQ=y | |||
| 103 | CONFIG_DEFAULT_CFQ=y | 112 | CONFIG_DEFAULT_CFQ=y |
| 104 | # CONFIG_DEFAULT_NOOP is not set | 113 | # CONFIG_DEFAULT_NOOP is not set |
| 105 | CONFIG_DEFAULT_IOSCHED="cfq" | 114 | CONFIG_DEFAULT_IOSCHED="cfq" |
| 115 | CONFIG_CLASSIC_RCU=y | ||
| 106 | 116 | ||
| 107 | # | 117 | # |
| 108 | # System Type and features | 118 | # System Type and features |
| 109 | # | 119 | # |
| 120 | CONFIG_TICK_ONESHOT=y | ||
| 121 | CONFIG_NO_HZ=y | ||
| 122 | CONFIG_HIGH_RES_TIMERS=y | ||
| 123 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 110 | CONFIG_SUBARCH_AVR32B=y | 124 | CONFIG_SUBARCH_AVR32B=y |
| 111 | CONFIG_MMU=y | 125 | CONFIG_MMU=y |
| 112 | CONFIG_PERFORMANCE_COUNTERS=y | 126 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -152,16 +166,19 @@ CONFIG_FLATMEM=y | |||
| 152 | CONFIG_FLAT_NODE_MEM_MAP=y | 166 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 153 | # CONFIG_SPARSEMEM_STATIC is not set | 167 | # CONFIG_SPARSEMEM_STATIC is not set |
| 154 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 168 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 169 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 155 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 170 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 156 | # CONFIG_RESOURCES_64BIT is not set | 171 | # CONFIG_RESOURCES_64BIT is not set |
| 157 | CONFIG_ZONE_DMA_FLAG=0 | 172 | CONFIG_ZONE_DMA_FLAG=0 |
| 158 | CONFIG_VIRT_TO_BUS=y | 173 | CONFIG_VIRT_TO_BUS=y |
| 159 | # CONFIG_OWNERSHIP_TRACE is not set | 174 | # CONFIG_OWNERSHIP_TRACE is not set |
| 175 | CONFIG_NMI_DEBUGGING=y | ||
| 160 | # CONFIG_HZ_100 is not set | 176 | # CONFIG_HZ_100 is not set |
| 161 | CONFIG_HZ_250=y | 177 | CONFIG_HZ_250=y |
| 162 | # CONFIG_HZ_300 is not set | 178 | # CONFIG_HZ_300 is not set |
| 163 | # CONFIG_HZ_1000 is not set | 179 | # CONFIG_HZ_1000 is not set |
| 164 | CONFIG_HZ=250 | 180 | CONFIG_HZ=250 |
| 181 | # CONFIG_SCHED_HRTICK is not set | ||
| 165 | CONFIG_CMDLINE="" | 182 | CONFIG_CMDLINE="" |
| 166 | 183 | ||
| 167 | # | 184 | # |
| @@ -175,9 +192,10 @@ CONFIG_CPU_FREQ=y | |||
| 175 | CONFIG_CPU_FREQ_TABLE=y | 192 | CONFIG_CPU_FREQ_TABLE=y |
| 176 | # CONFIG_CPU_FREQ_DEBUG is not set | 193 | # CONFIG_CPU_FREQ_DEBUG is not set |
| 177 | # CONFIG_CPU_FREQ_STAT is not set | 194 | # CONFIG_CPU_FREQ_STAT is not set |
| 178 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
| 196 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 179 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 180 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 198 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
| 181 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 199 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| 182 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 200 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 183 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 201 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| @@ -234,8 +252,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 234 | CONFIG_DEFAULT_TCP_CONG="cubic" | 252 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 235 | # CONFIG_TCP_MD5SIG is not set | 253 | # CONFIG_TCP_MD5SIG is not set |
| 236 | # CONFIG_IPV6 is not set | 254 | # CONFIG_IPV6 is not set |
| 237 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 238 | # CONFIG_INET6_TUNNEL is not set | ||
| 239 | # CONFIG_NETWORK_SECMARK is not set | 255 | # CONFIG_NETWORK_SECMARK is not set |
| 240 | # CONFIG_NETFILTER is not set | 256 | # CONFIG_NETFILTER is not set |
| 241 | # CONFIG_IP_DCCP is not set | 257 | # CONFIG_IP_DCCP is not set |
| @@ -260,6 +276,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 260 | # CONFIG_NET_PKTGEN is not set | 276 | # CONFIG_NET_PKTGEN is not set |
| 261 | # CONFIG_NET_TCPPROBE is not set | 277 | # CONFIG_NET_TCPPROBE is not set |
| 262 | # CONFIG_HAMRADIO is not set | 278 | # CONFIG_HAMRADIO is not set |
| 279 | # CONFIG_CAN is not set | ||
| 263 | # CONFIG_IRDA is not set | 280 | # CONFIG_IRDA is not set |
| 264 | # CONFIG_BT is not set | 281 | # CONFIG_BT is not set |
| 265 | # CONFIG_AF_RXRPC is not set | 282 | # CONFIG_AF_RXRPC is not set |
| @@ -295,6 +312,7 @@ CONFIG_MTD=y | |||
| 295 | CONFIG_MTD_PARTITIONS=y | 312 | CONFIG_MTD_PARTITIONS=y |
| 296 | # CONFIG_MTD_REDBOOT_PARTS is not set | 313 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 297 | CONFIG_MTD_CMDLINE_PARTS=y | 314 | CONFIG_MTD_CMDLINE_PARTS=y |
| 315 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 298 | 316 | ||
| 299 | # | 317 | # |
| 300 | # User Modules And Translation Layers | 318 | # User Modules And Translation Layers |
| @@ -349,6 +367,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 349 | # | 367 | # |
| 350 | CONFIG_MTD_DATAFLASH=m | 368 | CONFIG_MTD_DATAFLASH=m |
| 351 | CONFIG_MTD_M25P80=m | 369 | CONFIG_MTD_M25P80=m |
| 370 | CONFIG_M25PXX_USE_FAST_READ=y | ||
| 352 | # CONFIG_MTD_SLRAM is not set | 371 | # CONFIG_MTD_SLRAM is not set |
| 353 | # CONFIG_MTD_PHRAM is not set | 372 | # CONFIG_MTD_PHRAM is not set |
| 354 | # CONFIG_MTD_MTDRAM is not set | 373 | # CONFIG_MTD_MTDRAM is not set |
| @@ -376,13 +395,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 376 | CONFIG_BLK_DEV_RAM=m | 395 | CONFIG_BLK_DEV_RAM=m |
| 377 | CONFIG_BLK_DEV_RAM_COUNT=16 | 396 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 378 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 397 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 379 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 398 | # CONFIG_BLK_DEV_XIP is not set |
| 380 | # CONFIG_CDROM_PKTCDVD is not set | 399 | # CONFIG_CDROM_PKTCDVD is not set |
| 381 | # CONFIG_ATA_OVER_ETH is not set | 400 | # CONFIG_ATA_OVER_ETH is not set |
| 382 | CONFIG_MISC_DEVICES=y | 401 | CONFIG_MISC_DEVICES=y |
| 402 | CONFIG_ATMEL_PWM=m | ||
| 403 | CONFIG_ATMEL_TCLIB=y | ||
| 404 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
| 405 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
| 383 | # CONFIG_EEPROM_93CX6 is not set | 406 | # CONFIG_EEPROM_93CX6 is not set |
| 384 | CONFIG_ATMEL_SSC=m | 407 | CONFIG_ATMEL_SSC=m |
| 385 | # CONFIG_IDE is not set | 408 | # CONFIG_ENCLOSURE_SERVICES is not set |
| 409 | # CONFIG_HAVE_IDE is not set | ||
| 386 | 410 | ||
| 387 | # | 411 | # |
| 388 | # SCSI device support | 412 | # SCSI device support |
| @@ -427,6 +451,9 @@ CONFIG_SCSI_LOWLEVEL=y | |||
| 427 | # CONFIG_SCSI_DEBUG is not set | 451 | # CONFIG_SCSI_DEBUG is not set |
| 428 | CONFIG_ATA=m | 452 | CONFIG_ATA=m |
| 429 | # CONFIG_ATA_NONSTANDARD is not set | 453 | # CONFIG_ATA_NONSTANDARD is not set |
| 454 | # CONFIG_SATA_PMP is not set | ||
| 455 | CONFIG_ATA_SFF=y | ||
| 456 | # CONFIG_SATA_MV is not set | ||
| 430 | CONFIG_PATA_AT32=m | 457 | CONFIG_PATA_AT32=m |
| 431 | # CONFIG_PATA_PLATFORM is not set | 458 | # CONFIG_PATA_PLATFORM is not set |
| 432 | # CONFIG_MD is not set | 459 | # CONFIG_MD is not set |
| @@ -447,6 +474,7 @@ CONFIG_NETDEVICES=y | |||
| 447 | # | 474 | # |
| 448 | # CONFIG_WLAN_PRE80211 is not set | 475 | # CONFIG_WLAN_PRE80211 is not set |
| 449 | # CONFIG_WLAN_80211 is not set | 476 | # CONFIG_WLAN_80211 is not set |
| 477 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 450 | # CONFIG_WAN is not set | 478 | # CONFIG_WAN is not set |
| 451 | CONFIG_PPP=m | 479 | CONFIG_PPP=m |
| 452 | # CONFIG_PPP_MULTILINK is not set | 480 | # CONFIG_PPP_MULTILINK is not set |
| @@ -460,7 +488,6 @@ CONFIG_PPP_BSDCOMP=m | |||
| 460 | # CONFIG_PPPOL2TP is not set | 488 | # CONFIG_PPPOL2TP is not set |
| 461 | # CONFIG_SLIP is not set | 489 | # CONFIG_SLIP is not set |
| 462 | CONFIG_SLHC=m | 490 | CONFIG_SLHC=m |
| 463 | # CONFIG_SHAPER is not set | ||
| 464 | # CONFIG_NETCONSOLE is not set | 491 | # CONFIG_NETCONSOLE is not set |
| 465 | # CONFIG_NETPOLL is not set | 492 | # CONFIG_NETPOLL is not set |
| 466 | # CONFIG_NET_POLL_CONTROLLER is not set | 493 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -516,6 +543,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 516 | # Character devices | 543 | # Character devices |
| 517 | # | 544 | # |
| 518 | # CONFIG_VT is not set | 545 | # CONFIG_VT is not set |
| 546 | # CONFIG_DEVKMEM is not set | ||
| 519 | # CONFIG_SERIAL_NONSTANDARD is not set | 547 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 520 | 548 | ||
| 521 | # | 549 | # |
| @@ -528,6 +556,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 528 | # | 556 | # |
| 529 | CONFIG_SERIAL_ATMEL=y | 557 | CONFIG_SERIAL_ATMEL=y |
| 530 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 558 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 559 | CONFIG_SERIAL_ATMEL_PDC=y | ||
| 531 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 560 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 532 | CONFIG_SERIAL_CORE=y | 561 | CONFIG_SERIAL_CORE=y |
| 533 | CONFIG_SERIAL_CORE_CONSOLE=y | 562 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -535,21 +564,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 535 | # CONFIG_LEGACY_PTYS is not set | 564 | # CONFIG_LEGACY_PTYS is not set |
| 536 | # CONFIG_IPMI_HANDLER is not set | 565 | # CONFIG_IPMI_HANDLER is not set |
| 537 | # CONFIG_HW_RANDOM is not set | 566 | # CONFIG_HW_RANDOM is not set |
| 538 | # CONFIG_RTC is not set | ||
| 539 | # CONFIG_GEN_RTC is not set | ||
| 540 | # CONFIG_R3964 is not set | 567 | # CONFIG_R3964 is not set |
| 541 | # CONFIG_RAW_DRIVER is not set | 568 | # CONFIG_RAW_DRIVER is not set |
| 542 | # CONFIG_TCG_TPM is not set | 569 | # CONFIG_TCG_TPM is not set |
| 543 | CONFIG_I2C=m | 570 | CONFIG_I2C=m |
| 544 | CONFIG_I2C_BOARDINFO=y | 571 | CONFIG_I2C_BOARDINFO=y |
| 545 | CONFIG_I2C_CHARDEV=m | 572 | CONFIG_I2C_CHARDEV=m |
| 546 | |||
| 547 | # | ||
| 548 | # I2C Algorithms | ||
| 549 | # | ||
| 550 | CONFIG_I2C_ALGOBIT=m | 573 | CONFIG_I2C_ALGOBIT=m |
| 551 | # CONFIG_I2C_ALGOPCF is not set | ||
| 552 | # CONFIG_I2C_ALGOPCA is not set | ||
| 553 | 574 | ||
| 554 | # | 575 | # |
| 555 | # I2C Hardware Bus support | 576 | # I2C Hardware Bus support |
| @@ -560,27 +581,23 @@ CONFIG_I2C_GPIO=m | |||
| 560 | # CONFIG_I2C_SIMTEC is not set | 581 | # CONFIG_I2C_SIMTEC is not set |
| 561 | # CONFIG_I2C_TAOS_EVM is not set | 582 | # CONFIG_I2C_TAOS_EVM is not set |
| 562 | # CONFIG_I2C_STUB is not set | 583 | # CONFIG_I2C_STUB is not set |
| 584 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 563 | 585 | ||
| 564 | # | 586 | # |
| 565 | # Miscellaneous I2C Chip support | 587 | # Miscellaneous I2C Chip support |
| 566 | # | 588 | # |
| 567 | # CONFIG_SENSORS_DS1337 is not set | ||
| 568 | # CONFIG_SENSORS_DS1374 is not set | ||
| 569 | # CONFIG_DS1682 is not set | 589 | # CONFIG_DS1682 is not set |
| 570 | # CONFIG_SENSORS_EEPROM is not set | 590 | # CONFIG_SENSORS_EEPROM is not set |
| 571 | # CONFIG_SENSORS_PCF8574 is not set | 591 | # CONFIG_SENSORS_PCF8574 is not set |
| 572 | # CONFIG_SENSORS_PCA9539 is not set | 592 | # CONFIG_PCF8575 is not set |
| 573 | # CONFIG_SENSORS_PCF8591 is not set | 593 | # CONFIG_SENSORS_PCF8591 is not set |
| 594 | # CONFIG_TPS65010 is not set | ||
| 574 | # CONFIG_SENSORS_MAX6875 is not set | 595 | # CONFIG_SENSORS_MAX6875 is not set |
| 575 | # CONFIG_SENSORS_TSL2550 is not set | 596 | # CONFIG_SENSORS_TSL2550 is not set |
| 576 | # CONFIG_I2C_DEBUG_CORE is not set | 597 | # CONFIG_I2C_DEBUG_CORE is not set |
| 577 | # CONFIG_I2C_DEBUG_ALGO is not set | 598 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 578 | # CONFIG_I2C_DEBUG_BUS is not set | 599 | # CONFIG_I2C_DEBUG_BUS is not set |
| 579 | # CONFIG_I2C_DEBUG_CHIP is not set | 600 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 580 | |||
| 581 | # | ||
| 582 | # SPI support | ||
| 583 | # | ||
| 584 | CONFIG_SPI=y | 601 | CONFIG_SPI=y |
| 585 | # CONFIG_SPI_DEBUG is not set | 602 | # CONFIG_SPI_DEBUG is not set |
| 586 | CONFIG_SPI_MASTER=y | 603 | CONFIG_SPI_MASTER=y |
| @@ -597,9 +614,27 @@ CONFIG_SPI_ATMEL=y | |||
| 597 | # CONFIG_SPI_AT25 is not set | 614 | # CONFIG_SPI_AT25 is not set |
| 598 | CONFIG_SPI_SPIDEV=m | 615 | CONFIG_SPI_SPIDEV=m |
| 599 | # CONFIG_SPI_TLE62X0 is not set | 616 | # CONFIG_SPI_TLE62X0 is not set |
| 617 | CONFIG_HAVE_GPIO_LIB=y | ||
| 618 | |||
| 619 | # | ||
| 620 | # GPIO Support | ||
| 621 | # | ||
| 622 | # CONFIG_DEBUG_GPIO is not set | ||
| 623 | |||
| 624 | # | ||
| 625 | # I2C GPIO expanders: | ||
| 626 | # | ||
| 627 | # CONFIG_GPIO_PCA953X is not set | ||
| 628 | # CONFIG_GPIO_PCF857X is not set | ||
| 629 | |||
| 630 | # | ||
| 631 | # SPI GPIO expanders: | ||
| 632 | # | ||
| 633 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 600 | # CONFIG_W1 is not set | 634 | # CONFIG_W1 is not set |
| 601 | # CONFIG_POWER_SUPPLY is not set | 635 | # CONFIG_POWER_SUPPLY is not set |
| 602 | # CONFIG_HWMON is not set | 636 | # CONFIG_HWMON is not set |
| 637 | # CONFIG_THERMAL is not set | ||
| 603 | CONFIG_WATCHDOG=y | 638 | CONFIG_WATCHDOG=y |
| 604 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 639 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 605 | 640 | ||
| @@ -619,12 +654,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 619 | # Multifunction device drivers | 654 | # Multifunction device drivers |
| 620 | # | 655 | # |
| 621 | # CONFIG_MFD_SM501 is not set | 656 | # CONFIG_MFD_SM501 is not set |
| 657 | # CONFIG_HTC_PASIC3 is not set | ||
| 622 | 658 | ||
| 623 | # | 659 | # |
| 624 | # Multimedia devices | 660 | # Multimedia devices |
| 625 | # | 661 | # |
| 662 | |||
| 663 | # | ||
| 664 | # Multimedia core support | ||
| 665 | # | ||
| 626 | # CONFIG_VIDEO_DEV is not set | 666 | # CONFIG_VIDEO_DEV is not set |
| 627 | # CONFIG_DVB_CORE is not set | 667 | # CONFIG_DVB_CORE is not set |
| 668 | # CONFIG_VIDEO_MEDIA is not set | ||
| 669 | |||
| 670 | # | ||
| 671 | # Multimedia drivers | ||
| 672 | # | ||
| 628 | # CONFIG_DAB is not set | 673 | # CONFIG_DAB is not set |
| 629 | 674 | ||
| 630 | # | 675 | # |
| @@ -682,7 +727,11 @@ CONFIG_SND_AT73C213_TARGET_BITRATE=48000 | |||
| 682 | # CONFIG_SND_SOC is not set | 727 | # CONFIG_SND_SOC is not set |
| 683 | 728 | ||
| 684 | # | 729 | # |
| 685 | # SoC Audio support for SuperH | 730 | # ALSA SoC audio for Freescale SOCs |
| 731 | # | ||
| 732 | |||
| 733 | # | ||
| 734 | # SoC Audio for the Texas Instruments OMAP | ||
| 686 | # | 735 | # |
| 687 | 736 | ||
| 688 | # | 737 | # |
| @@ -694,14 +743,12 @@ CONFIG_USB_SUPPORT=y | |||
| 694 | # CONFIG_USB_ARCH_HAS_HCD is not set | 743 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 695 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 744 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 696 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 745 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 746 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 747 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 697 | 748 | ||
| 698 | # | 749 | # |
| 699 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 750 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 700 | # | 751 | # |
| 701 | |||
| 702 | # | ||
| 703 | # USB Gadget Support | ||
| 704 | # | ||
| 705 | CONFIG_USB_GADGET=y | 752 | CONFIG_USB_GADGET=y |
| 706 | # CONFIG_USB_GADGET_DEBUG is not set | 753 | # CONFIG_USB_GADGET_DEBUG is not set |
| 707 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 754 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| @@ -714,6 +761,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 714 | # CONFIG_USB_GADGET_NET2280 is not set | 761 | # CONFIG_USB_GADGET_NET2280 is not set |
| 715 | # CONFIG_USB_GADGET_PXA2XX is not set | 762 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 716 | # CONFIG_USB_GADGET_M66592 is not set | 763 | # CONFIG_USB_GADGET_M66592 is not set |
| 764 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 717 | # CONFIG_USB_GADGET_GOKU is not set | 765 | # CONFIG_USB_GADGET_GOKU is not set |
| 718 | # CONFIG_USB_GADGET_LH7A40X is not set | 766 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 719 | # CONFIG_USB_GADGET_OMAP is not set | 767 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -729,6 +777,7 @@ CONFIG_USB_FILE_STORAGE=m | |||
| 729 | # CONFIG_USB_FILE_STORAGE_TEST is not set | 777 | # CONFIG_USB_FILE_STORAGE_TEST is not set |
| 730 | CONFIG_USB_G_SERIAL=m | 778 | CONFIG_USB_G_SERIAL=m |
| 731 | # CONFIG_USB_MIDI_GADGET is not set | 779 | # CONFIG_USB_MIDI_GADGET is not set |
| 780 | # CONFIG_USB_G_PRINTER is not set | ||
| 732 | CONFIG_MMC=m | 781 | CONFIG_MMC=m |
| 733 | # CONFIG_MMC_DEBUG is not set | 782 | # CONFIG_MMC_DEBUG is not set |
| 734 | # CONFIG_MMC_UNSAFE_RESUME is not set | 783 | # CONFIG_MMC_UNSAFE_RESUME is not set |
| @@ -739,17 +788,20 @@ CONFIG_MMC=m | |||
| 739 | CONFIG_MMC_BLOCK=m | 788 | CONFIG_MMC_BLOCK=m |
| 740 | # CONFIG_MMC_BLOCK_BOUNCE is not set | 789 | # CONFIG_MMC_BLOCK_BOUNCE is not set |
| 741 | # CONFIG_SDIO_UART is not set | 790 | # CONFIG_SDIO_UART is not set |
| 791 | # CONFIG_MMC_TEST is not set | ||
| 742 | 792 | ||
| 743 | # | 793 | # |
| 744 | # MMC/SD Host Controller Drivers | 794 | # MMC/SD Host Controller Drivers |
| 745 | # | 795 | # |
| 746 | CONFIG_MMC_SPI=m | 796 | CONFIG_MMC_SPI=m |
| 797 | # CONFIG_MEMSTICK is not set | ||
| 747 | CONFIG_NEW_LEDS=y | 798 | CONFIG_NEW_LEDS=y |
| 748 | CONFIG_LEDS_CLASS=y | 799 | CONFIG_LEDS_CLASS=y |
| 749 | 800 | ||
| 750 | # | 801 | # |
| 751 | # LED drivers | 802 | # LED drivers |
| 752 | # | 803 | # |
| 804 | CONFIG_LEDS_ATMEL_PWM=m | ||
| 753 | CONFIG_LEDS_GPIO=y | 805 | CONFIG_LEDS_GPIO=y |
| 754 | 806 | ||
| 755 | # | 807 | # |
| @@ -758,6 +810,8 @@ CONFIG_LEDS_GPIO=y | |||
| 758 | CONFIG_LEDS_TRIGGERS=y | 810 | CONFIG_LEDS_TRIGGERS=y |
| 759 | CONFIG_LEDS_TRIGGER_TIMER=y | 811 | CONFIG_LEDS_TRIGGER_TIMER=y |
| 760 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 812 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
| 813 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 814 | # CONFIG_ACCESSIBILITY is not set | ||
| 761 | CONFIG_RTC_LIB=y | 815 | CONFIG_RTC_LIB=y |
| 762 | CONFIG_RTC_CLASS=y | 816 | CONFIG_RTC_CLASS=y |
| 763 | CONFIG_RTC_HCTOSYS=y | 817 | CONFIG_RTC_HCTOSYS=y |
| @@ -786,19 +840,22 @@ CONFIG_RTC_INTF_DEV=y | |||
| 786 | # CONFIG_RTC_DRV_PCF8563 is not set | 840 | # CONFIG_RTC_DRV_PCF8563 is not set |
| 787 | # CONFIG_RTC_DRV_PCF8583 is not set | 841 | # CONFIG_RTC_DRV_PCF8583 is not set |
| 788 | # CONFIG_RTC_DRV_M41T80 is not set | 842 | # CONFIG_RTC_DRV_M41T80 is not set |
| 843 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 789 | 844 | ||
| 790 | # | 845 | # |
| 791 | # SPI RTC drivers | 846 | # SPI RTC drivers |
| 792 | # | 847 | # |
| 793 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 794 | # CONFIG_RTC_DRV_MAX6902 is not set | 848 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 849 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 850 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 795 | 851 | ||
| 796 | # | 852 | # |
| 797 | # Platform RTC drivers | 853 | # Platform RTC drivers |
| 798 | # | 854 | # |
| 855 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 799 | # CONFIG_RTC_DRV_DS1553 is not set | 856 | # CONFIG_RTC_DRV_DS1553 is not set |
| 800 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 801 | # CONFIG_RTC_DRV_DS1742 is not set | 857 | # CONFIG_RTC_DRV_DS1742 is not set |
| 858 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 802 | # CONFIG_RTC_DRV_M48T86 is not set | 859 | # CONFIG_RTC_DRV_M48T86 is not set |
| 803 | # CONFIG_RTC_DRV_M48T59 is not set | 860 | # CONFIG_RTC_DRV_M48T59 is not set |
| 804 | # CONFIG_RTC_DRV_V3020 is not set | 861 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -807,11 +864,8 @@ CONFIG_RTC_INTF_DEV=y | |||
| 807 | # on-CPU RTC drivers | 864 | # on-CPU RTC drivers |
| 808 | # | 865 | # |
| 809 | CONFIG_RTC_DRV_AT32AP700X=y | 866 | CONFIG_RTC_DRV_AT32AP700X=y |
| 810 | |||
| 811 | # | ||
| 812 | # Userspace I/O | ||
| 813 | # | ||
| 814 | CONFIG_UIO=m | 867 | CONFIG_UIO=m |
| 868 | # CONFIG_UIO_SMX is not set | ||
| 815 | 869 | ||
| 816 | # | 870 | # |
| 817 | # File systems | 871 | # File systems |
| @@ -828,14 +882,11 @@ CONFIG_JBD=m | |||
| 828 | # CONFIG_JFS_FS is not set | 882 | # CONFIG_JFS_FS is not set |
| 829 | # CONFIG_FS_POSIX_ACL is not set | 883 | # CONFIG_FS_POSIX_ACL is not set |
| 830 | # CONFIG_XFS_FS is not set | 884 | # CONFIG_XFS_FS is not set |
| 831 | # CONFIG_GFS2_FS is not set | ||
| 832 | # CONFIG_OCFS2_FS is not set | 885 | # CONFIG_OCFS2_FS is not set |
| 833 | # CONFIG_MINIX_FS is not set | 886 | # CONFIG_DNOTIFY is not set |
| 834 | # CONFIG_ROMFS_FS is not set | ||
| 835 | CONFIG_INOTIFY=y | 887 | CONFIG_INOTIFY=y |
| 836 | CONFIG_INOTIFY_USER=y | 888 | CONFIG_INOTIFY_USER=y |
| 837 | # CONFIG_QUOTA is not set | 889 | # CONFIG_QUOTA is not set |
| 838 | # CONFIG_DNOTIFY is not set | ||
| 839 | # CONFIG_AUTOFS_FS is not set | 890 | # CONFIG_AUTOFS_FS is not set |
| 840 | # CONFIG_AUTOFS4_FS is not set | 891 | # CONFIG_AUTOFS4_FS is not set |
| 841 | CONFIG_FUSE_FS=m | 892 | CONFIG_FUSE_FS=m |
| @@ -891,8 +942,10 @@ CONFIG_JFFS2_RTIME=y | |||
| 891 | # CONFIG_JFFS2_RUBIN is not set | 942 | # CONFIG_JFFS2_RUBIN is not set |
| 892 | # CONFIG_CRAMFS is not set | 943 | # CONFIG_CRAMFS is not set |
| 893 | # CONFIG_VXFS_FS is not set | 944 | # CONFIG_VXFS_FS is not set |
| 945 | # CONFIG_MINIX_FS is not set | ||
| 894 | # CONFIG_HPFS_FS is not set | 946 | # CONFIG_HPFS_FS is not set |
| 895 | # CONFIG_QNX4FS_FS is not set | 947 | # CONFIG_QNX4FS_FS is not set |
| 948 | # CONFIG_ROMFS_FS is not set | ||
| 896 | # CONFIG_SYSV_FS is not set | 949 | # CONFIG_SYSV_FS is not set |
| 897 | # CONFIG_UFS_FS is not set | 950 | # CONFIG_UFS_FS is not set |
| 898 | # CONFIG_NETWORK_FILESYSTEMS is not set | 951 | # CONFIG_NETWORK_FILESYSTEMS is not set |
| @@ -943,11 +996,6 @@ CONFIG_NLS_ISO8859_1=m | |||
| 943 | # CONFIG_NLS_KOI8_U is not set | 996 | # CONFIG_NLS_KOI8_U is not set |
| 944 | CONFIG_NLS_UTF8=m | 997 | CONFIG_NLS_UTF8=m |
| 945 | # CONFIG_DLM is not set | 998 | # CONFIG_DLM is not set |
| 946 | CONFIG_INSTRUMENTATION=y | ||
| 947 | CONFIG_PROFILING=y | ||
| 948 | CONFIG_OPROFILE=m | ||
| 949 | CONFIG_KPROBES=y | ||
| 950 | # CONFIG_MARKERS is not set | ||
| 951 | 999 | ||
| 952 | # | 1000 | # |
| 953 | # Kernel hacking | 1001 | # Kernel hacking |
| @@ -955,6 +1003,7 @@ CONFIG_KPROBES=y | |||
| 955 | # CONFIG_PRINTK_TIME is not set | 1003 | # CONFIG_PRINTK_TIME is not set |
| 956 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1004 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 957 | CONFIG_ENABLE_MUST_CHECK=y | 1005 | CONFIG_ENABLE_MUST_CHECK=y |
| 1006 | CONFIG_FRAME_WARN=1024 | ||
| 958 | CONFIG_MAGIC_SYSRQ=y | 1007 | CONFIG_MAGIC_SYSRQ=y |
| 959 | # CONFIG_UNUSED_SYMBOLS is not set | 1008 | # CONFIG_UNUSED_SYMBOLS is not set |
| 960 | CONFIG_DEBUG_FS=y | 1009 | CONFIG_DEBUG_FS=y |
| @@ -965,6 +1014,7 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 965 | CONFIG_SCHED_DEBUG=y | 1014 | CONFIG_SCHED_DEBUG=y |
| 966 | # CONFIG_SCHEDSTATS is not set | 1015 | # CONFIG_SCHEDSTATS is not set |
| 967 | # CONFIG_TIMER_STATS is not set | 1016 | # CONFIG_TIMER_STATS is not set |
| 1017 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 968 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1018 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 969 | # CONFIG_RT_MUTEX_TESTER is not set | 1019 | # CONFIG_RT_MUTEX_TESTER is not set |
| 970 | # CONFIG_DEBUG_SPINLOCK is not set | 1020 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -978,12 +1028,14 @@ CONFIG_SCHED_DEBUG=y | |||
| 978 | CONFIG_DEBUG_BUGVERBOSE=y | 1028 | CONFIG_DEBUG_BUGVERBOSE=y |
| 979 | # CONFIG_DEBUG_INFO is not set | 1029 | # CONFIG_DEBUG_INFO is not set |
| 980 | # CONFIG_DEBUG_VM is not set | 1030 | # CONFIG_DEBUG_VM is not set |
| 1031 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 981 | # CONFIG_DEBUG_LIST is not set | 1032 | # CONFIG_DEBUG_LIST is not set |
| 982 | # CONFIG_DEBUG_SG is not set | 1033 | # CONFIG_DEBUG_SG is not set |
| 983 | CONFIG_FRAME_POINTER=y | 1034 | CONFIG_FRAME_POINTER=y |
| 984 | CONFIG_FORCED_INLINING=y | ||
| 985 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1035 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 986 | # CONFIG_RCU_TORTURE_TEST is not set | 1036 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1037 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
| 1038 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 987 | # CONFIG_LKDTM is not set | 1039 | # CONFIG_LKDTM is not set |
| 988 | # CONFIG_FAULT_INJECTION is not set | 1040 | # CONFIG_FAULT_INJECTION is not set |
| 989 | # CONFIG_SAMPLES is not set | 1041 | # CONFIG_SAMPLES is not set |
| @@ -1000,6 +1052,8 @@ CONFIG_FORCED_INLINING=y | |||
| 1000 | # Library routines | 1052 | # Library routines |
| 1001 | # | 1053 | # |
| 1002 | CONFIG_BITREVERSE=y | 1054 | CONFIG_BITREVERSE=y |
| 1055 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1056 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 1003 | CONFIG_CRC_CCITT=m | 1057 | CONFIG_CRC_CCITT=m |
| 1004 | # CONFIG_CRC16 is not set | 1058 | # CONFIG_CRC16 is not set |
| 1005 | CONFIG_CRC_ITU_T=m | 1059 | CONFIG_CRC_ITU_T=m |
diff --git a/arch/avr32/configs/atstk1004_defconfig b/arch/avr32/configs/atstk1004_defconfig index 634c52760349..a0912fb7c92e 100644 --- a/arch/avr32/configs/atstk1004_defconfig +++ b/arch/avr32/configs/atstk1004_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 23:04:20 2008 | 4 | # Mon May 26 13:34:57 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -34,15 +34,15 @@ CONFIG_LOCALVERSION="" | |||
| 34 | # CONFIG_POSIX_MQUEUE is not set | 34 | # CONFIG_POSIX_MQUEUE is not set |
| 35 | # CONFIG_BSD_PROCESS_ACCT is not set | 35 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 36 | # CONFIG_TASKSTATS is not set | 36 | # CONFIG_TASKSTATS is not set |
| 37 | # CONFIG_USER_NS is not set | ||
| 38 | # CONFIG_PID_NS is not set | ||
| 39 | # CONFIG_AUDIT is not set | 37 | # CONFIG_AUDIT is not set |
| 40 | # CONFIG_IKCONFIG is not set | 38 | # CONFIG_IKCONFIG is not set |
| 41 | CONFIG_LOG_BUF_SHIFT=14 | 39 | CONFIG_LOG_BUF_SHIFT=14 |
| 42 | # CONFIG_CGROUPS is not set | 40 | # CONFIG_CGROUPS is not set |
| 43 | # CONFIG_FAIR_GROUP_SCHED is not set | 41 | # CONFIG_GROUP_SCHED is not set |
| 44 | CONFIG_SYSFS_DEPRECATED=y | 42 | CONFIG_SYSFS_DEPRECATED=y |
| 43 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 45 | # CONFIG_RELAY is not set | 44 | # CONFIG_RELAY is not set |
| 45 | # CONFIG_NAMESPACES is not set | ||
| 46 | # CONFIG_BLK_DEV_INITRD is not set | 46 | # CONFIG_BLK_DEV_INITRD is not set |
| 47 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 47 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 48 | CONFIG_SYSCTL=y | 48 | CONFIG_SYSCTL=y |
| @@ -54,24 +54,38 @@ CONFIG_HOTPLUG=y | |||
| 54 | CONFIG_PRINTK=y | 54 | CONFIG_PRINTK=y |
| 55 | CONFIG_BUG=y | 55 | CONFIG_BUG=y |
| 56 | CONFIG_ELF_CORE=y | 56 | CONFIG_ELF_CORE=y |
| 57 | # CONFIG_COMPAT_BRK is not set | ||
| 57 | # CONFIG_BASE_FULL is not set | 58 | # CONFIG_BASE_FULL is not set |
| 58 | # CONFIG_FUTEX is not set | 59 | # CONFIG_FUTEX is not set |
| 59 | # CONFIG_EPOLL is not set | 60 | # CONFIG_EPOLL is not set |
| 60 | # CONFIG_SIGNALFD is not set | 61 | # CONFIG_SIGNALFD is not set |
| 62 | # CONFIG_TIMERFD is not set | ||
| 61 | # CONFIG_EVENTFD is not set | 63 | # CONFIG_EVENTFD is not set |
| 62 | CONFIG_SHMEM=y | 64 | CONFIG_SHMEM=y |
| 63 | CONFIG_VM_EVENT_COUNTERS=y | 65 | CONFIG_VM_EVENT_COUNTERS=y |
| 64 | # CONFIG_SLAB is not set | 66 | # CONFIG_SLAB is not set |
| 65 | # CONFIG_SLUB is not set | 67 | # CONFIG_SLUB is not set |
| 66 | CONFIG_SLOB=y | 68 | CONFIG_SLOB=y |
| 69 | # CONFIG_PROFILING is not set | ||
| 70 | # CONFIG_MARKERS is not set | ||
| 71 | CONFIG_HAVE_OPROFILE=y | ||
| 72 | CONFIG_HAVE_KPROBES=y | ||
| 73 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 74 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 75 | # CONFIG_PROC_PAGE_MONITOR is not set | ||
| 67 | # CONFIG_TINY_SHMEM is not set | 76 | # CONFIG_TINY_SHMEM is not set |
| 68 | CONFIG_BASE_SMALL=1 | 77 | CONFIG_BASE_SMALL=1 |
| 69 | # CONFIG_MODULES is not set | 78 | # CONFIG_MODULES is not set |
| 70 | # CONFIG_BLOCK is not set | 79 | # CONFIG_BLOCK is not set |
| 80 | CONFIG_CLASSIC_RCU=y | ||
| 71 | 81 | ||
| 72 | # | 82 | # |
| 73 | # System Type and features | 83 | # System Type and features |
| 74 | # | 84 | # |
| 85 | # CONFIG_TICK_ONESHOT is not set | ||
| 86 | # CONFIG_NO_HZ is not set | ||
| 87 | # CONFIG_HIGH_RES_TIMERS is not set | ||
| 88 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 75 | CONFIG_SUBARCH_AVR32B=y | 89 | CONFIG_SUBARCH_AVR32B=y |
| 76 | CONFIG_MMU=y | 90 | CONFIG_MMU=y |
| 77 | CONFIG_PERFORMANCE_COUNTERS=y | 91 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -115,16 +129,19 @@ CONFIG_FLATMEM=y | |||
| 115 | CONFIG_FLAT_NODE_MEM_MAP=y | 129 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 116 | # CONFIG_SPARSEMEM_STATIC is not set | 130 | # CONFIG_SPARSEMEM_STATIC is not set |
| 117 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 131 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 132 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 118 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 133 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 119 | # CONFIG_RESOURCES_64BIT is not set | 134 | # CONFIG_RESOURCES_64BIT is not set |
| 120 | CONFIG_ZONE_DMA_FLAG=0 | 135 | CONFIG_ZONE_DMA_FLAG=0 |
| 121 | CONFIG_VIRT_TO_BUS=y | 136 | CONFIG_VIRT_TO_BUS=y |
| 122 | # CONFIG_OWNERSHIP_TRACE is not set | 137 | # CONFIG_OWNERSHIP_TRACE is not set |
| 138 | # CONFIG_NMI_DEBUGGING is not set | ||
| 123 | # CONFIG_HZ_100 is not set | 139 | # CONFIG_HZ_100 is not set |
| 124 | CONFIG_HZ_250=y | 140 | CONFIG_HZ_250=y |
| 125 | # CONFIG_HZ_300 is not set | 141 | # CONFIG_HZ_300 is not set |
| 126 | # CONFIG_HZ_1000 is not set | 142 | # CONFIG_HZ_1000 is not set |
| 127 | CONFIG_HZ=250 | 143 | CONFIG_HZ=250 |
| 144 | # CONFIG_SCHED_HRTICK is not set | ||
| 128 | CONFIG_CMDLINE="" | 145 | CONFIG_CMDLINE="" |
| 129 | 146 | ||
| 130 | # | 147 | # |
| @@ -134,20 +151,7 @@ CONFIG_CMDLINE="" | |||
| 134 | # | 151 | # |
| 135 | # CPU Frequency scaling | 152 | # CPU Frequency scaling |
| 136 | # | 153 | # |
| 137 | CONFIG_CPU_FREQ=y | 154 | # CONFIG_CPU_FREQ is not set |
| 138 | CONFIG_CPU_FREQ_TABLE=y | ||
| 139 | # CONFIG_CPU_FREQ_DEBUG is not set | ||
| 140 | # CONFIG_CPU_FREQ_STAT is not set | ||
| 141 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | ||
| 142 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | ||
| 143 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | ||
| 144 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
| 145 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||
| 146 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | ||
| 147 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | ||
| 148 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y | ||
| 149 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
| 150 | CONFIG_CPU_FREQ_AT32AP=y | ||
| 151 | 155 | ||
| 152 | # | 156 | # |
| 153 | # Bus options | 157 | # Bus options |
| @@ -197,8 +201,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 197 | CONFIG_DEFAULT_TCP_CONG="cubic" | 201 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 198 | # CONFIG_TCP_MD5SIG is not set | 202 | # CONFIG_TCP_MD5SIG is not set |
| 199 | # CONFIG_IPV6 is not set | 203 | # CONFIG_IPV6 is not set |
| 200 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 201 | # CONFIG_INET6_TUNNEL is not set | ||
| 202 | # CONFIG_NETWORK_SECMARK is not set | 204 | # CONFIG_NETWORK_SECMARK is not set |
| 203 | # CONFIG_NETFILTER is not set | 205 | # CONFIG_NETFILTER is not set |
| 204 | # CONFIG_IP_DCCP is not set | 206 | # CONFIG_IP_DCCP is not set |
| @@ -222,6 +224,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 222 | # | 224 | # |
| 223 | # CONFIG_NET_PKTGEN is not set | 225 | # CONFIG_NET_PKTGEN is not set |
| 224 | # CONFIG_HAMRADIO is not set | 226 | # CONFIG_HAMRADIO is not set |
| 227 | # CONFIG_CAN is not set | ||
| 225 | # CONFIG_IRDA is not set | 228 | # CONFIG_IRDA is not set |
| 226 | # CONFIG_BT is not set | 229 | # CONFIG_BT is not set |
| 227 | # CONFIG_AF_RXRPC is not set | 230 | # CONFIG_AF_RXRPC is not set |
| @@ -255,6 +258,7 @@ CONFIG_MTD=y | |||
| 255 | CONFIG_MTD_PARTITIONS=y | 258 | CONFIG_MTD_PARTITIONS=y |
| 256 | # CONFIG_MTD_REDBOOT_PARTS is not set | 259 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 257 | CONFIG_MTD_CMDLINE_PARTS=y | 260 | CONFIG_MTD_CMDLINE_PARTS=y |
| 261 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 258 | 262 | ||
| 259 | # | 263 | # |
| 260 | # User Modules And Translation Layers | 264 | # User Modules And Translation Layers |
| @@ -321,6 +325,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 321 | # CONFIG_MTD_UBI is not set | 325 | # CONFIG_MTD_UBI is not set |
| 322 | # CONFIG_PARPORT is not set | 326 | # CONFIG_PARPORT is not set |
| 323 | # CONFIG_MISC_DEVICES is not set | 327 | # CONFIG_MISC_DEVICES is not set |
| 328 | # CONFIG_HAVE_IDE is not set | ||
| 324 | 329 | ||
| 325 | # | 330 | # |
| 326 | # SCSI device support | 331 | # SCSI device support |
| @@ -346,6 +351,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 346 | # Character devices | 351 | # Character devices |
| 347 | # | 352 | # |
| 348 | # CONFIG_VT is not set | 353 | # CONFIG_VT is not set |
| 354 | # CONFIG_DEVKMEM is not set | ||
| 349 | # CONFIG_SERIAL_NONSTANDARD is not set | 355 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 350 | 356 | ||
| 351 | # | 357 | # |
| @@ -358,6 +364,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 358 | # | 364 | # |
| 359 | CONFIG_SERIAL_ATMEL=y | 365 | CONFIG_SERIAL_ATMEL=y |
| 360 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 366 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 367 | # CONFIG_SERIAL_ATMEL_PDC is not set | ||
| 361 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 368 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 362 | CONFIG_SERIAL_CORE=y | 369 | CONFIG_SERIAL_CORE=y |
| 363 | CONFIG_SERIAL_CORE_CONSOLE=y | 370 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -365,15 +372,9 @@ CONFIG_UNIX98_PTYS=y | |||
| 365 | # CONFIG_LEGACY_PTYS is not set | 372 | # CONFIG_LEGACY_PTYS is not set |
| 366 | # CONFIG_IPMI_HANDLER is not set | 373 | # CONFIG_IPMI_HANDLER is not set |
| 367 | # CONFIG_HW_RANDOM is not set | 374 | # CONFIG_HW_RANDOM is not set |
| 368 | # CONFIG_RTC is not set | ||
| 369 | # CONFIG_GEN_RTC is not set | ||
| 370 | # CONFIG_R3964 is not set | 375 | # CONFIG_R3964 is not set |
| 371 | # CONFIG_TCG_TPM is not set | 376 | # CONFIG_TCG_TPM is not set |
| 372 | # CONFIG_I2C is not set | 377 | # CONFIG_I2C is not set |
| 373 | |||
| 374 | # | ||
| 375 | # SPI support | ||
| 376 | # | ||
| 377 | CONFIG_SPI=y | 378 | CONFIG_SPI=y |
| 378 | CONFIG_SPI_MASTER=y | 379 | CONFIG_SPI_MASTER=y |
| 379 | 380 | ||
| @@ -389,9 +390,24 @@ CONFIG_SPI_ATMEL=y | |||
| 389 | # CONFIG_SPI_AT25 is not set | 390 | # CONFIG_SPI_AT25 is not set |
| 390 | # CONFIG_SPI_SPIDEV is not set | 391 | # CONFIG_SPI_SPIDEV is not set |
| 391 | # CONFIG_SPI_TLE62X0 is not set | 392 | # CONFIG_SPI_TLE62X0 is not set |
| 393 | CONFIG_HAVE_GPIO_LIB=y | ||
| 394 | |||
| 395 | # | ||
| 396 | # GPIO Support | ||
| 397 | # | ||
| 398 | |||
| 399 | # | ||
| 400 | # I2C GPIO expanders: | ||
| 401 | # | ||
| 402 | |||
| 403 | # | ||
| 404 | # SPI GPIO expanders: | ||
| 405 | # | ||
| 406 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 392 | # CONFIG_W1 is not set | 407 | # CONFIG_W1 is not set |
| 393 | # CONFIG_POWER_SUPPLY is not set | 408 | # CONFIG_POWER_SUPPLY is not set |
| 394 | # CONFIG_HWMON is not set | 409 | # CONFIG_HWMON is not set |
| 410 | # CONFIG_THERMAL is not set | ||
| 395 | CONFIG_WATCHDOG=y | 411 | CONFIG_WATCHDOG=y |
| 396 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 412 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 397 | 413 | ||
| @@ -411,12 +427,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 411 | # Multifunction device drivers | 427 | # Multifunction device drivers |
| 412 | # | 428 | # |
| 413 | # CONFIG_MFD_SM501 is not set | 429 | # CONFIG_MFD_SM501 is not set |
| 430 | # CONFIG_HTC_PASIC3 is not set | ||
| 414 | 431 | ||
| 415 | # | 432 | # |
| 416 | # Multimedia devices | 433 | # Multimedia devices |
| 417 | # | 434 | # |
| 435 | |||
| 436 | # | ||
| 437 | # Multimedia core support | ||
| 438 | # | ||
| 418 | # CONFIG_VIDEO_DEV is not set | 439 | # CONFIG_VIDEO_DEV is not set |
| 419 | # CONFIG_DVB_CORE is not set | 440 | # CONFIG_DVB_CORE is not set |
| 441 | # CONFIG_VIDEO_MEDIA is not set | ||
| 442 | |||
| 443 | # | ||
| 444 | # Multimedia drivers | ||
| 445 | # | ||
| 420 | # CONFIG_DAB is not set | 446 | # CONFIG_DAB is not set |
| 421 | 447 | ||
| 422 | # | 448 | # |
| @@ -434,8 +460,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 434 | # CONFIG_FB_SYS_FILLRECT is not set | 460 | # CONFIG_FB_SYS_FILLRECT is not set |
| 435 | # CONFIG_FB_SYS_COPYAREA is not set | 461 | # CONFIG_FB_SYS_COPYAREA is not set |
| 436 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 462 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 463 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 437 | # CONFIG_FB_SYS_FOPS is not set | 464 | # CONFIG_FB_SYS_FOPS is not set |
| 438 | CONFIG_FB_DEFERRED_IO=y | ||
| 439 | # CONFIG_FB_SVGALIB is not set | 465 | # CONFIG_FB_SVGALIB is not set |
| 440 | # CONFIG_FB_MACMODES is not set | 466 | # CONFIG_FB_MACMODES is not set |
| 441 | # CONFIG_FB_BACKLIGHT is not set | 467 | # CONFIG_FB_BACKLIGHT is not set |
| @@ -467,14 +493,12 @@ CONFIG_USB_SUPPORT=y | |||
| 467 | # CONFIG_USB_ARCH_HAS_HCD is not set | 493 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 468 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 494 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 469 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 495 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 496 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 497 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 470 | 498 | ||
| 471 | # | 499 | # |
| 472 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 500 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 473 | # | 501 | # |
| 474 | |||
| 475 | # | ||
| 476 | # USB Gadget Support | ||
| 477 | # | ||
| 478 | CONFIG_USB_GADGET=y | 502 | CONFIG_USB_GADGET=y |
| 479 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 503 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| 480 | CONFIG_USB_GADGET_SELECTED=y | 504 | CONFIG_USB_GADGET_SELECTED=y |
| @@ -485,6 +509,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 485 | # CONFIG_USB_GADGET_NET2280 is not set | 509 | # CONFIG_USB_GADGET_NET2280 is not set |
| 486 | # CONFIG_USB_GADGET_PXA2XX is not set | 510 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 487 | # CONFIG_USB_GADGET_M66592 is not set | 511 | # CONFIG_USB_GADGET_M66592 is not set |
| 512 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 488 | # CONFIG_USB_GADGET_GOKU is not set | 513 | # CONFIG_USB_GADGET_GOKU is not set |
| 489 | # CONFIG_USB_GADGET_LH7A40X is not set | 514 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 490 | # CONFIG_USB_GADGET_OMAP is not set | 515 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -499,8 +524,11 @@ CONFIG_USB_ETH=y | |||
| 499 | # CONFIG_USB_FILE_STORAGE is not set | 524 | # CONFIG_USB_FILE_STORAGE is not set |
| 500 | # CONFIG_USB_G_SERIAL is not set | 525 | # CONFIG_USB_G_SERIAL is not set |
| 501 | # CONFIG_USB_MIDI_GADGET is not set | 526 | # CONFIG_USB_MIDI_GADGET is not set |
| 527 | # CONFIG_USB_G_PRINTER is not set | ||
| 502 | # CONFIG_MMC is not set | 528 | # CONFIG_MMC is not set |
| 529 | # CONFIG_MEMSTICK is not set | ||
| 503 | # CONFIG_NEW_LEDS is not set | 530 | # CONFIG_NEW_LEDS is not set |
| 531 | # CONFIG_ACCESSIBILITY is not set | ||
| 504 | CONFIG_RTC_LIB=y | 532 | CONFIG_RTC_LIB=y |
| 505 | CONFIG_RTC_CLASS=y | 533 | CONFIG_RTC_CLASS=y |
| 506 | CONFIG_RTC_HCTOSYS=y | 534 | CONFIG_RTC_HCTOSYS=y |
| @@ -519,15 +547,17 @@ CONFIG_RTC_INTF_DEV=y | |||
| 519 | # | 547 | # |
| 520 | # SPI RTC drivers | 548 | # SPI RTC drivers |
| 521 | # | 549 | # |
| 522 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 523 | # CONFIG_RTC_DRV_MAX6902 is not set | 550 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 551 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 552 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 524 | 553 | ||
| 525 | # | 554 | # |
| 526 | # Platform RTC drivers | 555 | # Platform RTC drivers |
| 527 | # | 556 | # |
| 557 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 528 | # CONFIG_RTC_DRV_DS1553 is not set | 558 | # CONFIG_RTC_DRV_DS1553 is not set |
| 529 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 530 | # CONFIG_RTC_DRV_DS1742 is not set | 559 | # CONFIG_RTC_DRV_DS1742 is not set |
| 560 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 531 | # CONFIG_RTC_DRV_M48T86 is not set | 561 | # CONFIG_RTC_DRV_M48T86 is not set |
| 532 | # CONFIG_RTC_DRV_M48T59 is not set | 562 | # CONFIG_RTC_DRV_M48T59 is not set |
| 533 | # CONFIG_RTC_DRV_V3020 is not set | 563 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -536,18 +566,14 @@ CONFIG_RTC_INTF_DEV=y | |||
| 536 | # on-CPU RTC drivers | 566 | # on-CPU RTC drivers |
| 537 | # | 567 | # |
| 538 | CONFIG_RTC_DRV_AT32AP700X=y | 568 | CONFIG_RTC_DRV_AT32AP700X=y |
| 539 | |||
| 540 | # | ||
| 541 | # Userspace I/O | ||
| 542 | # | ||
| 543 | # CONFIG_UIO is not set | 569 | # CONFIG_UIO is not set |
| 544 | 570 | ||
| 545 | # | 571 | # |
| 546 | # File systems | 572 | # File systems |
| 547 | # | 573 | # |
| 574 | # CONFIG_DNOTIFY is not set | ||
| 548 | # CONFIG_INOTIFY is not set | 575 | # CONFIG_INOTIFY is not set |
| 549 | # CONFIG_QUOTA is not set | 576 | # CONFIG_QUOTA is not set |
| 550 | # CONFIG_DNOTIFY is not set | ||
| 551 | # CONFIG_AUTOFS_FS is not set | 577 | # CONFIG_AUTOFS_FS is not set |
| 552 | # CONFIG_AUTOFS4_FS is not set | 578 | # CONFIG_AUTOFS4_FS is not set |
| 553 | # CONFIG_FUSE_FS is not set | 579 | # CONFIG_FUSE_FS is not set |
| @@ -580,7 +606,6 @@ CONFIG_JFFS2_RTIME=y | |||
| 580 | # CONFIG_NETWORK_FILESYSTEMS is not set | 606 | # CONFIG_NETWORK_FILESYSTEMS is not set |
| 581 | # CONFIG_NLS is not set | 607 | # CONFIG_NLS is not set |
| 582 | # CONFIG_DLM is not set | 608 | # CONFIG_DLM is not set |
| 583 | # CONFIG_INSTRUMENTATION is not set | ||
| 584 | 609 | ||
| 585 | # | 610 | # |
| 586 | # Kernel hacking | 611 | # Kernel hacking |
| @@ -588,6 +613,7 @@ CONFIG_JFFS2_RTIME=y | |||
| 588 | # CONFIG_PRINTK_TIME is not set | 613 | # CONFIG_PRINTK_TIME is not set |
| 589 | CONFIG_ENABLE_WARN_DEPRECATED=y | 614 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 590 | CONFIG_ENABLE_MUST_CHECK=y | 615 | CONFIG_ENABLE_MUST_CHECK=y |
| 616 | CONFIG_FRAME_WARN=1024 | ||
| 591 | CONFIG_MAGIC_SYSRQ=y | 617 | CONFIG_MAGIC_SYSRQ=y |
| 592 | # CONFIG_UNUSED_SYMBOLS is not set | 618 | # CONFIG_UNUSED_SYMBOLS is not set |
| 593 | # CONFIG_DEBUG_FS is not set | 619 | # CONFIG_DEBUG_FS is not set |
| @@ -608,6 +634,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
| 608 | # Library routines | 634 | # Library routines |
| 609 | # | 635 | # |
| 610 | CONFIG_BITREVERSE=y | 636 | CONFIG_BITREVERSE=y |
| 637 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 638 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 611 | # CONFIG_CRC_CCITT is not set | 639 | # CONFIG_CRC_CCITT is not set |
| 612 | # CONFIG_CRC16 is not set | 640 | # CONFIG_CRC16 is not set |
| 613 | # CONFIG_CRC_ITU_T is not set | 641 | # CONFIG_CRC_ITU_T is not set |
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 80f55f8dbf1c..84a7d44edc67 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
| @@ -29,7 +29,9 @@ EXPORT_SYMBOL(__avr32_asr64); | |||
| 29 | */ | 29 | */ |
| 30 | EXPORT_SYMBOL(memset); | 30 | EXPORT_SYMBOL(memset); |
| 31 | EXPORT_SYMBOL(memcpy); | 31 | EXPORT_SYMBOL(memcpy); |
| 32 | |||
| 32 | EXPORT_SYMBOL(clear_page); | 33 | EXPORT_SYMBOL(clear_page); |
| 34 | EXPORT_SYMBOL(copy_page); | ||
| 33 | 35 | ||
| 34 | /* | 36 | /* |
| 35 | * Userspace access stuff. | 37 | * Userspace access stuff. |
| @@ -41,6 +43,8 @@ EXPORT_SYMBOL(strncpy_from_user); | |||
| 41 | EXPORT_SYMBOL(__strncpy_from_user); | 43 | EXPORT_SYMBOL(__strncpy_from_user); |
| 42 | EXPORT_SYMBOL(clear_user); | 44 | EXPORT_SYMBOL(clear_user); |
| 43 | EXPORT_SYMBOL(__clear_user); | 45 | EXPORT_SYMBOL(__clear_user); |
| 46 | EXPORT_SYMBOL(strnlen_user); | ||
| 47 | |||
| 44 | EXPORT_SYMBOL(csum_partial); | 48 | EXPORT_SYMBOL(csum_partial); |
| 45 | EXPORT_SYMBOL(csum_partial_copy_generic); | 49 | EXPORT_SYMBOL(csum_partial_copy_generic); |
| 46 | 50 | ||
diff --git a/arch/avr32/mach-at32ap/cpufreq.c b/arch/avr32/mach-at32ap/cpufreq.c index 235524b79193..5dd8d25428bf 100644 --- a/arch/avr32/mach-at32ap/cpufreq.c +++ b/arch/avr32/mach-at32ap/cpufreq.c | |||
| @@ -108,5 +108,4 @@ static int __init at32_cpufreq_init(void) | |||
| 108 | { | 108 | { |
| 109 | return cpufreq_register_driver(&at32_driver); | 109 | return cpufreq_register_driver(&at32_driver); |
| 110 | } | 110 | } |
| 111 | 111 | late_initcall(at32_cpufreq_init); | |
| 112 | arch_initcall(at32_cpufreq_init); | ||
diff --git a/arch/blackfin/kernel/gptimers.c b/arch/blackfin/kernel/gptimers.c index e698554895a7..3a3e9615b002 100644 --- a/arch/blackfin/kernel/gptimers.c +++ b/arch/blackfin/kernel/gptimers.c | |||
| @@ -10,8 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
| 13 | #include <linux/io.h> | ||
| 13 | 14 | ||
| 14 | #include <asm/io.h> | ||
| 15 | #include <asm/blackfin.h> | 15 | #include <asm/blackfin.h> |
| 16 | #include <asm/gptimers.h> | 16 | #include <asm/gptimers.h> |
| 17 | 17 | ||
diff --git a/arch/blackfin/lib/outs.S b/arch/blackfin/lib/outs.S index 3daf96035bf6..4685b7aa0080 100644 --- a/arch/blackfin/lib/outs.S +++ b/arch/blackfin/lib/outs.S | |||
| @@ -76,4 +76,4 @@ ENTRY(_outsw_8) | |||
| 76 | R0 = R0 + R1; | 76 | R0 = R0 + R1; |
| 77 | .Lword8_loop_e: W[P0] = R0; | 77 | .Lword8_loop_e: W[P0] = R0; |
| 78 | RTS; | 78 | RTS; |
| 79 | ENDPROC(_outsw) | 79 | ENDPROC(_outsw_8) |
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index bb6d58c931de..fa4f4e833e84 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c | |||
| @@ -647,10 +647,10 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 647 | { | 647 | { |
| 648 | .modalias = "ad7877", | 648 | .modalias = "ad7877", |
| 649 | .platform_data = &bfin_ad7877_ts_info, | 649 | .platform_data = &bfin_ad7877_ts_info, |
| 650 | .irq = IRQ_PF6, | 650 | .irq = IRQ_PF8, |
| 651 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | 651 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ |
| 652 | .bus_num = 0, | 652 | .bus_num = 0, |
| 653 | .chip_select = 1, | 653 | .chip_select = 2, |
| 654 | .controller_data = &spi_ad7877_chip_info, | 654 | .controller_data = &spi_ad7877_chip_info, |
| 655 | }, | 655 | }, |
| 656 | #endif | 656 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/Makefile b/arch/blackfin/mach-bf537/boards/Makefile index 87e450f29e37..c94f7a5b8211 100644 --- a/arch/blackfin/mach-bf537/boards/Makefile +++ b/arch/blackfin/mach-bf537/boards/Makefile | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_GENERIC_BF537_BOARD) += generic_board.o | 5 | obj-$(CONFIG_GENERIC_BF537_BOARD) += generic_board.o |
| 6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o led.o | 6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o |
| 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o | 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o |
| 8 | obj-$(CONFIG_PNAV10) += pnav10.o | 8 | obj-$(CONFIG_PNAV10) += pnav10.o |
| 9 | obj-$(CONFIG_CAMSIG_MINOTAUR) += minotaur.o | 9 | obj-$(CONFIG_CAMSIG_MINOTAUR) += minotaur.o |
diff --git a/arch/blackfin/mach-bf537/boards/led.S b/arch/blackfin/mach-bf537/boards/led.S deleted file mode 100644 index 4e9ea4283e5f..000000000000 --- a/arch/blackfin/mach-bf537/boards/led.S +++ /dev/null | |||
| @@ -1,183 +0,0 @@ | |||
| 1 | /**************************************************** | ||
| 2 | * LED1 ---- PF6 LED2 ---- PF7 * | ||
| 3 | * LED3 ---- PF8 LED4 ---- PF9 * | ||
| 4 | * LED5 ---- PF10 LED6 ---- PF11 * | ||
| 5 | ****************************************************/ | ||
| 6 | |||
| 7 | #include <linux/linkage.h> | ||
| 8 | #include <asm/blackfin.h> | ||
| 9 | |||
| 10 | /* All functions in this file save the registers they uses. | ||
| 11 | So there is no need to save any registers before calling them. */ | ||
| 12 | |||
| 13 | .text; | ||
| 14 | |||
| 15 | /* Initialize LEDs. */ | ||
| 16 | |||
| 17 | ENTRY(_led_init) | ||
| 18 | LINK 12; | ||
| 19 | [--SP] = P0; | ||
| 20 | [--SP] = R0; | ||
| 21 | [--SP] = R1; | ||
| 22 | [--SP] = R2; | ||
| 23 | R1 = PF6|PF7|PF8|PF9|PF10|PF11 (Z); | ||
| 24 | R2 = ~R1; | ||
| 25 | |||
| 26 | P0.H = hi(PORTF_FER); | ||
| 27 | P0.L = lo(PORTF_FER); | ||
| 28 | R0 = W[P0](Z); | ||
| 29 | SSYNC; | ||
| 30 | R0 = R0 & R2; | ||
| 31 | W[P0] = R0.L; | ||
| 32 | SSYNC; | ||
| 33 | |||
| 34 | P0.H = hi(PORTFIO_DIR); | ||
| 35 | P0.L = lo(PORTFIO_DIR); | ||
| 36 | R0 = W[P0](Z); | ||
| 37 | SSYNC; | ||
| 38 | R0 = R0 | R1; | ||
| 39 | W[P0] = R0.L; | ||
| 40 | SSYNC; | ||
| 41 | |||
| 42 | P0.H = hi(PORTFIO_INEN); | ||
| 43 | P0.L = lo(PORTFIO_INEN); | ||
| 44 | R0 = W[P0](Z); | ||
| 45 | SSYNC; | ||
| 46 | R0 = R0 & R2; | ||
| 47 | W[P0] = R0.L; | ||
| 48 | SSYNC; | ||
| 49 | |||
| 50 | R2 = [SP++]; | ||
| 51 | R1 = [SP++]; | ||
| 52 | R0 = [SP++]; | ||
| 53 | P0 = [SP++]; | ||
| 54 | UNLINK; | ||
| 55 | RTS; | ||
| 56 | .size _led_init, .-_led_init | ||
| 57 | |||
| 58 | /* Set one LED on. Leave other LEDs unchanged. | ||
| 59 | It expects the LED number passed through R0. */ | ||
| 60 | |||
| 61 | ENTRY(_led_on) | ||
| 62 | LINK 12; | ||
| 63 | [--SP] = P0; | ||
| 64 | [--SP] = R1; | ||
| 65 | CALL _led_init; | ||
| 66 | R1 = 1; | ||
| 67 | R0 += 5; | ||
| 68 | R1 <<= R0; | ||
| 69 | P0.H = hi(PORTFIO); | ||
| 70 | P0.L = lo(PORTFIO); | ||
| 71 | R0 = W[P0](Z); | ||
| 72 | SSYNC; | ||
| 73 | R0 = R0 | R1; | ||
| 74 | W[P0] = R0.L; | ||
| 75 | SSYNC; | ||
| 76 | R1 = [SP++]; | ||
| 77 | P0 = [SP++]; | ||
| 78 | UNLINK; | ||
| 79 | RTS; | ||
| 80 | .size _led_on, .-_led_on | ||
| 81 | |||
| 82 | /* Set one LED off. Leave other LEDs unchanged. */ | ||
| 83 | |||
| 84 | ENTRY(_led_off) | ||
| 85 | LINK 12; | ||
| 86 | [--SP] = P0; | ||
| 87 | [--SP] = R1; | ||
| 88 | CALL _led_init; | ||
| 89 | R1 = 1; | ||
| 90 | R0 += 5; | ||
| 91 | R1 <<= R0; | ||
| 92 | R1 = ~R1; | ||
| 93 | P0.H = hi(PORTFIO); | ||
| 94 | P0.L = lo(PORTFIO); | ||
| 95 | R0 = W[P0](Z); | ||
| 96 | SSYNC; | ||
| 97 | R0 = R0 & R1; | ||
| 98 | W[P0] = R0.L; | ||
| 99 | SSYNC; | ||
| 100 | R1 = [SP++]; | ||
| 101 | P0 = [SP++]; | ||
| 102 | UNLINK; | ||
| 103 | RTS; | ||
| 104 | .size _led_off, .-_led_off | ||
| 105 | |||
| 106 | /* Toggle one LED. Leave other LEDs unchanged. */ | ||
| 107 | |||
| 108 | ENTRY(_led_toggle) | ||
| 109 | LINK 12; | ||
| 110 | [--SP] = P0; | ||
| 111 | [--SP] = R1; | ||
| 112 | CALL _led_init; | ||
| 113 | R1 = 1; | ||
| 114 | R0 += 5; | ||
| 115 | R1 <<= R0; | ||
| 116 | P0.H = hi(PORTFIO); | ||
| 117 | P0.L = lo(PORTFIO); | ||
| 118 | R0 = W[P0](Z); | ||
| 119 | SSYNC; | ||
| 120 | R0 = R0 ^ R1; | ||
| 121 | W[P0] = R0.L; | ||
| 122 | SSYNC; | ||
| 123 | R1 = [SP++]; | ||
| 124 | P0 = [SP++]; | ||
| 125 | UNLINK; | ||
| 126 | RTS; | ||
| 127 | .size _led_toggle, .-_led_toggle | ||
| 128 | |||
| 129 | /* Display the number using LEDs in binary format. */ | ||
| 130 | |||
| 131 | ENTRY(_led_disp_num) | ||
| 132 | LINK 12; | ||
| 133 | [--SP] = P0; | ||
| 134 | [--SP] = R1; | ||
| 135 | [--SP] = R2; | ||
| 136 | CALL _led_init; | ||
| 137 | R1 = 0x3f(X); | ||
| 138 | R0 = R0 & R1; | ||
| 139 | R2 = 6(X); | ||
| 140 | R0 <<= R2; | ||
| 141 | R1 <<= R2; | ||
| 142 | P0.H = hi(PORTFIO); | ||
| 143 | P0.L = lo(PORTFIO); | ||
| 144 | R2 = W[P0](Z); | ||
| 145 | SSYNC; | ||
| 146 | R1 = ~R1; | ||
| 147 | R2 = R2 & R1; | ||
| 148 | R2 = R2 | R0; | ||
| 149 | W[P0] = R2.L; | ||
| 150 | SSYNC; | ||
| 151 | R2 = [SP++]; | ||
| 152 | R1 = [SP++]; | ||
| 153 | P0 = [SP++]; | ||
| 154 | UNLINK; | ||
| 155 | RTS; | ||
| 156 | .size _led_disp_num, .-_led_disp_num | ||
| 157 | |||
| 158 | /* Toggle the number using LEDs in binary format. */ | ||
| 159 | |||
| 160 | ENTRY(_led_toggle_num) | ||
| 161 | LINK 12; | ||
| 162 | [--SP] = P0; | ||
| 163 | [--SP] = R1; | ||
| 164 | [--SP] = R2; | ||
| 165 | CALL _led_init; | ||
| 166 | R1 = 0x3f(X); | ||
| 167 | R0 = R0 & R1; | ||
| 168 | R1 = 6(X); | ||
| 169 | R0 <<= R1; | ||
| 170 | P0.H = hi(PORTFIO); | ||
| 171 | P0.L = lo(PORTFIO); | ||
| 172 | R1 = W[P0](Z); | ||
| 173 | SSYNC; | ||
| 174 | R1 = R1 ^ R0; | ||
| 175 | W[P0] = R1.L; | ||
| 176 | SSYNC; | ||
| 177 | R2 = [SP++]; | ||
| 178 | R1 = [SP++]; | ||
| 179 | P0 = [SP++]; | ||
| 180 | UNLINK; | ||
| 181 | RTS; | ||
| 182 | .size _led_toggle_num, .-_led_toggle_num | ||
| 183 | |||
diff --git a/arch/blackfin/mach-bf548/boards/Makefile b/arch/blackfin/mach-bf548/boards/Makefile index eed161dd7845..319ef54c4221 100644 --- a/arch/blackfin/mach-bf548/boards/Makefile +++ b/arch/blackfin/mach-bf548/boards/Makefile | |||
| @@ -2,5 +2,5 @@ | |||
| 2 | # arch/blackfin/mach-bf548/boards/Makefile | 2 | # arch/blackfin/mach-bf548/boards/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_BFIN548_EZKIT) += ezkit.o led.o | 5 | obj-$(CONFIG_BFIN548_EZKIT) += ezkit.o |
| 6 | obj-$(CONFIG_BFIN548_BLUETECHNIX_CM) += cm_bf548.o | 6 | obj-$(CONFIG_BFIN548_BLUETECHNIX_CM) += cm_bf548.o |
diff --git a/arch/blackfin/mach-bf548/boards/cm_bf548.c b/arch/blackfin/mach-bf548/boards/cm_bf548.c index 3b74f96d3590..4f4ae8787edf 100644 --- a/arch/blackfin/mach-bf548/boards/cm_bf548.c +++ b/arch/blackfin/mach-bf548/boards/cm_bf548.c | |||
| @@ -684,7 +684,7 @@ static struct platform_device *cm_bf548_devices[] __initdata = { | |||
| 684 | 684 | ||
| 685 | static int __init cm_bf548_init(void) | 685 | static int __init cm_bf548_init(void) |
| 686 | { | 686 | { |
| 687 | printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); | 687 | printk(KERN_INFO "%s(): registering device resources\n", __func__); |
| 688 | platform_add_devices(cm_bf548_devices, ARRAY_SIZE(cm_bf548_devices)); | 688 | platform_add_devices(cm_bf548_devices, ARRAY_SIZE(cm_bf548_devices)); |
| 689 | 689 | ||
| 690 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 690 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
diff --git a/arch/blackfin/mach-bf548/boards/led.S b/arch/blackfin/mach-bf548/boards/led.S deleted file mode 100644 index f47daf3770d0..000000000000 --- a/arch/blackfin/mach-bf548/boards/led.S +++ /dev/null | |||
| @@ -1,172 +0,0 @@ | |||
| 1 | /**************************************************** | ||
| 2 | * LED1 ---- PG6 LED2 ---- PG7 * | ||
| 3 | * LED3 ---- PG8 LED4 ---- PG9 * | ||
| 4 | * LED5 ---- PG10 LED6 ---- PG11 * | ||
| 5 | ****************************************************/ | ||
| 6 | |||
| 7 | #include <linux/linkage.h> | ||
| 8 | #include <asm/blackfin.h> | ||
| 9 | |||
| 10 | /* All functions in this file save the registers they uses. | ||
| 11 | So there is no need to save any registers before calling them. */ | ||
| 12 | |||
| 13 | .text; | ||
| 14 | |||
| 15 | /* Initialize LEDs. */ | ||
| 16 | |||
| 17 | ENTRY(_led_init) | ||
| 18 | LINK 0; | ||
| 19 | [--SP] = P0; | ||
| 20 | [--SP] = R0; | ||
| 21 | [--SP] = R1; | ||
| 22 | [--SP] = R2; | ||
| 23 | R1 = (PG6|PG7|PG8|PG9|PG10|PG11)(Z); | ||
| 24 | R2 = ~R1; | ||
| 25 | |||
| 26 | P0.H = hi(PORTG_FER); | ||
| 27 | P0.L = lo(PORTG_FER); | ||
| 28 | R0 = W[P0](Z); | ||
| 29 | SSYNC; | ||
| 30 | R0 = R0 & R2; | ||
| 31 | W[P0] = R0.L; | ||
| 32 | SSYNC; | ||
| 33 | |||
| 34 | P0.H = hi(PORTG_DIR_SET); | ||
| 35 | P0.L = lo(PORTG_DIR_SET); | ||
| 36 | W[P0] = R1.L; | ||
| 37 | SSYNC; | ||
| 38 | |||
| 39 | P0.H = hi(PORTG_INEN); | ||
| 40 | P0.L = lo(PORTG_INEN); | ||
| 41 | R0 = W[P0](Z); | ||
| 42 | SSYNC; | ||
| 43 | R0 = R0 & R2; | ||
| 44 | W[P0] = R0.L; | ||
| 45 | SSYNC; | ||
| 46 | |||
| 47 | R2 = [SP++]; | ||
| 48 | R1 = [SP++]; | ||
| 49 | R0 = [SP++]; | ||
| 50 | P0 = [SP++]; | ||
| 51 | RTS; | ||
| 52 | .size _led_init, .-_led_init | ||
| 53 | |||
| 54 | /* Set one LED on. Leave other LEDs unchanged. | ||
| 55 | It expects the LED number passed through R0. */ | ||
| 56 | |||
| 57 | ENTRY(_led_on) | ||
| 58 | LINK 0; | ||
| 59 | [--SP] = P0; | ||
| 60 | [--SP] = R1; | ||
| 61 | CALL _led_init; | ||
| 62 | R1 = 1; | ||
| 63 | R0 += 5; | ||
| 64 | R1 <<= R0; | ||
| 65 | P0.H = hi(PORTG_SET); | ||
| 66 | P0.L = lo(PORTG_SET); | ||
| 67 | W[P0] = R1.L; | ||
| 68 | SSYNC; | ||
| 69 | R1 = [SP++]; | ||
| 70 | P0 = [SP++]; | ||
| 71 | UNLINK; | ||
| 72 | RTS; | ||
| 73 | .size _led_on, .-_led_on | ||
| 74 | |||
| 75 | /* Set one LED off. Leave other LEDs unchanged. */ | ||
| 76 | |||
| 77 | ENTRY(_led_off) | ||
| 78 | LINK 0; | ||
| 79 | [--SP] = P0; | ||
| 80 | [--SP] = R1; | ||
| 81 | CALL _led_init; | ||
| 82 | R1 = 1; | ||
| 83 | R0 += 5; | ||
| 84 | R1 <<= R0; | ||
| 85 | P0.H = hi(PORTG_CLEAR); | ||
| 86 | P0.L = lo(PORTG_CLEAR); | ||
| 87 | W[P0] = R1.L; | ||
| 88 | SSYNC; | ||
| 89 | R1 = [SP++]; | ||
| 90 | P0 = [SP++]; | ||
| 91 | UNLINK; | ||
| 92 | RTS; | ||
| 93 | .size _led_off, .-_led_off | ||
| 94 | |||
| 95 | /* Toggle one LED. Leave other LEDs unchanged. */ | ||
| 96 | |||
| 97 | ENTRY(_led_toggle) | ||
| 98 | LINK 0; | ||
| 99 | [--SP] = P0; | ||
| 100 | [--SP] = R1; | ||
| 101 | CALL _led_init; | ||
| 102 | R1 = 1; | ||
| 103 | R0 += 5; | ||
| 104 | R1 <<= R0; | ||
| 105 | P0.H = hi(PORTG); | ||
| 106 | P0.L = lo(PORTG); | ||
| 107 | R0 = W[P0](Z); | ||
| 108 | SSYNC; | ||
| 109 | R0 = R0 ^ R1; | ||
| 110 | W[P0] = R0.L; | ||
| 111 | SSYNC; | ||
| 112 | R1 = [SP++]; | ||
| 113 | P0 = [SP++]; | ||
| 114 | UNLINK; | ||
| 115 | RTS; | ||
| 116 | .size _led_toggle, .-_led_toggle | ||
| 117 | |||
| 118 | /* Display the number using LEDs in binary format. */ | ||
| 119 | |||
| 120 | ENTRY(_led_disp_num) | ||
| 121 | LINK 0; | ||
| 122 | [--SP] = P0; | ||
| 123 | [--SP] = R1; | ||
| 124 | [--SP] = R2; | ||
| 125 | CALL _led_init; | ||
| 126 | R1 = 0x3f(X); | ||
| 127 | R0 = R0 & R1; | ||
| 128 | R2 = 6(X); | ||
| 129 | R0 <<= R2; | ||
| 130 | R1 <<= R2; | ||
| 131 | P0.H = hi(PORTG); | ||
| 132 | P0.L = lo(PORTG); | ||
| 133 | R2 = W[P0](Z); | ||
| 134 | SSYNC; | ||
| 135 | R1 = ~R1; | ||
| 136 | R2 = R2 & R1; | ||
| 137 | R2 = R2 | R0; | ||
| 138 | W[P0] = R2.L; | ||
| 139 | SSYNC; | ||
| 140 | R2 = [SP++]; | ||
| 141 | R1 = [SP++]; | ||
| 142 | P0 = [SP++]; | ||
| 143 | UNLINK; | ||
| 144 | RTS; | ||
| 145 | .size _led_disp_num, .-_led_disp_num | ||
| 146 | |||
| 147 | /* Toggle the number using LEDs in binary format. */ | ||
| 148 | |||
| 149 | ENTRY(_led_toggle_num) | ||
| 150 | LINK 0; | ||
| 151 | [--SP] = P0; | ||
| 152 | [--SP] = R1; | ||
| 153 | [--SP] = R2; | ||
| 154 | CALL _led_init; | ||
| 155 | R1 = 0x3f(X); | ||
| 156 | R0 = R0 & R1; | ||
| 157 | R1 = 6(X); | ||
| 158 | R0 <<= R1; | ||
| 159 | P0.H = hi(PORTG); | ||
| 160 | P0.L = lo(PORTG); | ||
| 161 | R1 = W[P0](Z); | ||
| 162 | SSYNC; | ||
| 163 | R1 = R1 ^ R0; | ||
| 164 | W[P0] = R1.L; | ||
| 165 | SSYNC; | ||
| 166 | R2 = [SP++]; | ||
| 167 | R1 = [SP++]; | ||
| 168 | P0 = [SP++]; | ||
| 169 | UNLINK; | ||
| 170 | RTS; | ||
| 171 | .size _led_toggle_num, .-_led_toggle_num | ||
| 172 | |||
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index 6678c49daba3..80b44ea052d7 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
| @@ -1076,48 +1076,6 @@ END(ia64_syscall_setup) | |||
| 1076 | DBG_FAULT(15) | 1076 | DBG_FAULT(15) |
| 1077 | FAULT(15) | 1077 | FAULT(15) |
| 1078 | 1078 | ||
| 1079 | /* | ||
| 1080 | * Squatting in this space ... | ||
| 1081 | * | ||
| 1082 | * This special case dispatcher for illegal operation faults allows preserved | ||
| 1083 | * registers to be modified through a callback function (asm only) that is handed | ||
| 1084 | * back from the fault handler in r8. Up to three arguments can be passed to the | ||
| 1085 | * callback function by returning an aggregate with the callback as its first | ||
| 1086 | * element, followed by the arguments. | ||
| 1087 | */ | ||
| 1088 | ENTRY(dispatch_illegal_op_fault) | ||
| 1089 | .prologue | ||
| 1090 | .body | ||
| 1091 | SAVE_MIN_WITH_COVER | ||
| 1092 | ssm psr.ic | PSR_DEFAULT_BITS | ||
| 1093 | ;; | ||
| 1094 | srlz.i // guarantee that interruption collection is on | ||
| 1095 | ;; | ||
| 1096 | (p15) ssm psr.i // restore psr.i | ||
| 1097 | adds r3=8,r2 // set up second base pointer for SAVE_REST | ||
| 1098 | ;; | ||
| 1099 | alloc r14=ar.pfs,0,0,1,0 // must be first in insn group | ||
| 1100 | mov out0=ar.ec | ||
| 1101 | ;; | ||
| 1102 | SAVE_REST | ||
| 1103 | PT_REGS_UNWIND_INFO(0) | ||
| 1104 | ;; | ||
| 1105 | br.call.sptk.many rp=ia64_illegal_op_fault | ||
| 1106 | .ret0: ;; | ||
| 1107 | alloc r14=ar.pfs,0,0,3,0 // must be first in insn group | ||
| 1108 | mov out0=r9 | ||
| 1109 | mov out1=r10 | ||
| 1110 | mov out2=r11 | ||
| 1111 | movl r15=ia64_leave_kernel | ||
| 1112 | ;; | ||
| 1113 | mov rp=r15 | ||
| 1114 | mov b6=r8 | ||
| 1115 | ;; | ||
| 1116 | cmp.ne p6,p0=0,r8 | ||
| 1117 | (p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel | ||
| 1118 | br.sptk.many ia64_leave_kernel | ||
| 1119 | END(dispatch_illegal_op_fault) | ||
| 1120 | |||
| 1121 | .org ia64_ivt+0x4000 | 1079 | .org ia64_ivt+0x4000 |
| 1122 | ///////////////////////////////////////////////////////////////////////////////////////// | 1080 | ///////////////////////////////////////////////////////////////////////////////////////// |
| 1123 | // 0x4000 Entry 16 (size 64 bundles) Reserved | 1081 | // 0x4000 Entry 16 (size 64 bundles) Reserved |
| @@ -1715,6 +1673,48 @@ END(ia32_interrupt) | |||
| 1715 | DBG_FAULT(67) | 1673 | DBG_FAULT(67) |
| 1716 | FAULT(67) | 1674 | FAULT(67) |
| 1717 | 1675 | ||
| 1676 | /* | ||
| 1677 | * Squatting in this space ... | ||
| 1678 | * | ||
| 1679 | * This special case dispatcher for illegal operation faults allows preserved | ||
| 1680 | * registers to be modified through a callback function (asm only) that is handed | ||
| 1681 | * back from the fault handler in r8. Up to three arguments can be passed to the | ||
| 1682 | * callback function by returning an aggregate with the callback as its first | ||
| 1683 | * element, followed by the arguments. | ||
| 1684 | */ | ||
| 1685 | ENTRY(dispatch_illegal_op_fault) | ||
| 1686 | .prologue | ||
| 1687 | .body | ||
| 1688 | SAVE_MIN_WITH_COVER | ||
| 1689 | ssm psr.ic | PSR_DEFAULT_BITS | ||
| 1690 | ;; | ||
| 1691 | srlz.i // guarantee that interruption collection is on | ||
| 1692 | ;; | ||
| 1693 | (p15) ssm psr.i // restore psr.i | ||
| 1694 | adds r3=8,r2 // set up second base pointer for SAVE_REST | ||
| 1695 | ;; | ||
| 1696 | alloc r14=ar.pfs,0,0,1,0 // must be first in insn group | ||
| 1697 | mov out0=ar.ec | ||
| 1698 | ;; | ||
| 1699 | SAVE_REST | ||
| 1700 | PT_REGS_UNWIND_INFO(0) | ||
| 1701 | ;; | ||
| 1702 | br.call.sptk.many rp=ia64_illegal_op_fault | ||
| 1703 | .ret0: ;; | ||
| 1704 | alloc r14=ar.pfs,0,0,3,0 // must be first in insn group | ||
| 1705 | mov out0=r9 | ||
| 1706 | mov out1=r10 | ||
| 1707 | mov out2=r11 | ||
| 1708 | movl r15=ia64_leave_kernel | ||
| 1709 | ;; | ||
| 1710 | mov rp=r15 | ||
| 1711 | mov b6=r8 | ||
| 1712 | ;; | ||
| 1713 | cmp.ne p6,p0=0,r8 | ||
| 1714 | (p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel | ||
| 1715 | br.sptk.many ia64_leave_kernel | ||
| 1716 | END(dispatch_illegal_op_fault) | ||
| 1717 | |||
| 1718 | #ifdef CONFIG_IA32_SUPPORT | 1718 | #ifdef CONFIG_IA32_SUPPORT |
| 1719 | 1719 | ||
| 1720 | /* | 1720 | /* |
diff --git a/arch/ia64/kernel/minstate.h b/arch/ia64/kernel/minstate.h index 7c548ac52bbc..74b6d670aaef 100644 --- a/arch/ia64/kernel/minstate.h +++ b/arch/ia64/kernel/minstate.h | |||
| @@ -15,6 +15,9 @@ | |||
| 15 | #define ACCOUNT_SYS_ENTER | 15 | #define ACCOUNT_SYS_ENTER |
| 16 | #endif | 16 | #endif |
| 17 | 17 | ||
| 18 | .section ".data.patch.rse", "a" | ||
| 19 | .previous | ||
| 20 | |||
| 18 | /* | 21 | /* |
| 19 | * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves | 22 | * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves |
| 20 | * the minimum state necessary that allows us to turn psr.ic back | 23 | * the minimum state necessary that allows us to turn psr.ic back |
| @@ -40,7 +43,7 @@ | |||
| 40 | * Note that psr.ic is NOT turned on by this macro. This is so that | 43 | * Note that psr.ic is NOT turned on by this macro. This is so that |
| 41 | * we can pass interruption state as arguments to a handler. | 44 | * we can pass interruption state as arguments to a handler. |
| 42 | */ | 45 | */ |
| 43 | #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA) \ | 46 | #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA,WORKAROUND) \ |
| 44 | mov r16=IA64_KR(CURRENT); /* M */ \ | 47 | mov r16=IA64_KR(CURRENT); /* M */ \ |
| 45 | mov r27=ar.rsc; /* M */ \ | 48 | mov r27=ar.rsc; /* M */ \ |
| 46 | mov r20=r1; /* A */ \ | 49 | mov r20=r1; /* A */ \ |
| @@ -87,6 +90,7 @@ | |||
| 87 | tbit.nz p15,p0=r29,IA64_PSR_I_BIT; \ | 90 | tbit.nz p15,p0=r29,IA64_PSR_I_BIT; \ |
| 88 | mov r29=b0 \ | 91 | mov r29=b0 \ |
| 89 | ;; \ | 92 | ;; \ |
| 93 | WORKAROUND; \ | ||
| 90 | adds r16=PT(R8),r1; /* initialize first base pointer */ \ | 94 | adds r16=PT(R8),r1; /* initialize first base pointer */ \ |
| 91 | adds r17=PT(R9),r1; /* initialize second base pointer */ \ | 95 | adds r17=PT(R9),r1; /* initialize second base pointer */ \ |
| 92 | (pKStk) mov r18=r0; /* make sure r18 isn't NaT */ \ | 96 | (pKStk) mov r18=r0; /* make sure r18 isn't NaT */ \ |
| @@ -206,6 +210,40 @@ | |||
| 206 | st8 [r25]=r10; /* ar.ssd */ \ | 210 | st8 [r25]=r10; /* ar.ssd */ \ |
| 207 | ;; | 211 | ;; |
| 208 | 212 | ||
| 209 | #define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs,) | 213 | #define RSE_WORKAROUND \ |
| 210 | #define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19) | 214 | (pUStk) extr.u r17=r18,3,6; \ |
| 211 | #define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, ) | 215 | (pUStk) sub r16=r18,r22; \ |
| 216 | [1:](pKStk) br.cond.sptk.many 1f; \ | ||
| 217 | .xdata4 ".data.patch.rse",1b-. \ | ||
| 218 | ;; \ | ||
| 219 | cmp.ge p6,p7 = 33,r17; \ | ||
| 220 | ;; \ | ||
| 221 | (p6) mov r17=0x310; \ | ||
| 222 | (p7) mov r17=0x308; \ | ||
| 223 | ;; \ | ||
| 224 | cmp.leu p1,p0=r16,r17; \ | ||
| 225 | (p1) br.cond.sptk.many 1f; \ | ||
| 226 | dep.z r17=r26,0,62; \ | ||
| 227 | movl r16=2f; \ | ||
| 228 | ;; \ | ||
| 229 | mov ar.pfs=r17; \ | ||
| 230 | dep r27=r0,r27,16,14; \ | ||
| 231 | mov b0=r16; \ | ||
| 232 | ;; \ | ||
| 233 | br.ret.sptk b0; \ | ||
| 234 | ;; \ | ||
| 235 | 2: \ | ||
| 236 | mov ar.rsc=r0 \ | ||
| 237 | ;; \ | ||
| 238 | flushrs; \ | ||
| 239 | ;; \ | ||
| 240 | mov ar.bspstore=r22 \ | ||
| 241 | ;; \ | ||
| 242 | mov r18=ar.bsp; \ | ||
| 243 | ;; \ | ||
| 244 | 1: \ | ||
| 245 | .pred.rel "mutex", pKStk, pUStk | ||
| 246 | |||
| 247 | #define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs, , RSE_WORKAROUND) | ||
| 248 | #define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19, RSE_WORKAROUND) | ||
| 249 | #define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, , ) | ||
diff --git a/arch/ia64/kernel/patch.c b/arch/ia64/kernel/patch.c index e0dca8743dbb..b83b2c516008 100644 --- a/arch/ia64/kernel/patch.c +++ b/arch/ia64/kernel/patch.c | |||
| @@ -115,6 +115,29 @@ ia64_patch_vtop (unsigned long start, unsigned long end) | |||
| 115 | ia64_srlz_i(); | 115 | ia64_srlz_i(); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | /* | ||
| 119 | * Disable the RSE workaround by turning the conditional branch | ||
| 120 | * that we tagged in each place the workaround was used into an | ||
| 121 | * unconditional branch. | ||
| 122 | */ | ||
| 123 | void __init | ||
| 124 | ia64_patch_rse (unsigned long start, unsigned long end) | ||
| 125 | { | ||
| 126 | s32 *offp = (s32 *) start; | ||
| 127 | u64 ip, *b; | ||
| 128 | |||
| 129 | while (offp < (s32 *) end) { | ||
| 130 | ip = (u64) offp + *offp; | ||
| 131 | |||
| 132 | b = (u64 *)(ip & -16); | ||
| 133 | b[1] &= ~0xf800000L; | ||
| 134 | ia64_fc((void *) ip); | ||
| 135 | ++offp; | ||
| 136 | } | ||
| 137 | ia64_sync_i(); | ||
| 138 | ia64_srlz_i(); | ||
| 139 | } | ||
| 140 | |||
| 118 | void __init | 141 | void __init |
| 119 | ia64_patch_mckinley_e9 (unsigned long start, unsigned long end) | 142 | ia64_patch_mckinley_e9 (unsigned long start, unsigned long end) |
| 120 | { | 143 | { |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index e9596cd0cdab..f48a809c686d 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
| @@ -560,6 +560,17 @@ setup_arch (char **cmdline_p) | |||
| 560 | /* process SAL system table: */ | 560 | /* process SAL system table: */ |
| 561 | ia64_sal_init(__va(efi.sal_systab)); | 561 | ia64_sal_init(__va(efi.sal_systab)); |
| 562 | 562 | ||
| 563 | #ifdef CONFIG_ITANIUM | ||
| 564 | ia64_patch_rse((u64) __start___rse_patchlist, (u64) __end___rse_patchlist); | ||
| 565 | #else | ||
| 566 | { | ||
| 567 | u64 num_phys_stacked; | ||
| 568 | |||
| 569 | if (ia64_pal_rse_info(&num_phys_stacked, 0) == 0 && num_phys_stacked > 96) | ||
| 570 | ia64_patch_rse((u64) __start___rse_patchlist, (u64) __end___rse_patchlist); | ||
| 571 | } | ||
| 572 | #endif | ||
| 573 | |||
| 563 | #ifdef CONFIG_SMP | 574 | #ifdef CONFIG_SMP |
| 564 | cpu_physical_id(0) = hard_smp_processor_id(); | 575 | cpu_physical_id(0) = hard_smp_processor_id(); |
| 565 | #endif | 576 | #endif |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 80622acc95de..5929ab10a289 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -156,6 +156,13 @@ SECTIONS | |||
| 156 | __end___vtop_patchlist = .; | 156 | __end___vtop_patchlist = .; |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | .data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET) | ||
| 160 | { | ||
| 161 | __start___rse_patchlist = .; | ||
| 162 | *(.data.patch.rse) | ||
| 163 | __end___rse_patchlist = .; | ||
| 164 | } | ||
| 165 | |||
| 159 | .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) | 166 | .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) |
| 160 | { | 167 | { |
| 161 | __start___mckinley_e9_bundles = .; | 168 | __start___mckinley_e9_bundles = .; |
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts index 08a780d89807..fa9b6bbeb5af 100644 --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts | |||
| @@ -251,14 +251,14 @@ | |||
| 251 | dma@c300 { | 251 | dma@c300 { |
| 252 | #address-cells = <1>; | 252 | #address-cells = <1>; |
| 253 | #size-cells = <1>; | 253 | #size-cells = <1>; |
| 254 | compatible = "fsl,mpc8610-dma", "fsl,mpc8540-dma"; | 254 | compatible = "fsl,mpc8610-dma", "fsl,eloplus-dma"; |
| 255 | cell-index = <1>; | 255 | cell-index = <1>; |
| 256 | reg = <0xc300 0x4>; /* DMA general status register */ | 256 | reg = <0xc300 0x4>; /* DMA general status register */ |
| 257 | ranges = <0x0 0xc100 0x200>; | 257 | ranges = <0x0 0xc100 0x200>; |
| 258 | 258 | ||
| 259 | dma-channel@0 { | 259 | dma-channel@0 { |
| 260 | compatible = "fsl,mpc8610-dma-channel", | 260 | compatible = "fsl,mpc8610-dma-channel", |
| 261 | "fsl,mpc8540-dma-channel"; | 261 | "fsl,eloplus-dma-channel"; |
| 262 | cell-index = <0>; | 262 | cell-index = <0>; |
| 263 | reg = <0x0 0x80>; | 263 | reg = <0x0 0x80>; |
| 264 | interrupt-parent = <&mpic>; | 264 | interrupt-parent = <&mpic>; |
| @@ -266,7 +266,7 @@ | |||
| 266 | }; | 266 | }; |
| 267 | dma-channel@1 { | 267 | dma-channel@1 { |
| 268 | compatible = "fsl,mpc8610-dma-channel", | 268 | compatible = "fsl,mpc8610-dma-channel", |
| 269 | "fsl,mpc8540-dma-channel"; | 269 | "fsl,eloplus-dma-channel"; |
| 270 | cell-index = <1>; | 270 | cell-index = <1>; |
| 271 | reg = <0x80 0x80>; | 271 | reg = <0x80 0x80>; |
| 272 | interrupt-parent = <&mpic>; | 272 | interrupt-parent = <&mpic>; |
| @@ -274,7 +274,7 @@ | |||
| 274 | }; | 274 | }; |
| 275 | dma-channel@2 { | 275 | dma-channel@2 { |
| 276 | compatible = "fsl,mpc8610-dma-channel", | 276 | compatible = "fsl,mpc8610-dma-channel", |
| 277 | "fsl,mpc8540-dma-channel"; | 277 | "fsl,eloplus-dma-channel"; |
| 278 | cell-index = <2>; | 278 | cell-index = <2>; |
| 279 | reg = <0x100 0x80>; | 279 | reg = <0x100 0x80>; |
| 280 | interrupt-parent = <&mpic>; | 280 | interrupt-parent = <&mpic>; |
| @@ -282,7 +282,7 @@ | |||
| 282 | }; | 282 | }; |
| 283 | dma-channel@3 { | 283 | dma-channel@3 { |
| 284 | compatible = "fsl,mpc8610-dma-channel", | 284 | compatible = "fsl,mpc8610-dma-channel", |
| 285 | "fsl,mpc8540-dma-channel"; | 285 | "fsl,eloplus-dma-channel"; |
| 286 | cell-index = <3>; | 286 | cell-index = <3>; |
| 287 | reg = <0x180 0x80>; | 287 | reg = <0x180 0x80>; |
| 288 | interrupt-parent = <&mpic>; | 288 | interrupt-parent = <&mpic>; |
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig index 09f306248f2e..199e5f59d7a6 100644 --- a/arch/powerpc/configs/pasemi_defconfig +++ b/arch/powerpc/configs/pasemi_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.25-rc6 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Tue Mar 25 10:25:48 2008 | 4 | # Tue May 27 16:08:06 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | 7 | ||
| @@ -29,6 +29,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y | |||
| 29 | CONFIG_GENERIC_HARDIRQS=y | 29 | CONFIG_GENERIC_HARDIRQS=y |
| 30 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | 30 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y |
| 31 | CONFIG_IRQ_PER_CPU=y | 31 | CONFIG_IRQ_PER_CPU=y |
| 32 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 33 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 34 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 32 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 35 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 33 | CONFIG_ARCH_HAS_ILOG2_U32=y | 36 | CONFIG_ARCH_HAS_ILOG2_U32=y |
| 34 | CONFIG_ARCH_HAS_ILOG2_U64=y | 37 | CONFIG_ARCH_HAS_ILOG2_U64=y |
| @@ -87,6 +90,7 @@ CONFIG_INITRAMFS_SOURCE="" | |||
| 87 | CONFIG_SYSCTL=y | 90 | CONFIG_SYSCTL=y |
| 88 | # CONFIG_EMBEDDED is not set | 91 | # CONFIG_EMBEDDED is not set |
| 89 | CONFIG_SYSCTL_SYSCALL=y | 92 | CONFIG_SYSCTL_SYSCALL=y |
| 93 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
| 90 | CONFIG_KALLSYMS=y | 94 | CONFIG_KALLSYMS=y |
| 91 | # CONFIG_KALLSYMS_ALL is not set | 95 | # CONFIG_KALLSYMS_ALL is not set |
| 92 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 96 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -115,12 +119,14 @@ CONFIG_HAVE_OPROFILE=y | |||
| 115 | # CONFIG_KPROBES is not set | 119 | # CONFIG_KPROBES is not set |
| 116 | CONFIG_HAVE_KPROBES=y | 120 | CONFIG_HAVE_KPROBES=y |
| 117 | CONFIG_HAVE_KRETPROBES=y | 121 | CONFIG_HAVE_KRETPROBES=y |
| 122 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 118 | CONFIG_PROC_PAGE_MONITOR=y | 123 | CONFIG_PROC_PAGE_MONITOR=y |
| 119 | CONFIG_SLABINFO=y | 124 | CONFIG_SLABINFO=y |
| 120 | CONFIG_RT_MUTEXES=y | 125 | CONFIG_RT_MUTEXES=y |
| 121 | # CONFIG_TINY_SHMEM is not set | 126 | # CONFIG_TINY_SHMEM is not set |
| 122 | CONFIG_BASE_SMALL=0 | 127 | CONFIG_BASE_SMALL=0 |
| 123 | CONFIG_MODULES=y | 128 | CONFIG_MODULES=y |
| 129 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 124 | CONFIG_MODULE_UNLOAD=y | 130 | CONFIG_MODULE_UNLOAD=y |
| 125 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 131 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 126 | # CONFIG_MODVERSIONS is not set | 132 | # CONFIG_MODVERSIONS is not set |
| @@ -167,11 +173,11 @@ CONFIG_PPC_PASEMI=y | |||
| 167 | CONFIG_PPC_PASEMI_IOMMU=y | 173 | CONFIG_PPC_PASEMI_IOMMU=y |
| 168 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set | 174 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set |
| 169 | CONFIG_PPC_PASEMI_MDIO=y | 175 | CONFIG_PPC_PASEMI_MDIO=y |
| 170 | # CONFIG_PPC_CELLEB is not set | ||
| 171 | # CONFIG_PPC_PS3 is not set | 176 | # CONFIG_PPC_PS3 is not set |
| 172 | # CONFIG_PPC_CELL is not set | 177 | # CONFIG_PPC_CELL is not set |
| 173 | # CONFIG_PPC_CELL_NATIVE is not set | 178 | # CONFIG_PPC_CELL_NATIVE is not set |
| 174 | # CONFIG_PPC_IBM_CELL_BLADE is not set | 179 | # CONFIG_PPC_IBM_CELL_BLADE is not set |
| 180 | # CONFIG_PPC_CELLEB is not set | ||
| 175 | # CONFIG_PQ2ADS is not set | 181 | # CONFIG_PQ2ADS is not set |
| 176 | CONFIG_PPC_NATIVE=y | 182 | CONFIG_PPC_NATIVE=y |
| 177 | # CONFIG_IPIC is not set | 183 | # CONFIG_IPIC is not set |
| @@ -192,6 +198,7 @@ CONFIG_CPU_FREQ_DEBUG=y | |||
| 192 | CONFIG_CPU_FREQ_STAT=y | 198 | CONFIG_CPU_FREQ_STAT=y |
| 193 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 199 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
| 194 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 200 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y |
| 201 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 202 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 196 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 203 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set |
| 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 204 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| @@ -226,7 +233,6 @@ CONFIG_PREEMPT_NONE=y | |||
| 226 | CONFIG_BINFMT_ELF=y | 233 | CONFIG_BINFMT_ELF=y |
| 227 | CONFIG_COMPAT_BINFMT_ELF=y | 234 | CONFIG_COMPAT_BINFMT_ELF=y |
| 228 | # CONFIG_BINFMT_MISC is not set | 235 | # CONFIG_BINFMT_MISC is not set |
| 229 | CONFIG_FORCE_MAX_ZONEORDER=9 | ||
| 230 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y | 236 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y |
| 231 | CONFIG_IOMMU_VMERGE=y | 237 | CONFIG_IOMMU_VMERGE=y |
| 232 | CONFIG_IOMMU_HELPER=y | 238 | CONFIG_IOMMU_HELPER=y |
| @@ -249,12 +255,14 @@ CONFIG_FLATMEM=y | |||
| 249 | CONFIG_FLAT_NODE_MEM_MAP=y | 255 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 250 | # CONFIG_SPARSEMEM_STATIC is not set | 256 | # CONFIG_SPARSEMEM_STATIC is not set |
| 251 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | 257 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y |
| 258 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 252 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 259 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 253 | CONFIG_RESOURCES_64BIT=y | 260 | CONFIG_RESOURCES_64BIT=y |
| 254 | CONFIG_ZONE_DMA_FLAG=1 | 261 | CONFIG_ZONE_DMA_FLAG=1 |
| 255 | CONFIG_BOUNCE=y | 262 | CONFIG_BOUNCE=y |
| 256 | CONFIG_PPC_HAS_HASH_64K=y | 263 | CONFIG_PPC_HAS_HASH_64K=y |
| 257 | CONFIG_PPC_64K_PAGES=y | 264 | CONFIG_PPC_64K_PAGES=y |
| 265 | CONFIG_FORCE_MAX_ZONEORDER=9 | ||
| 258 | # CONFIG_PPC_SUBPAGE_PROT is not set | 266 | # CONFIG_PPC_SUBPAGE_PROT is not set |
| 259 | # CONFIG_SCHED_SMT is not set | 267 | # CONFIG_SCHED_SMT is not set |
| 260 | CONFIG_PROC_DEVICETREE=y | 268 | CONFIG_PROC_DEVICETREE=y |
| @@ -290,9 +298,12 @@ CONFIG_CARDBUS=y | |||
| 290 | # CONFIG_YENTA is not set | 298 | # CONFIG_YENTA is not set |
| 291 | # CONFIG_PD6729 is not set | 299 | # CONFIG_PD6729 is not set |
| 292 | # CONFIG_I82092 is not set | 300 | # CONFIG_I82092 is not set |
| 293 | # CONFIG_ELECTRA_CF is not set | 301 | CONFIG_ELECTRA_CF=y |
| 294 | # CONFIG_HOTPLUG_PCI is not set | 302 | # CONFIG_HOTPLUG_PCI is not set |
| 303 | # CONFIG_HAS_RAPIDIO is not set | ||
| 304 | CONFIG_PAGE_OFFSET=0xc000000000000000 | ||
| 295 | CONFIG_KERNEL_START=0xc000000000000000 | 305 | CONFIG_KERNEL_START=0xc000000000000000 |
| 306 | CONFIG_PHYSICAL_START=0x00000000 | ||
| 296 | 307 | ||
| 297 | # | 308 | # |
| 298 | # Networking | 309 | # Networking |
| @@ -341,8 +352,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 341 | CONFIG_DEFAULT_TCP_CONG="cubic" | 352 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 342 | # CONFIG_TCP_MD5SIG is not set | 353 | # CONFIG_TCP_MD5SIG is not set |
| 343 | # CONFIG_IPV6 is not set | 354 | # CONFIG_IPV6 is not set |
| 344 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 345 | # CONFIG_INET6_TUNNEL is not set | ||
| 346 | # CONFIG_NETWORK_SECMARK is not set | 355 | # CONFIG_NETWORK_SECMARK is not set |
| 347 | # CONFIG_NETFILTER is not set | 356 | # CONFIG_NETFILTER is not set |
| 348 | # CONFIG_IP_DCCP is not set | 357 | # CONFIG_IP_DCCP is not set |
| @@ -473,6 +482,7 @@ CONFIG_MTD_NAND_PASEMI=y | |||
| 473 | # | 482 | # |
| 474 | # CONFIG_MTD_UBI is not set | 483 | # CONFIG_MTD_UBI is not set |
| 475 | CONFIG_OF_DEVICE=y | 484 | CONFIG_OF_DEVICE=y |
| 485 | CONFIG_OF_I2C=y | ||
| 476 | # CONFIG_PARPORT is not set | 486 | # CONFIG_PARPORT is not set |
| 477 | CONFIG_BLK_DEV=y | 487 | CONFIG_BLK_DEV=y |
| 478 | # CONFIG_BLK_DEV_FD is not set | 488 | # CONFIG_BLK_DEV_FD is not set |
| @@ -520,7 +530,6 @@ CONFIG_IDE_PROC_FS=y | |||
| 520 | # | 530 | # |
| 521 | # IDE chipset support/bugfixes | 531 | # IDE chipset support/bugfixes |
| 522 | # | 532 | # |
| 523 | # CONFIG_IDE_GENERIC is not set | ||
| 524 | # CONFIG_BLK_DEV_PLATFORM is not set | 533 | # CONFIG_BLK_DEV_PLATFORM is not set |
| 525 | 534 | ||
| 526 | # | 535 | # |
| @@ -554,7 +563,7 @@ CONFIG_IDE_PROC_FS=y | |||
| 554 | # CONFIG_BLK_DEV_VIA82CXXX is not set | 563 | # CONFIG_BLK_DEV_VIA82CXXX is not set |
| 555 | # CONFIG_BLK_DEV_TC86C001 is not set | 564 | # CONFIG_BLK_DEV_TC86C001 is not set |
| 556 | # CONFIG_BLK_DEV_IDEDMA is not set | 565 | # CONFIG_BLK_DEV_IDEDMA is not set |
| 557 | CONFIG_IDE_ARCH_OBSOLETE_INIT=y | 566 | # CONFIG_BLK_DEV_HD_ONLY is not set |
| 558 | # CONFIG_BLK_DEV_HD is not set | 567 | # CONFIG_BLK_DEV_HD is not set |
| 559 | 568 | ||
| 560 | # | 569 | # |
| @@ -632,7 +641,10 @@ CONFIG_SCSI_LOWLEVEL=y | |||
| 632 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | 641 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set |
| 633 | CONFIG_ATA=y | 642 | CONFIG_ATA=y |
| 634 | # CONFIG_ATA_NONSTANDARD is not set | 643 | # CONFIG_ATA_NONSTANDARD is not set |
| 644 | CONFIG_SATA_PMP=y | ||
| 635 | # CONFIG_SATA_AHCI is not set | 645 | # CONFIG_SATA_AHCI is not set |
| 646 | CONFIG_SATA_SIL24=y | ||
| 647 | CONFIG_ATA_SFF=y | ||
| 636 | # CONFIG_SATA_SVW is not set | 648 | # CONFIG_SATA_SVW is not set |
| 637 | # CONFIG_ATA_PIIX is not set | 649 | # CONFIG_ATA_PIIX is not set |
| 638 | CONFIG_SATA_MV=y | 650 | CONFIG_SATA_MV=y |
| @@ -642,7 +654,6 @@ CONFIG_SATA_MV=y | |||
| 642 | # CONFIG_SATA_PROMISE is not set | 654 | # CONFIG_SATA_PROMISE is not set |
| 643 | # CONFIG_SATA_SX4 is not set | 655 | # CONFIG_SATA_SX4 is not set |
| 644 | # CONFIG_SATA_SIL is not set | 656 | # CONFIG_SATA_SIL is not set |
| 645 | CONFIG_SATA_SIL24=y | ||
| 646 | # CONFIG_SATA_SIS is not set | 657 | # CONFIG_SATA_SIS is not set |
| 647 | # CONFIG_SATA_ULI is not set | 658 | # CONFIG_SATA_ULI is not set |
| 648 | # CONFIG_SATA_VIA is not set | 659 | # CONFIG_SATA_VIA is not set |
| @@ -689,6 +700,7 @@ CONFIG_PATA_PCMCIA=y | |||
| 689 | # CONFIG_PATA_WINBOND is not set | 700 | # CONFIG_PATA_WINBOND is not set |
| 690 | CONFIG_PATA_PLATFORM=y | 701 | CONFIG_PATA_PLATFORM=y |
| 691 | CONFIG_PATA_OF_PLATFORM=y | 702 | CONFIG_PATA_OF_PLATFORM=y |
| 703 | # CONFIG_PATA_SCH is not set | ||
| 692 | CONFIG_MD=y | 704 | CONFIG_MD=y |
| 693 | CONFIG_BLK_DEV_MD=y | 705 | CONFIG_BLK_DEV_MD=y |
| 694 | CONFIG_MD_LINEAR=y | 706 | CONFIG_MD_LINEAR=y |
| @@ -791,7 +803,6 @@ CONFIG_E1000_NAPI=y | |||
| 791 | # CONFIG_SIS190 is not set | 803 | # CONFIG_SIS190 is not set |
| 792 | # CONFIG_SKGE is not set | 804 | # CONFIG_SKGE is not set |
| 793 | # CONFIG_SKY2 is not set | 805 | # CONFIG_SKY2 is not set |
| 794 | # CONFIG_SK98LIN is not set | ||
| 795 | # CONFIG_VIA_VELOCITY is not set | 806 | # CONFIG_VIA_VELOCITY is not set |
| 796 | CONFIG_TIGON3=y | 807 | CONFIG_TIGON3=y |
| 797 | # CONFIG_BNX2 is not set | 808 | # CONFIG_BNX2 is not set |
| @@ -810,6 +821,7 @@ CONFIG_PASEMI_MAC=y | |||
| 810 | # CONFIG_MLX4_CORE is not set | 821 | # CONFIG_MLX4_CORE is not set |
| 811 | # CONFIG_TEHUTI is not set | 822 | # CONFIG_TEHUTI is not set |
| 812 | # CONFIG_BNX2X is not set | 823 | # CONFIG_BNX2X is not set |
| 824 | # CONFIG_SFC is not set | ||
| 813 | # CONFIG_TR is not set | 825 | # CONFIG_TR is not set |
| 814 | 826 | ||
| 815 | # | 827 | # |
| @@ -817,6 +829,7 @@ CONFIG_PASEMI_MAC=y | |||
| 817 | # | 829 | # |
| 818 | # CONFIG_WLAN_PRE80211 is not set | 830 | # CONFIG_WLAN_PRE80211 is not set |
| 819 | # CONFIG_WLAN_80211 is not set | 831 | # CONFIG_WLAN_80211 is not set |
| 832 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 820 | 833 | ||
| 821 | # | 834 | # |
| 822 | # USB Network Adapters | 835 | # USB Network Adapters |
| @@ -890,6 +903,7 @@ CONFIG_VT=y | |||
| 890 | CONFIG_VT_CONSOLE=y | 903 | CONFIG_VT_CONSOLE=y |
| 891 | CONFIG_HW_CONSOLE=y | 904 | CONFIG_HW_CONSOLE=y |
| 892 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | 905 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
| 906 | CONFIG_DEVKMEM=y | ||
| 893 | # CONFIG_SERIAL_NONSTANDARD is not set | 907 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 894 | # CONFIG_NOZOMI is not set | 908 | # CONFIG_NOZOMI is not set |
| 895 | 909 | ||
| @@ -917,7 +931,6 @@ CONFIG_LEGACY_PTY_COUNT=4 | |||
| 917 | # CONFIG_IPMI_HANDLER is not set | 931 | # CONFIG_IPMI_HANDLER is not set |
| 918 | CONFIG_HW_RANDOM=y | 932 | CONFIG_HW_RANDOM=y |
| 919 | CONFIG_HW_RANDOM_PASEMI=y | 933 | CONFIG_HW_RANDOM_PASEMI=y |
| 920 | # CONFIG_GEN_RTC is not set | ||
| 921 | # CONFIG_R3964 is not set | 934 | # CONFIG_R3964 is not set |
| 922 | # CONFIG_APPLICOM is not set | 935 | # CONFIG_APPLICOM is not set |
| 923 | 936 | ||
| @@ -936,13 +949,7 @@ CONFIG_DEVPORT=y | |||
| 936 | CONFIG_I2C=y | 949 | CONFIG_I2C=y |
| 937 | CONFIG_I2C_BOARDINFO=y | 950 | CONFIG_I2C_BOARDINFO=y |
| 938 | CONFIG_I2C_CHARDEV=y | 951 | CONFIG_I2C_CHARDEV=y |
| 939 | |||
| 940 | # | ||
| 941 | # I2C Algorithms | ||
| 942 | # | ||
| 943 | CONFIG_I2C_ALGOBIT=y | 952 | CONFIG_I2C_ALGOBIT=y |
| 944 | CONFIG_I2C_ALGOPCF=y | ||
| 945 | CONFIG_I2C_ALGOPCA=y | ||
| 946 | 953 | ||
| 947 | # | 954 | # |
| 948 | # I2C Hardware Bus support | 955 | # I2C Hardware Bus support |
| @@ -971,6 +978,7 @@ CONFIG_I2C_PASEMI=y | |||
| 971 | # CONFIG_I2C_VIA is not set | 978 | # CONFIG_I2C_VIA is not set |
| 972 | # CONFIG_I2C_VIAPRO is not set | 979 | # CONFIG_I2C_VIAPRO is not set |
| 973 | # CONFIG_I2C_VOODOO3 is not set | 980 | # CONFIG_I2C_VOODOO3 is not set |
| 981 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 974 | 982 | ||
| 975 | # | 983 | # |
| 976 | # Miscellaneous I2C Chip support | 984 | # Miscellaneous I2C Chip support |
| @@ -980,19 +988,13 @@ CONFIG_SENSORS_EEPROM=y | |||
| 980 | # CONFIG_SENSORS_PCF8574 is not set | 988 | # CONFIG_SENSORS_PCF8574 is not set |
| 981 | # CONFIG_PCF8575 is not set | 989 | # CONFIG_PCF8575 is not set |
| 982 | # CONFIG_SENSORS_PCF8591 is not set | 990 | # CONFIG_SENSORS_PCF8591 is not set |
| 983 | # CONFIG_TPS65010 is not set | ||
| 984 | # CONFIG_SENSORS_MAX6875 is not set | 991 | # CONFIG_SENSORS_MAX6875 is not set |
| 985 | # CONFIG_SENSORS_TSL2550 is not set | 992 | # CONFIG_SENSORS_TSL2550 is not set |
| 986 | # CONFIG_I2C_DEBUG_CORE is not set | 993 | # CONFIG_I2C_DEBUG_CORE is not set |
| 987 | # CONFIG_I2C_DEBUG_ALGO is not set | 994 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 988 | # CONFIG_I2C_DEBUG_BUS is not set | 995 | # CONFIG_I2C_DEBUG_BUS is not set |
| 989 | # CONFIG_I2C_DEBUG_CHIP is not set | 996 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 990 | |||
| 991 | # | ||
| 992 | # SPI support | ||
| 993 | # | ||
| 994 | # CONFIG_SPI is not set | 997 | # CONFIG_SPI is not set |
| 995 | # CONFIG_SPI_MASTER is not set | ||
| 996 | # CONFIG_W1 is not set | 998 | # CONFIG_W1 is not set |
| 997 | # CONFIG_POWER_SUPPLY is not set | 999 | # CONFIG_POWER_SUPPLY is not set |
| 998 | CONFIG_HWMON=y | 1000 | CONFIG_HWMON=y |
| @@ -1062,12 +1064,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 1062 | # Multifunction device drivers | 1064 | # Multifunction device drivers |
| 1063 | # | 1065 | # |
| 1064 | # CONFIG_MFD_SM501 is not set | 1066 | # CONFIG_MFD_SM501 is not set |
| 1067 | # CONFIG_HTC_PASIC3 is not set | ||
| 1065 | 1068 | ||
| 1066 | # | 1069 | # |
| 1067 | # Multimedia devices | 1070 | # Multimedia devices |
| 1068 | # | 1071 | # |
| 1072 | |||
| 1073 | # | ||
| 1074 | # Multimedia core support | ||
| 1075 | # | ||
| 1069 | # CONFIG_VIDEO_DEV is not set | 1076 | # CONFIG_VIDEO_DEV is not set |
| 1070 | # CONFIG_DVB_CORE is not set | 1077 | # CONFIG_DVB_CORE is not set |
| 1078 | # CONFIG_VIDEO_MEDIA is not set | ||
| 1079 | |||
| 1080 | # | ||
| 1081 | # Multimedia drivers | ||
| 1082 | # | ||
| 1071 | CONFIG_DAB=y | 1083 | CONFIG_DAB=y |
| 1072 | # CONFIG_USB_DABUSB is not set | 1084 | # CONFIG_USB_DABUSB is not set |
| 1073 | 1085 | ||
| @@ -1094,8 +1106,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 1094 | # CONFIG_FB_SYS_FILLRECT is not set | 1106 | # CONFIG_FB_SYS_FILLRECT is not set |
| 1095 | # CONFIG_FB_SYS_COPYAREA is not set | 1107 | # CONFIG_FB_SYS_COPYAREA is not set |
| 1096 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 1108 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 1109 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 1097 | # CONFIG_FB_SYS_FOPS is not set | 1110 | # CONFIG_FB_SYS_FOPS is not set |
| 1098 | CONFIG_FB_DEFERRED_IO=y | ||
| 1099 | # CONFIG_FB_SVGALIB is not set | 1111 | # CONFIG_FB_SVGALIB is not set |
| 1100 | CONFIG_FB_MACMODES=y | 1112 | CONFIG_FB_MACMODES=y |
| 1101 | CONFIG_FB_BACKLIGHT=y | 1113 | CONFIG_FB_BACKLIGHT=y |
| @@ -1213,6 +1225,7 @@ CONFIG_SND_VERBOSE_PROCFS=y | |||
| 1213 | # CONFIG_SND_AU8810 is not set | 1225 | # CONFIG_SND_AU8810 is not set |
| 1214 | # CONFIG_SND_AU8820 is not set | 1226 | # CONFIG_SND_AU8820 is not set |
| 1215 | # CONFIG_SND_AU8830 is not set | 1227 | # CONFIG_SND_AU8830 is not set |
| 1228 | # CONFIG_SND_AW2 is not set | ||
| 1216 | # CONFIG_SND_AZT3328 is not set | 1229 | # CONFIG_SND_AZT3328 is not set |
| 1217 | # CONFIG_SND_BT87X is not set | 1230 | # CONFIG_SND_BT87X is not set |
| 1218 | # CONFIG_SND_CA0106 is not set | 1231 | # CONFIG_SND_CA0106 is not set |
| @@ -1292,11 +1305,11 @@ CONFIG_SND_USB_USX2Y=y | |||
| 1292 | # CONFIG_SND_SOC is not set | 1305 | # CONFIG_SND_SOC is not set |
| 1293 | 1306 | ||
| 1294 | # | 1307 | # |
| 1295 | # SoC Audio support for SuperH | 1308 | # ALSA SoC audio for Freescale SOCs |
| 1296 | # | 1309 | # |
| 1297 | 1310 | ||
| 1298 | # | 1311 | # |
| 1299 | # ALSA SoC audio for Freescale SOCs | 1312 | # SoC Audio for the Texas Instruments OMAP |
| 1300 | # | 1313 | # |
| 1301 | 1314 | ||
| 1302 | # | 1315 | # |
| @@ -1334,11 +1347,13 @@ CONFIG_USB_DEVICEFS=y | |||
| 1334 | # | 1347 | # |
| 1335 | # USB Host Controller Drivers | 1348 | # USB Host Controller Drivers |
| 1336 | # | 1349 | # |
| 1350 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1337 | CONFIG_USB_EHCI_HCD=y | 1351 | CONFIG_USB_EHCI_HCD=y |
| 1338 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1352 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 1339 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1353 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
| 1340 | CONFIG_USB_EHCI_HCD_PPC_OF=y | 1354 | CONFIG_USB_EHCI_HCD_PPC_OF=y |
| 1341 | # CONFIG_USB_ISP116X_HCD is not set | 1355 | # CONFIG_USB_ISP116X_HCD is not set |
| 1356 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1342 | CONFIG_USB_OHCI_HCD=y | 1357 | CONFIG_USB_OHCI_HCD=y |
| 1343 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set | 1358 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set |
| 1344 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | 1359 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set |
| @@ -1354,6 +1369,7 @@ CONFIG_USB_SL811_HCD=y | |||
| 1354 | # | 1369 | # |
| 1355 | # CONFIG_USB_ACM is not set | 1370 | # CONFIG_USB_ACM is not set |
| 1356 | # CONFIG_USB_PRINTER is not set | 1371 | # CONFIG_USB_PRINTER is not set |
| 1372 | # CONFIG_USB_WDM is not set | ||
| 1357 | 1373 | ||
| 1358 | # | 1374 | # |
| 1359 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1375 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| @@ -1375,6 +1391,7 @@ CONFIG_USB_STORAGE=y | |||
| 1375 | # CONFIG_USB_STORAGE_ALAUDA is not set | 1391 | # CONFIG_USB_STORAGE_ALAUDA is not set |
| 1376 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 1392 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
| 1377 | # CONFIG_USB_STORAGE_KARMA is not set | 1393 | # CONFIG_USB_STORAGE_KARMA is not set |
| 1394 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1378 | CONFIG_USB_LIBUSUAL=y | 1395 | CONFIG_USB_LIBUSUAL=y |
| 1379 | 1396 | ||
| 1380 | # | 1397 | # |
| @@ -1416,6 +1433,7 @@ CONFIG_USB_LIBUSUAL=y | |||
| 1416 | # CONFIG_MMC is not set | 1433 | # CONFIG_MMC is not set |
| 1417 | # CONFIG_MEMSTICK is not set | 1434 | # CONFIG_MEMSTICK is not set |
| 1418 | # CONFIG_NEW_LEDS is not set | 1435 | # CONFIG_NEW_LEDS is not set |
| 1436 | # CONFIG_ACCESSIBILITY is not set | ||
| 1419 | # CONFIG_INFINIBAND is not set | 1437 | # CONFIG_INFINIBAND is not set |
| 1420 | CONFIG_EDAC=y | 1438 | CONFIG_EDAC=y |
| 1421 | 1439 | ||
| @@ -1475,10 +1493,6 @@ CONFIG_RTC_DRV_DS1307=y | |||
| 1475 | # on-CPU RTC drivers | 1493 | # on-CPU RTC drivers |
| 1476 | # | 1494 | # |
| 1477 | # CONFIG_DMADEVICES is not set | 1495 | # CONFIG_DMADEVICES is not set |
| 1478 | |||
| 1479 | # | ||
| 1480 | # Userspace I/O | ||
| 1481 | # | ||
| 1482 | # CONFIG_UIO is not set | 1496 | # CONFIG_UIO is not set |
| 1483 | 1497 | ||
| 1484 | # | 1498 | # |
| @@ -1576,12 +1590,10 @@ CONFIG_NFS_FS=y | |||
| 1576 | CONFIG_NFS_V3=y | 1590 | CONFIG_NFS_V3=y |
| 1577 | # CONFIG_NFS_V3_ACL is not set | 1591 | # CONFIG_NFS_V3_ACL is not set |
| 1578 | # CONFIG_NFS_V4 is not set | 1592 | # CONFIG_NFS_V4 is not set |
| 1579 | # CONFIG_NFS_DIRECTIO is not set | ||
| 1580 | CONFIG_NFSD=y | 1593 | CONFIG_NFSD=y |
| 1581 | CONFIG_NFSD_V3=y | 1594 | CONFIG_NFSD_V3=y |
| 1582 | # CONFIG_NFSD_V3_ACL is not set | 1595 | # CONFIG_NFSD_V3_ACL is not set |
| 1583 | CONFIG_NFSD_V4=y | 1596 | CONFIG_NFSD_V4=y |
| 1584 | CONFIG_NFSD_TCP=y | ||
| 1585 | CONFIG_ROOT_NFS=y | 1597 | CONFIG_ROOT_NFS=y |
| 1586 | CONFIG_LOCKD=y | 1598 | CONFIG_LOCKD=y |
| 1587 | CONFIG_LOCKD_V4=y | 1599 | CONFIG_LOCKD_V4=y |
| @@ -1665,9 +1677,10 @@ CONFIG_NLS_ISO8859_1=y | |||
| 1665 | # Library routines | 1677 | # Library routines |
| 1666 | # | 1678 | # |
| 1667 | CONFIG_BITREVERSE=y | 1679 | CONFIG_BITREVERSE=y |
| 1680 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1668 | CONFIG_CRC_CCITT=y | 1681 | CONFIG_CRC_CCITT=y |
| 1669 | # CONFIG_CRC16 is not set | 1682 | # CONFIG_CRC16 is not set |
| 1670 | # CONFIG_CRC_ITU_T is not set | 1683 | CONFIG_CRC_ITU_T=y |
| 1671 | CONFIG_CRC32=y | 1684 | CONFIG_CRC32=y |
| 1672 | # CONFIG_CRC7 is not set | 1685 | # CONFIG_CRC7 is not set |
| 1673 | CONFIG_LIBCRC32C=m | 1686 | CONFIG_LIBCRC32C=m |
| @@ -1677,6 +1690,7 @@ CONFIG_PLIST=y | |||
| 1677 | CONFIG_HAS_IOMEM=y | 1690 | CONFIG_HAS_IOMEM=y |
| 1678 | CONFIG_HAS_IOPORT=y | 1691 | CONFIG_HAS_IOPORT=y |
| 1679 | CONFIG_HAS_DMA=y | 1692 | CONFIG_HAS_DMA=y |
| 1693 | CONFIG_HAVE_LMB=y | ||
| 1680 | 1694 | ||
| 1681 | # | 1695 | # |
| 1682 | # Kernel hacking | 1696 | # Kernel hacking |
| @@ -1684,6 +1698,7 @@ CONFIG_HAS_DMA=y | |||
| 1684 | # CONFIG_PRINTK_TIME is not set | 1698 | # CONFIG_PRINTK_TIME is not set |
| 1685 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1699 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1686 | CONFIG_ENABLE_MUST_CHECK=y | 1700 | CONFIG_ENABLE_MUST_CHECK=y |
| 1701 | CONFIG_FRAME_WARN=2048 | ||
| 1687 | CONFIG_MAGIC_SYSRQ=y | 1702 | CONFIG_MAGIC_SYSRQ=y |
| 1688 | # CONFIG_UNUSED_SYMBOLS is not set | 1703 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1689 | # CONFIG_DEBUG_FS is not set | 1704 | # CONFIG_DEBUG_FS is not set |
| @@ -1694,18 +1709,23 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1694 | # CONFIG_SCHED_DEBUG is not set | 1709 | # CONFIG_SCHED_DEBUG is not set |
| 1695 | # CONFIG_SCHEDSTATS is not set | 1710 | # CONFIG_SCHEDSTATS is not set |
| 1696 | # CONFIG_TIMER_STATS is not set | 1711 | # CONFIG_TIMER_STATS is not set |
| 1712 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1697 | # CONFIG_SLUB_DEBUG_ON is not set | 1713 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1698 | # CONFIG_SLUB_STATS is not set | 1714 | # CONFIG_SLUB_STATS is not set |
| 1699 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1715 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1700 | # CONFIG_RT_MUTEX_TESTER is not set | 1716 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1701 | # CONFIG_DEBUG_SPINLOCK is not set | 1717 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1702 | # CONFIG_DEBUG_MUTEXES is not set | 1718 | # CONFIG_DEBUG_MUTEXES is not set |
| 1719 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 1720 | # CONFIG_PROVE_LOCKING is not set | ||
| 1721 | # CONFIG_LOCK_STAT is not set | ||
| 1703 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1722 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1704 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1723 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 1705 | # CONFIG_DEBUG_KOBJECT is not set | 1724 | # CONFIG_DEBUG_KOBJECT is not set |
| 1706 | CONFIG_DEBUG_BUGVERBOSE=y | 1725 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1707 | # CONFIG_DEBUG_INFO is not set | 1726 | # CONFIG_DEBUG_INFO is not set |
| 1708 | # CONFIG_DEBUG_VM is not set | 1727 | # CONFIG_DEBUG_VM is not set |
| 1728 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1709 | # CONFIG_DEBUG_LIST is not set | 1729 | # CONFIG_DEBUG_LIST is not set |
| 1710 | # CONFIG_DEBUG_SG is not set | 1730 | # CONFIG_DEBUG_SG is not set |
| 1711 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1731 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| @@ -1735,53 +1755,83 @@ CONFIG_ASYNC_CORE=y | |||
| 1735 | CONFIG_ASYNC_MEMCPY=y | 1755 | CONFIG_ASYNC_MEMCPY=y |
| 1736 | CONFIG_ASYNC_XOR=y | 1756 | CONFIG_ASYNC_XOR=y |
| 1737 | CONFIG_CRYPTO=y | 1757 | CONFIG_CRYPTO=y |
| 1758 | |||
| 1759 | # | ||
| 1760 | # Crypto core or helper | ||
| 1761 | # | ||
| 1738 | CONFIG_CRYPTO_ALGAPI=y | 1762 | CONFIG_CRYPTO_ALGAPI=y |
| 1739 | CONFIG_CRYPTO_AEAD=y | 1763 | CONFIG_CRYPTO_AEAD=y |
| 1740 | CONFIG_CRYPTO_BLKCIPHER=y | 1764 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1741 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1742 | CONFIG_CRYPTO_HASH=y | 1765 | CONFIG_CRYPTO_HASH=y |
| 1743 | CONFIG_CRYPTO_MANAGER=y | 1766 | CONFIG_CRYPTO_MANAGER=y |
| 1767 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1768 | # CONFIG_CRYPTO_NULL is not set | ||
| 1769 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1770 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1771 | # CONFIG_CRYPTO_TEST is not set | ||
| 1772 | |||
| 1773 | # | ||
| 1774 | # Authenticated Encryption with Associated Data | ||
| 1775 | # | ||
| 1776 | # CONFIG_CRYPTO_CCM is not set | ||
| 1777 | # CONFIG_CRYPTO_GCM is not set | ||
| 1778 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1779 | |||
| 1780 | # | ||
| 1781 | # Block modes | ||
| 1782 | # | ||
| 1783 | CONFIG_CRYPTO_CBC=y | ||
| 1784 | # CONFIG_CRYPTO_CTR is not set | ||
| 1785 | # CONFIG_CRYPTO_CTS is not set | ||
| 1786 | # CONFIG_CRYPTO_ECB is not set | ||
| 1787 | # CONFIG_CRYPTO_LRW is not set | ||
| 1788 | # CONFIG_CRYPTO_PCBC is not set | ||
| 1789 | # CONFIG_CRYPTO_XTS is not set | ||
| 1790 | |||
| 1791 | # | ||
| 1792 | # Hash modes | ||
| 1793 | # | ||
| 1744 | CONFIG_CRYPTO_HMAC=y | 1794 | CONFIG_CRYPTO_HMAC=y |
| 1745 | # CONFIG_CRYPTO_XCBC is not set | 1795 | # CONFIG_CRYPTO_XCBC is not set |
| 1746 | # CONFIG_CRYPTO_NULL is not set | 1796 | |
| 1797 | # | ||
| 1798 | # Digest | ||
| 1799 | # | ||
| 1800 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1747 | CONFIG_CRYPTO_MD4=y | 1801 | CONFIG_CRYPTO_MD4=y |
| 1748 | CONFIG_CRYPTO_MD5=y | 1802 | CONFIG_CRYPTO_MD5=y |
| 1803 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1749 | CONFIG_CRYPTO_SHA1=y | 1804 | CONFIG_CRYPTO_SHA1=y |
| 1750 | CONFIG_CRYPTO_SHA256=y | 1805 | CONFIG_CRYPTO_SHA256=y |
| 1751 | CONFIG_CRYPTO_SHA512=y | 1806 | CONFIG_CRYPTO_SHA512=y |
| 1752 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1753 | # CONFIG_CRYPTO_TGR192 is not set | 1807 | # CONFIG_CRYPTO_TGR192 is not set |
| 1754 | # CONFIG_CRYPTO_GF128MUL is not set | 1808 | # CONFIG_CRYPTO_WP512 is not set |
| 1755 | # CONFIG_CRYPTO_ECB is not set | 1809 | |
| 1756 | CONFIG_CRYPTO_CBC=y | 1810 | # |
| 1757 | # CONFIG_CRYPTO_PCBC is not set | 1811 | # Ciphers |
| 1758 | # CONFIG_CRYPTO_LRW is not set | 1812 | # |
| 1759 | # CONFIG_CRYPTO_XTS is not set | ||
| 1760 | # CONFIG_CRYPTO_CTR is not set | ||
| 1761 | # CONFIG_CRYPTO_GCM is not set | ||
| 1762 | # CONFIG_CRYPTO_CCM is not set | ||
| 1763 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1764 | CONFIG_CRYPTO_DES=y | ||
| 1765 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1766 | CONFIG_CRYPTO_BLOWFISH=y | ||
| 1767 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1768 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1769 | CONFIG_CRYPTO_AES=y | 1813 | CONFIG_CRYPTO_AES=y |
| 1814 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1815 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1816 | CONFIG_CRYPTO_BLOWFISH=y | ||
| 1817 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1770 | # CONFIG_CRYPTO_CAST5 is not set | 1818 | # CONFIG_CRYPTO_CAST5 is not set |
| 1771 | # CONFIG_CRYPTO_CAST6 is not set | 1819 | # CONFIG_CRYPTO_CAST6 is not set |
| 1772 | # CONFIG_CRYPTO_TEA is not set | 1820 | CONFIG_CRYPTO_DES=y |
| 1773 | # CONFIG_CRYPTO_ARC4 is not set | 1821 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1774 | # CONFIG_CRYPTO_KHAZAD is not set | 1822 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1775 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1776 | # CONFIG_CRYPTO_SEED is not set | ||
| 1777 | # CONFIG_CRYPTO_SALSA20 is not set | 1823 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1824 | # CONFIG_CRYPTO_SEED is not set | ||
| 1825 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1826 | # CONFIG_CRYPTO_TEA is not set | ||
| 1827 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1828 | |||
| 1829 | # | ||
| 1830 | # Compression | ||
| 1831 | # | ||
| 1778 | # CONFIG_CRYPTO_DEFLATE is not set | 1832 | # CONFIG_CRYPTO_DEFLATE is not set |
| 1779 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1780 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1781 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1782 | # CONFIG_CRYPTO_TEST is not set | ||
| 1783 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1784 | # CONFIG_CRYPTO_LZO is not set | 1833 | # CONFIG_CRYPTO_LZO is not set |
| 1785 | CONFIG_CRYPTO_HW=y | 1834 | CONFIG_CRYPTO_HW=y |
| 1786 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | 1835 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set |
| 1787 | # CONFIG_PPC_CLOCK is not set | 1836 | # CONFIG_PPC_CLOCK is not set |
| 1837 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c index 602c268fc8a2..5d529bcbeee9 100644 --- a/arch/ppc/kernel/ppc_ksyms.c +++ b/arch/ppc/kernel/ppc_ksyms.c | |||
| @@ -60,8 +60,10 @@ long long __ashrdi3(long long, int); | |||
| 60 | long long __ashldi3(long long, int); | 60 | long long __ashldi3(long long, int); |
| 61 | long long __lshrdi3(long long, int); | 61 | long long __lshrdi3(long long, int); |
| 62 | 62 | ||
| 63 | EXPORT_SYMBOL(empty_zero_page); | ||
| 63 | EXPORT_SYMBOL(clear_pages); | 64 | EXPORT_SYMBOL(clear_pages); |
| 64 | EXPORT_SYMBOL(clear_user_page); | 65 | EXPORT_SYMBOL(clear_user_page); |
| 66 | EXPORT_SYMBOL(copy_page); | ||
| 65 | EXPORT_SYMBOL(transfer_to_handler); | 67 | EXPORT_SYMBOL(transfer_to_handler); |
| 66 | EXPORT_SYMBOL(do_IRQ); | 68 | EXPORT_SYMBOL(do_IRQ); |
| 67 | EXPORT_SYMBOL(machine_check_exception); | 69 | EXPORT_SYMBOL(machine_check_exception); |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 1d035082e78e..93acb3c1859d 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
| @@ -308,6 +308,9 @@ config ARCH_SPARSEMEM_ENABLE | |||
| 308 | config ARCH_SPARSEMEM_DEFAULT | 308 | config ARCH_SPARSEMEM_DEFAULT |
| 309 | def_bool y | 309 | def_bool y |
| 310 | 310 | ||
| 311 | config ARCH_SELECT_MEMORY_MODEL | ||
| 312 | def_bool y | ||
| 313 | |||
| 311 | source "mm/Kconfig" | 314 | source "mm/Kconfig" |
| 312 | 315 | ||
| 313 | comment "I/O subsystem configuration" | 316 | comment "I/O subsystem configuration" |
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index 655d52543e2d..ad40729bec3d 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
| @@ -130,6 +130,7 @@ static void appldata_work_fn(struct work_struct *work) | |||
| 130 | 130 | ||
| 131 | P_DEBUG(" -= Work Queue =-\n"); | 131 | P_DEBUG(" -= Work Queue =-\n"); |
| 132 | i = 0; | 132 | i = 0; |
| 133 | get_online_cpus(); | ||
| 133 | spin_lock(&appldata_ops_lock); | 134 | spin_lock(&appldata_ops_lock); |
| 134 | list_for_each(lh, &appldata_ops_list) { | 135 | list_for_each(lh, &appldata_ops_list) { |
| 135 | ops = list_entry(lh, struct appldata_ops, list); | 136 | ops = list_entry(lh, struct appldata_ops, list); |
| @@ -140,6 +141,7 @@ static void appldata_work_fn(struct work_struct *work) | |||
| 140 | } | 141 | } |
| 141 | } | 142 | } |
| 142 | spin_unlock(&appldata_ops_lock); | 143 | spin_unlock(&appldata_ops_lock); |
| 144 | put_online_cpus(); | ||
| 143 | } | 145 | } |
| 144 | 146 | ||
| 145 | /* | 147 | /* |
| @@ -266,12 +268,14 @@ appldata_timer_handler(ctl_table *ctl, int write, struct file *filp, | |||
| 266 | len = *lenp; | 268 | len = *lenp; |
| 267 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) | 269 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) |
| 268 | return -EFAULT; | 270 | return -EFAULT; |
| 271 | get_online_cpus(); | ||
| 269 | spin_lock(&appldata_timer_lock); | 272 | spin_lock(&appldata_timer_lock); |
| 270 | if (buf[0] == '1') | 273 | if (buf[0] == '1') |
| 271 | __appldata_vtimer_setup(APPLDATA_ADD_TIMER); | 274 | __appldata_vtimer_setup(APPLDATA_ADD_TIMER); |
| 272 | else if (buf[0] == '0') | 275 | else if (buf[0] == '0') |
| 273 | __appldata_vtimer_setup(APPLDATA_DEL_TIMER); | 276 | __appldata_vtimer_setup(APPLDATA_DEL_TIMER); |
| 274 | spin_unlock(&appldata_timer_lock); | 277 | spin_unlock(&appldata_timer_lock); |
| 278 | put_online_cpus(); | ||
| 275 | out: | 279 | out: |
| 276 | *lenp = len; | 280 | *lenp = len; |
| 277 | *ppos += len; | 281 | *ppos += len; |
| @@ -314,10 +318,12 @@ appldata_interval_handler(ctl_table *ctl, int write, struct file *filp, | |||
| 314 | return -EINVAL; | 318 | return -EINVAL; |
| 315 | } | 319 | } |
| 316 | 320 | ||
| 321 | get_online_cpus(); | ||
| 317 | spin_lock(&appldata_timer_lock); | 322 | spin_lock(&appldata_timer_lock); |
| 318 | appldata_interval = interval; | 323 | appldata_interval = interval; |
| 319 | __appldata_vtimer_setup(APPLDATA_MOD_TIMER); | 324 | __appldata_vtimer_setup(APPLDATA_MOD_TIMER); |
| 320 | spin_unlock(&appldata_timer_lock); | 325 | spin_unlock(&appldata_timer_lock); |
| 326 | put_online_cpus(); | ||
| 321 | 327 | ||
| 322 | P_INFO("Monitoring CPU interval set to %u milliseconds.\n", | 328 | P_INFO("Monitoring CPU interval set to %u milliseconds.\n", |
| 323 | interval); | 329 | interval); |
| @@ -556,8 +562,10 @@ static int __init appldata_init(void) | |||
| 556 | return -ENOMEM; | 562 | return -ENOMEM; |
| 557 | } | 563 | } |
| 558 | 564 | ||
| 565 | get_online_cpus(); | ||
| 559 | for_each_online_cpu(i) | 566 | for_each_online_cpu(i) |
| 560 | appldata_online_cpu(i); | 567 | appldata_online_cpu(i); |
| 568 | put_online_cpus(); | ||
| 561 | 569 | ||
| 562 | /* Register cpu hotplug notifier */ | 570 | /* Register cpu hotplug notifier */ |
| 563 | register_hotcpu_notifier(&appldata_nb); | 571 | register_hotcpu_notifier(&appldata_nb); |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index aa341d0ea1e6..c5cdb975d590 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.25 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Wed Apr 30 11:07:45 2008 | 4 | # Fri May 30 09:49:33 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -103,6 +103,7 @@ CONFIG_RT_MUTEXES=y | |||
| 103 | # CONFIG_TINY_SHMEM is not set | 103 | # CONFIG_TINY_SHMEM is not set |
| 104 | CONFIG_BASE_SMALL=0 | 104 | CONFIG_BASE_SMALL=0 |
| 105 | CONFIG_MODULES=y | 105 | CONFIG_MODULES=y |
| 106 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 106 | CONFIG_MODULE_UNLOAD=y | 107 | CONFIG_MODULE_UNLOAD=y |
| 107 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 108 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 108 | CONFIG_MODVERSIONS=y | 109 | CONFIG_MODVERSIONS=y |
| @@ -173,6 +174,7 @@ CONFIG_PREEMPT=y | |||
| 173 | # CONFIG_PREEMPT_RCU is not set | 174 | # CONFIG_PREEMPT_RCU is not set |
| 174 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 175 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
| 175 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 176 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
| 177 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 176 | CONFIG_SELECT_MEMORY_MODEL=y | 178 | CONFIG_SELECT_MEMORY_MODEL=y |
| 177 | # CONFIG_FLATMEM_MANUAL is not set | 179 | # CONFIG_FLATMEM_MANUAL is not set |
| 178 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 180 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
| @@ -210,6 +212,7 @@ CONFIG_FORCE_MAX_ZONEORDER=9 | |||
| 210 | CONFIG_PFAULT=y | 212 | CONFIG_PFAULT=y |
| 211 | # CONFIG_SHARED_KERNEL is not set | 213 | # CONFIG_SHARED_KERNEL is not set |
| 212 | # CONFIG_CMM is not set | 214 | # CONFIG_CMM is not set |
| 215 | # CONFIG_PAGE_STATES is not set | ||
| 213 | CONFIG_VIRT_TIMER=y | 216 | CONFIG_VIRT_TIMER=y |
| 214 | CONFIG_VIRT_CPU_ACCOUNTING=y | 217 | CONFIG_VIRT_CPU_ACCOUNTING=y |
| 215 | # CONFIG_APPLDATA_BASE is not set | 218 | # CONFIG_APPLDATA_BASE is not set |
| @@ -620,6 +623,7 @@ CONFIG_S390_VMUR=m | |||
| 620 | # | 623 | # |
| 621 | # CONFIG_MEMSTICK is not set | 624 | # CONFIG_MEMSTICK is not set |
| 622 | # CONFIG_NEW_LEDS is not set | 625 | # CONFIG_NEW_LEDS is not set |
| 626 | CONFIG_ACCESSIBILITY=y | ||
| 623 | 627 | ||
| 624 | # | 628 | # |
| 625 | # File systems | 629 | # File systems |
| @@ -754,11 +758,12 @@ CONFIG_FRAME_WARN=2048 | |||
| 754 | CONFIG_MAGIC_SYSRQ=y | 758 | CONFIG_MAGIC_SYSRQ=y |
| 755 | # CONFIG_UNUSED_SYMBOLS is not set | 759 | # CONFIG_UNUSED_SYMBOLS is not set |
| 756 | CONFIG_DEBUG_FS=y | 760 | CONFIG_DEBUG_FS=y |
| 757 | CONFIG_HEADERS_CHECK=y | 761 | # CONFIG_HEADERS_CHECK is not set |
| 758 | CONFIG_DEBUG_KERNEL=y | 762 | CONFIG_DEBUG_KERNEL=y |
| 759 | # CONFIG_SCHED_DEBUG is not set | 763 | # CONFIG_SCHED_DEBUG is not set |
| 760 | # CONFIG_SCHEDSTATS is not set | 764 | # CONFIG_SCHEDSTATS is not set |
| 761 | # CONFIG_TIMER_STATS is not set | 765 | # CONFIG_TIMER_STATS is not set |
| 766 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 762 | # CONFIG_DEBUG_SLAB is not set | 767 | # CONFIG_DEBUG_SLAB is not set |
| 763 | CONFIG_DEBUG_PREEMPT=y | 768 | CONFIG_DEBUG_PREEMPT=y |
| 764 | # CONFIG_DEBUG_RT_MUTEXES is not set | 769 | # CONFIG_DEBUG_RT_MUTEXES is not set |
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c index c14a336f6300..d2f270c995d9 100644 --- a/arch/s390/kernel/dis.c +++ b/arch/s390/kernel/dis.c | |||
| @@ -208,7 +208,7 @@ static const unsigned char formats[][7] = { | |||
| 208 | [INSTR_RRF_F0FF] = { 0xff, F_16,F_24,F_28,0,0,0 }, /* e.g. madbr */ | 208 | [INSTR_RRF_F0FF] = { 0xff, F_16,F_24,F_28,0,0,0 }, /* e.g. madbr */ |
| 209 | [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 },/* e.g. didbr */ | 209 | [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 },/* e.g. didbr */ |
| 210 | [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 },/* e.g. .insn */ | 210 | [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 },/* e.g. .insn */ |
| 211 | [INSTR_RRF_R0RR] = { 0xff, R_24,R_28,R_16,0,0,0 }, /* e.g. idte */ | 211 | [INSTR_RRF_R0RR] = { 0xff, R_24,R_16,R_28,0,0,0 }, /* e.g. idte */ |
| 212 | [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, /* e.g. fixr */ | 212 | [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, /* e.g. fixr */ |
| 213 | [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, /* e.g. cfebr */ | 213 | [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, /* e.g. cfebr */ |
| 214 | [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, /* e.g. sske */ | 214 | [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, /* e.g. sske */ |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 1f4228948dc4..42b1d12ebb10 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
| @@ -1089,7 +1089,7 @@ out: | |||
| 1089 | 1089 | ||
| 1090 | #ifdef CONFIG_HOTPLUG_CPU | 1090 | #ifdef CONFIG_HOTPLUG_CPU |
| 1091 | 1091 | ||
| 1092 | int smp_rescan_cpus(void) | 1092 | int __ref smp_rescan_cpus(void) |
| 1093 | { | 1093 | { |
| 1094 | cpumask_t newcpus; | 1094 | cpumask_t newcpus; |
| 1095 | int cpu; | 1095 | int cpu; |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 29f3a63806b9..05598649b326 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
| @@ -44,37 +44,34 @@ char empty_zero_page[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); | |||
| 44 | 44 | ||
| 45 | void show_mem(void) | 45 | void show_mem(void) |
| 46 | { | 46 | { |
| 47 | int i, total = 0, reserved = 0; | 47 | unsigned long i, total = 0, reserved = 0; |
| 48 | int shared = 0, cached = 0; | 48 | unsigned long shared = 0, cached = 0; |
| 49 | unsigned long flags; | ||
| 49 | struct page *page; | 50 | struct page *page; |
| 51 | pg_data_t *pgdat; | ||
| 50 | 52 | ||
| 51 | printk("Mem-info:\n"); | 53 | printk("Mem-info:\n"); |
| 52 | show_free_areas(); | 54 | show_free_areas(); |
| 53 | i = max_mapnr; | 55 | for_each_online_pgdat(pgdat) { |
| 54 | while (i-- > 0) { | 56 | pgdat_resize_lock(pgdat, &flags); |
| 55 | if (!pfn_valid(i)) | 57 | for (i = 0; i < pgdat->node_spanned_pages; i++) { |
| 56 | continue; | 58 | if (!pfn_valid(pgdat->node_start_pfn + i)) |
| 57 | page = pfn_to_page(i); | 59 | continue; |
| 58 | total++; | 60 | page = pfn_to_page(pgdat->node_start_pfn + i); |
| 59 | if (PageReserved(page)) | 61 | total++; |
| 60 | reserved++; | 62 | if (PageReserved(page)) |
| 61 | else if (PageSwapCache(page)) | 63 | reserved++; |
| 62 | cached++; | 64 | else if (PageSwapCache(page)) |
| 63 | else if (page_count(page)) | 65 | cached++; |
| 64 | shared += page_count(page) - 1; | 66 | else if (page_count(page)) |
| 67 | shared += page_count(page) - 1; | ||
| 68 | } | ||
| 69 | pgdat_resize_unlock(pgdat, &flags); | ||
| 65 | } | 70 | } |
| 66 | printk("%d pages of RAM\n", total); | 71 | printk("%ld pages of RAM\n", total); |
| 67 | printk("%d reserved pages\n", reserved); | 72 | printk("%ld reserved pages\n", reserved); |
| 68 | printk("%d pages shared\n", shared); | 73 | printk("%ld pages shared\n", shared); |
| 69 | printk("%d pages swap cached\n", cached); | 74 | printk("%ld pages swap cached\n", cached); |
| 70 | |||
| 71 | printk("%lu pages dirty\n", global_page_state(NR_FILE_DIRTY)); | ||
| 72 | printk("%lu pages writeback\n", global_page_state(NR_WRITEBACK)); | ||
| 73 | printk("%lu pages mapped\n", global_page_state(NR_FILE_MAPPED)); | ||
| 74 | printk("%lu pages slab\n", | ||
| 75 | global_page_state(NR_SLAB_RECLAIMABLE) + | ||
| 76 | global_page_state(NR_SLAB_UNRECLAIMABLE)); | ||
| 77 | printk("%lu pages pagetables\n", global_page_state(NR_PAGETABLE)); | ||
| 78 | } | 75 | } |
| 79 | 76 | ||
| 80 | /* | 77 | /* |
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c index ea2804808f39..f591188fa2c0 100644 --- a/arch/s390/mm/vmem.c +++ b/arch/s390/mm/vmem.c | |||
| @@ -27,12 +27,19 @@ struct memory_segment { | |||
| 27 | 27 | ||
| 28 | static LIST_HEAD(mem_segs); | 28 | static LIST_HEAD(mem_segs); |
| 29 | 29 | ||
| 30 | static pud_t *vmem_pud_alloc(void) | 30 | static void __ref *vmem_alloc_pages(unsigned int order) |
| 31 | { | ||
| 32 | if (slab_is_available()) | ||
| 33 | return (void *)__get_free_pages(GFP_KERNEL, order); | ||
| 34 | return alloc_bootmem_pages((1 << order) * PAGE_SIZE); | ||
| 35 | } | ||
| 36 | |||
| 37 | static inline pud_t *vmem_pud_alloc(void) | ||
| 31 | { | 38 | { |
| 32 | pud_t *pud = NULL; | 39 | pud_t *pud = NULL; |
| 33 | 40 | ||
| 34 | #ifdef CONFIG_64BIT | 41 | #ifdef CONFIG_64BIT |
| 35 | pud = vmemmap_alloc_block(PAGE_SIZE * 4, 0); | 42 | pud = vmem_alloc_pages(2); |
| 36 | if (!pud) | 43 | if (!pud) |
| 37 | return NULL; | 44 | return NULL; |
| 38 | clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); | 45 | clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); |
| @@ -40,12 +47,12 @@ static pud_t *vmem_pud_alloc(void) | |||
| 40 | return pud; | 47 | return pud; |
| 41 | } | 48 | } |
| 42 | 49 | ||
| 43 | static pmd_t *vmem_pmd_alloc(void) | 50 | static inline pmd_t *vmem_pmd_alloc(void) |
| 44 | { | 51 | { |
| 45 | pmd_t *pmd = NULL; | 52 | pmd_t *pmd = NULL; |
| 46 | 53 | ||
| 47 | #ifdef CONFIG_64BIT | 54 | #ifdef CONFIG_64BIT |
| 48 | pmd = vmemmap_alloc_block(PAGE_SIZE * 4, 0); | 55 | pmd = vmem_alloc_pages(2); |
| 49 | if (!pmd) | 56 | if (!pmd) |
| 50 | return NULL; | 57 | return NULL; |
| 51 | clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); | 58 | clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); |
| @@ -207,13 +214,14 @@ int __meminit vmemmap_populate(struct page *start, unsigned long nr, int node) | |||
| 207 | if (pte_none(*pt_dir)) { | 214 | if (pte_none(*pt_dir)) { |
| 208 | unsigned long new_page; | 215 | unsigned long new_page; |
| 209 | 216 | ||
| 210 | new_page =__pa(vmemmap_alloc_block(PAGE_SIZE, 0)); | 217 | new_page =__pa(vmem_alloc_pages(0)); |
| 211 | if (!new_page) | 218 | if (!new_page) |
| 212 | goto out; | 219 | goto out; |
| 213 | pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL); | 220 | pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL); |
| 214 | *pt_dir = pte; | 221 | *pt_dir = pte; |
| 215 | } | 222 | } |
| 216 | } | 223 | } |
| 224 | memset(start, 0, nr * sizeof(struct page)); | ||
| 217 | ret = 0; | 225 | ret = 0; |
| 218 | out: | 226 | out: |
| 219 | flush_tlb_kernel_range(start_addr, end_addr); | 227 | flush_tlb_kernel_range(start_addr, end_addr); |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 8a68160079a9..9a854c8e5274 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
| @@ -281,7 +281,6 @@ config CPU_SUBTYPE_SH7723 | |||
| 281 | select CPU_SH4A | 281 | select CPU_SH4A |
| 282 | select CPU_SHX2 | 282 | select CPU_SHX2 |
| 283 | select ARCH_SPARSEMEM_ENABLE | 283 | select ARCH_SPARSEMEM_ENABLE |
| 284 | select SYS_SUPPORTS_NUMA | ||
| 285 | help | 284 | help |
| 286 | Select SH7723 if you have an SH-MobileR2 CPU. | 285 | Select SH7723 if you have an SH-MobileR2 CPU. |
| 287 | 286 | ||
diff --git a/arch/sh/boards/renesas/rts7751r2d/setup.c b/arch/sh/boards/renesas/rts7751r2d/setup.c index 452d0d6459a4..2308e8753bcd 100644 --- a/arch/sh/boards/renesas/rts7751r2d/setup.c +++ b/arch/sh/boards/renesas/rts7751r2d/setup.c | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
| 13 | #include <linux/ata_platform.h> | 13 | #include <linux/ata_platform.h> |
| 14 | #include <linux/serial_8250.h> | ||
| 15 | #include <linux/sm501.h> | 14 | #include <linux/sm501.h> |
| 16 | #include <linux/sm501-regs.h> | 15 | #include <linux/sm501-regs.h> |
| 17 | #include <linux/pm.h> | 16 | #include <linux/pm.h> |
| @@ -109,27 +108,6 @@ static struct platform_device heartbeat_device = { | |||
| 109 | .resource = heartbeat_resources, | 108 | .resource = heartbeat_resources, |
| 110 | }; | 109 | }; |
| 111 | 110 | ||
| 112 | static struct plat_serial8250_port uart_platform_data[] = { | ||
| 113 | { | ||
| 114 | .membase = (void __iomem *)0xb3e30000, | ||
| 115 | .mapbase = 0xb3e30000, | ||
| 116 | .iotype = UPIO_MEM, | ||
| 117 | .irq = IRQ_VOYAGER, | ||
| 118 | .flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ, | ||
| 119 | .regshift = 2, | ||
| 120 | .uartclk = (9600 * 16), | ||
| 121 | }, | ||
| 122 | { 0 }, | ||
| 123 | }; | ||
| 124 | |||
| 125 | static struct platform_device uart_device = { | ||
| 126 | .name = "serial8250", | ||
| 127 | .id = PLAT8250_DEV_PLATFORM, | ||
| 128 | .dev = { | ||
| 129 | .platform_data = uart_platform_data, | ||
| 130 | }, | ||
| 131 | }; | ||
| 132 | |||
| 133 | static struct resource sm501_resources[] = { | 111 | static struct resource sm501_resources[] = { |
| 134 | [0] = { | 112 | [0] = { |
| 135 | .start = 0x10000000, | 113 | .start = 0x10000000, |
| @@ -185,11 +163,7 @@ static struct sm501_platdata_fb sm501_fb_pdata = { | |||
| 185 | }; | 163 | }; |
| 186 | 164 | ||
| 187 | static struct sm501_initdata sm501_initdata = { | 165 | static struct sm501_initdata sm501_initdata = { |
| 188 | .gpio_high = { | 166 | .devices = SM501_USE_USB_HOST | SM501_USE_UART0, |
| 189 | .set = 0x00001fe0, | ||
| 190 | .mask = 0x0, | ||
| 191 | }, | ||
| 192 | .devices = SM501_USE_USB_HOST, | ||
| 193 | }; | 167 | }; |
| 194 | 168 | ||
| 195 | static struct sm501_platdata sm501_platform_data = { | 169 | static struct sm501_platdata sm501_platform_data = { |
| @@ -208,7 +182,6 @@ static struct platform_device sm501_device = { | |||
| 208 | }; | 182 | }; |
| 209 | 183 | ||
| 210 | static struct platform_device *rts7751r2d_devices[] __initdata = { | 184 | static struct platform_device *rts7751r2d_devices[] __initdata = { |
| 211 | &uart_device, | ||
| 212 | &sm501_device, | 185 | &sm501_device, |
| 213 | &heartbeat_device, | 186 | &heartbeat_device, |
| 214 | &spi_sh_sci_device, | 187 | &spi_sh_sci_device, |
| @@ -272,16 +245,6 @@ static void __init rts7751r2d_setup(char **cmdline_p) | |||
| 272 | 245 | ||
| 273 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_DRAM_CONTROL; | 246 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_DRAM_CONTROL; |
| 274 | writel(readl(sm501_reg) | 0x00f107c0, sm501_reg); | 247 | writel(readl(sm501_reg) | 0x00f107c0, sm501_reg); |
| 275 | |||
| 276 | /* | ||
| 277 | * Power Mode Gate - Enable UART0 | ||
| 278 | */ | ||
| 279 | |||
| 280 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_POWER_MODE_0_GATE; | ||
| 281 | writel(readl(sm501_reg) | (1 << SM501_GATE_UART0), sm501_reg); | ||
| 282 | |||
| 283 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_POWER_MODE_1_GATE; | ||
| 284 | writel(readl(sm501_reg) | (1 << SM501_GATE_UART0), sm501_reg); | ||
| 285 | } | 248 | } |
| 286 | 249 | ||
| 287 | /* | 250 | /* |
diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig index ee5900817f8f..287408b2ace6 100644 --- a/arch/sh/configs/migor_defconfig +++ b/arch/sh/configs/migor_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Feb 6 21:52:20 2008 | 4 | # Thu May 22 14:30:07 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
| 7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
| @@ -20,6 +20,7 @@ CONFIG_LOCKDEP_SUPPORT=y | |||
| 20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 22 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 22 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
| 23 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
| 23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 24 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 24 | 25 | ||
| 25 | # | 26 | # |
| @@ -36,18 +37,16 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
| 36 | # CONFIG_POSIX_MQUEUE is not set | 37 | # CONFIG_POSIX_MQUEUE is not set |
| 37 | # CONFIG_BSD_PROCESS_ACCT is not set | 38 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 38 | # CONFIG_TASKSTATS is not set | 39 | # CONFIG_TASKSTATS is not set |
| 39 | # CONFIG_USER_NS is not set | ||
| 40 | # CONFIG_PID_NS is not set | ||
| 41 | # CONFIG_AUDIT is not set | 40 | # CONFIG_AUDIT is not set |
| 42 | CONFIG_IKCONFIG=y | 41 | CONFIG_IKCONFIG=y |
| 43 | CONFIG_IKCONFIG_PROC=y | 42 | CONFIG_IKCONFIG_PROC=y |
| 44 | CONFIG_LOG_BUF_SHIFT=14 | 43 | CONFIG_LOG_BUF_SHIFT=14 |
| 45 | # CONFIG_CGROUPS is not set | 44 | # CONFIG_CGROUPS is not set |
| 46 | CONFIG_FAIR_GROUP_SCHED=y | 45 | # CONFIG_GROUP_SCHED is not set |
| 47 | CONFIG_FAIR_USER_SCHED=y | ||
| 48 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
| 49 | CONFIG_SYSFS_DEPRECATED=y | 46 | CONFIG_SYSFS_DEPRECATED=y |
| 47 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 50 | # CONFIG_RELAY is not set | 48 | # CONFIG_RELAY is not set |
| 49 | # CONFIG_NAMESPACES is not set | ||
| 51 | CONFIG_BLK_DEV_INITRD=y | 50 | CONFIG_BLK_DEV_INITRD=y |
| 52 | CONFIG_INITRAMFS_SOURCE="" | 51 | CONFIG_INITRAMFS_SOURCE="" |
| 53 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 52 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| @@ -61,11 +60,13 @@ CONFIG_HOTPLUG=y | |||
| 61 | CONFIG_PRINTK=y | 60 | CONFIG_PRINTK=y |
| 62 | CONFIG_BUG=y | 61 | CONFIG_BUG=y |
| 63 | CONFIG_ELF_CORE=y | 62 | CONFIG_ELF_CORE=y |
| 63 | CONFIG_COMPAT_BRK=y | ||
| 64 | CONFIG_BASE_FULL=y | 64 | CONFIG_BASE_FULL=y |
| 65 | CONFIG_FUTEX=y | 65 | CONFIG_FUTEX=y |
| 66 | CONFIG_ANON_INODES=y | 66 | CONFIG_ANON_INODES=y |
| 67 | CONFIG_EPOLL=y | 67 | CONFIG_EPOLL=y |
| 68 | CONFIG_SIGNALFD=y | 68 | CONFIG_SIGNALFD=y |
| 69 | CONFIG_TIMERFD=y | ||
| 69 | CONFIG_EVENTFD=y | 70 | CONFIG_EVENTFD=y |
| 70 | CONFIG_SHMEM=y | 71 | CONFIG_SHMEM=y |
| 71 | CONFIG_VM_EVENT_COUNTERS=y | 72 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -77,11 +78,15 @@ CONFIG_PROFILING=y | |||
| 77 | CONFIG_OPROFILE=y | 78 | CONFIG_OPROFILE=y |
| 78 | CONFIG_HAVE_OPROFILE=y | 79 | CONFIG_HAVE_OPROFILE=y |
| 79 | # CONFIG_HAVE_KPROBES is not set | 80 | # CONFIG_HAVE_KPROBES is not set |
| 81 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 83 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 80 | CONFIG_SLABINFO=y | 84 | CONFIG_SLABINFO=y |
| 81 | CONFIG_RT_MUTEXES=y | 85 | CONFIG_RT_MUTEXES=y |
| 82 | # CONFIG_TINY_SHMEM is not set | 86 | # CONFIG_TINY_SHMEM is not set |
| 83 | CONFIG_BASE_SMALL=0 | 87 | CONFIG_BASE_SMALL=0 |
| 84 | CONFIG_MODULES=y | 88 | CONFIG_MODULES=y |
| 89 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 85 | # CONFIG_MODULE_UNLOAD is not set | 90 | # CONFIG_MODULE_UNLOAD is not set |
| 86 | # CONFIG_MODVERSIONS is not set | 91 | # CONFIG_MODVERSIONS is not set |
| 87 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 92 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| @@ -105,7 +110,6 @@ CONFIG_DEFAULT_AS=y | |||
| 105 | # CONFIG_DEFAULT_NOOP is not set | 110 | # CONFIG_DEFAULT_NOOP is not set |
| 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 111 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
| 107 | CONFIG_CLASSIC_RCU=y | 112 | CONFIG_CLASSIC_RCU=y |
| 108 | # CONFIG_PREEMPT_RCU is not set | ||
| 109 | 113 | ||
| 110 | # | 114 | # |
| 111 | # System type | 115 | # System type |
| @@ -118,6 +122,7 @@ CONFIG_CPU_SHX2=y | |||
| 118 | # CONFIG_CPU_SUBTYPE_SH7203 is not set | 122 | # CONFIG_CPU_SUBTYPE_SH7203 is not set |
| 119 | # CONFIG_CPU_SUBTYPE_SH7206 is not set | 123 | # CONFIG_CPU_SUBTYPE_SH7206 is not set |
| 120 | # CONFIG_CPU_SUBTYPE_SH7263 is not set | 124 | # CONFIG_CPU_SUBTYPE_SH7263 is not set |
| 125 | # CONFIG_CPU_SUBTYPE_MXG is not set | ||
| 121 | # CONFIG_CPU_SUBTYPE_SH7705 is not set | 126 | # CONFIG_CPU_SUBTYPE_SH7705 is not set |
| 122 | # CONFIG_CPU_SUBTYPE_SH7706 is not set | 127 | # CONFIG_CPU_SUBTYPE_SH7706 is not set |
| 123 | # CONFIG_CPU_SUBTYPE_SH7707 is not set | 128 | # CONFIG_CPU_SUBTYPE_SH7707 is not set |
| @@ -135,6 +140,7 @@ CONFIG_CPU_SHX2=y | |||
| 135 | # CONFIG_CPU_SUBTYPE_SH7751R is not set | 140 | # CONFIG_CPU_SUBTYPE_SH7751R is not set |
| 136 | # CONFIG_CPU_SUBTYPE_SH7760 is not set | 141 | # CONFIG_CPU_SUBTYPE_SH7760 is not set |
| 137 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set | 142 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set |
| 143 | # CONFIG_CPU_SUBTYPE_SH7723 is not set | ||
| 138 | # CONFIG_CPU_SUBTYPE_SH7763 is not set | 144 | # CONFIG_CPU_SUBTYPE_SH7763 is not set |
| 139 | # CONFIG_CPU_SUBTYPE_SH7770 is not set | 145 | # CONFIG_CPU_SUBTYPE_SH7770 is not set |
| 140 | # CONFIG_CPU_SUBTYPE_SH7780 is not set | 146 | # CONFIG_CPU_SUBTYPE_SH7780 is not set |
| @@ -142,6 +148,7 @@ CONFIG_CPU_SHX2=y | |||
| 142 | # CONFIG_CPU_SUBTYPE_SHX3 is not set | 148 | # CONFIG_CPU_SUBTYPE_SHX3 is not set |
| 143 | # CONFIG_CPU_SUBTYPE_SH7343 is not set | 149 | # CONFIG_CPU_SUBTYPE_SH7343 is not set |
| 144 | CONFIG_CPU_SUBTYPE_SH7722=y | 150 | CONFIG_CPU_SUBTYPE_SH7722=y |
| 151 | # CONFIG_CPU_SUBTYPE_SH7366 is not set | ||
| 145 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set | 152 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set |
| 146 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set | 153 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set |
| 147 | 154 | ||
| @@ -255,7 +262,6 @@ CONFIG_HZ=250 | |||
| 255 | CONFIG_PREEMPT_NONE=y | 262 | CONFIG_PREEMPT_NONE=y |
| 256 | # CONFIG_PREEMPT_VOLUNTARY is not set | 263 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 257 | # CONFIG_PREEMPT is not set | 264 | # CONFIG_PREEMPT is not set |
| 258 | CONFIG_RCU_TRACE=y | ||
| 259 | CONFIG_GUSA=y | 265 | CONFIG_GUSA=y |
| 260 | 266 | ||
| 261 | # | 267 | # |
| @@ -323,8 +329,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 323 | CONFIG_DEFAULT_TCP_CONG="cubic" | 329 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 324 | # CONFIG_TCP_MD5SIG is not set | 330 | # CONFIG_TCP_MD5SIG is not set |
| 325 | # CONFIG_IPV6 is not set | 331 | # CONFIG_IPV6 is not set |
| 326 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 327 | # CONFIG_INET6_TUNNEL is not set | ||
| 328 | # CONFIG_NETWORK_SECMARK is not set | 332 | # CONFIG_NETWORK_SECMARK is not set |
| 329 | # CONFIG_NETFILTER is not set | 333 | # CONFIG_NETFILTER is not set |
| 330 | # CONFIG_IP_DCCP is not set | 334 | # CONFIG_IP_DCCP is not set |
| @@ -376,7 +380,90 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
| 376 | CONFIG_FW_LOADER=m | 380 | CONFIG_FW_LOADER=m |
| 377 | # CONFIG_SYS_HYPERVISOR is not set | 381 | # CONFIG_SYS_HYPERVISOR is not set |
| 378 | # CONFIG_CONNECTOR is not set | 382 | # CONFIG_CONNECTOR is not set |
| 379 | # CONFIG_MTD is not set | 383 | CONFIG_MTD=y |
| 384 | # CONFIG_MTD_DEBUG is not set | ||
| 385 | CONFIG_MTD_CONCAT=y | ||
| 386 | CONFIG_MTD_PARTITIONS=y | ||
| 387 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 388 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 389 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 390 | |||
| 391 | # | ||
| 392 | # User Modules And Translation Layers | ||
| 393 | # | ||
| 394 | CONFIG_MTD_CHAR=y | ||
| 395 | CONFIG_MTD_BLKDEVS=y | ||
| 396 | CONFIG_MTD_BLOCK=y | ||
| 397 | # CONFIG_FTL is not set | ||
| 398 | # CONFIG_NFTL is not set | ||
| 399 | # CONFIG_INFTL is not set | ||
| 400 | # CONFIG_RFD_FTL is not set | ||
| 401 | # CONFIG_SSFDC is not set | ||
| 402 | # CONFIG_MTD_OOPS is not set | ||
| 403 | |||
| 404 | # | ||
| 405 | # RAM/ROM/Flash chip drivers | ||
| 406 | # | ||
| 407 | CONFIG_MTD_CFI=y | ||
| 408 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 409 | CONFIG_MTD_GEN_PROBE=y | ||
| 410 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 411 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 412 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 413 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 414 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 415 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 416 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 417 | CONFIG_MTD_CFI_I1=y | ||
| 418 | CONFIG_MTD_CFI_I2=y | ||
| 419 | # CONFIG_MTD_CFI_I4 is not set | ||
| 420 | # CONFIG_MTD_CFI_I8 is not set | ||
| 421 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 422 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 423 | # CONFIG_MTD_CFI_STAA is not set | ||
| 424 | CONFIG_MTD_CFI_UTIL=y | ||
| 425 | # CONFIG_MTD_RAM is not set | ||
| 426 | # CONFIG_MTD_ROM is not set | ||
| 427 | # CONFIG_MTD_ABSENT is not set | ||
| 428 | |||
| 429 | # | ||
| 430 | # Mapping drivers for chip access | ||
| 431 | # | ||
| 432 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 433 | CONFIG_MTD_PHYSMAP=y | ||
| 434 | CONFIG_MTD_PHYSMAP_START=0xffffffff | ||
| 435 | CONFIG_MTD_PHYSMAP_LEN=0 | ||
| 436 | CONFIG_MTD_PHYSMAP_BANKWIDTH=0 | ||
| 437 | # CONFIG_MTD_PLATRAM is not set | ||
| 438 | |||
| 439 | # | ||
| 440 | # Self-contained MTD device drivers | ||
| 441 | # | ||
| 442 | # CONFIG_MTD_SLRAM is not set | ||
| 443 | # CONFIG_MTD_PHRAM is not set | ||
| 444 | # CONFIG_MTD_MTDRAM is not set | ||
| 445 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 446 | |||
| 447 | # | ||
| 448 | # Disk-On-Chip Device Drivers | ||
| 449 | # | ||
| 450 | # CONFIG_MTD_DOC2000 is not set | ||
| 451 | # CONFIG_MTD_DOC2001 is not set | ||
| 452 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 453 | CONFIG_MTD_NAND=y | ||
| 454 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
| 455 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
| 456 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
| 457 | CONFIG_MTD_NAND_IDS=y | ||
| 458 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
| 459 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
| 460 | CONFIG_MTD_NAND_PLATFORM=y | ||
| 461 | # CONFIG_MTD_ONENAND is not set | ||
| 462 | |||
| 463 | # | ||
| 464 | # UBI - Unsorted block images | ||
| 465 | # | ||
| 466 | # CONFIG_MTD_UBI is not set | ||
| 380 | # CONFIG_PARPORT is not set | 467 | # CONFIG_PARPORT is not set |
| 381 | CONFIG_BLK_DEV=y | 468 | CONFIG_BLK_DEV=y |
| 382 | # CONFIG_BLK_DEV_COW_COMMON is not set | 469 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| @@ -385,11 +472,13 @@ CONFIG_BLK_DEV=y | |||
| 385 | CONFIG_BLK_DEV_RAM=y | 472 | CONFIG_BLK_DEV_RAM=y |
| 386 | CONFIG_BLK_DEV_RAM_COUNT=16 | 473 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 387 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 474 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 388 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 475 | # CONFIG_BLK_DEV_XIP is not set |
| 389 | # CONFIG_CDROM_PKTCDVD is not set | 476 | # CONFIG_CDROM_PKTCDVD is not set |
| 390 | # CONFIG_ATA_OVER_ETH is not set | 477 | # CONFIG_ATA_OVER_ETH is not set |
| 391 | CONFIG_MISC_DEVICES=y | 478 | CONFIG_MISC_DEVICES=y |
| 392 | # CONFIG_EEPROM_93CX6 is not set | 479 | # CONFIG_EEPROM_93CX6 is not set |
| 480 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 481 | CONFIG_HAVE_IDE=y | ||
| 393 | # CONFIG_IDE is not set | 482 | # CONFIG_IDE is not set |
| 394 | 483 | ||
| 395 | # | 484 | # |
| @@ -461,6 +550,7 @@ CONFIG_SMC91X=y | |||
| 461 | # | 550 | # |
| 462 | # CONFIG_WLAN_PRE80211 is not set | 551 | # CONFIG_WLAN_PRE80211 is not set |
| 463 | # CONFIG_WLAN_80211 is not set | 552 | # CONFIG_WLAN_80211 is not set |
| 553 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 464 | # CONFIG_WAN is not set | 554 | # CONFIG_WAN is not set |
| 465 | # CONFIG_PPP is not set | 555 | # CONFIG_PPP is not set |
| 466 | # CONFIG_SLIP is not set | 556 | # CONFIG_SLIP is not set |
| @@ -482,13 +572,20 @@ CONFIG_INPUT=y | |||
| 482 | # | 572 | # |
| 483 | # CONFIG_INPUT_MOUSEDEV is not set | 573 | # CONFIG_INPUT_MOUSEDEV is not set |
| 484 | # CONFIG_INPUT_JOYDEV is not set | 574 | # CONFIG_INPUT_JOYDEV is not set |
| 485 | # CONFIG_INPUT_EVDEV is not set | 575 | CONFIG_INPUT_EVDEV=y |
| 486 | # CONFIG_INPUT_EVBUG is not set | 576 | # CONFIG_INPUT_EVBUG is not set |
| 487 | 577 | ||
| 488 | # | 578 | # |
| 489 | # Input Device Drivers | 579 | # Input Device Drivers |
| 490 | # | 580 | # |
| 491 | # CONFIG_INPUT_KEYBOARD is not set | 581 | CONFIG_INPUT_KEYBOARD=y |
| 582 | # CONFIG_KEYBOARD_ATKBD is not set | ||
| 583 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 584 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 585 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 586 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 587 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 588 | CONFIG_KEYBOARD_SH_KEYSC=y | ||
| 492 | # CONFIG_INPUT_MOUSE is not set | 589 | # CONFIG_INPUT_MOUSE is not set |
| 493 | # CONFIG_INPUT_JOYSTICK is not set | 590 | # CONFIG_INPUT_JOYSTICK is not set |
| 494 | # CONFIG_INPUT_TABLET is not set | 591 | # CONFIG_INPUT_TABLET is not set |
| @@ -508,6 +605,7 @@ CONFIG_VT=y | |||
| 508 | CONFIG_VT_CONSOLE=y | 605 | CONFIG_VT_CONSOLE=y |
| 509 | CONFIG_HW_CONSOLE=y | 606 | CONFIG_HW_CONSOLE=y |
| 510 | CONFIG_VT_HW_CONSOLE_BINDING=y | 607 | CONFIG_VT_HW_CONSOLE_BINDING=y |
| 608 | CONFIG_DEVKMEM=y | ||
| 511 | # CONFIG_SERIAL_NONSTANDARD is not set | 609 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 512 | 610 | ||
| 513 | # | 611 | # |
| @@ -531,16 +629,40 @@ CONFIG_HW_RANDOM=y | |||
| 531 | # CONFIG_R3964 is not set | 629 | # CONFIG_R3964 is not set |
| 532 | # CONFIG_RAW_DRIVER is not set | 630 | # CONFIG_RAW_DRIVER is not set |
| 533 | # CONFIG_TCG_TPM is not set | 631 | # CONFIG_TCG_TPM is not set |
| 534 | # CONFIG_I2C is not set | 632 | CONFIG_I2C=y |
| 535 | 633 | CONFIG_I2C_BOARDINFO=y | |
| 536 | # | 634 | # CONFIG_I2C_CHARDEV is not set |
| 537 | # SPI support | 635 | |
| 538 | # | 636 | # |
| 637 | # I2C Hardware Bus support | ||
| 638 | # | ||
| 639 | # CONFIG_I2C_OCORES is not set | ||
| 640 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 641 | # CONFIG_I2C_SIMTEC is not set | ||
| 642 | # CONFIG_I2C_TAOS_EVM is not set | ||
| 643 | # CONFIG_I2C_STUB is not set | ||
| 644 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 645 | CONFIG_I2C_SH_MOBILE=y | ||
| 646 | |||
| 647 | # | ||
| 648 | # Miscellaneous I2C Chip support | ||
| 649 | # | ||
| 650 | # CONFIG_DS1682 is not set | ||
| 651 | # CONFIG_SENSORS_EEPROM is not set | ||
| 652 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 653 | # CONFIG_PCF8575 is not set | ||
| 654 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 655 | # CONFIG_SENSORS_MAX6875 is not set | ||
| 656 | # CONFIG_SENSORS_TSL2550 is not set | ||
| 657 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 658 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 659 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 660 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 539 | # CONFIG_SPI is not set | 661 | # CONFIG_SPI is not set |
| 540 | # CONFIG_SPI_MASTER is not set | ||
| 541 | # CONFIG_W1 is not set | 662 | # CONFIG_W1 is not set |
| 542 | # CONFIG_POWER_SUPPLY is not set | 663 | # CONFIG_POWER_SUPPLY is not set |
| 543 | # CONFIG_HWMON is not set | 664 | # CONFIG_HWMON is not set |
| 665 | # CONFIG_THERMAL is not set | ||
| 544 | # CONFIG_WATCHDOG is not set | 666 | # CONFIG_WATCHDOG is not set |
| 545 | 667 | ||
| 546 | # | 668 | # |
| @@ -553,12 +675,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 553 | # Multifunction device drivers | 675 | # Multifunction device drivers |
| 554 | # | 676 | # |
| 555 | # CONFIG_MFD_SM501 is not set | 677 | # CONFIG_MFD_SM501 is not set |
| 678 | # CONFIG_HTC_PASIC3 is not set | ||
| 556 | 679 | ||
| 557 | # | 680 | # |
| 558 | # Multimedia devices | 681 | # Multimedia devices |
| 559 | # | 682 | # |
| 683 | |||
| 684 | # | ||
| 685 | # Multimedia core support | ||
| 686 | # | ||
| 560 | # CONFIG_VIDEO_DEV is not set | 687 | # CONFIG_VIDEO_DEV is not set |
| 561 | # CONFIG_DVB_CORE is not set | 688 | # CONFIG_DVB_CORE is not set |
| 689 | # CONFIG_VIDEO_MEDIA is not set | ||
| 690 | |||
| 691 | # | ||
| 692 | # Multimedia drivers | ||
| 693 | # | ||
| 562 | # CONFIG_DAB is not set | 694 | # CONFIG_DAB is not set |
| 563 | 695 | ||
| 564 | # | 696 | # |
| @@ -592,6 +724,8 @@ CONFIG_USB_ARCH_HAS_HCD=y | |||
| 592 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 724 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 593 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 725 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 594 | # CONFIG_USB is not set | 726 | # CONFIG_USB is not set |
| 727 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 728 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 595 | 729 | ||
| 596 | # | 730 | # |
| 597 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 731 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| @@ -608,6 +742,7 @@ CONFIG_USB_GADGET_SELECTED=y | |||
| 608 | CONFIG_USB_GADGET_M66592=y | 742 | CONFIG_USB_GADGET_M66592=y |
| 609 | CONFIG_USB_M66592=y | 743 | CONFIG_USB_M66592=y |
| 610 | CONFIG_SUPERH_BUILT_IN_M66592=y | 744 | CONFIG_SUPERH_BUILT_IN_M66592=y |
| 745 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 611 | # CONFIG_USB_GADGET_GOKU is not set | 746 | # CONFIG_USB_GADGET_GOKU is not set |
| 612 | # CONFIG_USB_GADGET_LH7A40X is not set | 747 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 613 | # CONFIG_USB_GADGET_OMAP is not set | 748 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -623,7 +758,9 @@ CONFIG_USB_G_SERIAL=y | |||
| 623 | # CONFIG_USB_MIDI_GADGET is not set | 758 | # CONFIG_USB_MIDI_GADGET is not set |
| 624 | # CONFIG_USB_G_PRINTER is not set | 759 | # CONFIG_USB_G_PRINTER is not set |
| 625 | # CONFIG_MMC is not set | 760 | # CONFIG_MMC is not set |
| 761 | # CONFIG_MEMSTICK is not set | ||
| 626 | # CONFIG_NEW_LEDS is not set | 762 | # CONFIG_NEW_LEDS is not set |
| 763 | # CONFIG_ACCESSIBILITY is not set | ||
| 627 | CONFIG_RTC_LIB=y | 764 | CONFIG_RTC_LIB=y |
| 628 | CONFIG_RTC_CLASS=y | 765 | CONFIG_RTC_CLASS=y |
| 629 | CONFIG_RTC_HCTOSYS=y | 766 | CONFIG_RTC_HCTOSYS=y |
| @@ -640,15 +777,31 @@ CONFIG_RTC_INTF_DEV=y | |||
| 640 | # CONFIG_RTC_DRV_TEST is not set | 777 | # CONFIG_RTC_DRV_TEST is not set |
| 641 | 778 | ||
| 642 | # | 779 | # |
| 780 | # I2C RTC drivers | ||
| 781 | # | ||
| 782 | # CONFIG_RTC_DRV_DS1307 is not set | ||
| 783 | # CONFIG_RTC_DRV_DS1374 is not set | ||
| 784 | # CONFIG_RTC_DRV_DS1672 is not set | ||
| 785 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
| 786 | CONFIG_RTC_DRV_RS5C372=y | ||
| 787 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
| 788 | # CONFIG_RTC_DRV_X1205 is not set | ||
| 789 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
| 790 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
| 791 | # CONFIG_RTC_DRV_M41T80 is not set | ||
| 792 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 793 | |||
| 794 | # | ||
| 643 | # SPI RTC drivers | 795 | # SPI RTC drivers |
| 644 | # | 796 | # |
| 645 | 797 | ||
| 646 | # | 798 | # |
| 647 | # Platform RTC drivers | 799 | # Platform RTC drivers |
| 648 | # | 800 | # |
| 801 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 649 | # CONFIG_RTC_DRV_DS1553 is not set | 802 | # CONFIG_RTC_DRV_DS1553 is not set |
| 650 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 651 | # CONFIG_RTC_DRV_DS1742 is not set | 803 | # CONFIG_RTC_DRV_DS1742 is not set |
| 804 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 652 | # CONFIG_RTC_DRV_M48T86 is not set | 805 | # CONFIG_RTC_DRV_M48T86 is not set |
| 653 | # CONFIG_RTC_DRV_M48T59 is not set | 806 | # CONFIG_RTC_DRV_M48T59 is not set |
| 654 | # CONFIG_RTC_DRV_V3020 is not set | 807 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -657,10 +810,6 @@ CONFIG_RTC_INTF_DEV=y | |||
| 657 | # on-CPU RTC drivers | 810 | # on-CPU RTC drivers |
| 658 | # | 811 | # |
| 659 | CONFIG_RTC_DRV_SH=y | 812 | CONFIG_RTC_DRV_SH=y |
| 660 | |||
| 661 | # | ||
| 662 | # Userspace I/O | ||
| 663 | # | ||
| 664 | # CONFIG_UIO is not set | 813 | # CONFIG_UIO is not set |
| 665 | 814 | ||
| 666 | # | 815 | # |
| @@ -673,13 +822,10 @@ CONFIG_RTC_DRV_SH=y | |||
| 673 | # CONFIG_JFS_FS is not set | 822 | # CONFIG_JFS_FS is not set |
| 674 | # CONFIG_FS_POSIX_ACL is not set | 823 | # CONFIG_FS_POSIX_ACL is not set |
| 675 | # CONFIG_XFS_FS is not set | 824 | # CONFIG_XFS_FS is not set |
| 676 | # CONFIG_GFS2_FS is not set | ||
| 677 | # CONFIG_OCFS2_FS is not set | 825 | # CONFIG_OCFS2_FS is not set |
| 678 | # CONFIG_MINIX_FS is not set | 826 | # CONFIG_DNOTIFY is not set |
| 679 | # CONFIG_ROMFS_FS is not set | ||
| 680 | # CONFIG_INOTIFY is not set | 827 | # CONFIG_INOTIFY is not set |
| 681 | # CONFIG_QUOTA is not set | 828 | # CONFIG_QUOTA is not set |
| 682 | # CONFIG_DNOTIFY is not set | ||
| 683 | # CONFIG_AUTOFS_FS is not set | 829 | # CONFIG_AUTOFS_FS is not set |
| 684 | # CONFIG_AUTOFS4_FS is not set | 830 | # CONFIG_AUTOFS4_FS is not set |
| 685 | # CONFIG_FUSE_FS is not set | 831 | # CONFIG_FUSE_FS is not set |
| @@ -720,10 +866,13 @@ CONFIG_TMPFS=y | |||
| 720 | # CONFIG_BEFS_FS is not set | 866 | # CONFIG_BEFS_FS is not set |
| 721 | # CONFIG_BFS_FS is not set | 867 | # CONFIG_BFS_FS is not set |
| 722 | # CONFIG_EFS_FS is not set | 868 | # CONFIG_EFS_FS is not set |
| 869 | # CONFIG_JFFS2_FS is not set | ||
| 723 | # CONFIG_CRAMFS is not set | 870 | # CONFIG_CRAMFS is not set |
| 724 | # CONFIG_VXFS_FS is not set | 871 | # CONFIG_VXFS_FS is not set |
| 872 | # CONFIG_MINIX_FS is not set | ||
| 725 | # CONFIG_HPFS_FS is not set | 873 | # CONFIG_HPFS_FS is not set |
| 726 | # CONFIG_QNX4FS_FS is not set | 874 | # CONFIG_QNX4FS_FS is not set |
| 875 | # CONFIG_ROMFS_FS is not set | ||
| 727 | # CONFIG_SYSV_FS is not set | 876 | # CONFIG_SYSV_FS is not set |
| 728 | # CONFIG_UFS_FS is not set | 877 | # CONFIG_UFS_FS is not set |
| 729 | # CONFIG_NETWORK_FILESYSTEMS is not set | 878 | # CONFIG_NETWORK_FILESYSTEMS is not set |
| @@ -743,6 +892,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y | |||
| 743 | # CONFIG_PRINTK_TIME is not set | 892 | # CONFIG_PRINTK_TIME is not set |
| 744 | CONFIG_ENABLE_WARN_DEPRECATED=y | 893 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 745 | CONFIG_ENABLE_MUST_CHECK=y | 894 | CONFIG_ENABLE_MUST_CHECK=y |
| 895 | CONFIG_FRAME_WARN=1024 | ||
| 746 | # CONFIG_MAGIC_SYSRQ is not set | 896 | # CONFIG_MAGIC_SYSRQ is not set |
| 747 | # CONFIG_UNUSED_SYMBOLS is not set | 897 | # CONFIG_UNUSED_SYMBOLS is not set |
| 748 | CONFIG_DEBUG_FS=y | 898 | CONFIG_DEBUG_FS=y |
| @@ -763,48 +913,77 @@ CONFIG_EARLY_PRINTK=y | |||
| 763 | # CONFIG_SECURITY is not set | 913 | # CONFIG_SECURITY is not set |
| 764 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 914 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 765 | CONFIG_CRYPTO=y | 915 | CONFIG_CRYPTO=y |
| 766 | # CONFIG_CRYPTO_SEQIV is not set | 916 | |
| 917 | # | ||
| 918 | # Crypto core or helper | ||
| 919 | # | ||
| 767 | # CONFIG_CRYPTO_MANAGER is not set | 920 | # CONFIG_CRYPTO_MANAGER is not set |
| 921 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 922 | # CONFIG_CRYPTO_NULL is not set | ||
| 923 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 924 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 925 | # CONFIG_CRYPTO_TEST is not set | ||
| 926 | |||
| 927 | # | ||
| 928 | # Authenticated Encryption with Associated Data | ||
| 929 | # | ||
| 930 | # CONFIG_CRYPTO_CCM is not set | ||
| 931 | # CONFIG_CRYPTO_GCM is not set | ||
| 932 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 933 | |||
| 934 | # | ||
| 935 | # Block modes | ||
| 936 | # | ||
| 937 | # CONFIG_CRYPTO_CBC is not set | ||
| 938 | # CONFIG_CRYPTO_CTR is not set | ||
| 939 | # CONFIG_CRYPTO_CTS is not set | ||
| 940 | # CONFIG_CRYPTO_ECB is not set | ||
| 941 | # CONFIG_CRYPTO_LRW is not set | ||
| 942 | # CONFIG_CRYPTO_PCBC is not set | ||
| 943 | # CONFIG_CRYPTO_XTS is not set | ||
| 944 | |||
| 945 | # | ||
| 946 | # Hash modes | ||
| 947 | # | ||
| 768 | # CONFIG_CRYPTO_HMAC is not set | 948 | # CONFIG_CRYPTO_HMAC is not set |
| 769 | # CONFIG_CRYPTO_XCBC is not set | 949 | # CONFIG_CRYPTO_XCBC is not set |
| 770 | # CONFIG_CRYPTO_NULL is not set | 950 | |
| 951 | # | ||
| 952 | # Digest | ||
| 953 | # | ||
| 954 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 771 | # CONFIG_CRYPTO_MD4 is not set | 955 | # CONFIG_CRYPTO_MD4 is not set |
| 772 | # CONFIG_CRYPTO_MD5 is not set | 956 | # CONFIG_CRYPTO_MD5 is not set |
| 957 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 773 | # CONFIG_CRYPTO_SHA1 is not set | 958 | # CONFIG_CRYPTO_SHA1 is not set |
| 774 | # CONFIG_CRYPTO_SHA256 is not set | 959 | # CONFIG_CRYPTO_SHA256 is not set |
| 775 | # CONFIG_CRYPTO_SHA512 is not set | 960 | # CONFIG_CRYPTO_SHA512 is not set |
| 776 | # CONFIG_CRYPTO_WP512 is not set | ||
| 777 | # CONFIG_CRYPTO_TGR192 is not set | 961 | # CONFIG_CRYPTO_TGR192 is not set |
| 778 | # CONFIG_CRYPTO_GF128MUL is not set | 962 | # CONFIG_CRYPTO_WP512 is not set |
| 779 | # CONFIG_CRYPTO_ECB is not set | 963 | |
| 780 | # CONFIG_CRYPTO_CBC is not set | 964 | # |
| 781 | # CONFIG_CRYPTO_PCBC is not set | 965 | # Ciphers |
| 782 | # CONFIG_CRYPTO_LRW is not set | 966 | # |
| 783 | # CONFIG_CRYPTO_XTS is not set | ||
| 784 | # CONFIG_CRYPTO_CTR is not set | ||
| 785 | # CONFIG_CRYPTO_GCM is not set | ||
| 786 | # CONFIG_CRYPTO_CCM is not set | ||
| 787 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 788 | # CONFIG_CRYPTO_DES is not set | ||
| 789 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 790 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 791 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 792 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 793 | # CONFIG_CRYPTO_AES is not set | 967 | # CONFIG_CRYPTO_AES is not set |
| 968 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 969 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 970 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 971 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 794 | # CONFIG_CRYPTO_CAST5 is not set | 972 | # CONFIG_CRYPTO_CAST5 is not set |
| 795 | # CONFIG_CRYPTO_CAST6 is not set | 973 | # CONFIG_CRYPTO_CAST6 is not set |
| 796 | # CONFIG_CRYPTO_TEA is not set | 974 | # CONFIG_CRYPTO_DES is not set |
| 797 | # CONFIG_CRYPTO_ARC4 is not set | 975 | # CONFIG_CRYPTO_FCRYPT is not set |
| 798 | # CONFIG_CRYPTO_KHAZAD is not set | 976 | # CONFIG_CRYPTO_KHAZAD is not set |
| 799 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 800 | # CONFIG_CRYPTO_SEED is not set | ||
| 801 | # CONFIG_CRYPTO_SALSA20 is not set | 977 | # CONFIG_CRYPTO_SALSA20 is not set |
| 978 | # CONFIG_CRYPTO_SEED is not set | ||
| 979 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 980 | # CONFIG_CRYPTO_TEA is not set | ||
| 981 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 982 | |||
| 983 | # | ||
| 984 | # Compression | ||
| 985 | # | ||
| 802 | # CONFIG_CRYPTO_DEFLATE is not set | 986 | # CONFIG_CRYPTO_DEFLATE is not set |
| 803 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 804 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 805 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 806 | # CONFIG_CRYPTO_TEST is not set | ||
| 807 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 808 | # CONFIG_CRYPTO_LZO is not set | 987 | # CONFIG_CRYPTO_LZO is not set |
| 809 | CONFIG_CRYPTO_HW=y | 988 | CONFIG_CRYPTO_HW=y |
| 810 | 989 | ||
| @@ -812,6 +991,7 @@ CONFIG_CRYPTO_HW=y | |||
| 812 | # Library routines | 991 | # Library routines |
| 813 | # | 992 | # |
| 814 | CONFIG_BITREVERSE=y | 993 | CONFIG_BITREVERSE=y |
| 994 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 815 | # CONFIG_CRC_CCITT is not set | 995 | # CONFIG_CRC_CCITT is not set |
| 816 | # CONFIG_CRC16 is not set | 996 | # CONFIG_CRC16 is not set |
| 817 | # CONFIG_CRC_ITU_T is not set | 997 | # CONFIG_CRC_ITU_T is not set |
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c index ebceb0dadff5..be4926969181 100644 --- a/arch/sh/kernel/cpu/sh4/probe.c +++ b/arch/sh/kernel/cpu/sh4/probe.c | |||
| @@ -132,6 +132,7 @@ int __init detect_cpu_and_cache_system(void) | |||
| 132 | 132 | ||
| 133 | switch (prr) { | 133 | switch (prr) { |
| 134 | case 0x50: | 134 | case 0x50: |
| 135 | case 0x51: | ||
| 135 | boot_cpu_data.type = CPU_SH7723; | 136 | boot_cpu_data.type = CPU_SH7723; |
| 136 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_L2_CACHE; | 137 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_L2_CACHE; |
| 137 | break; | 138 | break; |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index 069314037049..62ebccf18b3c 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | static struct resource usbf_resources[] = { | 17 | static struct resource usbf_resources[] = { |
| 18 | [0] = { | 18 | [0] = { |
| 19 | .name = "USBF", | 19 | .name = "m66592_udc", |
| 20 | .start = 0x04480000, | 20 | .start = 0x04480000, |
| 21 | .end = 0x044800FF, | 21 | .end = 0x044800FF, |
| 22 | .flags = IORESOURCE_MEM, | 22 | .flags = IORESOURCE_MEM, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c index 16925cf28db8..566ce79b9abf 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c | |||
| @@ -153,7 +153,7 @@ static struct intc_vect vectors[] __initdata = { | |||
| 153 | INTC_VECT(VIO_VOUI,0x8E0), | 153 | INTC_VECT(VIO_VOUI,0x8E0), |
| 154 | 154 | ||
| 155 | INTC_VECT(SCIFA_SCIFA0,0x900), | 155 | INTC_VECT(SCIFA_SCIFA0,0x900), |
| 156 | INTC_VECT(VPU_VPUI,0x920), | 156 | INTC_VECT(VPU_VPUI,0x980), |
| 157 | INTC_VECT(TPU_TPUI,0x9A0), | 157 | INTC_VECT(TPU_TPUI,0x9A0), |
| 158 | INTC_VECT(ADC_ADI,0x9E0), | 158 | INTC_VECT(ADC_ADI,0x9E0), |
| 159 | INTC_VECT(USB_USI0,0xA20), | 159 | INTC_VECT(USB_USI0,0xA20), |
| @@ -292,9 +292,3 @@ void __init plat_irq_setup(void) | |||
| 292 | { | 292 | { |
| 293 | register_intc_controller(&intc_desc); | 293 | register_intc_controller(&intc_desc); |
| 294 | } | 294 | } |
| 295 | |||
| 296 | void __init plat_mem_setup(void) | ||
| 297 | { | ||
| 298 | /* Register the URAM space as Node 1 */ | ||
| 299 | setup_bootmem_node(1, 0x055f0000, 0x05610000); | ||
| 300 | } | ||
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index af65b2da3ba0..5c7e2fd52075 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -582,8 +582,9 @@ static void __init lguest_init_IRQ(void) | |||
| 582 | int vector = FIRST_EXTERNAL_VECTOR + i; | 582 | int vector = FIRST_EXTERNAL_VECTOR + i; |
| 583 | if (vector != SYSCALL_VECTOR) { | 583 | if (vector != SYSCALL_VECTOR) { |
| 584 | set_intr_gate(vector, interrupt[i]); | 584 | set_intr_gate(vector, interrupt[i]); |
| 585 | set_irq_chip_and_handler(i, &lguest_irq_controller, | 585 | set_irq_chip_and_handler_name(i, &lguest_irq_controller, |
| 586 | handle_level_irq); | 586 | handle_level_irq, |
| 587 | "level"); | ||
| 587 | } | 588 | } |
| 588 | } | 589 | } |
| 589 | /* This call is required to set up for 4k stacks, where we have | 590 | /* This call is required to set up for 4k stacks, where we have |
diff --git a/block/blk-core.c b/block/blk-core.c index 6a9cc0d22a61..1905aaba49fb 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
| @@ -806,35 +806,32 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags, | |||
| 806 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | 806 | rq = get_request(q, rw_flags, bio, GFP_NOIO); |
| 807 | while (!rq) { | 807 | while (!rq) { |
| 808 | DEFINE_WAIT(wait); | 808 | DEFINE_WAIT(wait); |
| 809 | struct io_context *ioc; | ||
| 809 | struct request_list *rl = &q->rq; | 810 | struct request_list *rl = &q->rq; |
| 810 | 811 | ||
| 811 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, | 812 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, |
| 812 | TASK_UNINTERRUPTIBLE); | 813 | TASK_UNINTERRUPTIBLE); |
| 813 | 814 | ||
| 814 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | 815 | blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); |
| 815 | |||
| 816 | if (!rq) { | ||
| 817 | struct io_context *ioc; | ||
| 818 | 816 | ||
| 819 | blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); | 817 | __generic_unplug_device(q); |
| 820 | 818 | spin_unlock_irq(q->queue_lock); | |
| 821 | __generic_unplug_device(q); | 819 | io_schedule(); |
| 822 | spin_unlock_irq(q->queue_lock); | ||
| 823 | io_schedule(); | ||
| 824 | 820 | ||
| 825 | /* | 821 | /* |
| 826 | * After sleeping, we become a "batching" process and | 822 | * After sleeping, we become a "batching" process and |
| 827 | * will be able to allocate at least one request, and | 823 | * will be able to allocate at least one request, and |
| 828 | * up to a big batch of them for a small period time. | 824 | * up to a big batch of them for a small period time. |
| 829 | * See ioc_batching, ioc_set_batching | 825 | * See ioc_batching, ioc_set_batching |
| 830 | */ | 826 | */ |
| 831 | ioc = current_io_context(GFP_NOIO, q->node); | 827 | ioc = current_io_context(GFP_NOIO, q->node); |
| 832 | ioc_set_batching(q, ioc); | 828 | ioc_set_batching(q, ioc); |
| 833 | 829 | ||
| 834 | spin_lock_irq(q->queue_lock); | 830 | spin_lock_irq(q->queue_lock); |
| 835 | } | ||
| 836 | finish_wait(&rl->wait[rw], &wait); | 831 | finish_wait(&rl->wait[rw], &wait); |
| 837 | } | 832 | |
| 833 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | ||
| 834 | }; | ||
| 838 | 835 | ||
| 839 | return rq; | 836 | return rq; |
| 840 | } | 837 | } |
diff --git a/block/blktrace.c b/block/blktrace.c index b2cbb4e5d767..7ae87cc4a163 100644 --- a/block/blktrace.c +++ b/block/blktrace.c | |||
| @@ -75,6 +75,23 @@ static void trace_note_time(struct blk_trace *bt) | |||
| 75 | local_irq_restore(flags); | 75 | local_irq_restore(flags); |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | void __trace_note_message(struct blk_trace *bt, const char *fmt, ...) | ||
| 79 | { | ||
| 80 | int n; | ||
| 81 | va_list args; | ||
| 82 | char *buf; | ||
| 83 | |||
| 84 | preempt_disable(); | ||
| 85 | buf = per_cpu_ptr(bt->msg_data, smp_processor_id()); | ||
| 86 | va_start(args, fmt); | ||
| 87 | n = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args); | ||
| 88 | va_end(args); | ||
| 89 | |||
| 90 | trace_note(bt, 0, BLK_TN_MESSAGE, buf, n); | ||
| 91 | preempt_enable(); | ||
| 92 | } | ||
| 93 | EXPORT_SYMBOL_GPL(__trace_note_message); | ||
| 94 | |||
| 78 | static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector, | 95 | static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector, |
| 79 | pid_t pid) | 96 | pid_t pid) |
| 80 | { | 97 | { |
| @@ -232,6 +249,7 @@ static void blk_trace_cleanup(struct blk_trace *bt) | |||
| 232 | debugfs_remove(bt->dropped_file); | 249 | debugfs_remove(bt->dropped_file); |
| 233 | blk_remove_tree(bt->dir); | 250 | blk_remove_tree(bt->dir); |
| 234 | free_percpu(bt->sequence); | 251 | free_percpu(bt->sequence); |
| 252 | free_percpu(bt->msg_data); | ||
| 235 | kfree(bt); | 253 | kfree(bt); |
| 236 | } | 254 | } |
| 237 | 255 | ||
| @@ -346,6 +364,10 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | |||
| 346 | if (!bt->sequence) | 364 | if (!bt->sequence) |
| 347 | goto err; | 365 | goto err; |
| 348 | 366 | ||
| 367 | bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG); | ||
| 368 | if (!bt->msg_data) | ||
| 369 | goto err; | ||
| 370 | |||
| 349 | ret = -ENOENT; | 371 | ret = -ENOENT; |
| 350 | dir = blk_create_tree(buts->name); | 372 | dir = blk_create_tree(buts->name); |
| 351 | if (!dir) | 373 | if (!dir) |
| @@ -392,6 +414,7 @@ err: | |||
| 392 | if (bt->dropped_file) | 414 | if (bt->dropped_file) |
| 393 | debugfs_remove(bt->dropped_file); | 415 | debugfs_remove(bt->dropped_file); |
| 394 | free_percpu(bt->sequence); | 416 | free_percpu(bt->sequence); |
| 417 | free_percpu(bt->msg_data); | ||
| 395 | if (bt->rchan) | 418 | if (bt->rchan) |
| 396 | relay_close(bt->rchan); | 419 | relay_close(bt->rchan); |
| 397 | kfree(bt); | 420 | kfree(bt); |
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index b399c62936e0..d01b411c72f0 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
| @@ -124,6 +124,8 @@ struct cfq_data { | |||
| 124 | struct cfq_queue { | 124 | struct cfq_queue { |
| 125 | /* reference count */ | 125 | /* reference count */ |
| 126 | atomic_t ref; | 126 | atomic_t ref; |
| 127 | /* various state flags, see below */ | ||
| 128 | unsigned int flags; | ||
| 127 | /* parent cfq_data */ | 129 | /* parent cfq_data */ |
| 128 | struct cfq_data *cfqd; | 130 | struct cfq_data *cfqd; |
| 129 | /* service_tree member */ | 131 | /* service_tree member */ |
| @@ -138,14 +140,14 @@ struct cfq_queue { | |||
| 138 | int queued[2]; | 140 | int queued[2]; |
| 139 | /* currently allocated requests */ | 141 | /* currently allocated requests */ |
| 140 | int allocated[2]; | 142 | int allocated[2]; |
| 141 | /* pending metadata requests */ | ||
| 142 | int meta_pending; | ||
| 143 | /* fifo list of requests in sort_list */ | 143 | /* fifo list of requests in sort_list */ |
| 144 | struct list_head fifo; | 144 | struct list_head fifo; |
| 145 | 145 | ||
| 146 | unsigned long slice_end; | 146 | unsigned long slice_end; |
| 147 | long slice_resid; | 147 | long slice_resid; |
| 148 | 148 | ||
| 149 | /* pending metadata requests */ | ||
| 150 | int meta_pending; | ||
| 149 | /* number of requests that are on the dispatch list or inside driver */ | 151 | /* number of requests that are on the dispatch list or inside driver */ |
| 150 | int dispatched; | 152 | int dispatched; |
| 151 | 153 | ||
| @@ -153,8 +155,6 @@ struct cfq_queue { | |||
| 153 | unsigned short ioprio, org_ioprio; | 155 | unsigned short ioprio, org_ioprio; |
| 154 | unsigned short ioprio_class, org_ioprio_class; | 156 | unsigned short ioprio_class, org_ioprio_class; |
| 155 | 157 | ||
| 156 | /* various state flags, see below */ | ||
| 157 | unsigned int flags; | ||
| 158 | }; | 158 | }; |
| 159 | 159 | ||
| 160 | enum cfqq_state_flags { | 160 | enum cfqq_state_flags { |
| @@ -1142,6 +1142,9 @@ static void cfq_put_queue(struct cfq_queue *cfqq) | |||
| 1142 | kmem_cache_free(cfq_pool, cfqq); | 1142 | kmem_cache_free(cfq_pool, cfqq); |
| 1143 | } | 1143 | } |
| 1144 | 1144 | ||
| 1145 | /* | ||
| 1146 | * Must always be called with the rcu_read_lock() held | ||
| 1147 | */ | ||
| 1145 | static void | 1148 | static void |
| 1146 | __call_for_each_cic(struct io_context *ioc, | 1149 | __call_for_each_cic(struct io_context *ioc, |
| 1147 | void (*func)(struct io_context *, struct cfq_io_context *)) | 1150 | void (*func)(struct io_context *, struct cfq_io_context *)) |
| @@ -1197,6 +1200,11 @@ static void cic_free_func(struct io_context *ioc, struct cfq_io_context *cic) | |||
| 1197 | cfq_cic_free(cic); | 1200 | cfq_cic_free(cic); |
| 1198 | } | 1201 | } |
| 1199 | 1202 | ||
| 1203 | /* | ||
| 1204 | * Must be called with rcu_read_lock() held or preemption otherwise disabled. | ||
| 1205 | * Only two callers of this - ->dtor() which is called with the rcu_read_lock(), | ||
| 1206 | * and ->trim() which is called with the task lock held | ||
| 1207 | */ | ||
| 1200 | static void cfq_free_io_context(struct io_context *ioc) | 1208 | static void cfq_free_io_context(struct io_context *ioc) |
| 1201 | { | 1209 | { |
| 1202 | /* | 1210 | /* |
| @@ -1502,20 +1510,24 @@ static struct cfq_io_context * | |||
| 1502 | cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) | 1510 | cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) |
| 1503 | { | 1511 | { |
| 1504 | struct cfq_io_context *cic; | 1512 | struct cfq_io_context *cic; |
| 1513 | unsigned long flags; | ||
| 1505 | void *k; | 1514 | void *k; |
| 1506 | 1515 | ||
| 1507 | if (unlikely(!ioc)) | 1516 | if (unlikely(!ioc)) |
| 1508 | return NULL; | 1517 | return NULL; |
| 1509 | 1518 | ||
| 1519 | rcu_read_lock(); | ||
| 1520 | |||
| 1510 | /* | 1521 | /* |
| 1511 | * we maintain a last-hit cache, to avoid browsing over the tree | 1522 | * we maintain a last-hit cache, to avoid browsing over the tree |
| 1512 | */ | 1523 | */ |
| 1513 | cic = rcu_dereference(ioc->ioc_data); | 1524 | cic = rcu_dereference(ioc->ioc_data); |
| 1514 | if (cic && cic->key == cfqd) | 1525 | if (cic && cic->key == cfqd) { |
| 1526 | rcu_read_unlock(); | ||
| 1515 | return cic; | 1527 | return cic; |
| 1528 | } | ||
| 1516 | 1529 | ||
| 1517 | do { | 1530 | do { |
| 1518 | rcu_read_lock(); | ||
| 1519 | cic = radix_tree_lookup(&ioc->radix_root, (unsigned long) cfqd); | 1531 | cic = radix_tree_lookup(&ioc->radix_root, (unsigned long) cfqd); |
| 1520 | rcu_read_unlock(); | 1532 | rcu_read_unlock(); |
| 1521 | if (!cic) | 1533 | if (!cic) |
| @@ -1524,10 +1536,13 @@ cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) | |||
| 1524 | k = cic->key; | 1536 | k = cic->key; |
| 1525 | if (unlikely(!k)) { | 1537 | if (unlikely(!k)) { |
| 1526 | cfq_drop_dead_cic(cfqd, ioc, cic); | 1538 | cfq_drop_dead_cic(cfqd, ioc, cic); |
| 1539 | rcu_read_lock(); | ||
| 1527 | continue; | 1540 | continue; |
| 1528 | } | 1541 | } |
| 1529 | 1542 | ||
| 1543 | spin_lock_irqsave(&ioc->lock, flags); | ||
| 1530 | rcu_assign_pointer(ioc->ioc_data, cic); | 1544 | rcu_assign_pointer(ioc->ioc_data, cic); |
| 1545 | spin_unlock_irqrestore(&ioc->lock, flags); | ||
| 1531 | break; | 1546 | break; |
| 1532 | } while (1); | 1547 | } while (1); |
| 1533 | 1548 | ||
| @@ -2134,6 +2149,10 @@ static void *cfq_init_queue(struct request_queue *q) | |||
| 2134 | 2149 | ||
| 2135 | static void cfq_slab_kill(void) | 2150 | static void cfq_slab_kill(void) |
| 2136 | { | 2151 | { |
| 2152 | /* | ||
| 2153 | * Caller already ensured that pending RCU callbacks are completed, | ||
| 2154 | * so we should have no busy allocations at this point. | ||
| 2155 | */ | ||
| 2137 | if (cfq_pool) | 2156 | if (cfq_pool) |
| 2138 | kmem_cache_destroy(cfq_pool); | 2157 | kmem_cache_destroy(cfq_pool); |
| 2139 | if (cfq_ioc_pool) | 2158 | if (cfq_ioc_pool) |
| @@ -2292,6 +2311,11 @@ static void __exit cfq_exit(void) | |||
| 2292 | ioc_gone = &all_gone; | 2311 | ioc_gone = &all_gone; |
| 2293 | /* ioc_gone's update must be visible before reading ioc_count */ | 2312 | /* ioc_gone's update must be visible before reading ioc_count */ |
| 2294 | smp_wmb(); | 2313 | smp_wmb(); |
| 2314 | |||
| 2315 | /* | ||
| 2316 | * this also protects us from entering cfq_slab_kill() with | ||
| 2317 | * pending RCU callbacks | ||
| 2318 | */ | ||
| 2295 | if (elv_ioc_count_read(ioc_count)) | 2319 | if (elv_ioc_count_read(ioc_count)) |
| 2296 | wait_for_completion(ioc_gone); | 2320 | wait_for_completion(ioc_gone); |
| 2297 | cfq_slab_kill(); | 2321 | cfq_slab_kill(); |
diff --git a/block/elevator.c b/block/elevator.c index 980f8ae147b4..902dd1344d56 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
| @@ -1110,6 +1110,8 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) | |||
| 1110 | queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); | 1110 | queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); |
| 1111 | spin_unlock_irq(q->queue_lock); | 1111 | spin_unlock_irq(q->queue_lock); |
| 1112 | 1112 | ||
| 1113 | blk_add_trace_msg(q, "elv switch: %s", e->elevator_type->elevator_name); | ||
| 1114 | |||
| 1113 | return 1; | 1115 | return 1; |
| 1114 | 1116 | ||
| 1115 | fail_register: | 1117 | fail_register: |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 97f83fb2ee2e..544b7d6c617c 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -502,10 +502,10 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 502 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ | 502 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ |
| 503 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ | 503 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ |
| 504 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ | 504 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ |
| 505 | { PCI_VDEVICE(NVIDIA, 0x0bd0), board_ahci }, /* MCP7B */ | 505 | { PCI_VDEVICE(NVIDIA, 0x0bc4), board_ahci }, /* MCP7B */ |
| 506 | { PCI_VDEVICE(NVIDIA, 0x0bd1), board_ahci }, /* MCP7B */ | 506 | { PCI_VDEVICE(NVIDIA, 0x0bc5), board_ahci }, /* MCP7B */ |
| 507 | { PCI_VDEVICE(NVIDIA, 0x0bd2), board_ahci }, /* MCP7B */ | 507 | { PCI_VDEVICE(NVIDIA, 0x0bc6), board_ahci }, /* MCP7B */ |
| 508 | { PCI_VDEVICE(NVIDIA, 0x0bd3), board_ahci }, /* MCP7B */ | 508 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ |
| 509 | 509 | ||
| 510 | /* SiS */ | 510 | /* SiS */ |
| 511 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 511 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index a9027b8fbdd5..3548ee7014ca 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
| @@ -247,10 +247,11 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
| 247 | { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | 247 | { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, |
| 248 | /* SATA Controller 2 IDE (ICH8) */ | 248 | /* SATA Controller 2 IDE (ICH8) */ |
| 249 | { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | 249 | { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, |
| 250 | /* Mobile SATA Controller IDE (ICH8M) */ | ||
| 251 | { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 252 | /* Mobile SATA Controller IDE (ICH8M), Apple */ | 250 | /* Mobile SATA Controller IDE (ICH8M), Apple */ |
| 253 | { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata }, | 251 | { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata }, |
| 252 | { 0x8086, 0x2828, 0x106b, 0x00a1, 0, 0, ich8m_apple_sata }, | ||
| 253 | /* Mobile SATA Controller IDE (ICH8M) */ | ||
| 254 | { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 254 | /* SATA Controller IDE (ICH9) */ | 255 | /* SATA Controller IDE (ICH9) */ |
| 255 | { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | 256 | { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, |
| 256 | /* SATA Controller IDE (ICH9) */ | 257 | /* SATA Controller IDE (ICH9) */ |
| @@ -526,7 +527,7 @@ static struct ata_port_info piix_port_info[] = { | |||
| 526 | 527 | ||
| 527 | [ich8m_apple_sata] = | 528 | [ich8m_apple_sata] = |
| 528 | { | 529 | { |
| 529 | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR, | 530 | .flags = PIIX_SATA_FLAGS, |
| 530 | .pio_mask = 0x1f, /* pio0-4 */ | 531 | .pio_mask = 0x1f, /* pio0-4 */ |
| 531 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 532 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
| 532 | .udma_mask = ATA_UDMA6, | 533 | .udma_mask = ATA_UDMA6, |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 3c89f205c83f..cc816ca623d3 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -5403,7 +5403,7 @@ static void ata_host_stop(struct device *gendev, void *res) | |||
| 5403 | */ | 5403 | */ |
| 5404 | static void ata_finalize_port_ops(struct ata_port_operations *ops) | 5404 | static void ata_finalize_port_ops(struct ata_port_operations *ops) |
| 5405 | { | 5405 | { |
| 5406 | static spinlock_t lock = SPIN_LOCK_UNLOCKED; | 5406 | static DEFINE_SPINLOCK(lock); |
| 5407 | const struct ata_port_operations *cur; | 5407 | const struct ata_port_operations *cur; |
| 5408 | void **begin = (void **)ops; | 5408 | void **begin = (void **)ops; |
| 5409 | void **end = (void **)&ops->inherits; | 5409 | void **end = (void **)&ops->inherits; |
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c index 0f9386d4a5a0..7daf4c0f6216 100644 --- a/drivers/ata/libata-pmp.c +++ b/drivers/ata/libata-pmp.c | |||
| @@ -322,9 +322,12 @@ static void sata_pmp_quirks(struct ata_port *ap) | |||
| 322 | if (vendor == 0x1095 && devid == 0x3726) { | 322 | if (vendor == 0x1095 && devid == 0x3726) { |
| 323 | /* sil3726 quirks */ | 323 | /* sil3726 quirks */ |
| 324 | ata_port_for_each_link(link, ap) { | 324 | ata_port_for_each_link(link, ap) { |
| 325 | /* class code report is unreliable */ | 325 | /* Class code report is unreliable and SRST |
| 326 | * times out under certain configurations. | ||
| 327 | */ | ||
| 326 | if (link->pmp < 5) | 328 | if (link->pmp < 5) |
| 327 | link->flags |= ATA_LFLAG_ASSUME_ATA; | 329 | link->flags |= ATA_LFLAG_NO_SRST | |
| 330 | ATA_LFLAG_ASSUME_ATA; | ||
| 328 | 331 | ||
| 329 | /* port 5 is for SEMB device and it doesn't like SRST */ | 332 | /* port 5 is for SEMB device and it doesn't like SRST */ |
| 330 | if (link->pmp == 5) | 333 | if (link->pmp == 5) |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index aeb6e01d82ce..2e6e1622dc6d 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
| @@ -1637,6 +1637,7 @@ defer: | |||
| 1637 | 1637 | ||
| 1638 | /** | 1638 | /** |
| 1639 | * ata_scsi_rbuf_get - Map response buffer. | 1639 | * ata_scsi_rbuf_get - Map response buffer. |
| 1640 | * @cmd: SCSI command containing buffer to be mapped. | ||
| 1640 | * @flags: unsigned long variable to store irq enable status | 1641 | * @flags: unsigned long variable to store irq enable status |
| 1641 | * @copy_in: copy in from user buffer | 1642 | * @copy_in: copy in from user buffer |
| 1642 | * | 1643 | * |
| @@ -1954,7 +1955,7 @@ static unsigned int ata_msense_ctl_mode(u8 *buf) | |||
| 1954 | 1955 | ||
| 1955 | /** | 1956 | /** |
| 1956 | * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page | 1957 | * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page |
| 1957 | * @bufp: output buffer | 1958 | * @buf: output buffer |
| 1958 | * | 1959 | * |
| 1959 | * Generate a generic MODE SENSE r/w error recovery page. | 1960 | * Generate a generic MODE SENSE r/w error recovery page. |
| 1960 | * | 1961 | * |
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c index 853559e32315..3924e7209a44 100644 --- a/drivers/ata/sata_fsl.c +++ b/drivers/ata/sata_fsl.c | |||
| @@ -34,7 +34,7 @@ enum { | |||
| 34 | 34 | ||
| 35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
| 36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | | 36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | |
| 37 | ATA_FLAG_NCQ), | 37 | ATA_FLAG_PMP | ATA_FLAG_NCQ), |
| 38 | 38 | ||
| 39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, | 39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, |
| 40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ | 40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ |
| @@ -395,7 +395,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc) | |||
| 395 | cd = (struct command_desc *)pp->cmdentry + tag; | 395 | cd = (struct command_desc *)pp->cmdentry + tag; |
| 396 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; | 396 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; |
| 397 | 397 | ||
| 398 | ata_tf_to_fis(&qc->tf, 0, 1, (u8 *) &cd->cfis); | 398 | ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *) &cd->cfis); |
| 399 | 399 | ||
| 400 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", | 400 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", |
| 401 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); | 401 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); |
| @@ -438,6 +438,8 @@ static unsigned int sata_fsl_qc_issue(struct ata_queued_cmd *qc) | |||
| 438 | ioread32(CA + hcr_base), | 438 | ioread32(CA + hcr_base), |
| 439 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); | 439 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); |
| 440 | 440 | ||
| 441 | iowrite32(qc->dev->link->pmp, CQPMP + hcr_base); | ||
| 442 | |||
| 441 | /* Simply queue command to the controller/device */ | 443 | /* Simply queue command to the controller/device */ |
| 442 | iowrite32(1 << tag, CQ + hcr_base); | 444 | iowrite32(1 << tag, CQ + hcr_base); |
| 443 | 445 | ||
| @@ -558,11 +560,36 @@ static void sata_fsl_thaw(struct ata_port *ap) | |||
| 558 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); | 560 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); |
| 559 | } | 561 | } |
| 560 | 562 | ||
| 563 | static void sata_fsl_pmp_attach(struct ata_port *ap) | ||
| 564 | { | ||
| 565 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
| 566 | void __iomem *hcr_base = host_priv->hcr_base; | ||
| 567 | u32 temp; | ||
| 568 | |||
| 569 | temp = ioread32(hcr_base + HCONTROL); | ||
| 570 | iowrite32((temp | HCONTROL_PMP_ATTACHED), hcr_base + HCONTROL); | ||
| 571 | } | ||
| 572 | |||
| 573 | static void sata_fsl_pmp_detach(struct ata_port *ap) | ||
| 574 | { | ||
| 575 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
| 576 | void __iomem *hcr_base = host_priv->hcr_base; | ||
| 577 | u32 temp; | ||
| 578 | |||
| 579 | temp = ioread32(hcr_base + HCONTROL); | ||
| 580 | temp &= ~HCONTROL_PMP_ATTACHED; | ||
| 581 | iowrite32(temp, hcr_base + HCONTROL); | ||
| 582 | |||
| 583 | /* enable interrupts on the controller/port */ | ||
| 584 | temp = ioread32(hcr_base + HCONTROL); | ||
| 585 | iowrite32((temp | DEFAULT_PORT_IRQ_ENABLE_MASK), hcr_base + HCONTROL); | ||
| 586 | |||
| 587 | } | ||
| 588 | |||
| 561 | static int sata_fsl_port_start(struct ata_port *ap) | 589 | static int sata_fsl_port_start(struct ata_port *ap) |
| 562 | { | 590 | { |
| 563 | struct device *dev = ap->host->dev; | 591 | struct device *dev = ap->host->dev; |
| 564 | struct sata_fsl_port_priv *pp; | 592 | struct sata_fsl_port_priv *pp; |
| 565 | int retval; | ||
| 566 | void *mem; | 593 | void *mem; |
| 567 | dma_addr_t mem_dma; | 594 | dma_addr_t mem_dma; |
| 568 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 595 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| @@ -688,12 +715,13 @@ static int sata_fsl_prereset(struct ata_link *link, unsigned long deadline) | |||
| 688 | } | 715 | } |
| 689 | 716 | ||
| 690 | static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, | 717 | static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, |
| 691 | unsigned long deadline) | 718 | unsigned long deadline) |
| 692 | { | 719 | { |
| 693 | struct ata_port *ap = link->ap; | 720 | struct ata_port *ap = link->ap; |
| 694 | struct sata_fsl_port_priv *pp = ap->private_data; | 721 | struct sata_fsl_port_priv *pp = ap->private_data; |
| 695 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 722 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 696 | void __iomem *hcr_base = host_priv->hcr_base; | 723 | void __iomem *hcr_base = host_priv->hcr_base; |
| 724 | int pmp = sata_srst_pmp(link); | ||
| 697 | u32 temp; | 725 | u32 temp; |
| 698 | struct ata_taskfile tf; | 726 | struct ata_taskfile tf; |
| 699 | u8 *cfis; | 727 | u8 *cfis; |
| @@ -703,6 +731,9 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, | |||
| 703 | 731 | ||
| 704 | DPRINTK("in xx_softreset\n"); | 732 | DPRINTK("in xx_softreset\n"); |
| 705 | 733 | ||
| 734 | if (pmp != SATA_PMP_CTRL_PORT) | ||
| 735 | goto issue_srst; | ||
| 736 | |||
| 706 | try_offline_again: | 737 | try_offline_again: |
| 707 | /* | 738 | /* |
| 708 | * Force host controller to go off-line, aborting current operations | 739 | * Force host controller to go off-line, aborting current operations |
| @@ -746,6 +777,7 @@ try_offline_again: | |||
| 746 | 777 | ||
| 747 | temp = ioread32(hcr_base + HCONTROL); | 778 | temp = ioread32(hcr_base + HCONTROL); |
| 748 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); | 779 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); |
| 780 | temp |= HCONTROL_PMP_ATTACHED; | ||
| 749 | iowrite32(temp, hcr_base + HCONTROL); | 781 | iowrite32(temp, hcr_base + HCONTROL); |
| 750 | 782 | ||
| 751 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); | 783 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); |
| @@ -771,7 +803,8 @@ try_offline_again: | |||
| 771 | ata_port_printk(ap, KERN_WARNING, | 803 | ata_port_printk(ap, KERN_WARNING, |
| 772 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", | 804 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", |
| 773 | ioread32(hcr_base + HSTATUS)); | 805 | ioread32(hcr_base + HSTATUS)); |
| 774 | goto err; | 806 | *class = ATA_DEV_NONE; |
| 807 | goto out; | ||
| 775 | } | 808 | } |
| 776 | 809 | ||
| 777 | /* | 810 | /* |
| @@ -783,7 +816,8 @@ try_offline_again: | |||
| 783 | 816 | ||
| 784 | if ((temp & 0xFF) != 0x18) { | 817 | if ((temp & 0xFF) != 0x18) { |
| 785 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); | 818 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); |
| 786 | goto err; | 819 | *class = ATA_DEV_NONE; |
| 820 | goto out; | ||
| 787 | } else { | 821 | } else { |
| 788 | ata_port_printk(ap, KERN_INFO, | 822 | ata_port_printk(ap, KERN_INFO, |
| 789 | "Signature Update detected @ %d msecs\n", | 823 | "Signature Update detected @ %d msecs\n", |
| @@ -798,6 +832,7 @@ try_offline_again: | |||
| 798 | * reached here, we can send a command to the target device | 832 | * reached here, we can send a command to the target device |
| 799 | */ | 833 | */ |
| 800 | 834 | ||
| 835 | issue_srst: | ||
| 801 | DPRINTK("Sending SRST/device reset\n"); | 836 | DPRINTK("Sending SRST/device reset\n"); |
| 802 | 837 | ||
| 803 | ata_tf_init(link->device, &tf); | 838 | ata_tf_init(link->device, &tf); |
| @@ -808,7 +843,7 @@ try_offline_again: | |||
| 808 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | 843 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); |
| 809 | 844 | ||
| 810 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ | 845 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ |
| 811 | ata_tf_to_fis(&tf, 0, 0, cfis); | 846 | ata_tf_to_fis(&tf, pmp, 0, cfis); |
| 812 | 847 | ||
| 813 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", | 848 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", |
| 814 | cfis[0], cfis[1], cfis[2], cfis[3]); | 849 | cfis[0], cfis[1], cfis[2], cfis[3]); |
| @@ -854,8 +889,10 @@ try_offline_again: | |||
| 854 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | 889 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); |
| 855 | 890 | ||
| 856 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ | 891 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ |
| 857 | ata_tf_to_fis(&tf, 0, 0, cfis); | 892 | ata_tf_to_fis(&tf, pmp, 0, cfis); |
| 858 | 893 | ||
| 894 | if (pmp != SATA_PMP_CTRL_PORT) | ||
| 895 | iowrite32(pmp, CQPMP + hcr_base); | ||
| 859 | iowrite32(1, CQ + hcr_base); | 896 | iowrite32(1, CQ + hcr_base); |
| 860 | msleep(150); /* ?? */ | 897 | msleep(150); /* ?? */ |
| 861 | 898 | ||
| @@ -886,12 +923,21 @@ try_offline_again: | |||
| 886 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); | 923 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); |
| 887 | } | 924 | } |
| 888 | 925 | ||
| 926 | out: | ||
| 889 | return 0; | 927 | return 0; |
| 890 | 928 | ||
| 891 | err: | 929 | err: |
| 892 | return -EIO; | 930 | return -EIO; |
| 893 | } | 931 | } |
| 894 | 932 | ||
| 933 | static void sata_fsl_error_handler(struct ata_port *ap) | ||
| 934 | { | ||
| 935 | |||
| 936 | DPRINTK("in xx_error_handler\n"); | ||
| 937 | sata_pmp_error_handler(ap); | ||
| 938 | |||
| 939 | } | ||
| 940 | |||
| 895 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | 941 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) |
| 896 | { | 942 | { |
| 897 | if (qc->flags & ATA_QCFLAG_FAILED) | 943 | if (qc->flags & ATA_QCFLAG_FAILED) |
| @@ -905,18 +951,21 @@ static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | |||
| 905 | 951 | ||
| 906 | static void sata_fsl_error_intr(struct ata_port *ap) | 952 | static void sata_fsl_error_intr(struct ata_port *ap) |
| 907 | { | 953 | { |
| 908 | struct ata_link *link = &ap->link; | ||
| 909 | struct ata_eh_info *ehi = &link->eh_info; | ||
| 910 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 954 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 911 | void __iomem *hcr_base = host_priv->hcr_base; | 955 | void __iomem *hcr_base = host_priv->hcr_base; |
| 912 | u32 hstatus, dereg, cereg = 0, SError = 0; | 956 | u32 hstatus, dereg=0, cereg = 0, SError = 0; |
| 913 | unsigned int err_mask = 0, action = 0; | 957 | unsigned int err_mask = 0, action = 0; |
| 914 | struct ata_queued_cmd *qc; | 958 | int freeze = 0, abort=0; |
| 915 | int freeze = 0; | 959 | struct ata_link *link = NULL; |
| 960 | struct ata_queued_cmd *qc = NULL; | ||
| 961 | struct ata_eh_info *ehi; | ||
| 916 | 962 | ||
| 917 | hstatus = ioread32(hcr_base + HSTATUS); | 963 | hstatus = ioread32(hcr_base + HSTATUS); |
| 918 | cereg = ioread32(hcr_base + CE); | 964 | cereg = ioread32(hcr_base + CE); |
| 919 | 965 | ||
| 966 | /* first, analyze and record host port events */ | ||
| 967 | link = &ap->link; | ||
| 968 | ehi = &link->eh_info; | ||
| 920 | ata_ehi_clear_desc(ehi); | 969 | ata_ehi_clear_desc(ehi); |
| 921 | 970 | ||
| 922 | /* | 971 | /* |
| @@ -926,42 +975,28 @@ static void sata_fsl_error_intr(struct ata_port *ap) | |||
| 926 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); | 975 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); |
| 927 | if (unlikely(SError & 0xFFFF0000)) { | 976 | if (unlikely(SError & 0xFFFF0000)) { |
| 928 | sata_fsl_scr_write(ap, SCR_ERROR, SError); | 977 | sata_fsl_scr_write(ap, SCR_ERROR, SError); |
| 929 | err_mask |= AC_ERR_ATA_BUS; | ||
| 930 | } | 978 | } |
| 931 | 979 | ||
| 932 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", | 980 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", |
| 933 | hstatus, cereg, ioread32(hcr_base + DE), SError); | 981 | hstatus, cereg, ioread32(hcr_base + DE), SError); |
| 934 | 982 | ||
| 935 | /* handle single device errors */ | 983 | /* handle fatal errors */ |
| 936 | if (cereg) { | 984 | if (hstatus & FATAL_ERROR_DECODE) { |
| 937 | /* | 985 | ehi->err_mask |= AC_ERR_ATA_BUS; |
| 938 | * clear the command error, also clears queue to the device | 986 | ehi->action |= ATA_EH_SOFTRESET; |
| 939 | * in error, and we can (re)issue commands to this device. | ||
| 940 | * When a device is in error all commands queued into the | ||
| 941 | * host controller and at the device are considered aborted | ||
| 942 | * and the queue for that device is stopped. Now, after | ||
| 943 | * clearing the device error, we can issue commands to the | ||
| 944 | * device to interrogate it to find the source of the error. | ||
| 945 | */ | ||
| 946 | dereg = ioread32(hcr_base + DE); | ||
| 947 | iowrite32(dereg, hcr_base + DE); | ||
| 948 | iowrite32(cereg, hcr_base + CE); | ||
| 949 | 987 | ||
| 950 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
| 951 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
| 952 | /* | 988 | /* |
| 953 | * We should consider this as non fatal error, and TF must | 989 | * Ignore serror in case of fatal errors as we always want |
| 954 | * be updated as done below. | 990 | * to do a soft-reset of the FSL SATA controller. Analyzing |
| 991 | * serror may cause libata to schedule a hard-reset action, | ||
| 992 | * and hard-reset currently does not do controller | ||
| 993 | * offline/online, causing command timeouts and leads to an | ||
| 994 | * un-recoverable state, hence make libATA ignore | ||
| 995 | * autopsy in case of fatal errors. | ||
| 955 | */ | 996 | */ |
| 956 | 997 | ||
| 957 | err_mask |= AC_ERR_DEV; | 998 | ehi->flags |= ATA_EHI_NO_AUTOPSY; |
| 958 | } | ||
| 959 | 999 | ||
| 960 | /* handle fatal errors */ | ||
| 961 | if (hstatus & FATAL_ERROR_DECODE) { | ||
| 962 | err_mask |= AC_ERR_ATA_BUS; | ||
| 963 | action |= ATA_EH_RESET; | ||
| 964 | /* how will fatal error interrupts be completed ?? */ | ||
| 965 | freeze = 1; | 1000 | freeze = 1; |
| 966 | } | 1001 | } |
| 967 | 1002 | ||
| @@ -971,30 +1006,83 @@ static void sata_fsl_error_intr(struct ata_port *ap) | |||
| 971 | 1006 | ||
| 972 | /* Setup a soft-reset EH action */ | 1007 | /* Setup a soft-reset EH action */ |
| 973 | ata_ehi_hotplugged(ehi); | 1008 | ata_ehi_hotplugged(ehi); |
| 1009 | ata_ehi_push_desc(ehi, "%s", "PHY RDY changed"); | ||
| 974 | freeze = 1; | 1010 | freeze = 1; |
| 975 | } | 1011 | } |
| 976 | 1012 | ||
| 977 | /* record error info */ | 1013 | /* handle single device errors */ |
| 978 | qc = ata_qc_from_tag(ap, link->active_tag); | 1014 | if (cereg) { |
| 1015 | /* | ||
| 1016 | * clear the command error, also clears queue to the device | ||
| 1017 | * in error, and we can (re)issue commands to this device. | ||
| 1018 | * When a device is in error all commands queued into the | ||
| 1019 | * host controller and at the device are considered aborted | ||
| 1020 | * and the queue for that device is stopped. Now, after | ||
| 1021 | * clearing the device error, we can issue commands to the | ||
| 1022 | * device to interrogate it to find the source of the error. | ||
| 1023 | */ | ||
| 1024 | abort = 1; | ||
| 1025 | |||
| 1026 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
| 1027 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
| 979 | 1028 | ||
| 980 | if (qc) | 1029 | /* find out the offending link and qc */ |
| 1030 | if (ap->nr_pmp_links) { | ||
| 1031 | dereg = ioread32(hcr_base + DE); | ||
| 1032 | iowrite32(dereg, hcr_base + DE); | ||
| 1033 | iowrite32(cereg, hcr_base + CE); | ||
| 1034 | |||
| 1035 | if (dereg < ap->nr_pmp_links) { | ||
| 1036 | link = &ap->pmp_link[dereg]; | ||
| 1037 | ehi = &link->eh_info; | ||
| 1038 | qc = ata_qc_from_tag(ap, link->active_tag); | ||
| 1039 | /* | ||
| 1040 | * We should consider this as non fatal error, | ||
| 1041 | * and TF must be updated as done below. | ||
| 1042 | */ | ||
| 1043 | |||
| 1044 | err_mask |= AC_ERR_DEV; | ||
| 1045 | |||
| 1046 | } else { | ||
| 1047 | err_mask |= AC_ERR_HSM; | ||
| 1048 | action |= ATA_EH_HARDRESET; | ||
| 1049 | freeze = 1; | ||
| 1050 | } | ||
| 1051 | } else { | ||
| 1052 | dereg = ioread32(hcr_base + DE); | ||
| 1053 | iowrite32(dereg, hcr_base + DE); | ||
| 1054 | iowrite32(cereg, hcr_base + CE); | ||
| 1055 | |||
| 1056 | qc = ata_qc_from_tag(ap, link->active_tag); | ||
| 1057 | /* | ||
| 1058 | * We should consider this as non fatal error, | ||
| 1059 | * and TF must be updated as done below. | ||
| 1060 | */ | ||
| 1061 | err_mask |= AC_ERR_DEV; | ||
| 1062 | } | ||
| 1063 | } | ||
| 1064 | |||
| 1065 | /* record error info */ | ||
| 1066 | if (qc) { | ||
| 981 | qc->err_mask |= err_mask; | 1067 | qc->err_mask |= err_mask; |
| 982 | else | 1068 | } else |
| 983 | ehi->err_mask |= err_mask; | 1069 | ehi->err_mask |= err_mask; |
| 984 | 1070 | ||
| 985 | ehi->action |= action; | 1071 | ehi->action |= action; |
| 986 | ehi->serror |= SError; | ||
| 987 | 1072 | ||
| 988 | /* freeze or abort */ | 1073 | /* freeze or abort */ |
| 989 | if (freeze) | 1074 | if (freeze) |
| 990 | ata_port_freeze(ap); | 1075 | ata_port_freeze(ap); |
| 991 | else | 1076 | else if (abort) { |
| 992 | ata_port_abort(ap); | 1077 | if (qc) |
| 1078 | ata_link_abort(qc->dev->link); | ||
| 1079 | else | ||
| 1080 | ata_port_abort(ap); | ||
| 1081 | } | ||
| 993 | } | 1082 | } |
| 994 | 1083 | ||
| 995 | static void sata_fsl_host_intr(struct ata_port *ap) | 1084 | static void sata_fsl_host_intr(struct ata_port *ap) |
| 996 | { | 1085 | { |
| 997 | struct ata_link *link = &ap->link; | ||
| 998 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 1086 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 999 | void __iomem *hcr_base = host_priv->hcr_base; | 1087 | void __iomem *hcr_base = host_priv->hcr_base; |
| 1000 | u32 hstatus, qc_active = 0; | 1088 | u32 hstatus, qc_active = 0; |
| @@ -1017,10 +1105,19 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1017 | return; | 1105 | return; |
| 1018 | } | 1106 | } |
| 1019 | 1107 | ||
| 1020 | if (link->sactive) { /* only true for NCQ commands */ | 1108 | /* Read command completed register */ |
| 1109 | qc_active = ioread32(hcr_base + CC); | ||
| 1110 | |||
| 1111 | VPRINTK("Status of all queues :\n"); | ||
| 1112 | VPRINTK("qc_active/CC = 0x%x, CA = 0x%x, CE=0x%x,CQ=0x%x,apqa=0x%x\n", | ||
| 1113 | qc_active, | ||
| 1114 | ioread32(hcr_base + CA), | ||
| 1115 | ioread32(hcr_base + CE), | ||
| 1116 | ioread32(hcr_base + CQ), | ||
| 1117 | ap->qc_active); | ||
| 1118 | |||
| 1119 | if (qc_active & ap->qc_active) { | ||
| 1021 | int i; | 1120 | int i; |
| 1022 | /* Read command completed register */ | ||
| 1023 | qc_active = ioread32(hcr_base + CC); | ||
| 1024 | /* clear CC bit, this will also complete the interrupt */ | 1121 | /* clear CC bit, this will also complete the interrupt */ |
| 1025 | iowrite32(qc_active, hcr_base + CC); | 1122 | iowrite32(qc_active, hcr_base + CC); |
| 1026 | 1123 | ||
| @@ -1032,8 +1129,9 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1032 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { | 1129 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { |
| 1033 | if (qc_active & (1 << i)) { | 1130 | if (qc_active & (1 << i)) { |
| 1034 | qc = ata_qc_from_tag(ap, i); | 1131 | qc = ata_qc_from_tag(ap, i); |
| 1035 | if (qc) | 1132 | if (qc) { |
| 1036 | ata_qc_complete(qc); | 1133 | ata_qc_complete(qc); |
| 1134 | } | ||
| 1037 | DPRINTK | 1135 | DPRINTK |
| 1038 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", | 1136 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", |
| 1039 | i, ioread32(hcr_base + CC), | 1137 | i, ioread32(hcr_base + CC), |
| @@ -1042,19 +1140,21 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1042 | } | 1140 | } |
| 1043 | return; | 1141 | return; |
| 1044 | 1142 | ||
| 1045 | } else if (ap->qc_active) { | 1143 | } else if ((ap->qc_active & (1 << ATA_TAG_INTERNAL))) { |
| 1046 | iowrite32(1, hcr_base + CC); | 1144 | iowrite32(1, hcr_base + CC); |
| 1047 | qc = ata_qc_from_tag(ap, link->active_tag); | 1145 | qc = ata_qc_from_tag(ap, ATA_TAG_INTERNAL); |
| 1048 | 1146 | ||
| 1049 | DPRINTK("completing non-ncq cmd, tag=%d,CC=0x%x\n", | 1147 | DPRINTK("completing non-ncq cmd, CC=0x%x\n", |
| 1050 | link->active_tag, ioread32(hcr_base + CC)); | 1148 | ioread32(hcr_base + CC)); |
| 1051 | 1149 | ||
| 1052 | if (qc) | 1150 | if (qc) { |
| 1053 | ata_qc_complete(qc); | 1151 | ata_qc_complete(qc); |
| 1152 | } | ||
| 1054 | } else { | 1153 | } else { |
| 1055 | /* Spurious Interrupt!! */ | 1154 | /* Spurious Interrupt!! */ |
| 1056 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", | 1155 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", |
| 1057 | ioread32(hcr_base + CC)); | 1156 | ioread32(hcr_base + CC)); |
| 1157 | iowrite32(qc_active, hcr_base + CC); | ||
| 1058 | return; | 1158 | return; |
| 1059 | } | 1159 | } |
| 1060 | } | 1160 | } |
| @@ -1130,9 +1230,6 @@ static int sata_fsl_init_controller(struct ata_host *host) | |||
| 1130 | iowrite32(0x00000FFFF, hcr_base + CE); | 1230 | iowrite32(0x00000FFFF, hcr_base + CE); |
| 1131 | iowrite32(0x00000FFFF, hcr_base + DE); | 1231 | iowrite32(0x00000FFFF, hcr_base + DE); |
| 1132 | 1232 | ||
| 1133 | /* initially assuming no Port multiplier, set CQPMP to 0 */ | ||
| 1134 | iowrite32(0x0, hcr_base + CQPMP); | ||
| 1135 | |||
| 1136 | /* | 1233 | /* |
| 1137 | * host controller will be brought on-line, during xx_port_start() | 1234 | * host controller will be brought on-line, during xx_port_start() |
| 1138 | * callback, that should also initiate the OOB, COMINIT sequence | 1235 | * callback, that should also initiate the OOB, COMINIT sequence |
| @@ -1154,8 +1251,8 @@ static struct scsi_host_template sata_fsl_sht = { | |||
| 1154 | .dma_boundary = ATA_DMA_BOUNDARY, | 1251 | .dma_boundary = ATA_DMA_BOUNDARY, |
| 1155 | }; | 1252 | }; |
| 1156 | 1253 | ||
| 1157 | static const struct ata_port_operations sata_fsl_ops = { | 1254 | static struct ata_port_operations sata_fsl_ops = { |
| 1158 | .inherits = &sata_port_ops, | 1255 | .inherits = &sata_pmp_port_ops, |
| 1159 | 1256 | ||
| 1160 | .qc_prep = sata_fsl_qc_prep, | 1257 | .qc_prep = sata_fsl_qc_prep, |
| 1161 | .qc_issue = sata_fsl_qc_issue, | 1258 | .qc_issue = sata_fsl_qc_issue, |
| @@ -1168,10 +1265,15 @@ static const struct ata_port_operations sata_fsl_ops = { | |||
| 1168 | .thaw = sata_fsl_thaw, | 1265 | .thaw = sata_fsl_thaw, |
| 1169 | .prereset = sata_fsl_prereset, | 1266 | .prereset = sata_fsl_prereset, |
| 1170 | .softreset = sata_fsl_softreset, | 1267 | .softreset = sata_fsl_softreset, |
| 1268 | .pmp_softreset = sata_fsl_softreset, | ||
| 1269 | .error_handler = sata_fsl_error_handler, | ||
| 1171 | .post_internal_cmd = sata_fsl_post_internal_cmd, | 1270 | .post_internal_cmd = sata_fsl_post_internal_cmd, |
| 1172 | 1271 | ||
| 1173 | .port_start = sata_fsl_port_start, | 1272 | .port_start = sata_fsl_port_start, |
| 1174 | .port_stop = sata_fsl_port_stop, | 1273 | .port_stop = sata_fsl_port_stop, |
| 1274 | |||
| 1275 | .pmp_attach = sata_fsl_pmp_attach, | ||
| 1276 | .pmp_detach = sata_fsl_pmp_detach, | ||
| 1175 | }; | 1277 | }; |
| 1176 | 1278 | ||
| 1177 | static const struct ata_port_info sata_fsl_port_info[] = { | 1279 | static const struct ata_port_info sata_fsl_port_info[] = { |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index fb81f0c7a8c2..acf347f71a2f 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -72,7 +72,7 @@ | |||
| 72 | #include <linux/libata.h> | 72 | #include <linux/libata.h> |
| 73 | 73 | ||
| 74 | #define DRV_NAME "sata_mv" | 74 | #define DRV_NAME "sata_mv" |
| 75 | #define DRV_VERSION "1.21" | 75 | #define DRV_VERSION "1.24" |
| 76 | 76 | ||
| 77 | enum { | 77 | enum { |
| 78 | /* BAR's are enumerated in terms of pci_resource_start() terms */ | 78 | /* BAR's are enumerated in terms of pci_resource_start() terms */ |
| @@ -122,8 +122,6 @@ enum { | |||
| 122 | /* Host Flags */ | 122 | /* Host Flags */ |
| 123 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ | 123 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ |
| 124 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ | 124 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ |
| 125 | /* SoC integrated controllers, no PCI interface */ | ||
| 126 | MV_FLAG_SOC = (1 << 28), | ||
| 127 | 125 | ||
| 128 | MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 126 | MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
| 129 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | | 127 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | |
| @@ -356,12 +354,12 @@ enum { | |||
| 356 | MV_HP_ERRATA_50XXB2 = (1 << 2), | 354 | MV_HP_ERRATA_50XXB2 = (1 << 2), |
| 357 | MV_HP_ERRATA_60X1B2 = (1 << 3), | 355 | MV_HP_ERRATA_60X1B2 = (1 << 3), |
| 358 | MV_HP_ERRATA_60X1C0 = (1 << 4), | 356 | MV_HP_ERRATA_60X1C0 = (1 << 4), |
| 359 | MV_HP_ERRATA_XX42A0 = (1 << 5), | ||
| 360 | MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */ | 357 | MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */ |
| 361 | MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */ | 358 | MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */ |
| 362 | MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */ | 359 | MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */ |
| 363 | MV_HP_PCIE = (1 << 9), /* PCIe bus/regs: 7042 */ | 360 | MV_HP_PCIE = (1 << 9), /* PCIe bus/regs: 7042 */ |
| 364 | MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */ | 361 | MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */ |
| 362 | MV_HP_FLAG_SOC = (1 << 11), /* SystemOnChip, no PCI */ | ||
| 365 | 363 | ||
| 366 | /* Port private flags (pp_flags) */ | 364 | /* Port private flags (pp_flags) */ |
| 367 | MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */ | 365 | MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */ |
| @@ -374,7 +372,7 @@ enum { | |||
| 374 | #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II) | 372 | #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II) |
| 375 | #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE) | 373 | #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE) |
| 376 | #define IS_PCIE(hpriv) ((hpriv)->hp_flags & MV_HP_PCIE) | 374 | #define IS_PCIE(hpriv) ((hpriv)->hp_flags & MV_HP_PCIE) |
| 377 | #define HAS_PCI(host) (!((host)->ports[0]->flags & MV_FLAG_SOC)) | 375 | #define IS_SOC(hpriv) ((hpriv)->hp_flags & MV_HP_FLAG_SOC) |
| 378 | 376 | ||
| 379 | #define WINDOW_CTRL(i) (0x20030 + ((i) << 4)) | 377 | #define WINDOW_CTRL(i) (0x20030 + ((i) << 4)) |
| 380 | #define WINDOW_BASE(i) (0x20034 + ((i) << 4)) | 378 | #define WINDOW_BASE(i) (0x20034 + ((i) << 4)) |
| @@ -652,7 +650,7 @@ static const struct ata_port_info mv_port_info[] = { | |||
| 652 | .port_ops = &mv_iie_ops, | 650 | .port_ops = &mv_iie_ops, |
| 653 | }, | 651 | }, |
| 654 | { /* chip_soc */ | 652 | { /* chip_soc */ |
| 655 | .flags = MV_GENIIE_FLAGS | MV_FLAG_SOC, | 653 | .flags = MV_GENIIE_FLAGS, |
| 656 | .pio_mask = 0x1f, /* pio0-4 */ | 654 | .pio_mask = 0x1f, /* pio0-4 */ |
| 657 | .udma_mask = ATA_UDMA6, | 655 | .udma_mask = ATA_UDMA6, |
| 658 | .port_ops = &mv_iie_ops, | 656 | .port_ops = &mv_iie_ops, |
| @@ -812,12 +810,7 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio, | |||
| 812 | writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); | 810 | writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); |
| 813 | writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, | 811 | writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, |
| 814 | port_mmio + EDMA_REQ_Q_IN_PTR_OFS); | 812 | port_mmio + EDMA_REQ_Q_IN_PTR_OFS); |
| 815 | 813 | writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | |
| 816 | if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0) | ||
| 817 | writelfl((pp->crqb_dma & 0xffffffff) | index, | ||
| 818 | port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | ||
| 819 | else | ||
| 820 | writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | ||
| 821 | 814 | ||
| 822 | /* | 815 | /* |
| 823 | * initialize response queue | 816 | * initialize response queue |
| @@ -827,13 +820,7 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio, | |||
| 827 | 820 | ||
| 828 | WARN_ON(pp->crpb_dma & 0xff); | 821 | WARN_ON(pp->crpb_dma & 0xff); |
| 829 | writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); | 822 | writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); |
| 830 | 823 | writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | |
| 831 | if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0) | ||
| 832 | writelfl((pp->crpb_dma & 0xffffffff) | index, | ||
| 833 | port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | ||
| 834 | else | ||
| 835 | writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | ||
| 836 | |||
| 837 | writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, | 824 | writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, |
| 838 | port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); | 825 | port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); |
| 839 | } | 826 | } |
| @@ -1254,7 +1241,7 @@ static void mv_edma_cfg(struct ata_port *ap, int want_ncq) | |||
| 1254 | 1241 | ||
| 1255 | cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ | 1242 | cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ |
| 1256 | cfg |= (1 << 22); /* enab 4-entry host queue cache */ | 1243 | cfg |= (1 << 22); /* enab 4-entry host queue cache */ |
| 1257 | if (HAS_PCI(ap->host)) | 1244 | if (!IS_SOC(hpriv)) |
| 1258 | cfg |= (1 << 18); /* enab early completion */ | 1245 | cfg |= (1 << 18); /* enab early completion */ |
| 1259 | if (hpriv->hp_flags & MV_HP_CUT_THROUGH) | 1246 | if (hpriv->hp_flags & MV_HP_CUT_THROUGH) |
| 1260 | cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ | 1247 | cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ |
| @@ -2225,7 +2212,7 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance) | |||
| 2225 | * a bogus register value which can indicate HW removal or PCI fault. | 2212 | * a bogus register value which can indicate HW removal or PCI fault. |
| 2226 | */ | 2213 | */ |
| 2227 | if (pending_irqs && main_irq_cause != 0xffffffffU) { | 2214 | if (pending_irqs && main_irq_cause != 0xffffffffU) { |
| 2228 | if (unlikely((pending_irqs & PCI_ERR) && HAS_PCI(host))) | 2215 | if (unlikely((pending_irqs & PCI_ERR) && !IS_SOC(hpriv))) |
| 2229 | handled = mv_pci_error(host, hpriv->base); | 2216 | handled = mv_pci_error(host, hpriv->base); |
| 2230 | else | 2217 | else |
| 2231 | handled = mv_host_intr(host, pending_irqs); | 2218 | handled = mv_host_intr(host, pending_irqs); |
| @@ -2547,7 +2534,7 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2547 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); | 2534 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); |
| 2548 | int fix_phy_mode4 = | 2535 | int fix_phy_mode4 = |
| 2549 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); | 2536 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); |
| 2550 | u32 m2, tmp; | 2537 | u32 m2, m3; |
| 2551 | 2538 | ||
| 2552 | if (fix_phy_mode2) { | 2539 | if (fix_phy_mode2) { |
| 2553 | m2 = readl(port_mmio + PHY_MODE2); | 2540 | m2 = readl(port_mmio + PHY_MODE2); |
| @@ -2564,28 +2551,37 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2564 | udelay(200); | 2551 | udelay(200); |
| 2565 | } | 2552 | } |
| 2566 | 2553 | ||
| 2567 | /* who knows what this magic does */ | 2554 | /* |
| 2568 | tmp = readl(port_mmio + PHY_MODE3); | 2555 | * Gen-II/IIe PHY_MODE3 errata RM#2: |
| 2569 | tmp &= ~0x7F800000; | 2556 | * Achieves better receiver noise performance than the h/w default: |
| 2570 | tmp |= 0x2A800000; | 2557 | */ |
| 2571 | writel(tmp, port_mmio + PHY_MODE3); | 2558 | m3 = readl(port_mmio + PHY_MODE3); |
| 2559 | m3 = (m3 & 0x1f) | (0x5555601 << 5); | ||
| 2560 | |||
| 2561 | /* Guideline 88F5182 (GL# SATA-S11) */ | ||
| 2562 | if (IS_SOC(hpriv)) | ||
| 2563 | m3 &= ~0x1c; | ||
| 2572 | 2564 | ||
| 2573 | if (fix_phy_mode4) { | 2565 | if (fix_phy_mode4) { |
| 2574 | u32 m4; | 2566 | u32 m4; |
| 2575 | 2567 | ||
| 2576 | m4 = readl(port_mmio + PHY_MODE4); | 2568 | m4 = readl(port_mmio + PHY_MODE4); |
| 2577 | 2569 | ||
| 2578 | if (hp_flags & MV_HP_ERRATA_60X1B2) | ||
| 2579 | tmp = readl(port_mmio + PHY_MODE3); | ||
| 2580 | |||
| 2581 | /* workaround for errata FEr SATA#10 (part 1) */ | 2570 | /* workaround for errata FEr SATA#10 (part 1) */ |
| 2582 | m4 = (m4 & ~(1 << 1)) | (1 << 0); | 2571 | m4 = (m4 & ~(1 << 1)) | (1 << 0); |
| 2583 | 2572 | ||
| 2584 | writel(m4, port_mmio + PHY_MODE4); | 2573 | /* enforce bit restrictions on GenIIe devices */ |
| 2574 | if (IS_GEN_IIE(hpriv)) | ||
| 2575 | m4 = (m4 & ~0x5DE3FFFC) | (1 << 2); | ||
| 2585 | 2576 | ||
| 2586 | if (hp_flags & MV_HP_ERRATA_60X1B2) | 2577 | writel(m4, port_mmio + PHY_MODE4); |
| 2587 | writel(tmp, port_mmio + PHY_MODE3); | ||
| 2588 | } | 2578 | } |
| 2579 | /* | ||
| 2580 | * Workaround for 60x1-B2 errata SATA#13: | ||
| 2581 | * Any write to PHY_MODE4 (above) may corrupt PHY_MODE3, | ||
| 2582 | * so we must always rewrite PHY_MODE3 after PHY_MODE4. | ||
| 2583 | */ | ||
| 2584 | writel(m3, port_mmio + PHY_MODE3); | ||
| 2589 | 2585 | ||
| 2590 | /* Revert values of pre-emphasis and signal amps to the saved ones */ | 2586 | /* Revert values of pre-emphasis and signal amps to the saved ones */ |
| 2591 | m2 = readl(port_mmio + PHY_MODE2); | 2587 | m2 = readl(port_mmio + PHY_MODE2); |
| @@ -2876,7 +2872,7 @@ static unsigned int mv_in_pcix_mode(struct ata_host *host) | |||
| 2876 | void __iomem *mmio = hpriv->base; | 2872 | void __iomem *mmio = hpriv->base; |
| 2877 | u32 reg; | 2873 | u32 reg; |
| 2878 | 2874 | ||
| 2879 | if (!HAS_PCI(host) || !IS_PCIE(hpriv)) | 2875 | if (IS_SOC(hpriv) || !IS_PCIE(hpriv)) |
| 2880 | return 0; /* not PCI-X capable */ | 2876 | return 0; /* not PCI-X capable */ |
| 2881 | reg = readl(mmio + MV_PCI_MODE_OFS); | 2877 | reg = readl(mmio + MV_PCI_MODE_OFS); |
| 2882 | if ((reg & MV_PCI_MODE_MASK) == 0) | 2878 | if ((reg & MV_PCI_MODE_MASK) == 0) |
| @@ -3003,10 +2999,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
| 3003 | hp_flags |= MV_HP_CUT_THROUGH; | 2999 | hp_flags |= MV_HP_CUT_THROUGH; |
| 3004 | 3000 | ||
| 3005 | switch (pdev->revision) { | 3001 | switch (pdev->revision) { |
| 3006 | case 0x0: | 3002 | case 0x2: /* Rev.B0: the first/only public release */ |
| 3007 | hp_flags |= MV_HP_ERRATA_XX42A0; | ||
| 3008 | break; | ||
| 3009 | case 0x1: | ||
| 3010 | hp_flags |= MV_HP_ERRATA_60X1C0; | 3003 | hp_flags |= MV_HP_ERRATA_60X1C0; |
| 3011 | break; | 3004 | break; |
| 3012 | default: | 3005 | default: |
| @@ -3018,7 +3011,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
| 3018 | break; | 3011 | break; |
| 3019 | case chip_soc: | 3012 | case chip_soc: |
| 3020 | hpriv->ops = &mv_soc_ops; | 3013 | hpriv->ops = &mv_soc_ops; |
| 3021 | hp_flags |= MV_HP_ERRATA_60X1C0; | 3014 | hp_flags |= MV_HP_FLAG_SOC | MV_HP_ERRATA_60X1C0; |
| 3022 | break; | 3015 | break; |
| 3023 | 3016 | ||
| 3024 | default: | 3017 | default: |
| @@ -3062,12 +3055,12 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3062 | if (rc) | 3055 | if (rc) |
| 3063 | goto done; | 3056 | goto done; |
| 3064 | 3057 | ||
| 3065 | if (HAS_PCI(host)) { | 3058 | if (IS_SOC(hpriv)) { |
| 3066 | hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; | ||
| 3067 | hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; | ||
| 3068 | } else { | ||
| 3069 | hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; | 3059 | hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; |
| 3070 | hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; | 3060 | hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; |
| 3061 | } else { | ||
| 3062 | hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; | ||
| 3063 | hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; | ||
| 3071 | } | 3064 | } |
| 3072 | 3065 | ||
| 3073 | /* global interrupt mask: 0 == mask everything */ | 3066 | /* global interrupt mask: 0 == mask everything */ |
| @@ -3093,7 +3086,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3093 | mv_port_init(&ap->ioaddr, port_mmio); | 3086 | mv_port_init(&ap->ioaddr, port_mmio); |
| 3094 | 3087 | ||
| 3095 | #ifdef CONFIG_PCI | 3088 | #ifdef CONFIG_PCI |
| 3096 | if (HAS_PCI(host)) { | 3089 | if (!IS_SOC(hpriv)) { |
| 3097 | unsigned int offset = port_mmio - mmio; | 3090 | unsigned int offset = port_mmio - mmio; |
| 3098 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); | 3091 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); |
| 3099 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); | 3092 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); |
| @@ -3113,7 +3106,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3113 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); | 3106 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); |
| 3114 | } | 3107 | } |
| 3115 | 3108 | ||
| 3116 | if (HAS_PCI(host)) { | 3109 | if (!IS_SOC(hpriv)) { |
| 3117 | /* Clear any currently outstanding host interrupt conditions */ | 3110 | /* Clear any currently outstanding host interrupt conditions */ |
| 3118 | writelfl(0, mmio + hpriv->irq_cause_ofs); | 3111 | writelfl(0, mmio + hpriv->irq_cause_ofs); |
| 3119 | 3112 | ||
diff --git a/drivers/base/core.c b/drivers/base/core.c index 72eccae4904b..422cfcad486d 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
| @@ -760,6 +760,21 @@ static void device_remove_class_symlinks(struct device *dev) | |||
| 760 | } | 760 | } |
| 761 | 761 | ||
| 762 | /** | 762 | /** |
| 763 | * dev_set_name - set a device name | ||
| 764 | * @dev: device | ||
| 765 | */ | ||
| 766 | int dev_set_name(struct device *dev, const char *fmt, ...) | ||
| 767 | { | ||
| 768 | va_list vargs; | ||
| 769 | |||
| 770 | va_start(vargs, fmt); | ||
| 771 | vsnprintf(dev->bus_id, sizeof(dev->bus_id), fmt, vargs); | ||
| 772 | va_end(vargs); | ||
| 773 | return 0; | ||
| 774 | } | ||
| 775 | EXPORT_SYMBOL_GPL(dev_set_name); | ||
| 776 | |||
| 777 | /** | ||
| 763 | * device_add - add device to device hierarchy. | 778 | * device_add - add device to device hierarchy. |
| 764 | * @dev: device. | 779 | * @dev: device. |
| 765 | * | 780 | * |
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 84e064ffee52..dd7ea203f940 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
| @@ -260,6 +260,10 @@ static int virtblk_probe(struct virtio_device *vdev) | |||
| 260 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) | 260 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) |
| 261 | blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL); | 261 | blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL); |
| 262 | 262 | ||
| 263 | /* If disk is read-only in the host, the guest should obey */ | ||
| 264 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO)) | ||
| 265 | set_disk_ro(vblk->disk, 1); | ||
| 266 | |||
| 263 | /* Host must always specify the capacity. */ | 267 | /* Host must always specify the capacity. */ |
| 264 | vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity), | 268 | vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity), |
| 265 | &cap, sizeof(cap)); | 269 | &cap, sizeof(cap)); |
| @@ -311,6 +315,7 @@ static void virtblk_remove(struct virtio_device *vdev) | |||
| 311 | /* Stop all the virtqueues. */ | 315 | /* Stop all the virtqueues. */ |
| 312 | vdev->config->reset(vdev); | 316 | vdev->config->reset(vdev); |
| 313 | 317 | ||
| 318 | del_gendisk(vblk->disk); | ||
| 314 | blk_cleanup_queue(vblk->disk->queue); | 319 | blk_cleanup_queue(vblk->disk->queue); |
| 315 | put_disk(vblk->disk); | 320 | put_disk(vblk->disk); |
| 316 | mempool_destroy(vblk->pool); | 321 | mempool_destroy(vblk->pool); |
| @@ -325,7 +330,7 @@ static struct virtio_device_id id_table[] = { | |||
| 325 | 330 | ||
| 326 | static unsigned int features[] = { | 331 | static unsigned int features[] = { |
| 327 | VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, | 332 | VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, |
| 328 | VIRTIO_BLK_F_GEOMETRY, | 333 | VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, |
| 329 | }; | 334 | }; |
| 330 | 335 | ||
| 331 | static struct virtio_driver virtio_blk = { | 336 | static struct virtio_driver virtio_blk = { |
diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 8d6c2089d2a8..efd0b4db7c8e 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig | |||
| @@ -112,3 +112,12 @@ config HW_RANDOM_PASEMI | |||
| 112 | 112 | ||
| 113 | If unsure, say Y. | 113 | If unsure, say Y. |
| 114 | 114 | ||
| 115 | config HW_RANDOM_VIRTIO | ||
| 116 | tristate "VirtIO Random Number Generator support" | ||
| 117 | depends on HW_RANDOM && VIRTIO | ||
| 118 | ---help--- | ||
| 119 | This driver provides kernel-side support for the virtual Random Number | ||
| 120 | Generator hardware. | ||
| 121 | |||
| 122 | To compile this driver as a module, choose M here: the | ||
| 123 | module will be called virtio-rng. If unsure, say N. | ||
diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index c8b7300e2fb1..b4940ddbb35f 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile | |||
| @@ -11,3 +11,4 @@ obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o | |||
| 11 | obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o | 11 | obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o |
| 12 | obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o | 12 | obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o |
| 13 | obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o | 13 | obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o |
| 14 | obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o | ||
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c new file mode 100644 index 000000000000..d0e563e4fc39 --- /dev/null +++ b/drivers/char/hw_random/virtio-rng.c | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | /* | ||
| 2 | * Randomness driver for virtio | ||
| 3 | * Copyright (C) 2007, 2008 Rusty Russell IBM Corporation | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 18 | */ | ||
| 19 | #include <linux/err.h> | ||
| 20 | #include <linux/hw_random.h> | ||
| 21 | #include <linux/scatterlist.h> | ||
| 22 | #include <linux/spinlock.h> | ||
| 23 | #include <linux/virtio.h> | ||
| 24 | #include <linux/virtio_rng.h> | ||
| 25 | |||
| 26 | /* The host will fill any buffer we give it with sweet, sweet randomness. We | ||
| 27 | * give it 64 bytes at a time, and the hwrng framework takes it 4 bytes at a | ||
| 28 | * time. */ | ||
| 29 | #define RANDOM_DATA_SIZE 64 | ||
| 30 | |||
| 31 | static struct virtqueue *vq; | ||
| 32 | static u32 *random_data; | ||
| 33 | static unsigned int data_left; | ||
| 34 | static DECLARE_COMPLETION(have_data); | ||
| 35 | |||
| 36 | static void random_recv_done(struct virtqueue *vq) | ||
| 37 | { | ||
| 38 | int len; | ||
| 39 | |||
| 40 | /* We never get spurious callbacks. */ | ||
| 41 | if (!vq->vq_ops->get_buf(vq, &len)) | ||
| 42 | BUG(); | ||
| 43 | |||
| 44 | data_left = len / sizeof(random_data[0]); | ||
| 45 | complete(&have_data); | ||
| 46 | } | ||
| 47 | |||
| 48 | static void register_buffer(void) | ||
| 49 | { | ||
| 50 | struct scatterlist sg; | ||
| 51 | |||
| 52 | sg_init_one(&sg, random_data, RANDOM_DATA_SIZE); | ||
| 53 | /* There should always be room for one buffer. */ | ||
| 54 | if (vq->vq_ops->add_buf(vq, &sg, 0, 1, random_data) != 0) | ||
| 55 | BUG(); | ||
| 56 | vq->vq_ops->kick(vq); | ||
| 57 | } | ||
| 58 | |||
| 59 | /* At least we don't udelay() in a loop like some other drivers. */ | ||
| 60 | static int virtio_data_present(struct hwrng *rng, int wait) | ||
| 61 | { | ||
| 62 | if (data_left) | ||
| 63 | return 1; | ||
| 64 | |||
| 65 | if (!wait) | ||
| 66 | return 0; | ||
| 67 | |||
| 68 | wait_for_completion(&have_data); | ||
| 69 | return 1; | ||
| 70 | } | ||
| 71 | |||
| 72 | /* virtio_data_present() must have succeeded before this is called. */ | ||
| 73 | static int virtio_data_read(struct hwrng *rng, u32 *data) | ||
| 74 | { | ||
| 75 | BUG_ON(!data_left); | ||
| 76 | |||
| 77 | *data = random_data[--data_left]; | ||
| 78 | |||
| 79 | if (!data_left) { | ||
| 80 | init_completion(&have_data); | ||
| 81 | register_buffer(); | ||
| 82 | } | ||
| 83 | return sizeof(*data); | ||
| 84 | } | ||
| 85 | |||
| 86 | static struct hwrng virtio_hwrng = { | ||
| 87 | .name = "virtio", | ||
| 88 | .data_present = virtio_data_present, | ||
| 89 | .data_read = virtio_data_read, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static int virtrng_probe(struct virtio_device *vdev) | ||
| 93 | { | ||
| 94 | int err; | ||
| 95 | |||
| 96 | /* We expect a single virtqueue. */ | ||
| 97 | vq = vdev->config->find_vq(vdev, 0, random_recv_done); | ||
| 98 | if (IS_ERR(vq)) | ||
| 99 | return PTR_ERR(vq); | ||
| 100 | |||
| 101 | err = hwrng_register(&virtio_hwrng); | ||
| 102 | if (err) { | ||
| 103 | vdev->config->del_vq(vq); | ||
| 104 | return err; | ||
| 105 | } | ||
| 106 | |||
| 107 | register_buffer(); | ||
| 108 | return 0; | ||
| 109 | } | ||
| 110 | |||
| 111 | static void virtrng_remove(struct virtio_device *vdev) | ||
| 112 | { | ||
| 113 | vdev->config->reset(vdev); | ||
| 114 | hwrng_unregister(&virtio_hwrng); | ||
| 115 | vdev->config->del_vq(vq); | ||
| 116 | } | ||
| 117 | |||
| 118 | static struct virtio_device_id id_table[] = { | ||
| 119 | { VIRTIO_ID_RNG, VIRTIO_DEV_ANY_ID }, | ||
| 120 | { 0 }, | ||
| 121 | }; | ||
| 122 | |||
| 123 | static struct virtio_driver virtio_rng = { | ||
| 124 | .driver.name = KBUILD_MODNAME, | ||
| 125 | .driver.owner = THIS_MODULE, | ||
| 126 | .id_table = id_table, | ||
| 127 | .probe = virtrng_probe, | ||
| 128 | .remove = __devexit_p(virtrng_remove), | ||
| 129 | }; | ||
| 130 | |||
| 131 | static int __init init(void) | ||
| 132 | { | ||
| 133 | int err; | ||
| 134 | |||
| 135 | random_data = kmalloc(RANDOM_DATA_SIZE, GFP_KERNEL); | ||
| 136 | if (!random_data) | ||
| 137 | return -ENOMEM; | ||
| 138 | |||
| 139 | err = register_virtio_driver(&virtio_rng); | ||
| 140 | if (err) | ||
| 141 | kfree(random_data); | ||
| 142 | return err; | ||
| 143 | } | ||
| 144 | |||
| 145 | static void __exit fini(void) | ||
| 146 | { | ||
| 147 | kfree(random_data); | ||
| 148 | unregister_virtio_driver(&virtio_rng); | ||
| 149 | } | ||
| 150 | module_init(init); | ||
| 151 | module_exit(fini); | ||
| 152 | |||
| 153 | MODULE_DEVICE_TABLE(virtio, id_table); | ||
| 154 | MODULE_DESCRIPTION("Virtio random number driver"); | ||
| 155 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 7fce038fa57e..86f0a2430624 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -928,13 +928,13 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 928 | policy->user_policy.policy = policy->policy; | 928 | policy->user_policy.policy = policy->policy; |
| 929 | policy->user_policy.governor = policy->governor; | 929 | policy->user_policy.governor = policy->governor; |
| 930 | 930 | ||
| 931 | unlock_policy_rwsem_write(cpu); | ||
| 932 | |||
| 933 | if (ret) { | 931 | if (ret) { |
| 934 | dprintk("setting policy failed\n"); | 932 | dprintk("setting policy failed\n"); |
| 935 | goto err_out_unregister; | 933 | goto err_out_unregister; |
| 936 | } | 934 | } |
| 937 | 935 | ||
| 936 | unlock_policy_rwsem_write(cpu); | ||
| 937 | |||
| 938 | kobject_uevent(&policy->kobj, KOBJ_ADD); | 938 | kobject_uevent(&policy->kobj, KOBJ_ADD); |
| 939 | module_put(cpufreq_driver->owner); | 939 | module_put(cpufreq_driver->owner); |
| 940 | dprintk("initialization complete\n"); | 940 | dprintk("initialization complete\n"); |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 4a95adc4cc78..af58a6f1e898 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -807,6 +807,8 @@ static int atkbd_activate(struct atkbd *atkbd) | |||
| 807 | static void atkbd_cleanup(struct serio *serio) | 807 | static void atkbd_cleanup(struct serio *serio) |
| 808 | { | 808 | { |
| 809 | struct atkbd *atkbd = serio_get_drvdata(serio); | 809 | struct atkbd *atkbd = serio_get_drvdata(serio); |
| 810 | |||
| 811 | atkbd_disable(atkbd); | ||
| 810 | ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); | 812 | ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); |
| 811 | } | 813 | } |
| 812 | 814 | ||
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 3dea0c5077a9..45767e73f071 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c | |||
| @@ -136,6 +136,9 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) | |||
| 136 | set_bit(code, input_dev->keybit); | 136 | set_bit(code, input_dev->keybit); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | for (i = 0; i < pdata->direct_key_num; i++) | ||
| 140 | set_bit(pdata->direct_key_map[i], input_dev->keybit); | ||
| 141 | |||
| 139 | keypad->rotary_up_key[0] = pdata->rotary0_up_key; | 142 | keypad->rotary_up_key[0] = pdata->rotary0_up_key; |
| 140 | keypad->rotary_up_key[1] = pdata->rotary1_up_key; | 143 | keypad->rotary_up_key[1] = pdata->rotary1_up_key; |
| 141 | keypad->rotary_down_key[0] = pdata->rotary0_down_key; | 144 | keypad->rotary_down_key[0] = pdata->rotary0_down_key; |
| @@ -143,17 +146,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) | |||
| 143 | keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; | 146 | keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; |
| 144 | keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; | 147 | keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; |
| 145 | 148 | ||
| 146 | if (pdata->rotary0_up_key && pdata->rotary0_down_key) { | 149 | if (pdata->enable_rotary0) { |
| 147 | set_bit(pdata->rotary0_up_key, input_dev->keybit); | 150 | if (pdata->rotary0_up_key && pdata->rotary0_down_key) { |
| 148 | set_bit(pdata->rotary0_down_key, input_dev->keybit); | 151 | set_bit(pdata->rotary0_up_key, input_dev->keybit); |
| 149 | } else | 152 | set_bit(pdata->rotary0_down_key, input_dev->keybit); |
| 150 | set_bit(pdata->rotary0_rel_code, input_dev->relbit); | 153 | } else |
| 151 | 154 | set_bit(pdata->rotary0_rel_code, input_dev->relbit); | |
| 152 | if (pdata->rotary1_up_key && pdata->rotary1_down_key) { | 155 | } |
| 153 | set_bit(pdata->rotary1_up_key, input_dev->keybit); | 156 | |
| 154 | set_bit(pdata->rotary1_down_key, input_dev->keybit); | 157 | if (pdata->enable_rotary1) { |
| 155 | } else | 158 | if (pdata->rotary1_up_key && pdata->rotary1_down_key) { |
| 156 | set_bit(pdata->rotary1_rel_code, input_dev->relbit); | 159 | set_bit(pdata->rotary1_up_key, input_dev->keybit); |
| 160 | set_bit(pdata->rotary1_down_key, input_dev->keybit); | ||
| 161 | } else | ||
| 162 | set_bit(pdata->rotary1_rel_code, input_dev->relbit); | ||
| 163 | } | ||
| 157 | } | 164 | } |
| 158 | 165 | ||
| 159 | static inline unsigned int lookup_matrix_keycode( | 166 | static inline unsigned int lookup_matrix_keycode( |
| @@ -484,8 +491,13 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) | |||
| 484 | keypad->input_dev = input_dev; | 491 | keypad->input_dev = input_dev; |
| 485 | input_set_drvdata(input_dev, keypad); | 492 | input_set_drvdata(input_dev, keypad); |
| 486 | 493 | ||
| 487 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | | 494 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
| 488 | BIT_MASK(EV_REL); | 495 | if ((keypad->pdata->enable_rotary0 && |
| 496 | keypad->pdata->rotary0_rel_code) || | ||
| 497 | (keypad->pdata->enable_rotary1 && | ||
| 498 | keypad->pdata->rotary1_rel_code)) { | ||
| 499 | input_dev->evbit[0] |= BIT_MASK(EV_REL); | ||
| 500 | } | ||
| 489 | 501 | ||
| 490 | pxa27x_keypad_build_keycode(keypad); | 502 | pxa27x_keypad_build_keycode(keypad); |
| 491 | platform_set_drvdata(pdev, keypad); | 503 | platform_set_drvdata(pdev, keypad); |
diff --git a/drivers/input/misc/apanel.c b/drivers/input/misc/apanel.c index 9531d8c7444f..d82f7f727f7a 100644 --- a/drivers/input/misc/apanel.c +++ b/drivers/input/misc/apanel.c | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
| 21 | #include <linux/ioport.h> | 21 | #include <linux/ioport.h> |
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/module.h> | ||
| 24 | #include <linux/input-polldev.h> | 23 | #include <linux/input-polldev.h> |
| 25 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
| 26 | #include <linux/workqueue.h> | 25 | #include <linux/workqueue.h> |
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index 5ece9f56babc..9aafa96cb746 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
| @@ -331,6 +331,13 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = { | |||
| 331 | }, | 331 | }, |
| 332 | }, | 332 | }, |
| 333 | { | 333 | { |
| 334 | .ident = "Acer TravelMate 660", | ||
| 335 | .matches = { | ||
| 336 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
| 337 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), | ||
| 338 | }, | ||
| 339 | }, | ||
| 340 | { | ||
| 334 | .ident = "Acer TravelMate 2490", | 341 | .ident = "Acer TravelMate 2490", |
| 335 | .matches = { | 342 | .matches = { |
| 336 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | 343 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 65a74cfc187b..592ff55b62d0 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
| @@ -885,6 +885,20 @@ static long i8042_panic_blink(long count) | |||
| 885 | 885 | ||
| 886 | #undef DELAY | 886 | #undef DELAY |
| 887 | 887 | ||
| 888 | #ifdef CONFIG_X86 | ||
| 889 | static void i8042_dritek_enable(void) | ||
| 890 | { | ||
| 891 | char param = 0x90; | ||
| 892 | int error; | ||
| 893 | |||
| 894 | error = i8042_command(¶m, 0x1059); | ||
| 895 | if (error) | ||
| 896 | printk(KERN_WARNING | ||
| 897 | "Failed to enable DRITEK extension: %d\n", | ||
| 898 | error); | ||
| 899 | } | ||
| 900 | #endif | ||
| 901 | |||
| 888 | #ifdef CONFIG_PM | 902 | #ifdef CONFIG_PM |
| 889 | /* | 903 | /* |
| 890 | * Here we try to restore the original BIOS settings. We only want to | 904 | * Here we try to restore the original BIOS settings. We only want to |
| @@ -942,6 +956,12 @@ static int i8042_resume(struct platform_device *dev) | |||
| 942 | return -EIO; | 956 | return -EIO; |
| 943 | } | 957 | } |
| 944 | 958 | ||
| 959 | |||
| 960 | #ifdef CONFIG_X86 | ||
| 961 | if (i8042_dritek) | ||
| 962 | i8042_dritek_enable(); | ||
| 963 | #endif | ||
| 964 | |||
| 945 | if (i8042_mux_present) { | 965 | if (i8042_mux_present) { |
| 946 | if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) | 966 | if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) |
| 947 | printk(KERN_WARNING | 967 | printk(KERN_WARNING |
| @@ -1160,6 +1180,11 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
| 1160 | if (error) | 1180 | if (error) |
| 1161 | return error; | 1181 | return error; |
| 1162 | 1182 | ||
| 1183 | #ifdef CONFIG_X86 | ||
| 1184 | if (i8042_dritek) | ||
| 1185 | i8042_dritek_enable(); | ||
| 1186 | #endif | ||
| 1187 | |||
| 1163 | if (!i8042_noaux) { | 1188 | if (!i8042_noaux) { |
| 1164 | error = i8042_setup_aux(); | 1189 | error = i8042_setup_aux(); |
| 1165 | if (error && error != -ENODEV && error != -EBUSY) | 1190 | if (error && error != -ENODEV && error != -EBUSY) |
| @@ -1171,14 +1196,6 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
| 1171 | if (error) | 1196 | if (error) |
| 1172 | goto out_fail; | 1197 | goto out_fail; |
| 1173 | } | 1198 | } |
| 1174 | #ifdef CONFIG_X86 | ||
| 1175 | if (i8042_dritek) { | ||
| 1176 | char param = 0x90; | ||
| 1177 | error = i8042_command(¶m, 0x1059); | ||
| 1178 | if (error) | ||
| 1179 | goto out_fail; | ||
| 1180 | } | ||
| 1181 | #endif | ||
| 1182 | /* | 1199 | /* |
| 1183 | * Ok, everything is ready, let's register all serio ports | 1200 | * Ok, everything is ready, let's register all serio ports |
| 1184 | */ | 1201 | */ |
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index c5a8661a1baa..1e748e46d12e 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c | |||
| @@ -830,7 +830,7 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 830 | struct gtco *gtco; | 830 | struct gtco *gtco; |
| 831 | struct input_dev *input_dev; | 831 | struct input_dev *input_dev; |
| 832 | struct hid_descriptor *hid_desc; | 832 | struct hid_descriptor *hid_desc; |
| 833 | char *report = NULL; | 833 | char *report; |
| 834 | int result = 0, retry; | 834 | int result = 0, retry; |
| 835 | int error; | 835 | int error; |
| 836 | struct usb_endpoint_descriptor *endpoint; | 836 | struct usb_endpoint_descriptor *endpoint; |
| @@ -916,12 +916,16 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 916 | le16_to_cpu(hid_desc->wDescriptorLength), | 916 | le16_to_cpu(hid_desc->wDescriptorLength), |
| 917 | 5000); /* 5 secs */ | 917 | 5000); /* 5 secs */ |
| 918 | 918 | ||
| 919 | if (result == le16_to_cpu(hid_desc->wDescriptorLength)) | 919 | dbg("usb_control_msg result: %d", result); |
| 920 | if (result == le16_to_cpu(hid_desc->wDescriptorLength)) { | ||
| 921 | parse_hid_report_descriptor(gtco, report, result); | ||
| 920 | break; | 922 | break; |
| 923 | } | ||
| 921 | } | 924 | } |
| 922 | 925 | ||
| 926 | kfree(report); | ||
| 927 | |||
| 923 | /* If we didn't get the report, fail */ | 928 | /* If we didn't get the report, fail */ |
| 924 | dbg("usb_control_msg result: :%d", result); | ||
| 925 | if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { | 929 | if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { |
| 926 | err("Failed to get HID Report Descriptor of size: %d", | 930 | err("Failed to get HID Report Descriptor of size: %d", |
| 927 | hid_desc->wDescriptorLength); | 931 | hid_desc->wDescriptorLength); |
| @@ -929,12 +933,6 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 929 | goto err_free_urb; | 933 | goto err_free_urb; |
| 930 | } | 934 | } |
| 931 | 935 | ||
| 932 | /* Now we parse the report */ | ||
| 933 | parse_hid_report_descriptor(gtco, report, result); | ||
| 934 | |||
| 935 | /* Now we delete it */ | ||
| 936 | kfree(report); | ||
| 937 | |||
| 938 | /* Create a device file node */ | 936 | /* Create a device file node */ |
| 939 | usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); | 937 | usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); |
| 940 | strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); | 938 | strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); |
| @@ -988,7 +986,6 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 988 | usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, | 986 | usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, |
| 989 | gtco->buffer, gtco->buf_dma); | 987 | gtco->buffer, gtco->buf_dma); |
| 990 | err_free_devs: | 988 | err_free_devs: |
| 991 | kfree(report); | ||
| 992 | input_free_device(input_dev); | 989 | input_free_device(input_dev); |
| 993 | kfree(gtco); | 990 | kfree(gtco); |
| 994 | return error; | 991 | return error; |
diff --git a/drivers/input/touchscreen/wm9713.c b/drivers/input/touchscreen/wm9713.c index 01278bd7e65c..838458792ea0 100644 --- a/drivers/input/touchscreen/wm9713.c +++ b/drivers/input/touchscreen/wm9713.c | |||
| @@ -85,6 +85,15 @@ module_param(delay, int, 0); | |||
| 85 | MODULE_PARM_DESC(delay, "Set adc sample delay."); | 85 | MODULE_PARM_DESC(delay, "Set adc sample delay."); |
| 86 | 86 | ||
| 87 | /* | 87 | /* |
| 88 | * Set five_wire = 1 to use a 5 wire touchscreen. | ||
| 89 | * | ||
| 90 | * NOTE: Five wire mode does not allow for readback of pressure. | ||
| 91 | */ | ||
| 92 | static int five_wire; | ||
| 93 | module_param(five_wire, int, 0); | ||
| 94 | MODULE_PARM_DESC(five_wire, "Set to '1' to use 5-wire touchscreen."); | ||
| 95 | |||
| 96 | /* | ||
| 88 | * Set adc mask function. | 97 | * Set adc mask function. |
| 89 | * | 98 | * |
| 90 | * Sources of glitch noise, such as signals driving an LCD display, may feed | 99 | * Sources of glitch noise, such as signals driving an LCD display, may feed |
| @@ -162,6 +171,19 @@ static void wm9713_phy_init(struct wm97xx *wm) | |||
| 162 | 64000 / rpu); | 171 | 64000 / rpu); |
| 163 | } | 172 | } |
| 164 | 173 | ||
| 174 | /* Five wire panel? */ | ||
| 175 | if (five_wire) { | ||
| 176 | dig3 |= WM9713_45W; | ||
| 177 | dev_info(wm->dev, "setting 5-wire touchscreen mode."); | ||
| 178 | |||
| 179 | if (pil) { | ||
| 180 | dev_warn(wm->dev, | ||
| 181 | "Pressure measurement not supported in 5 " | ||
| 182 | "wire mode, disabling\n"); | ||
| 183 | pil = 0; | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 165 | /* touchpanel pressure */ | 187 | /* touchpanel pressure */ |
| 166 | if (pil == 2) { | 188 | if (pil == 2) { |
| 167 | dig3 |= WM9712_PIL; | 189 | dig3 |= WM9712_PIL; |
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c index e9c7ea46b6e3..cdc24ad314e0 100644 --- a/drivers/input/touchscreen/wm97xx-core.c +++ b/drivers/input/touchscreen/wm97xx-core.c | |||
| @@ -608,6 +608,17 @@ static int wm97xx_probe(struct device *dev) | |||
| 608 | goto alloc_err; | 608 | goto alloc_err; |
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | /* set up physical characteristics */ | ||
| 612 | wm->codec->phy_init(wm); | ||
| 613 | |||
| 614 | /* load gpio cache */ | ||
| 615 | wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); | ||
| 616 | wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); | ||
| 617 | wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); | ||
| 618 | wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); | ||
| 619 | wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); | ||
| 620 | wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); | ||
| 621 | |||
| 611 | wm->input_dev = input_allocate_device(); | 622 | wm->input_dev = input_allocate_device(); |
| 612 | if (wm->input_dev == NULL) { | 623 | if (wm->input_dev == NULL) { |
| 613 | ret = -ENOMEM; | 624 | ret = -ENOMEM; |
| @@ -616,6 +627,7 @@ static int wm97xx_probe(struct device *dev) | |||
| 616 | 627 | ||
| 617 | /* set up touch configuration */ | 628 | /* set up touch configuration */ |
| 618 | wm->input_dev->name = "wm97xx touchscreen"; | 629 | wm->input_dev->name = "wm97xx touchscreen"; |
| 630 | wm->input_dev->phys = "wm97xx"; | ||
| 619 | wm->input_dev->open = wm97xx_ts_input_open; | 631 | wm->input_dev->open = wm97xx_ts_input_open; |
| 620 | wm->input_dev->close = wm97xx_ts_input_close; | 632 | wm->input_dev->close = wm97xx_ts_input_close; |
| 621 | set_bit(EV_ABS, wm->input_dev->evbit); | 633 | set_bit(EV_ABS, wm->input_dev->evbit); |
| @@ -634,17 +646,6 @@ static int wm97xx_probe(struct device *dev) | |||
| 634 | if (ret < 0) | 646 | if (ret < 0) |
| 635 | goto dev_alloc_err; | 647 | goto dev_alloc_err; |
| 636 | 648 | ||
| 637 | /* set up physical characteristics */ | ||
| 638 | wm->codec->phy_init(wm); | ||
| 639 | |||
| 640 | /* load gpio cache */ | ||
| 641 | wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); | ||
| 642 | wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); | ||
| 643 | wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); | ||
| 644 | wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); | ||
| 645 | wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); | ||
| 646 | wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); | ||
| 647 | |||
| 648 | /* register our battery device */ | 649 | /* register our battery device */ |
| 649 | wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); | 650 | wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); |
| 650 | if (!wm->battery_dev) { | 651 | if (!wm->battery_dev) { |
| @@ -801,7 +802,7 @@ void wm97xx_unregister_mach_ops(struct wm97xx *wm) | |||
| 801 | EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); | 802 | EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); |
| 802 | 803 | ||
| 803 | static struct device_driver wm97xx_driver = { | 804 | static struct device_driver wm97xx_driver = { |
| 804 | .name = "ac97", | 805 | .name = "wm97xx-ts", |
| 805 | .bus = &ac97_bus_type, | 806 | .bus = &ac97_bus_type, |
| 806 | .owner = THIS_MODULE, | 807 | .owner = THIS_MODULE, |
| 807 | .probe = wm97xx_probe, | 808 | .probe = wm97xx_probe, |
diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c index 8080249957af..1a8de57289eb 100644 --- a/drivers/lguest/lguest_device.c +++ b/drivers/lguest/lguest_device.c | |||
| @@ -20,14 +20,11 @@ | |||
| 20 | /* The pointer to our (page) of device descriptions. */ | 20 | /* The pointer to our (page) of device descriptions. */ |
| 21 | static void *lguest_devices; | 21 | static void *lguest_devices; |
| 22 | 22 | ||
| 23 | /* Unique numbering for lguest devices. */ | ||
| 24 | static unsigned int dev_index; | ||
| 25 | |||
| 26 | /* For Guests, device memory can be used as normal memory, so we cast away the | 23 | /* For Guests, device memory can be used as normal memory, so we cast away the |
| 27 | * __iomem to quieten sparse. */ | 24 | * __iomem to quieten sparse. */ |
| 28 | static inline void *lguest_map(unsigned long phys_addr, unsigned long pages) | 25 | static inline void *lguest_map(unsigned long phys_addr, unsigned long pages) |
| 29 | { | 26 | { |
| 30 | return (__force void *)ioremap(phys_addr, PAGE_SIZE*pages); | 27 | return (__force void *)ioremap_cache(phys_addr, PAGE_SIZE*pages); |
| 31 | } | 28 | } |
| 32 | 29 | ||
| 33 | static inline void lguest_unmap(void *addr) | 30 | static inline void lguest_unmap(void *addr) |
| @@ -325,8 +322,10 @@ static struct device lguest_root = { | |||
| 325 | * As Andrew Tridgell says, "Untested code is buggy code". | 322 | * As Andrew Tridgell says, "Untested code is buggy code". |
| 326 | * | 323 | * |
| 327 | * It's worth reading this carefully: we start with a pointer to the new device | 324 | * It's worth reading this carefully: we start with a pointer to the new device |
| 328 | * descriptor in the "lguest_devices" page. */ | 325 | * descriptor in the "lguest_devices" page, and the offset into the device |
| 329 | static void add_lguest_device(struct lguest_device_desc *d) | 326 | * descriptor page so we can uniquely identify it if things go badly wrong. */ |
| 327 | static void add_lguest_device(struct lguest_device_desc *d, | ||
| 328 | unsigned int offset) | ||
| 330 | { | 329 | { |
| 331 | struct lguest_device *ldev; | 330 | struct lguest_device *ldev; |
| 332 | 331 | ||
| @@ -334,18 +333,14 @@ static void add_lguest_device(struct lguest_device_desc *d) | |||
| 334 | * it. */ | 333 | * it. */ |
| 335 | ldev = kzalloc(sizeof(*ldev), GFP_KERNEL); | 334 | ldev = kzalloc(sizeof(*ldev), GFP_KERNEL); |
| 336 | if (!ldev) { | 335 | if (!ldev) { |
| 337 | printk(KERN_EMERG "Cannot allocate lguest dev %u\n", | 336 | printk(KERN_EMERG "Cannot allocate lguest dev %u type %u\n", |
| 338 | dev_index++); | 337 | offset, d->type); |
| 339 | return; | 338 | return; |
| 340 | } | 339 | } |
| 341 | 340 | ||
| 342 | /* This devices' parent is the lguest/ dir. */ | 341 | /* This devices' parent is the lguest/ dir. */ |
| 343 | ldev->vdev.dev.parent = &lguest_root; | 342 | ldev->vdev.dev.parent = &lguest_root; |
| 344 | /* We have a unique device index thanks to the dev_index counter. */ | 343 | /* We have a unique device index thanks to the dev_index counter. */ |
| 345 | ldev->vdev.index = dev_index++; | ||
| 346 | /* The device type comes straight from the descriptor. There's also a | ||
| 347 | * device vendor field in the virtio_device struct, which we leave as | ||
| 348 | * 0. */ | ||
| 349 | ldev->vdev.id.device = d->type; | 344 | ldev->vdev.id.device = d->type; |
| 350 | /* We have a simple set of routines for querying the device's | 345 | /* We have a simple set of routines for querying the device's |
| 351 | * configuration information and setting its status. */ | 346 | * configuration information and setting its status. */ |
| @@ -357,8 +352,8 @@ static void add_lguest_device(struct lguest_device_desc *d) | |||
| 357 | * virtio_device and calls device_register(). This makes the bus | 352 | * virtio_device and calls device_register(). This makes the bus |
| 358 | * infrastructure look for a matching driver. */ | 353 | * infrastructure look for a matching driver. */ |
| 359 | if (register_virtio_device(&ldev->vdev) != 0) { | 354 | if (register_virtio_device(&ldev->vdev) != 0) { |
| 360 | printk(KERN_ERR "Failed to register lguest device %u\n", | 355 | printk(KERN_ERR "Failed to register lguest dev %u type %u\n", |
| 361 | ldev->vdev.index); | 356 | offset, d->type); |
| 362 | kfree(ldev); | 357 | kfree(ldev); |
| 363 | } | 358 | } |
| 364 | } | 359 | } |
| @@ -379,7 +374,7 @@ static void scan_devices(void) | |||
| 379 | break; | 374 | break; |
| 380 | 375 | ||
| 381 | printk("Device at %i has size %u\n", i, desc_size(d)); | 376 | printk("Device at %i has size %u\n", i, desc_size(d)); |
| 382 | add_lguest_device(d); | 377 | add_lguest_device(d, i); |
| 383 | } | 378 | } |
| 384 | } | 379 | } |
| 385 | 380 | ||
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c index 198f0afb812e..a0f7bc1edaa2 100644 --- a/drivers/media/video/tuner-core.c +++ b/drivers/media/video/tuner-core.c | |||
| @@ -92,6 +92,7 @@ struct tuner { | |||
| 92 | unsigned int type; /* chip type id */ | 92 | unsigned int type; /* chip type id */ |
| 93 | unsigned int config; | 93 | unsigned int config; |
| 94 | int (*tuner_callback) (void *dev, int command, int arg); | 94 | int (*tuner_callback) (void *dev, int command, int arg); |
| 95 | const char *name; | ||
| 95 | }; | 96 | }; |
| 96 | 97 | ||
| 97 | /* standard i2c insmod options */ | 98 | /* standard i2c insmod options */ |
| @@ -330,13 +331,13 @@ static void tuner_i2c_address_check(struct tuner *t) | |||
| 330 | tuner_warn("Support for tuners in i2c address range 0x64 thru 0x6f\n"); | 331 | tuner_warn("Support for tuners in i2c address range 0x64 thru 0x6f\n"); |
| 331 | tuner_warn("will soon be dropped. This message indicates that your\n"); | 332 | tuner_warn("will soon be dropped. This message indicates that your\n"); |
| 332 | tuner_warn("hardware has a %s tuner at i2c address 0x%02x.\n", | 333 | tuner_warn("hardware has a %s tuner at i2c address 0x%02x.\n", |
| 333 | t->i2c->name, t->i2c->addr); | 334 | t->name, t->i2c->addr); |
| 334 | tuner_warn("To ensure continued support for your device, please\n"); | 335 | tuner_warn("To ensure continued support for your device, please\n"); |
| 335 | tuner_warn("send a copy of this message, along with full dmesg\n"); | 336 | tuner_warn("send a copy of this message, along with full dmesg\n"); |
| 336 | tuner_warn("output to v4l-dvb-maintainer@linuxtv.org\n"); | 337 | tuner_warn("output to v4l-dvb-maintainer@linuxtv.org\n"); |
| 337 | tuner_warn("Please use subject line: \"obsolete tuner i2c address.\"\n"); | 338 | tuner_warn("Please use subject line: \"obsolete tuner i2c address.\"\n"); |
| 338 | tuner_warn("driver: %s, addr: 0x%02x, type: %d (%s)\n", | 339 | tuner_warn("driver: %s, addr: 0x%02x, type: %d (%s)\n", |
| 339 | t->i2c->adapter->name, t->i2c->addr, t->type, t->i2c->name); | 340 | t->i2c->adapter->name, t->i2c->addr, t->type, t->name); |
| 340 | tuner_warn("====================== WARNING! ======================\n"); | 341 | tuner_warn("====================== WARNING! ======================\n"); |
| 341 | } | 342 | } |
| 342 | 343 | ||
| @@ -470,19 +471,17 @@ static void set_type(struct i2c_client *c, unsigned int type, | |||
| 470 | if ((NULL == analog_ops->set_params) && | 471 | if ((NULL == analog_ops->set_params) && |
| 471 | (fe_tuner_ops->set_analog_params)) { | 472 | (fe_tuner_ops->set_analog_params)) { |
| 472 | 473 | ||
| 473 | strlcpy(t->i2c->name, fe_tuner_ops->info.name, | 474 | t->name = fe_tuner_ops->info.name; |
| 474 | sizeof(t->i2c->name)); | ||
| 475 | 475 | ||
| 476 | t->fe.analog_demod_priv = t; | 476 | t->fe.analog_demod_priv = t; |
| 477 | memcpy(analog_ops, &tuner_core_ops, | 477 | memcpy(analog_ops, &tuner_core_ops, |
| 478 | sizeof(struct analog_demod_ops)); | 478 | sizeof(struct analog_demod_ops)); |
| 479 | 479 | ||
| 480 | } else { | 480 | } else { |
| 481 | strlcpy(t->i2c->name, analog_ops->info.name, | 481 | t->name = analog_ops->info.name; |
| 482 | sizeof(t->i2c->name)); | ||
| 483 | } | 482 | } |
| 484 | 483 | ||
| 485 | tuner_dbg("type set to %s\n", t->i2c->name); | 484 | tuner_dbg("type set to %s\n", t->name); |
| 486 | 485 | ||
| 487 | if (t->mode_mask == T_UNINITIALIZED) | 486 | if (t->mode_mask == T_UNINITIALIZED) |
| 488 | t->mode_mask = new_mode_mask; | 487 | t->mode_mask = new_mode_mask; |
| @@ -1115,6 +1114,7 @@ static int tuner_probe(struct i2c_client *client, | |||
| 1115 | if (NULL == t) | 1114 | if (NULL == t) |
| 1116 | return -ENOMEM; | 1115 | return -ENOMEM; |
| 1117 | t->i2c = client; | 1116 | t->i2c = client; |
| 1117 | t->name = "(tuner unset)"; | ||
| 1118 | i2c_set_clientdata(client, t); | 1118 | i2c_set_clientdata(client, t); |
| 1119 | t->type = UNSET; | 1119 | t->type = UNSET; |
| 1120 | t->audmode = V4L2_TUNER_MODE_STEREO; | 1120 | t->audmode = V4L2_TUNER_MODE_STEREO; |
| @@ -1272,12 +1272,6 @@ static int tuner_remove(struct i2c_client *client) | |||
| 1272 | 1272 | ||
| 1273 | list_del(&t->list); | 1273 | list_del(&t->list); |
| 1274 | kfree(t); | 1274 | kfree(t); |
| 1275 | |||
| 1276 | /* The probing code has overwritten the device name, restore it so | ||
| 1277 | that reloading the driver will work. Ideally the device name | ||
| 1278 | should not be overwritten in the first place, but for now that | ||
| 1279 | will do. */ | ||
| 1280 | strlcpy(client->name, "tuner", I2C_NAME_SIZE); | ||
| 1281 | return 0; | 1275 | return 0; |
| 1282 | } | 1276 | } |
| 1283 | 1277 | ||
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c index 3f28f6eabdbf..a0ce0b2fa03e 100644 --- a/drivers/misc/thinkpad_acpi.c +++ b/drivers/misc/thinkpad_acpi.c | |||
| @@ -3821,7 +3821,7 @@ TPACPI_HANDLE(led, ec, "SLED", /* 570 */ | |||
| 3821 | #define TPACPI_LED_NUMLEDS 8 | 3821 | #define TPACPI_LED_NUMLEDS 8 |
| 3822 | static struct tpacpi_led_classdev *tpacpi_leds; | 3822 | static struct tpacpi_led_classdev *tpacpi_leds; |
| 3823 | static enum led_status_t tpacpi_led_state_cache[TPACPI_LED_NUMLEDS]; | 3823 | static enum led_status_t tpacpi_led_state_cache[TPACPI_LED_NUMLEDS]; |
| 3824 | static const char const *tpacpi_led_names[TPACPI_LED_NUMLEDS] = { | 3824 | static const char * const tpacpi_led_names[TPACPI_LED_NUMLEDS] = { |
| 3825 | /* there's a limit of 19 chars + NULL before 2.6.26 */ | 3825 | /* there's a limit of 19 chars + NULL before 2.6.26 */ |
| 3826 | "tpacpi::power", | 3826 | "tpacpi::power", |
| 3827 | "tpacpi:orange:batt", | 3827 | "tpacpi:orange:batt", |
| @@ -3860,10 +3860,10 @@ static int led_get_status(unsigned int led) | |||
| 3860 | static int led_set_status(unsigned int led, enum led_status_t ledstatus) | 3860 | static int led_set_status(unsigned int led, enum led_status_t ledstatus) |
| 3861 | { | 3861 | { |
| 3862 | /* off, on, blink. Index is led_status_t */ | 3862 | /* off, on, blink. Index is led_status_t */ |
| 3863 | static const int const led_sled_arg1[] = { 0, 1, 3 }; | 3863 | static const int led_sled_arg1[] = { 0, 1, 3 }; |
| 3864 | static const int const led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */ | 3864 | static const int led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */ |
| 3865 | static const int const led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */ | 3865 | static const int led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */ |
| 3866 | static const int const led_led_arg1[] = { 0, 0x80, 0xc0 }; | 3866 | static const int led_led_arg1[] = { 0, 0x80, 0xc0 }; |
| 3867 | 3867 | ||
| 3868 | int rc = 0; | 3868 | int rc = 0; |
| 3869 | 3869 | ||
diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c index 59d8fb49270a..effaf7cdefab 100644 --- a/drivers/mtd/maps/ck804xrom.c +++ b/drivers/mtd/maps/ck804xrom.c | |||
| @@ -331,15 +331,15 @@ static void __devexit ck804xrom_remove_one (struct pci_dev *pdev) | |||
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | static struct pci_device_id ck804xrom_pci_tbl[] = { | 333 | static struct pci_device_id ck804xrom_pci_tbl[] = { |
| 334 | { PCI_VENDOR_ID_NVIDIA, 0x0051, PCI_ANY_ID, PCI_ANY_ID, DEV_CK804 }, | 334 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0051), .driver_data = DEV_CK804 }, |
| 335 | { PCI_VENDOR_ID_NVIDIA, 0x0360, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 335 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0360), .driver_data = DEV_MCP55 }, |
| 336 | { PCI_VENDOR_ID_NVIDIA, 0x0361, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 336 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0361), .driver_data = DEV_MCP55 }, |
| 337 | { PCI_VENDOR_ID_NVIDIA, 0x0362, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 337 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0362), .driver_data = DEV_MCP55 }, |
| 338 | { PCI_VENDOR_ID_NVIDIA, 0x0363, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 338 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0363), .driver_data = DEV_MCP55 }, |
| 339 | { PCI_VENDOR_ID_NVIDIA, 0x0364, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 339 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0364), .driver_data = DEV_MCP55 }, |
| 340 | { PCI_VENDOR_ID_NVIDIA, 0x0365, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 340 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0365), .driver_data = DEV_MCP55 }, |
| 341 | { PCI_VENDOR_ID_NVIDIA, 0x0366, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 341 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0366), .driver_data = DEV_MCP55 }, |
| 342 | { PCI_VENDOR_ID_NVIDIA, 0x0367, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 342 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0367), .driver_data = DEV_MCP55 }, |
| 343 | { 0, } | 343 | { 0, } |
| 344 | }; | 344 | }; |
| 345 | 345 | ||
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index 87d8795823d7..b9d097c9f6bb 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c | |||
| @@ -1062,7 +1062,6 @@ el3_rx(struct net_device *dev) | |||
| 1062 | struct sk_buff *skb; | 1062 | struct sk_buff *skb; |
| 1063 | 1063 | ||
| 1064 | skb = dev_alloc_skb(pkt_len+5); | 1064 | skb = dev_alloc_skb(pkt_len+5); |
| 1065 | dev->stats.rx_bytes += pkt_len; | ||
| 1066 | if (el3_debug > 4) | 1065 | if (el3_debug > 4) |
| 1067 | printk("Receiving packet size %d status %4.4x.\n", | 1066 | printk("Receiving packet size %d status %4.4x.\n", |
| 1068 | pkt_len, rx_status); | 1067 | pkt_len, rx_status); |
| @@ -1077,6 +1076,7 @@ el3_rx(struct net_device *dev) | |||
| 1077 | skb->protocol = eth_type_trans(skb,dev); | 1076 | skb->protocol = eth_type_trans(skb,dev); |
| 1078 | netif_rx(skb); | 1077 | netif_rx(skb); |
| 1079 | dev->last_rx = jiffies; | 1078 | dev->last_rx = jiffies; |
| 1079 | dev->stats.rx_bytes += pkt_len; | ||
| 1080 | dev->stats.rx_packets++; | 1080 | dev->stats.rx_packets++; |
| 1081 | continue; | 1081 | continue; |
| 1082 | } | 1082 | } |
diff --git a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c index 3634b5fd7919..7023d77bf380 100644 --- a/drivers/net/au1000_eth.c +++ b/drivers/net/au1000_eth.c | |||
| @@ -1239,12 +1239,7 @@ static int au1000_rx(struct net_device *dev) | |||
| 1239 | */ | 1239 | */ |
| 1240 | static irqreturn_t au1000_interrupt(int irq, void *dev_id) | 1240 | static irqreturn_t au1000_interrupt(int irq, void *dev_id) |
| 1241 | { | 1241 | { |
| 1242 | struct net_device *dev = (struct net_device *) dev_id; | 1242 | struct net_device *dev = dev_id; |
| 1243 | |||
| 1244 | if (dev == NULL) { | ||
| 1245 | printk(KERN_ERR "%s: isr: null dev ptr\n", dev->name); | ||
| 1246 | return IRQ_RETVAL(1); | ||
| 1247 | } | ||
| 1248 | 1243 | ||
| 1249 | /* Handle RX interrupts first to minimize chance of overrun */ | 1244 | /* Handle RX interrupts first to minimize chance of overrun */ |
| 1250 | 1245 | ||
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c index 89c0018132ec..41443435ab1c 100644 --- a/drivers/net/bfin_mac.c +++ b/drivers/net/bfin_mac.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/crc32.h> | 22 | #include <linux/crc32.h> |
| 23 | #include <linux/device.h> | 23 | #include <linux/device.h> |
| 24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
| 25 | #include <linux/ethtool.h> | ||
| 26 | #include <linux/mii.h> | 25 | #include <linux/mii.h> |
| 27 | #include <linux/phy.h> | 26 | #include <linux/phy.h> |
| 28 | #include <linux/netdevice.h> | 27 | #include <linux/netdevice.h> |
diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c index 2b5740b3d182..7f3f62e1b113 100644 --- a/drivers/net/cpmac.c +++ b/drivers/net/cpmac.c | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #include <linux/platform_device.h> | 38 | #include <linux/platform_device.h> |
| 39 | #include <linux/dma-mapping.h> | 39 | #include <linux/dma-mapping.h> |
| 40 | #include <asm/gpio.h> | 40 | #include <asm/gpio.h> |
| 41 | #include <asm/atomic.h> | ||
| 41 | 42 | ||
| 42 | MODULE_AUTHOR("Eugene Konev <ejka@imfi.kspu.ru>"); | 43 | MODULE_AUTHOR("Eugene Konev <ejka@imfi.kspu.ru>"); |
| 43 | MODULE_DESCRIPTION("TI AR7 ethernet driver (CPMAC)"); | 44 | MODULE_DESCRIPTION("TI AR7 ethernet driver (CPMAC)"); |
| @@ -187,6 +188,7 @@ struct cpmac_desc { | |||
| 187 | #define CPMAC_EOQ 0x1000 | 188 | #define CPMAC_EOQ 0x1000 |
| 188 | struct sk_buff *skb; | 189 | struct sk_buff *skb; |
| 189 | struct cpmac_desc *next; | 190 | struct cpmac_desc *next; |
| 191 | struct cpmac_desc *prev; | ||
| 190 | dma_addr_t mapping; | 192 | dma_addr_t mapping; |
| 191 | dma_addr_t data_mapping; | 193 | dma_addr_t data_mapping; |
| 192 | }; | 194 | }; |
| @@ -208,6 +210,7 @@ struct cpmac_priv { | |||
| 208 | struct work_struct reset_work; | 210 | struct work_struct reset_work; |
| 209 | struct platform_device *pdev; | 211 | struct platform_device *pdev; |
| 210 | struct napi_struct napi; | 212 | struct napi_struct napi; |
| 213 | atomic_t reset_pending; | ||
| 211 | }; | 214 | }; |
| 212 | 215 | ||
| 213 | static irqreturn_t cpmac_irq(int, void *); | 216 | static irqreturn_t cpmac_irq(int, void *); |
| @@ -241,6 +244,16 @@ static void cpmac_dump_desc(struct net_device *dev, struct cpmac_desc *desc) | |||
| 241 | printk("\n"); | 244 | printk("\n"); |
| 242 | } | 245 | } |
| 243 | 246 | ||
| 247 | static void cpmac_dump_all_desc(struct net_device *dev) | ||
| 248 | { | ||
| 249 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 250 | struct cpmac_desc *dump = priv->rx_head; | ||
| 251 | do { | ||
| 252 | cpmac_dump_desc(dev, dump); | ||
| 253 | dump = dump->next; | ||
| 254 | } while (dump != priv->rx_head); | ||
| 255 | } | ||
| 256 | |||
| 244 | static void cpmac_dump_skb(struct net_device *dev, struct sk_buff *skb) | 257 | static void cpmac_dump_skb(struct net_device *dev, struct sk_buff *skb) |
| 245 | { | 258 | { |
| 246 | int i; | 259 | int i; |
| @@ -412,21 +425,42 @@ static struct sk_buff *cpmac_rx_one(struct cpmac_priv *priv, | |||
| 412 | static int cpmac_poll(struct napi_struct *napi, int budget) | 425 | static int cpmac_poll(struct napi_struct *napi, int budget) |
| 413 | { | 426 | { |
| 414 | struct sk_buff *skb; | 427 | struct sk_buff *skb; |
| 415 | struct cpmac_desc *desc; | 428 | struct cpmac_desc *desc, *restart; |
| 416 | int received = 0; | ||
| 417 | struct cpmac_priv *priv = container_of(napi, struct cpmac_priv, napi); | 429 | struct cpmac_priv *priv = container_of(napi, struct cpmac_priv, napi); |
| 430 | int received = 0, processed = 0; | ||
| 418 | 431 | ||
| 419 | spin_lock(&priv->rx_lock); | 432 | spin_lock(&priv->rx_lock); |
| 420 | if (unlikely(!priv->rx_head)) { | 433 | if (unlikely(!priv->rx_head)) { |
| 421 | if (netif_msg_rx_err(priv) && net_ratelimit()) | 434 | if (netif_msg_rx_err(priv) && net_ratelimit()) |
| 422 | printk(KERN_WARNING "%s: rx: polling, but no queue\n", | 435 | printk(KERN_WARNING "%s: rx: polling, but no queue\n", |
| 423 | priv->dev->name); | 436 | priv->dev->name); |
| 437 | spin_unlock(&priv->rx_lock); | ||
| 424 | netif_rx_complete(priv->dev, napi); | 438 | netif_rx_complete(priv->dev, napi); |
| 425 | return 0; | 439 | return 0; |
| 426 | } | 440 | } |
| 427 | 441 | ||
| 428 | desc = priv->rx_head; | 442 | desc = priv->rx_head; |
| 443 | restart = NULL; | ||
| 429 | while (((desc->dataflags & CPMAC_OWN) == 0) && (received < budget)) { | 444 | while (((desc->dataflags & CPMAC_OWN) == 0) && (received < budget)) { |
| 445 | processed++; | ||
| 446 | |||
| 447 | if ((desc->dataflags & CPMAC_EOQ) != 0) { | ||
| 448 | /* The last update to eoq->hw_next didn't happen | ||
| 449 | * soon enough, and the receiver stopped here. | ||
| 450 | *Remember this descriptor so we can restart | ||
| 451 | * the receiver after freeing some space. | ||
| 452 | */ | ||
| 453 | if (unlikely(restart)) { | ||
| 454 | if (netif_msg_rx_err(priv)) | ||
| 455 | printk(KERN_ERR "%s: poll found a" | ||
| 456 | " duplicate EOQ: %p and %p\n", | ||
| 457 | priv->dev->name, restart, desc); | ||
| 458 | goto fatal_error; | ||
| 459 | } | ||
| 460 | |||
| 461 | restart = desc->next; | ||
| 462 | } | ||
| 463 | |||
| 430 | skb = cpmac_rx_one(priv, desc); | 464 | skb = cpmac_rx_one(priv, desc); |
| 431 | if (likely(skb)) { | 465 | if (likely(skb)) { |
| 432 | netif_receive_skb(skb); | 466 | netif_receive_skb(skb); |
| @@ -435,19 +469,90 @@ static int cpmac_poll(struct napi_struct *napi, int budget) | |||
| 435 | desc = desc->next; | 469 | desc = desc->next; |
| 436 | } | 470 | } |
| 437 | 471 | ||
| 472 | if (desc != priv->rx_head) { | ||
| 473 | /* We freed some buffers, but not the whole ring, | ||
| 474 | * add what we did free to the rx list */ | ||
| 475 | desc->prev->hw_next = (u32)0; | ||
| 476 | priv->rx_head->prev->hw_next = priv->rx_head->mapping; | ||
| 477 | } | ||
| 478 | |||
| 479 | /* Optimization: If we did not actually process an EOQ (perhaps because | ||
| 480 | * of quota limits), check to see if the tail of the queue has EOQ set. | ||
| 481 | * We should immediately restart in that case so that the receiver can | ||
| 482 | * restart and run in parallel with more packet processing. | ||
| 483 | * This lets us handle slightly larger bursts before running | ||
| 484 | * out of ring space (assuming dev->weight < ring_size) */ | ||
| 485 | |||
| 486 | if (!restart && | ||
| 487 | (priv->rx_head->prev->dataflags & (CPMAC_OWN|CPMAC_EOQ)) | ||
| 488 | == CPMAC_EOQ && | ||
| 489 | (priv->rx_head->dataflags & CPMAC_OWN) != 0) { | ||
| 490 | /* reset EOQ so the poll loop (above) doesn't try to | ||
| 491 | * restart this when it eventually gets to this descriptor. | ||
| 492 | */ | ||
| 493 | priv->rx_head->prev->dataflags &= ~CPMAC_EOQ; | ||
| 494 | restart = priv->rx_head; | ||
| 495 | } | ||
| 496 | |||
| 497 | if (restart) { | ||
| 498 | priv->dev->stats.rx_errors++; | ||
| 499 | priv->dev->stats.rx_fifo_errors++; | ||
| 500 | if (netif_msg_rx_err(priv) && net_ratelimit()) | ||
| 501 | printk(KERN_WARNING "%s: rx dma ring overrun\n", | ||
| 502 | priv->dev->name); | ||
| 503 | |||
| 504 | if (unlikely((restart->dataflags & CPMAC_OWN) == 0)) { | ||
| 505 | if (netif_msg_drv(priv)) | ||
| 506 | printk(KERN_ERR "%s: cpmac_poll is trying to " | ||
| 507 | "restart rx from a descriptor that's " | ||
| 508 | "not free: %p\n", | ||
| 509 | priv->dev->name, restart); | ||
| 510 | goto fatal_error; | ||
| 511 | } | ||
| 512 | |||
| 513 | cpmac_write(priv->regs, CPMAC_RX_PTR(0), restart->mapping); | ||
| 514 | } | ||
| 515 | |||
| 438 | priv->rx_head = desc; | 516 | priv->rx_head = desc; |
| 439 | spin_unlock(&priv->rx_lock); | 517 | spin_unlock(&priv->rx_lock); |
| 440 | if (unlikely(netif_msg_rx_status(priv))) | 518 | if (unlikely(netif_msg_rx_status(priv))) |
| 441 | printk(KERN_DEBUG "%s: poll processed %d packets\n", | 519 | printk(KERN_DEBUG "%s: poll processed %d packets\n", |
| 442 | priv->dev->name, received); | 520 | priv->dev->name, received); |
| 443 | if (desc->dataflags & CPMAC_OWN) { | 521 | if (processed == 0) { |
| 522 | /* we ran out of packets to read, | ||
| 523 | * revert to interrupt-driven mode */ | ||
| 444 | netif_rx_complete(priv->dev, napi); | 524 | netif_rx_complete(priv->dev, napi); |
| 445 | cpmac_write(priv->regs, CPMAC_RX_PTR(0), (u32)desc->mapping); | ||
| 446 | cpmac_write(priv->regs, CPMAC_RX_INT_ENABLE, 1); | 525 | cpmac_write(priv->regs, CPMAC_RX_INT_ENABLE, 1); |
| 447 | return 0; | 526 | return 0; |
| 448 | } | 527 | } |
| 449 | 528 | ||
| 450 | return 1; | 529 | return 1; |
| 530 | |||
| 531 | fatal_error: | ||
| 532 | /* Something went horribly wrong. | ||
| 533 | * Reset hardware to try to recover rather than wedging. */ | ||
| 534 | |||
| 535 | if (netif_msg_drv(priv)) { | ||
| 536 | printk(KERN_ERR "%s: cpmac_poll is confused. " | ||
| 537 | "Resetting hardware\n", priv->dev->name); | ||
| 538 | cpmac_dump_all_desc(priv->dev); | ||
| 539 | printk(KERN_DEBUG "%s: RX_PTR(0)=0x%08x RX_ACK(0)=0x%08x\n", | ||
| 540 | priv->dev->name, | ||
| 541 | cpmac_read(priv->regs, CPMAC_RX_PTR(0)), | ||
| 542 | cpmac_read(priv->regs, CPMAC_RX_ACK(0))); | ||
| 543 | } | ||
| 544 | |||
| 545 | spin_unlock(&priv->rx_lock); | ||
| 546 | netif_rx_complete(priv->dev, napi); | ||
| 547 | netif_stop_queue(priv->dev); | ||
| 548 | napi_disable(&priv->napi); | ||
| 549 | |||
| 550 | atomic_inc(&priv->reset_pending); | ||
| 551 | cpmac_hw_stop(priv->dev); | ||
| 552 | if (!schedule_work(&priv->reset_work)) | ||
| 553 | atomic_dec(&priv->reset_pending); | ||
| 554 | return 0; | ||
| 555 | |||
| 451 | } | 556 | } |
| 452 | 557 | ||
| 453 | static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) | 558 | static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) |
| @@ -456,6 +561,9 @@ static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 456 | struct cpmac_desc *desc; | 561 | struct cpmac_desc *desc; |
| 457 | struct cpmac_priv *priv = netdev_priv(dev); | 562 | struct cpmac_priv *priv = netdev_priv(dev); |
| 458 | 563 | ||
| 564 | if (unlikely(atomic_read(&priv->reset_pending))) | ||
| 565 | return NETDEV_TX_BUSY; | ||
| 566 | |||
| 459 | if (unlikely(skb_padto(skb, ETH_ZLEN))) | 567 | if (unlikely(skb_padto(skb, ETH_ZLEN))) |
| 460 | return NETDEV_TX_OK; | 568 | return NETDEV_TX_OK; |
| 461 | 569 | ||
| @@ -621,8 +729,10 @@ static void cpmac_clear_rx(struct net_device *dev) | |||
| 621 | desc->dataflags = CPMAC_OWN; | 729 | desc->dataflags = CPMAC_OWN; |
| 622 | dev->stats.rx_dropped++; | 730 | dev->stats.rx_dropped++; |
| 623 | } | 731 | } |
| 732 | desc->hw_next = desc->next->mapping; | ||
| 624 | desc = desc->next; | 733 | desc = desc->next; |
| 625 | } | 734 | } |
| 735 | priv->rx_head->prev->hw_next = 0; | ||
| 626 | } | 736 | } |
| 627 | 737 | ||
| 628 | static void cpmac_clear_tx(struct net_device *dev) | 738 | static void cpmac_clear_tx(struct net_device *dev) |
| @@ -635,14 +745,14 @@ static void cpmac_clear_tx(struct net_device *dev) | |||
| 635 | priv->desc_ring[i].dataflags = 0; | 745 | priv->desc_ring[i].dataflags = 0; |
| 636 | if (priv->desc_ring[i].skb) { | 746 | if (priv->desc_ring[i].skb) { |
| 637 | dev_kfree_skb_any(priv->desc_ring[i].skb); | 747 | dev_kfree_skb_any(priv->desc_ring[i].skb); |
| 638 | if (netif_subqueue_stopped(dev, i)) | 748 | priv->desc_ring[i].skb = NULL; |
| 639 | netif_wake_subqueue(dev, i); | ||
| 640 | } | 749 | } |
| 641 | } | 750 | } |
| 642 | } | 751 | } |
| 643 | 752 | ||
| 644 | static void cpmac_hw_error(struct work_struct *work) | 753 | static void cpmac_hw_error(struct work_struct *work) |
| 645 | { | 754 | { |
| 755 | int i; | ||
| 646 | struct cpmac_priv *priv = | 756 | struct cpmac_priv *priv = |
| 647 | container_of(work, struct cpmac_priv, reset_work); | 757 | container_of(work, struct cpmac_priv, reset_work); |
| 648 | 758 | ||
| @@ -651,8 +761,48 @@ static void cpmac_hw_error(struct work_struct *work) | |||
| 651 | spin_unlock(&priv->rx_lock); | 761 | spin_unlock(&priv->rx_lock); |
| 652 | cpmac_clear_tx(priv->dev); | 762 | cpmac_clear_tx(priv->dev); |
| 653 | cpmac_hw_start(priv->dev); | 763 | cpmac_hw_start(priv->dev); |
| 654 | napi_enable(&priv->napi); | 764 | barrier(); |
| 655 | netif_start_queue(priv->dev); | 765 | atomic_dec(&priv->reset_pending); |
| 766 | |||
| 767 | for (i = 0; i < CPMAC_QUEUES; i++) | ||
| 768 | netif_wake_subqueue(priv->dev, i); | ||
| 769 | netif_wake_queue(priv->dev); | ||
| 770 | cpmac_write(priv->regs, CPMAC_MAC_INT_ENABLE, 3); | ||
| 771 | } | ||
| 772 | |||
| 773 | static void cpmac_check_status(struct net_device *dev) | ||
| 774 | { | ||
| 775 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 776 | |||
| 777 | u32 macstatus = cpmac_read(priv->regs, CPMAC_MAC_STATUS); | ||
| 778 | int rx_channel = (macstatus >> 8) & 7; | ||
| 779 | int rx_code = (macstatus >> 12) & 15; | ||
| 780 | int tx_channel = (macstatus >> 16) & 7; | ||
| 781 | int tx_code = (macstatus >> 20) & 15; | ||
| 782 | |||
| 783 | if (rx_code || tx_code) { | ||
| 784 | if (netif_msg_drv(priv) && net_ratelimit()) { | ||
| 785 | /* Can't find any documentation on what these | ||
| 786 | *error codes actually are. So just log them and hope.. | ||
| 787 | */ | ||
| 788 | if (rx_code) | ||
| 789 | printk(KERN_WARNING "%s: host error %d on rx " | ||
| 790 | "channel %d (macstatus %08x), resetting\n", | ||
| 791 | dev->name, rx_code, rx_channel, macstatus); | ||
| 792 | if (tx_code) | ||
| 793 | printk(KERN_WARNING "%s: host error %d on tx " | ||
| 794 | "channel %d (macstatus %08x), resetting\n", | ||
| 795 | dev->name, tx_code, tx_channel, macstatus); | ||
| 796 | } | ||
| 797 | |||
| 798 | netif_stop_queue(dev); | ||
| 799 | cpmac_hw_stop(dev); | ||
| 800 | if (schedule_work(&priv->reset_work)) | ||
| 801 | atomic_inc(&priv->reset_pending); | ||
| 802 | if (unlikely(netif_msg_hw(priv))) | ||
| 803 | cpmac_dump_regs(dev); | ||
| 804 | } | ||
| 805 | cpmac_write(priv->regs, CPMAC_MAC_INT_CLEAR, 0xff); | ||
| 656 | } | 806 | } |
| 657 | 807 | ||
| 658 | static irqreturn_t cpmac_irq(int irq, void *dev_id) | 808 | static irqreturn_t cpmac_irq(int irq, void *dev_id) |
| @@ -683,49 +833,32 @@ static irqreturn_t cpmac_irq(int irq, void *dev_id) | |||
| 683 | 833 | ||
| 684 | cpmac_write(priv->regs, CPMAC_MAC_EOI_VECTOR, 0); | 834 | cpmac_write(priv->regs, CPMAC_MAC_EOI_VECTOR, 0); |
| 685 | 835 | ||
| 686 | if (unlikely(status & (MAC_INT_HOST | MAC_INT_STATUS))) { | 836 | if (unlikely(status & (MAC_INT_HOST | MAC_INT_STATUS))) |
| 687 | if (netif_msg_drv(priv) && net_ratelimit()) | 837 | cpmac_check_status(dev); |
| 688 | printk(KERN_ERR "%s: hw error, resetting...\n", | ||
| 689 | dev->name); | ||
| 690 | netif_stop_queue(dev); | ||
| 691 | napi_disable(&priv->napi); | ||
| 692 | cpmac_hw_stop(dev); | ||
| 693 | schedule_work(&priv->reset_work); | ||
| 694 | if (unlikely(netif_msg_hw(priv))) | ||
| 695 | cpmac_dump_regs(dev); | ||
| 696 | } | ||
| 697 | 838 | ||
| 698 | return IRQ_HANDLED; | 839 | return IRQ_HANDLED; |
| 699 | } | 840 | } |
| 700 | 841 | ||
| 701 | static void cpmac_tx_timeout(struct net_device *dev) | 842 | static void cpmac_tx_timeout(struct net_device *dev) |
| 702 | { | 843 | { |
| 703 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 704 | int i; | 844 | int i; |
| 845 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 705 | 846 | ||
| 706 | spin_lock(&priv->lock); | 847 | spin_lock(&priv->lock); |
| 707 | dev->stats.tx_errors++; | 848 | dev->stats.tx_errors++; |
| 708 | spin_unlock(&priv->lock); | 849 | spin_unlock(&priv->lock); |
| 709 | if (netif_msg_tx_err(priv) && net_ratelimit()) | 850 | if (netif_msg_tx_err(priv) && net_ratelimit()) |
| 710 | printk(KERN_WARNING "%s: transmit timeout\n", dev->name); | 851 | printk(KERN_WARNING "%s: transmit timeout\n", dev->name); |
| 711 | /* | 852 | |
| 712 | * FIXME: waking up random queue is not the best thing to | 853 | atomic_inc(&priv->reset_pending); |
| 713 | * do... on the other hand why we got here at all? | 854 | barrier(); |
| 714 | */ | 855 | cpmac_clear_tx(dev); |
| 715 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 856 | barrier(); |
| 857 | atomic_dec(&priv->reset_pending); | ||
| 858 | |||
| 859 | netif_wake_queue(priv->dev); | ||
| 716 | for (i = 0; i < CPMAC_QUEUES; i++) | 860 | for (i = 0; i < CPMAC_QUEUES; i++) |
| 717 | if (priv->desc_ring[i].skb) { | 861 | netif_wake_subqueue(dev, i); |
| 718 | priv->desc_ring[i].dataflags = 0; | ||
| 719 | dev_kfree_skb_any(priv->desc_ring[i].skb); | ||
| 720 | netif_wake_subqueue(dev, i); | ||
| 721 | break; | ||
| 722 | } | ||
| 723 | #else | ||
| 724 | priv->desc_ring[0].dataflags = 0; | ||
| 725 | if (priv->desc_ring[0].skb) | ||
| 726 | dev_kfree_skb_any(priv->desc_ring[0].skb); | ||
| 727 | netif_wake_queue(dev); | ||
| 728 | #endif | ||
| 729 | } | 862 | } |
| 730 | 863 | ||
| 731 | static int cpmac_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 864 | static int cpmac_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
| @@ -901,9 +1034,12 @@ static int cpmac_open(struct net_device *dev) | |||
| 901 | desc->buflen = CPMAC_SKB_SIZE; | 1034 | desc->buflen = CPMAC_SKB_SIZE; |
| 902 | desc->dataflags = CPMAC_OWN; | 1035 | desc->dataflags = CPMAC_OWN; |
| 903 | desc->next = &priv->rx_head[(i + 1) % priv->ring_size]; | 1036 | desc->next = &priv->rx_head[(i + 1) % priv->ring_size]; |
| 1037 | desc->next->prev = desc; | ||
| 904 | desc->hw_next = (u32)desc->next->mapping; | 1038 | desc->hw_next = (u32)desc->next->mapping; |
| 905 | } | 1039 | } |
| 906 | 1040 | ||
| 1041 | priv->rx_head->prev->hw_next = (u32)0; | ||
| 1042 | |||
| 907 | if ((res = request_irq(dev->irq, cpmac_irq, IRQF_SHARED, | 1043 | if ((res = request_irq(dev->irq, cpmac_irq, IRQF_SHARED, |
| 908 | dev->name, dev))) { | 1044 | dev->name, dev))) { |
| 909 | if (netif_msg_drv(priv)) | 1045 | if (netif_msg_drv(priv)) |
| @@ -912,6 +1048,7 @@ static int cpmac_open(struct net_device *dev) | |||
| 912 | goto fail_irq; | 1048 | goto fail_irq; |
| 913 | } | 1049 | } |
| 914 | 1050 | ||
| 1051 | atomic_set(&priv->reset_pending, 0); | ||
| 915 | INIT_WORK(&priv->reset_work, cpmac_hw_error); | 1052 | INIT_WORK(&priv->reset_work, cpmac_hw_error); |
| 916 | cpmac_hw_start(dev); | 1053 | cpmac_hw_start(dev); |
| 917 | 1054 | ||
| @@ -1007,21 +1144,10 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
| 1007 | 1144 | ||
| 1008 | if (phy_id == PHY_MAX_ADDR) { | 1145 | if (phy_id == PHY_MAX_ADDR) { |
| 1009 | if (external_switch || dumb_switch) { | 1146 | if (external_switch || dumb_switch) { |
| 1010 | struct fixed_phy_status status = {}; | 1147 | mdio_bus_id = 0; /* fixed phys bus */ |
| 1011 | 1148 | phy_id = pdev->id; | |
| 1012 | /* | ||
| 1013 | * FIXME: this should be in the platform code! | ||
| 1014 | * Since there is not platform code at all (that is, | ||
| 1015 | * no mainline users of that driver), place it here | ||
| 1016 | * for now. | ||
| 1017 | */ | ||
| 1018 | phy_id = 0; | ||
| 1019 | status.link = 1; | ||
| 1020 | status.duplex = 1; | ||
| 1021 | status.speed = 100; | ||
| 1022 | fixed_phy_add(PHY_POLL, phy_id, &status); | ||
| 1023 | } else { | 1149 | } else { |
| 1024 | printk(KERN_ERR "cpmac: no PHY present\n"); | 1150 | dev_err(&pdev->dev, "no PHY present\n"); |
| 1025 | return -ENODEV; | 1151 | return -ENODEV; |
| 1026 | } | 1152 | } |
| 1027 | } | 1153 | } |
| @@ -1064,10 +1190,8 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
| 1064 | priv->msg_enable = netif_msg_init(debug_level, 0xff); | 1190 | priv->msg_enable = netif_msg_init(debug_level, 0xff); |
| 1065 | memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr)); | 1191 | memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr)); |
| 1066 | 1192 | ||
| 1067 | snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id); | 1193 | priv->phy = phy_connect(dev, cpmac_mii.phy_map[phy_id]->dev.bus_id, |
| 1068 | 1194 | &cpmac_adjust_link, 0, PHY_INTERFACE_MODE_MII); | |
| 1069 | priv->phy = phy_connect(dev, priv->phy_name, &cpmac_adjust_link, 0, | ||
| 1070 | PHY_INTERFACE_MODE_MII); | ||
| 1071 | if (IS_ERR(priv->phy)) { | 1195 | if (IS_ERR(priv->phy)) { |
| 1072 | if (netif_msg_drv(priv)) | 1196 | if (netif_msg_drv(priv)) |
| 1073 | printk(KERN_ERR "%s: Could not attach to PHY\n", | 1197 | printk(KERN_ERR "%s: Could not attach to PHY\n", |
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index d45bcd2660af..864295e081b6 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
| @@ -903,7 +903,7 @@ dm9000_stop(struct net_device *ndev) | |||
| 903 | if (netif_msg_ifdown(db)) | 903 | if (netif_msg_ifdown(db)) |
| 904 | dev_dbg(db->dev, "shutting down %s\n", ndev->name); | 904 | dev_dbg(db->dev, "shutting down %s\n", ndev->name); |
| 905 | 905 | ||
| 906 | cancel_delayed_work(&db->phy_poll); | 906 | cancel_delayed_work_sync(&db->phy_poll); |
| 907 | 907 | ||
| 908 | netif_stop_queue(ndev); | 908 | netif_stop_queue(ndev); |
| 909 | netif_carrier_off(ndev); | 909 | netif_carrier_off(ndev); |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 8cbb40f3a506..cab1835173cd 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
| @@ -4201,8 +4201,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
| 4201 | struct e1000_adapter *adapter; | 4201 | struct e1000_adapter *adapter; |
| 4202 | struct e1000_hw *hw; | 4202 | struct e1000_hw *hw; |
| 4203 | const struct e1000_info *ei = e1000_info_tbl[ent->driver_data]; | 4203 | const struct e1000_info *ei = e1000_info_tbl[ent->driver_data]; |
| 4204 | unsigned long mmio_start, mmio_len; | 4204 | resource_size_t mmio_start, mmio_len; |
| 4205 | unsigned long flash_start, flash_len; | 4205 | resource_size_t flash_start, flash_len; |
| 4206 | 4206 | ||
| 4207 | static int cards_found; | 4207 | static int cards_found; |
| 4208 | int i, err, pci_using_dac; | 4208 | int i, err, pci_using_dac; |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index d1b6d4e7495d..287a61918739 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
| @@ -2213,8 +2213,6 @@ static void ehea_vlan_rx_register(struct net_device *dev, | |||
| 2213 | goto out; | 2213 | goto out; |
| 2214 | } | 2214 | } |
| 2215 | 2215 | ||
| 2216 | memset(cb1->vlan_filter, 0, sizeof(cb1->vlan_filter)); | ||
| 2217 | |||
| 2218 | hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id, | 2216 | hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id, |
| 2219 | H_PORT_CB1, H_PORT_CB1_ALL, cb1); | 2217 | H_PORT_CB1, H_PORT_CB1_ALL, cb1); |
| 2220 | if (hret != H_SUCCESS) | 2218 | if (hret != H_SUCCESS) |
| @@ -3178,11 +3176,12 @@ out_err: | |||
| 3178 | 3176 | ||
| 3179 | static void ehea_shutdown_single_port(struct ehea_port *port) | 3177 | static void ehea_shutdown_single_port(struct ehea_port *port) |
| 3180 | { | 3178 | { |
| 3179 | struct ehea_adapter *adapter = port->adapter; | ||
| 3181 | unregister_netdev(port->netdev); | 3180 | unregister_netdev(port->netdev); |
| 3182 | ehea_unregister_port(port); | 3181 | ehea_unregister_port(port); |
| 3183 | kfree(port->mc_list); | 3182 | kfree(port->mc_list); |
| 3184 | free_netdev(port->netdev); | 3183 | free_netdev(port->netdev); |
| 3185 | port->adapter->active_ports--; | 3184 | adapter->active_ports--; |
| 3186 | } | 3185 | } |
| 3187 | 3186 | ||
| 3188 | static int ehea_setup_ports(struct ehea_adapter *adapter) | 3187 | static int ehea_setup_ports(struct ehea_adapter *adapter) |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 35f66d4a4595..9eca97fb0a54 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
| @@ -5823,6 +5823,7 @@ static int nv_resume(struct pci_dev *pdev) | |||
| 5823 | writel(txreg, base + NvRegTransmitPoll); | 5823 | writel(txreg, base + NvRegTransmitPoll); |
| 5824 | 5824 | ||
| 5825 | rc = nv_open(dev); | 5825 | rc = nv_open(dev); |
| 5826 | nv_set_multicast(dev); | ||
| 5826 | out: | 5827 | out: |
| 5827 | return rc; | 5828 | return rc; |
| 5828 | } | 5829 | } |
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c index 67b4b0728fce..a5baaf59ff66 100644 --- a/drivers/net/fs_enet/fs_enet-main.c +++ b/drivers/net/fs_enet/fs_enet-main.c | |||
| @@ -1093,7 +1093,7 @@ err: | |||
| 1093 | if (registered) | 1093 | if (registered) |
| 1094 | unregister_netdev(ndev); | 1094 | unregister_netdev(ndev); |
| 1095 | 1095 | ||
| 1096 | if (fep != NULL) { | 1096 | if (fep && fep->ops) { |
| 1097 | (*fep->ops->free_bd)(ndev); | 1097 | (*fep->ops->free_bd)(ndev); |
| 1098 | (*fep->ops->cleanup_data)(ndev); | 1098 | (*fep->ops->cleanup_data)(ndev); |
| 1099 | } | 1099 | } |
diff --git a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c index f90515935833..45ae9d1191d7 100644 --- a/drivers/net/hamradio/scc.c +++ b/drivers/net/hamradio/scc.c | |||
| @@ -1340,9 +1340,10 @@ static unsigned int scc_set_param(struct scc_channel *scc, unsigned int cmd, uns | |||
| 1340 | case PARAM_RTS: | 1340 | case PARAM_RTS: |
| 1341 | if ( !(scc->wreg[R5] & RTS) ) | 1341 | if ( !(scc->wreg[R5] & RTS) ) |
| 1342 | { | 1342 | { |
| 1343 | if (arg != TX_OFF) | 1343 | if (arg != TX_OFF) { |
| 1344 | scc_key_trx(scc, TX_ON); | 1344 | scc_key_trx(scc, TX_ON); |
| 1345 | scc_start_tx_timer(scc, t_txdelay, scc->kiss.txdelay); | 1345 | scc_start_tx_timer(scc, t_txdelay, scc->kiss.txdelay); |
| 1346 | } | ||
| 1346 | } else { | 1347 | } else { |
| 1347 | if (arg == TX_OFF) | 1348 | if (arg == TX_OFF) |
| 1348 | { | 1349 | { |
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index c91b12ea26ad..36be6efc6398 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
| @@ -631,7 +631,7 @@ static int myri10ge_adopt_running_firmware(struct myri10ge_priv *mgp) | |||
| 631 | return status; | 631 | return status; |
| 632 | } | 632 | } |
| 633 | 633 | ||
| 634 | int myri10ge_get_firmware_capabilities(struct myri10ge_priv *mgp) | 634 | static int myri10ge_get_firmware_capabilities(struct myri10ge_priv *mgp) |
| 635 | { | 635 | { |
| 636 | struct myri10ge_cmd cmd; | 636 | struct myri10ge_cmd cmd; |
| 637 | int status; | 637 | int status; |
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c index 8f328a03847b..a550c9bd126f 100644 --- a/drivers/net/pcmcia/fmvj18x_cs.c +++ b/drivers/net/pcmcia/fmvj18x_cs.c | |||
| @@ -391,7 +391,9 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
| 391 | cardtype = CONTEC; | 391 | cardtype = CONTEC; |
| 392 | break; | 392 | break; |
| 393 | case MANFID_FUJITSU: | 393 | case MANFID_FUJITSU: |
| 394 | if (link->card_id == PRODID_FUJITSU_MBH10302) | 394 | if (link->conf.ConfigBase == 0x0fe0) |
| 395 | cardtype = MBH10302; | ||
| 396 | else if (link->card_id == PRODID_FUJITSU_MBH10302) | ||
| 395 | /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), | 397 | /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), |
| 396 | but these are MBH10304 based card. */ | 398 | but these are MBH10304 based card. */ |
| 397 | cardtype = MBH10304; | 399 | cardtype = MBH10304; |
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index d041f831a18d..f6c4698ce738 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c | |||
| @@ -1461,22 +1461,25 @@ static void | |||
| 1461 | set_multicast_list(struct net_device *dev) | 1461 | set_multicast_list(struct net_device *dev) |
| 1462 | { | 1462 | { |
| 1463 | unsigned int ioaddr = dev->base_addr; | 1463 | unsigned int ioaddr = dev->base_addr; |
| 1464 | unsigned value; | ||
| 1464 | 1465 | ||
| 1465 | SelectPage(0x42); | 1466 | SelectPage(0x42); |
| 1467 | value = GetByte(XIRCREG42_SWC1) & 0xC0; | ||
| 1468 | |||
| 1466 | if (dev->flags & IFF_PROMISC) { /* snoop */ | 1469 | if (dev->flags & IFF_PROMISC) { /* snoop */ |
| 1467 | PutByte(XIRCREG42_SWC1, 0x06); /* set MPE and PME */ | 1470 | PutByte(XIRCREG42_SWC1, value | 0x06); /* set MPE and PME */ |
| 1468 | } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { | 1471 | } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { |
| 1469 | PutByte(XIRCREG42_SWC1, 0x02); /* set MPE */ | 1472 | PutByte(XIRCREG42_SWC1, value | 0x02); /* set MPE */ |
| 1470 | } else if (dev->mc_count) { | 1473 | } else if (dev->mc_count) { |
| 1471 | /* the chip can filter 9 addresses perfectly */ | 1474 | /* the chip can filter 9 addresses perfectly */ |
| 1472 | PutByte(XIRCREG42_SWC1, 0x01); | 1475 | PutByte(XIRCREG42_SWC1, value | 0x01); |
| 1473 | SelectPage(0x40); | 1476 | SelectPage(0x40); |
| 1474 | PutByte(XIRCREG40_CMD0, Offline); | 1477 | PutByte(XIRCREG40_CMD0, Offline); |
| 1475 | set_addresses(dev); | 1478 | set_addresses(dev); |
| 1476 | SelectPage(0x40); | 1479 | SelectPage(0x40); |
| 1477 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); | 1480 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); |
| 1478 | } else { /* standard usage */ | 1481 | } else { /* standard usage */ |
| 1479 | PutByte(XIRCREG42_SWC1, 0x00); | 1482 | PutByte(XIRCREG42_SWC1, value | 0x00); |
| 1480 | } | 1483 | } |
| 1481 | SelectPage(0); | 1484 | SelectPage(0); |
| 1482 | } | 1485 | } |
| @@ -1722,6 +1725,7 @@ do_reset(struct net_device *dev, int full) | |||
| 1722 | 1725 | ||
| 1723 | /* enable receiver and put the mac online */ | 1726 | /* enable receiver and put the mac online */ |
| 1724 | if (full) { | 1727 | if (full) { |
| 1728 | set_multicast_list(dev); | ||
| 1725 | SelectPage(0x40); | 1729 | SelectPage(0x40); |
| 1726 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); | 1730 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); |
| 1727 | } | 1731 | } |
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index a1c454dbc164..1c89b97f4e09 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c | |||
| @@ -325,7 +325,7 @@ static int pcnet32_get_regs_len(struct net_device *dev); | |||
| 325 | static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs, | 325 | static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs, |
| 326 | void *ptr); | 326 | void *ptr); |
| 327 | static void pcnet32_purge_tx_ring(struct net_device *dev); | 327 | static void pcnet32_purge_tx_ring(struct net_device *dev); |
| 328 | static int pcnet32_alloc_ring(struct net_device *dev, char *name); | 328 | static int pcnet32_alloc_ring(struct net_device *dev, const char *name); |
| 329 | static void pcnet32_free_ring(struct net_device *dev); | 329 | static void pcnet32_free_ring(struct net_device *dev); |
| 330 | static void pcnet32_check_media(struct net_device *dev, int verbose); | 330 | static void pcnet32_check_media(struct net_device *dev, int verbose); |
| 331 | 331 | ||
| @@ -1983,7 +1983,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev) | |||
| 1983 | } | 1983 | } |
| 1984 | 1984 | ||
| 1985 | /* if any allocation fails, caller must also call pcnet32_free_ring */ | 1985 | /* if any allocation fails, caller must also call pcnet32_free_ring */ |
| 1986 | static int pcnet32_alloc_ring(struct net_device *dev, char *name) | 1986 | static int pcnet32_alloc_ring(struct net_device *dev, const char *name) |
| 1987 | { | 1987 | { |
| 1988 | struct pcnet32_private *lp = netdev_priv(dev); | 1988 | struct pcnet32_private *lp = netdev_priv(dev); |
| 1989 | 1989 | ||
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 6bf9e76b0a00..6eb2d31d1e34 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | menuconfig PHYLIB | 5 | menuconfig PHYLIB |
| 6 | tristate "PHY Device support and infrastructure" | 6 | tristate "PHY Device support and infrastructure" |
| 7 | depends on !S390 | 7 | depends on !S390 |
| 8 | depends on NET_ETHERNET && (BROKEN || !S390) | 8 | depends on NET_ETHERNET |
| 9 | help | 9 | help |
| 10 | Ethernet controllers are usually attached to PHY | 10 | Ethernet controllers are usually attached to PHY |
| 11 | devices. This option provides infrastructure for | 11 | devices. This option provides infrastructure for |
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index ac3c01d28fdf..16a0e7de5888 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
| @@ -207,6 +207,7 @@ int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id) | |||
| 207 | 207 | ||
| 208 | return 0; | 208 | return 0; |
| 209 | } | 209 | } |
| 210 | EXPORT_SYMBOL(get_phy_id); | ||
| 210 | 211 | ||
| 211 | /** | 212 | /** |
| 212 | * get_phy_device - reads the specified PHY device and returns its @phy_device struct | 213 | * get_phy_device - reads the specified PHY device and returns its @phy_device struct |
diff --git a/drivers/net/s2io-regs.h b/drivers/net/s2io-regs.h index 2109508c047a..f8274f8941ea 100644 --- a/drivers/net/s2io-regs.h +++ b/drivers/net/s2io-regs.h | |||
| @@ -250,7 +250,7 @@ struct XENA_dev_config { | |||
| 250 | u64 tx_mat0_n[0x8]; | 250 | u64 tx_mat0_n[0x8]; |
| 251 | #define TX_MAT_SET(fifo, msi) vBIT(msi, (8 * fifo), 8) | 251 | #define TX_MAT_SET(fifo, msi) vBIT(msi, (8 * fifo), 8) |
| 252 | 252 | ||
| 253 | u8 unused_1[0x8]; | 253 | u64 xmsi_mask_reg; |
| 254 | u64 stat_byte_cnt; | 254 | u64 stat_byte_cnt; |
| 255 | #define STAT_BC(n) vBIT(n,4,12) | 255 | #define STAT_BC(n) vBIT(n,4,12) |
| 256 | 256 | ||
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 523478ebfd69..a20693e09ae8 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
| @@ -86,7 +86,7 @@ | |||
| 86 | #include "s2io.h" | 86 | #include "s2io.h" |
| 87 | #include "s2io-regs.h" | 87 | #include "s2io-regs.h" |
| 88 | 88 | ||
| 89 | #define DRV_VERSION "2.0.26.23" | 89 | #define DRV_VERSION "2.0.26.24" |
| 90 | 90 | ||
| 91 | /* S2io Driver name & version. */ | 91 | /* S2io Driver name & version. */ |
| 92 | static char s2io_driver_name[] = "Neterion"; | 92 | static char s2io_driver_name[] = "Neterion"; |
| @@ -1113,9 +1113,10 @@ static int s2io_on_nec_bridge(struct pci_dev *s2io_pdev) | |||
| 1113 | struct pci_dev *tdev = NULL; | 1113 | struct pci_dev *tdev = NULL; |
| 1114 | while ((tdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, tdev)) != NULL) { | 1114 | while ((tdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, tdev)) != NULL) { |
| 1115 | if (tdev->vendor == NEC_VENID && tdev->device == NEC_DEVID) { | 1115 | if (tdev->vendor == NEC_VENID && tdev->device == NEC_DEVID) { |
| 1116 | if (tdev->bus == s2io_pdev->bus->parent) | 1116 | if (tdev->bus == s2io_pdev->bus->parent) { |
| 1117 | pci_dev_put(tdev); | 1117 | pci_dev_put(tdev); |
| 1118 | return 1; | 1118 | return 1; |
| 1119 | } | ||
| 1119 | } | 1120 | } |
| 1120 | } | 1121 | } |
| 1121 | return 0; | 1122 | return 0; |
| @@ -1219,15 +1220,33 @@ static int init_tti(struct s2io_nic *nic, int link) | |||
| 1219 | TTI_DATA1_MEM_TX_URNG_B(0x10) | | 1220 | TTI_DATA1_MEM_TX_URNG_B(0x10) | |
| 1220 | TTI_DATA1_MEM_TX_URNG_C(0x30) | | 1221 | TTI_DATA1_MEM_TX_URNG_C(0x30) | |
| 1221 | TTI_DATA1_MEM_TX_TIMER_AC_EN; | 1222 | TTI_DATA1_MEM_TX_TIMER_AC_EN; |
| 1222 | 1223 | if (i == 0) | |
| 1223 | if (use_continuous_tx_intrs && (link == LINK_UP)) | 1224 | if (use_continuous_tx_intrs && (link == LINK_UP)) |
| 1224 | val64 |= TTI_DATA1_MEM_TX_TIMER_CI_EN; | 1225 | val64 |= TTI_DATA1_MEM_TX_TIMER_CI_EN; |
| 1225 | writeq(val64, &bar0->tti_data1_mem); | 1226 | writeq(val64, &bar0->tti_data1_mem); |
| 1226 | 1227 | ||
| 1227 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) | | 1228 | if (nic->config.intr_type == MSI_X) { |
| 1228 | TTI_DATA2_MEM_TX_UFC_B(0x20) | | 1229 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) | |
| 1229 | TTI_DATA2_MEM_TX_UFC_C(0x40) | | 1230 | TTI_DATA2_MEM_TX_UFC_B(0x100) | |
| 1230 | TTI_DATA2_MEM_TX_UFC_D(0x80); | 1231 | TTI_DATA2_MEM_TX_UFC_C(0x200) | |
| 1232 | TTI_DATA2_MEM_TX_UFC_D(0x300); | ||
| 1233 | } else { | ||
| 1234 | if ((nic->config.tx_steering_type == | ||
| 1235 | TX_DEFAULT_STEERING) && | ||
| 1236 | (config->tx_fifo_num > 1) && | ||
| 1237 | (i >= nic->udp_fifo_idx) && | ||
| 1238 | (i < (nic->udp_fifo_idx + | ||
| 1239 | nic->total_udp_fifos))) | ||
| 1240 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x50) | | ||
| 1241 | TTI_DATA2_MEM_TX_UFC_B(0x80) | | ||
| 1242 | TTI_DATA2_MEM_TX_UFC_C(0x100) | | ||
| 1243 | TTI_DATA2_MEM_TX_UFC_D(0x120); | ||
| 1244 | else | ||
| 1245 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) | | ||
| 1246 | TTI_DATA2_MEM_TX_UFC_B(0x20) | | ||
| 1247 | TTI_DATA2_MEM_TX_UFC_C(0x40) | | ||
| 1248 | TTI_DATA2_MEM_TX_UFC_D(0x80); | ||
| 1249 | } | ||
| 1231 | 1250 | ||
| 1232 | writeq(val64, &bar0->tti_data2_mem); | 1251 | writeq(val64, &bar0->tti_data2_mem); |
| 1233 | 1252 | ||
| @@ -2813,6 +2832,15 @@ static void free_rx_buffers(struct s2io_nic *sp) | |||
| 2813 | } | 2832 | } |
| 2814 | } | 2833 | } |
| 2815 | 2834 | ||
| 2835 | static int s2io_chk_rx_buffers(struct ring_info *ring) | ||
| 2836 | { | ||
| 2837 | if (fill_rx_buffers(ring) == -ENOMEM) { | ||
| 2838 | DBG_PRINT(INFO_DBG, "%s:Out of memory", ring->dev->name); | ||
| 2839 | DBG_PRINT(INFO_DBG, " in Rx Intr!!\n"); | ||
| 2840 | } | ||
| 2841 | return 0; | ||
| 2842 | } | ||
| 2843 | |||
| 2816 | /** | 2844 | /** |
| 2817 | * s2io_poll - Rx interrupt handler for NAPI support | 2845 | * s2io_poll - Rx interrupt handler for NAPI support |
| 2818 | * @napi : pointer to the napi structure. | 2846 | * @napi : pointer to the napi structure. |
| @@ -2826,57 +2854,72 @@ static void free_rx_buffers(struct s2io_nic *sp) | |||
| 2826 | * 0 on success and 1 if there are No Rx packets to be processed. | 2854 | * 0 on success and 1 if there are No Rx packets to be processed. |
| 2827 | */ | 2855 | */ |
| 2828 | 2856 | ||
| 2829 | static int s2io_poll(struct napi_struct *napi, int budget) | 2857 | static int s2io_poll_msix(struct napi_struct *napi, int budget) |
| 2830 | { | 2858 | { |
| 2831 | struct s2io_nic *nic = container_of(napi, struct s2io_nic, napi); | 2859 | struct ring_info *ring = container_of(napi, struct ring_info, napi); |
| 2832 | struct net_device *dev = nic->dev; | 2860 | struct net_device *dev = ring->dev; |
| 2833 | int pkt_cnt = 0, org_pkts_to_process; | ||
| 2834 | struct mac_info *mac_control; | ||
| 2835 | struct config_param *config; | 2861 | struct config_param *config; |
| 2862 | struct mac_info *mac_control; | ||
| 2863 | int pkts_processed = 0; | ||
| 2864 | u8 *addr = NULL, val8 = 0; | ||
| 2865 | struct s2io_nic *nic = dev->priv; | ||
| 2836 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 2866 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 2837 | int i; | 2867 | int budget_org = budget; |
| 2838 | 2868 | ||
| 2839 | mac_control = &nic->mac_control; | ||
| 2840 | config = &nic->config; | 2869 | config = &nic->config; |
| 2870 | mac_control = &nic->mac_control; | ||
| 2841 | 2871 | ||
| 2842 | nic->pkts_to_process = budget; | 2872 | if (unlikely(!is_s2io_card_up(nic))) |
| 2843 | org_pkts_to_process = nic->pkts_to_process; | 2873 | return 0; |
| 2844 | 2874 | ||
| 2845 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); | 2875 | pkts_processed = rx_intr_handler(ring, budget); |
| 2846 | readl(&bar0->rx_traffic_int); | 2876 | s2io_chk_rx_buffers(ring); |
| 2847 | 2877 | ||
| 2848 | for (i = 0; i < config->rx_ring_num; i++) { | 2878 | if (pkts_processed < budget_org) { |
| 2849 | rx_intr_handler(&mac_control->rings[i]); | 2879 | netif_rx_complete(dev, napi); |
| 2850 | pkt_cnt = org_pkts_to_process - nic->pkts_to_process; | 2880 | /*Re Enable MSI-Rx Vector*/ |
| 2851 | if (!nic->pkts_to_process) { | 2881 | addr = (u8 *)&bar0->xmsi_mask_reg; |
| 2852 | /* Quota for the current iteration has been met */ | 2882 | addr += 7 - ring->ring_no; |
| 2853 | goto no_rx; | 2883 | val8 = (ring->ring_no == 0) ? 0x3f : 0xbf; |
| 2854 | } | 2884 | writeb(val8, addr); |
| 2885 | val8 = readb(addr); | ||
| 2855 | } | 2886 | } |
| 2887 | return pkts_processed; | ||
| 2888 | } | ||
| 2889 | static int s2io_poll_inta(struct napi_struct *napi, int budget) | ||
| 2890 | { | ||
| 2891 | struct s2io_nic *nic = container_of(napi, struct s2io_nic, napi); | ||
| 2892 | struct ring_info *ring; | ||
| 2893 | struct net_device *dev = nic->dev; | ||
| 2894 | struct config_param *config; | ||
| 2895 | struct mac_info *mac_control; | ||
| 2896 | int pkts_processed = 0; | ||
| 2897 | int ring_pkts_processed, i; | ||
| 2898 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | ||
| 2899 | int budget_org = budget; | ||
| 2856 | 2900 | ||
| 2857 | netif_rx_complete(dev, napi); | 2901 | config = &nic->config; |
| 2902 | mac_control = &nic->mac_control; | ||
| 2858 | 2903 | ||
| 2859 | for (i = 0; i < config->rx_ring_num; i++) { | 2904 | if (unlikely(!is_s2io_card_up(nic))) |
| 2860 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { | 2905 | return 0; |
| 2861 | DBG_PRINT(INFO_DBG, "%s:Out of memory", dev->name); | ||
| 2862 | DBG_PRINT(INFO_DBG, " in Rx Poll!!\n"); | ||
| 2863 | break; | ||
| 2864 | } | ||
| 2865 | } | ||
| 2866 | /* Re enable the Rx interrupts. */ | ||
| 2867 | writeq(0x0, &bar0->rx_traffic_mask); | ||
| 2868 | readl(&bar0->rx_traffic_mask); | ||
| 2869 | return pkt_cnt; | ||
| 2870 | 2906 | ||
| 2871 | no_rx: | ||
| 2872 | for (i = 0; i < config->rx_ring_num; i++) { | 2907 | for (i = 0; i < config->rx_ring_num; i++) { |
| 2873 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { | 2908 | ring = &mac_control->rings[i]; |
| 2874 | DBG_PRINT(INFO_DBG, "%s:Out of memory", dev->name); | 2909 | ring_pkts_processed = rx_intr_handler(ring, budget); |
| 2875 | DBG_PRINT(INFO_DBG, " in Rx Poll!!\n"); | 2910 | s2io_chk_rx_buffers(ring); |
| 2911 | pkts_processed += ring_pkts_processed; | ||
| 2912 | budget -= ring_pkts_processed; | ||
| 2913 | if (budget <= 0) | ||
| 2876 | break; | 2914 | break; |
| 2877 | } | ||
| 2878 | } | 2915 | } |
| 2879 | return pkt_cnt; | 2916 | if (pkts_processed < budget_org) { |
| 2917 | netif_rx_complete(dev, napi); | ||
| 2918 | /* Re enable the Rx interrupts for the ring */ | ||
| 2919 | writeq(0, &bar0->rx_traffic_mask); | ||
| 2920 | readl(&bar0->rx_traffic_mask); | ||
| 2921 | } | ||
| 2922 | return pkts_processed; | ||
| 2880 | } | 2923 | } |
| 2881 | 2924 | ||
| 2882 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2925 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| @@ -2918,7 +2961,7 @@ static void s2io_netpoll(struct net_device *dev) | |||
| 2918 | 2961 | ||
| 2919 | /* check for received packet and indicate up to network */ | 2962 | /* check for received packet and indicate up to network */ |
| 2920 | for (i = 0; i < config->rx_ring_num; i++) | 2963 | for (i = 0; i < config->rx_ring_num; i++) |
| 2921 | rx_intr_handler(&mac_control->rings[i]); | 2964 | rx_intr_handler(&mac_control->rings[i], 0); |
| 2922 | 2965 | ||
| 2923 | for (i = 0; i < config->rx_ring_num; i++) { | 2966 | for (i = 0; i < config->rx_ring_num; i++) { |
| 2924 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { | 2967 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { |
| @@ -2934,7 +2977,8 @@ static void s2io_netpoll(struct net_device *dev) | |||
| 2934 | 2977 | ||
| 2935 | /** | 2978 | /** |
| 2936 | * rx_intr_handler - Rx interrupt handler | 2979 | * rx_intr_handler - Rx interrupt handler |
| 2937 | * @nic: device private variable. | 2980 | * @ring_info: per ring structure. |
| 2981 | * @budget: budget for napi processing. | ||
| 2938 | * Description: | 2982 | * Description: |
| 2939 | * If the interrupt is because of a received frame or if the | 2983 | * If the interrupt is because of a received frame or if the |
| 2940 | * receive ring contains fresh as yet un-processed frames,this function is | 2984 | * receive ring contains fresh as yet un-processed frames,this function is |
| @@ -2942,15 +2986,15 @@ static void s2io_netpoll(struct net_device *dev) | |||
| 2942 | * stopped and sends the skb to the OSM's Rx handler and then increments | 2986 | * stopped and sends the skb to the OSM's Rx handler and then increments |
| 2943 | * the offset. | 2987 | * the offset. |
| 2944 | * Return Value: | 2988 | * Return Value: |
| 2945 | * NONE. | 2989 | * No. of napi packets processed. |
| 2946 | */ | 2990 | */ |
| 2947 | static void rx_intr_handler(struct ring_info *ring_data) | 2991 | static int rx_intr_handler(struct ring_info *ring_data, int budget) |
| 2948 | { | 2992 | { |
| 2949 | int get_block, put_block; | 2993 | int get_block, put_block; |
| 2950 | struct rx_curr_get_info get_info, put_info; | 2994 | struct rx_curr_get_info get_info, put_info; |
| 2951 | struct RxD_t *rxdp; | 2995 | struct RxD_t *rxdp; |
| 2952 | struct sk_buff *skb; | 2996 | struct sk_buff *skb; |
| 2953 | int pkt_cnt = 0; | 2997 | int pkt_cnt = 0, napi_pkts = 0; |
| 2954 | int i; | 2998 | int i; |
| 2955 | struct RxD1* rxdp1; | 2999 | struct RxD1* rxdp1; |
| 2956 | struct RxD3* rxdp3; | 3000 | struct RxD3* rxdp3; |
| @@ -2977,7 +3021,7 @@ static void rx_intr_handler(struct ring_info *ring_data) | |||
| 2977 | DBG_PRINT(ERR_DBG, "%s: The skb is ", | 3021 | DBG_PRINT(ERR_DBG, "%s: The skb is ", |
| 2978 | ring_data->dev->name); | 3022 | ring_data->dev->name); |
| 2979 | DBG_PRINT(ERR_DBG, "Null in Rx Intr\n"); | 3023 | DBG_PRINT(ERR_DBG, "Null in Rx Intr\n"); |
| 2980 | return; | 3024 | return 0; |
| 2981 | } | 3025 | } |
| 2982 | if (ring_data->rxd_mode == RXD_MODE_1) { | 3026 | if (ring_data->rxd_mode == RXD_MODE_1) { |
| 2983 | rxdp1 = (struct RxD1*)rxdp; | 3027 | rxdp1 = (struct RxD1*)rxdp; |
| @@ -3014,9 +3058,10 @@ static void rx_intr_handler(struct ring_info *ring_data) | |||
| 3014 | rxdp = ring_data->rx_blocks[get_block].block_virt_addr; | 3058 | rxdp = ring_data->rx_blocks[get_block].block_virt_addr; |
| 3015 | } | 3059 | } |
| 3016 | 3060 | ||
| 3017 | if(ring_data->nic->config.napi){ | 3061 | if (ring_data->nic->config.napi) { |
| 3018 | ring_data->nic->pkts_to_process -= 1; | 3062 | budget--; |
| 3019 | if (!ring_data->nic->pkts_to_process) | 3063 | napi_pkts++; |
| 3064 | if (!budget) | ||
| 3020 | break; | 3065 | break; |
| 3021 | } | 3066 | } |
| 3022 | pkt_cnt++; | 3067 | pkt_cnt++; |
| @@ -3034,6 +3079,7 @@ static void rx_intr_handler(struct ring_info *ring_data) | |||
| 3034 | } | 3079 | } |
| 3035 | } | 3080 | } |
| 3036 | } | 3081 | } |
| 3082 | return(napi_pkts); | ||
| 3037 | } | 3083 | } |
| 3038 | 3084 | ||
| 3039 | /** | 3085 | /** |
| @@ -3730,14 +3776,19 @@ static void restore_xmsi_data(struct s2io_nic *nic) | |||
| 3730 | { | 3776 | { |
| 3731 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 3777 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 3732 | u64 val64; | 3778 | u64 val64; |
| 3733 | int i; | 3779 | int i, msix_index; |
| 3780 | |||
| 3781 | |||
| 3782 | if (nic->device_type == XFRAME_I_DEVICE) | ||
| 3783 | return; | ||
| 3734 | 3784 | ||
| 3735 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { | 3785 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { |
| 3786 | msix_index = (i) ? ((i-1) * 8 + 1): 0; | ||
| 3736 | writeq(nic->msix_info[i].addr, &bar0->xmsi_address); | 3787 | writeq(nic->msix_info[i].addr, &bar0->xmsi_address); |
| 3737 | writeq(nic->msix_info[i].data, &bar0->xmsi_data); | 3788 | writeq(nic->msix_info[i].data, &bar0->xmsi_data); |
| 3738 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(i, 26, 6)); | 3789 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(msix_index, 26, 6)); |
| 3739 | writeq(val64, &bar0->xmsi_access); | 3790 | writeq(val64, &bar0->xmsi_access); |
| 3740 | if (wait_for_msix_trans(nic, i)) { | 3791 | if (wait_for_msix_trans(nic, msix_index)) { |
| 3741 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3792 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); |
| 3742 | continue; | 3793 | continue; |
| 3743 | } | 3794 | } |
| @@ -3748,13 +3799,17 @@ static void store_xmsi_data(struct s2io_nic *nic) | |||
| 3748 | { | 3799 | { |
| 3749 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 3800 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 3750 | u64 val64, addr, data; | 3801 | u64 val64, addr, data; |
| 3751 | int i; | 3802 | int i, msix_index; |
| 3803 | |||
| 3804 | if (nic->device_type == XFRAME_I_DEVICE) | ||
| 3805 | return; | ||
| 3752 | 3806 | ||
| 3753 | /* Store and display */ | 3807 | /* Store and display */ |
| 3754 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { | 3808 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { |
| 3755 | val64 = (s2BIT(15) | vBIT(i, 26, 6)); | 3809 | msix_index = (i) ? ((i-1) * 8 + 1): 0; |
| 3810 | val64 = (s2BIT(15) | vBIT(msix_index, 26, 6)); | ||
| 3756 | writeq(val64, &bar0->xmsi_access); | 3811 | writeq(val64, &bar0->xmsi_access); |
| 3757 | if (wait_for_msix_trans(nic, i)) { | 3812 | if (wait_for_msix_trans(nic, msix_index)) { |
| 3758 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3813 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); |
| 3759 | continue; | 3814 | continue; |
| 3760 | } | 3815 | } |
| @@ -3770,11 +3825,11 @@ static void store_xmsi_data(struct s2io_nic *nic) | |||
| 3770 | static int s2io_enable_msi_x(struct s2io_nic *nic) | 3825 | static int s2io_enable_msi_x(struct s2io_nic *nic) |
| 3771 | { | 3826 | { |
| 3772 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 3827 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 3773 | u64 tx_mat, rx_mat; | 3828 | u64 rx_mat; |
| 3774 | u16 msi_control; /* Temp variable */ | 3829 | u16 msi_control; /* Temp variable */ |
| 3775 | int ret, i, j, msix_indx = 1; | 3830 | int ret, i, j, msix_indx = 1; |
| 3776 | 3831 | ||
| 3777 | nic->entries = kcalloc(MAX_REQUESTED_MSI_X, sizeof(struct msix_entry), | 3832 | nic->entries = kmalloc(nic->num_entries * sizeof(struct msix_entry), |
| 3778 | GFP_KERNEL); | 3833 | GFP_KERNEL); |
| 3779 | if (!nic->entries) { | 3834 | if (!nic->entries) { |
| 3780 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", \ | 3835 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", \ |
| @@ -3783,10 +3838,12 @@ static int s2io_enable_msi_x(struct s2io_nic *nic) | |||
| 3783 | return -ENOMEM; | 3838 | return -ENOMEM; |
| 3784 | } | 3839 | } |
| 3785 | nic->mac_control.stats_info->sw_stat.mem_allocated | 3840 | nic->mac_control.stats_info->sw_stat.mem_allocated |
| 3786 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 3841 | += (nic->num_entries * sizeof(struct msix_entry)); |
| 3842 | |||
| 3843 | memset(nic->entries, 0, nic->num_entries * sizeof(struct msix_entry)); | ||
| 3787 | 3844 | ||
| 3788 | nic->s2io_entries = | 3845 | nic->s2io_entries = |
| 3789 | kcalloc(MAX_REQUESTED_MSI_X, sizeof(struct s2io_msix_entry), | 3846 | kmalloc(nic->num_entries * sizeof(struct s2io_msix_entry), |
| 3790 | GFP_KERNEL); | 3847 | GFP_KERNEL); |
| 3791 | if (!nic->s2io_entries) { | 3848 | if (!nic->s2io_entries) { |
| 3792 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", | 3849 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", |
| @@ -3794,60 +3851,52 @@ static int s2io_enable_msi_x(struct s2io_nic *nic) | |||
| 3794 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; | 3851 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; |
| 3795 | kfree(nic->entries); | 3852 | kfree(nic->entries); |
| 3796 | nic->mac_control.stats_info->sw_stat.mem_freed | 3853 | nic->mac_control.stats_info->sw_stat.mem_freed |
| 3797 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 3854 | += (nic->num_entries * sizeof(struct msix_entry)); |
| 3798 | return -ENOMEM; | 3855 | return -ENOMEM; |
| 3799 | } | 3856 | } |
| 3800 | nic->mac_control.stats_info->sw_stat.mem_allocated | 3857 | nic->mac_control.stats_info->sw_stat.mem_allocated |
| 3801 | += (MAX_REQUESTED_MSI_X * sizeof(struct s2io_msix_entry)); | 3858 | += (nic->num_entries * sizeof(struct s2io_msix_entry)); |
| 3802 | 3859 | memset(nic->s2io_entries, 0, | |
| 3803 | for (i=0; i< MAX_REQUESTED_MSI_X; i++) { | 3860 | nic->num_entries * sizeof(struct s2io_msix_entry)); |
| 3804 | nic->entries[i].entry = i; | 3861 | |
| 3805 | nic->s2io_entries[i].entry = i; | 3862 | nic->entries[0].entry = 0; |
| 3863 | nic->s2io_entries[0].entry = 0; | ||
| 3864 | nic->s2io_entries[0].in_use = MSIX_FLG; | ||
| 3865 | nic->s2io_entries[0].type = MSIX_ALARM_TYPE; | ||
| 3866 | nic->s2io_entries[0].arg = &nic->mac_control.fifos; | ||
| 3867 | |||
| 3868 | for (i = 1; i < nic->num_entries; i++) { | ||
| 3869 | nic->entries[i].entry = ((i - 1) * 8) + 1; | ||
| 3870 | nic->s2io_entries[i].entry = ((i - 1) * 8) + 1; | ||
| 3806 | nic->s2io_entries[i].arg = NULL; | 3871 | nic->s2io_entries[i].arg = NULL; |
| 3807 | nic->s2io_entries[i].in_use = 0; | 3872 | nic->s2io_entries[i].in_use = 0; |
| 3808 | } | 3873 | } |
| 3809 | 3874 | ||
| 3810 | tx_mat = readq(&bar0->tx_mat0_n[0]); | ||
| 3811 | for (i=0; i<nic->config.tx_fifo_num; i++, msix_indx++) { | ||
| 3812 | tx_mat |= TX_MAT_SET(i, msix_indx); | ||
| 3813 | nic->s2io_entries[msix_indx].arg = &nic->mac_control.fifos[i]; | ||
| 3814 | nic->s2io_entries[msix_indx].type = MSIX_FIFO_TYPE; | ||
| 3815 | nic->s2io_entries[msix_indx].in_use = MSIX_FLG; | ||
| 3816 | } | ||
| 3817 | writeq(tx_mat, &bar0->tx_mat0_n[0]); | ||
| 3818 | |||
| 3819 | rx_mat = readq(&bar0->rx_mat); | 3875 | rx_mat = readq(&bar0->rx_mat); |
| 3820 | for (j = 0; j < nic->config.rx_ring_num; j++, msix_indx++) { | 3876 | for (j = 0; j < nic->config.rx_ring_num; j++) { |
| 3821 | rx_mat |= RX_MAT_SET(j, msix_indx); | 3877 | rx_mat |= RX_MAT_SET(j, msix_indx); |
| 3822 | nic->s2io_entries[msix_indx].arg | 3878 | nic->s2io_entries[j+1].arg = &nic->mac_control.rings[j]; |
| 3823 | = &nic->mac_control.rings[j]; | 3879 | nic->s2io_entries[j+1].type = MSIX_RING_TYPE; |
| 3824 | nic->s2io_entries[msix_indx].type = MSIX_RING_TYPE; | 3880 | nic->s2io_entries[j+1].in_use = MSIX_FLG; |
| 3825 | nic->s2io_entries[msix_indx].in_use = MSIX_FLG; | 3881 | msix_indx += 8; |
| 3826 | } | 3882 | } |
| 3827 | writeq(rx_mat, &bar0->rx_mat); | 3883 | writeq(rx_mat, &bar0->rx_mat); |
| 3884 | readq(&bar0->rx_mat); | ||
| 3828 | 3885 | ||
| 3829 | nic->avail_msix_vectors = 0; | 3886 | ret = pci_enable_msix(nic->pdev, nic->entries, nic->num_entries); |
| 3830 | ret = pci_enable_msix(nic->pdev, nic->entries, MAX_REQUESTED_MSI_X); | ||
| 3831 | /* We fail init if error or we get less vectors than min required */ | 3887 | /* We fail init if error or we get less vectors than min required */ |
| 3832 | if (ret >= (nic->config.tx_fifo_num + nic->config.rx_ring_num + 1)) { | ||
| 3833 | nic->avail_msix_vectors = ret; | ||
| 3834 | ret = pci_enable_msix(nic->pdev, nic->entries, ret); | ||
| 3835 | } | ||
| 3836 | if (ret) { | 3888 | if (ret) { |
| 3837 | DBG_PRINT(ERR_DBG, "%s: Enabling MSIX failed\n", nic->dev->name); | 3889 | DBG_PRINT(ERR_DBG, "%s: Enabling MSIX failed\n", nic->dev->name); |
| 3838 | kfree(nic->entries); | 3890 | kfree(nic->entries); |
| 3839 | nic->mac_control.stats_info->sw_stat.mem_freed | 3891 | nic->mac_control.stats_info->sw_stat.mem_freed |
| 3840 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 3892 | += (nic->num_entries * sizeof(struct msix_entry)); |
| 3841 | kfree(nic->s2io_entries); | 3893 | kfree(nic->s2io_entries); |
| 3842 | nic->mac_control.stats_info->sw_stat.mem_freed | 3894 | nic->mac_control.stats_info->sw_stat.mem_freed |
| 3843 | += (MAX_REQUESTED_MSI_X * sizeof(struct s2io_msix_entry)); | 3895 | += (nic->num_entries * sizeof(struct s2io_msix_entry)); |
| 3844 | nic->entries = NULL; | 3896 | nic->entries = NULL; |
| 3845 | nic->s2io_entries = NULL; | 3897 | nic->s2io_entries = NULL; |
| 3846 | nic->avail_msix_vectors = 0; | ||
| 3847 | return -ENOMEM; | 3898 | return -ENOMEM; |
| 3848 | } | 3899 | } |
| 3849 | if (!nic->avail_msix_vectors) | ||
| 3850 | nic->avail_msix_vectors = MAX_REQUESTED_MSI_X; | ||
| 3851 | 3900 | ||
| 3852 | /* | 3901 | /* |
| 3853 | * To enable MSI-X, MSI also needs to be enabled, due to a bug | 3902 | * To enable MSI-X, MSI also needs to be enabled, due to a bug |
| @@ -3919,7 +3968,7 @@ static void remove_msix_isr(struct s2io_nic *sp) | |||
| 3919 | int i; | 3968 | int i; |
| 3920 | u16 msi_control; | 3969 | u16 msi_control; |
| 3921 | 3970 | ||
| 3922 | for (i = 0; i < MAX_REQUESTED_MSI_X; i++) { | 3971 | for (i = 0; i < sp->num_entries; i++) { |
| 3923 | if (sp->s2io_entries[i].in_use == | 3972 | if (sp->s2io_entries[i].in_use == |
| 3924 | MSIX_REGISTERED_SUCCESS) { | 3973 | MSIX_REGISTERED_SUCCESS) { |
| 3925 | int vector = sp->entries[i].vector; | 3974 | int vector = sp->entries[i].vector; |
| @@ -3975,29 +4024,6 @@ static int s2io_open(struct net_device *dev) | |||
| 3975 | netif_carrier_off(dev); | 4024 | netif_carrier_off(dev); |
| 3976 | sp->last_link_state = 0; | 4025 | sp->last_link_state = 0; |
| 3977 | 4026 | ||
| 3978 | if (sp->config.intr_type == MSI_X) { | ||
| 3979 | int ret = s2io_enable_msi_x(sp); | ||
| 3980 | |||
| 3981 | if (!ret) { | ||
| 3982 | ret = s2io_test_msi(sp); | ||
| 3983 | /* rollback MSI-X, will re-enable during add_isr() */ | ||
| 3984 | remove_msix_isr(sp); | ||
| 3985 | } | ||
| 3986 | if (ret) { | ||
| 3987 | |||
| 3988 | DBG_PRINT(ERR_DBG, | ||
| 3989 | "%s: MSI-X requested but failed to enable\n", | ||
| 3990 | dev->name); | ||
| 3991 | sp->config.intr_type = INTA; | ||
| 3992 | } | ||
| 3993 | } | ||
| 3994 | |||
| 3995 | /* NAPI doesn't work well with MSI(X) */ | ||
| 3996 | if (sp->config.intr_type != INTA) { | ||
| 3997 | if(sp->config.napi) | ||
| 3998 | sp->config.napi = 0; | ||
| 3999 | } | ||
| 4000 | |||
| 4001 | /* Initialize H/W and enable interrupts */ | 4027 | /* Initialize H/W and enable interrupts */ |
| 4002 | err = s2io_card_up(sp); | 4028 | err = s2io_card_up(sp); |
| 4003 | if (err) { | 4029 | if (err) { |
| @@ -4020,12 +4046,12 @@ hw_init_failed: | |||
| 4020 | if (sp->entries) { | 4046 | if (sp->entries) { |
| 4021 | kfree(sp->entries); | 4047 | kfree(sp->entries); |
| 4022 | sp->mac_control.stats_info->sw_stat.mem_freed | 4048 | sp->mac_control.stats_info->sw_stat.mem_freed |
| 4023 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 4049 | += (sp->num_entries * sizeof(struct msix_entry)); |
| 4024 | } | 4050 | } |
| 4025 | if (sp->s2io_entries) { | 4051 | if (sp->s2io_entries) { |
| 4026 | kfree(sp->s2io_entries); | 4052 | kfree(sp->s2io_entries); |
| 4027 | sp->mac_control.stats_info->sw_stat.mem_freed | 4053 | sp->mac_control.stats_info->sw_stat.mem_freed |
| 4028 | += (MAX_REQUESTED_MSI_X * sizeof(struct s2io_msix_entry)); | 4054 | += (sp->num_entries * sizeof(struct s2io_msix_entry)); |
| 4029 | } | 4055 | } |
| 4030 | } | 4056 | } |
| 4031 | return err; | 4057 | return err; |
| @@ -4327,40 +4353,64 @@ s2io_alarm_handle(unsigned long data) | |||
| 4327 | mod_timer(&sp->alarm_timer, jiffies + HZ / 2); | 4353 | mod_timer(&sp->alarm_timer, jiffies + HZ / 2); |
| 4328 | } | 4354 | } |
| 4329 | 4355 | ||
| 4330 | static int s2io_chk_rx_buffers(struct ring_info *ring) | ||
| 4331 | { | ||
| 4332 | if (fill_rx_buffers(ring) == -ENOMEM) { | ||
| 4333 | DBG_PRINT(INFO_DBG, "%s:Out of memory", ring->dev->name); | ||
| 4334 | DBG_PRINT(INFO_DBG, " in Rx Intr!!\n"); | ||
| 4335 | } | ||
| 4336 | return 0; | ||
| 4337 | } | ||
| 4338 | |||
| 4339 | static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id) | 4356 | static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id) |
| 4340 | { | 4357 | { |
| 4341 | struct ring_info *ring = (struct ring_info *)dev_id; | 4358 | struct ring_info *ring = (struct ring_info *)dev_id; |
| 4342 | struct s2io_nic *sp = ring->nic; | 4359 | struct s2io_nic *sp = ring->nic; |
| 4360 | struct XENA_dev_config __iomem *bar0 = sp->bar0; | ||
| 4361 | struct net_device *dev = sp->dev; | ||
| 4343 | 4362 | ||
| 4344 | if (!is_s2io_card_up(sp)) | 4363 | if (unlikely(!is_s2io_card_up(sp))) |
| 4345 | return IRQ_HANDLED; | 4364 | return IRQ_HANDLED; |
| 4346 | 4365 | ||
| 4347 | rx_intr_handler(ring); | 4366 | if (sp->config.napi) { |
| 4348 | s2io_chk_rx_buffers(ring); | 4367 | u8 *addr = NULL, val8 = 0; |
| 4368 | |||
| 4369 | addr = (u8 *)&bar0->xmsi_mask_reg; | ||
| 4370 | addr += (7 - ring->ring_no); | ||
| 4371 | val8 = (ring->ring_no == 0) ? 0x7f : 0xff; | ||
| 4372 | writeb(val8, addr); | ||
| 4373 | val8 = readb(addr); | ||
| 4374 | netif_rx_schedule(dev, &ring->napi); | ||
| 4375 | } else { | ||
| 4376 | rx_intr_handler(ring, 0); | ||
| 4377 | s2io_chk_rx_buffers(ring); | ||
| 4378 | } | ||
| 4349 | 4379 | ||
| 4350 | return IRQ_HANDLED; | 4380 | return IRQ_HANDLED; |
| 4351 | } | 4381 | } |
| 4352 | 4382 | ||
| 4353 | static irqreturn_t s2io_msix_fifo_handle(int irq, void *dev_id) | 4383 | static irqreturn_t s2io_msix_fifo_handle(int irq, void *dev_id) |
| 4354 | { | 4384 | { |
| 4355 | struct fifo_info *fifo = (struct fifo_info *)dev_id; | 4385 | int i; |
| 4356 | struct s2io_nic *sp = fifo->nic; | 4386 | struct fifo_info *fifos = (struct fifo_info *)dev_id; |
| 4387 | struct s2io_nic *sp = fifos->nic; | ||
| 4388 | struct XENA_dev_config __iomem *bar0 = sp->bar0; | ||
| 4389 | struct config_param *config = &sp->config; | ||
| 4390 | u64 reason; | ||
| 4357 | 4391 | ||
| 4358 | if (!is_s2io_card_up(sp)) | 4392 | if (unlikely(!is_s2io_card_up(sp))) |
| 4393 | return IRQ_NONE; | ||
| 4394 | |||
| 4395 | reason = readq(&bar0->general_int_status); | ||
| 4396 | if (unlikely(reason == S2IO_MINUS_ONE)) | ||
| 4397 | /* Nothing much can be done. Get out */ | ||
| 4359 | return IRQ_HANDLED; | 4398 | return IRQ_HANDLED; |
| 4360 | 4399 | ||
| 4361 | tx_intr_handler(fifo); | 4400 | writeq(S2IO_MINUS_ONE, &bar0->general_int_mask); |
| 4401 | |||
| 4402 | if (reason & GEN_INTR_TXTRAFFIC) | ||
| 4403 | writeq(S2IO_MINUS_ONE, &bar0->tx_traffic_int); | ||
| 4404 | |||
| 4405 | for (i = 0; i < config->tx_fifo_num; i++) | ||
| 4406 | tx_intr_handler(&fifos[i]); | ||
| 4407 | |||
| 4408 | writeq(sp->general_int_mask, &bar0->general_int_mask); | ||
| 4409 | readl(&bar0->general_int_status); | ||
| 4410 | |||
| 4362 | return IRQ_HANDLED; | 4411 | return IRQ_HANDLED; |
| 4363 | } | 4412 | } |
| 4413 | |||
| 4364 | static void s2io_txpic_intr_handle(struct s2io_nic *sp) | 4414 | static void s2io_txpic_intr_handle(struct s2io_nic *sp) |
| 4365 | { | 4415 | { |
| 4366 | struct XENA_dev_config __iomem *bar0 = sp->bar0; | 4416 | struct XENA_dev_config __iomem *bar0 = sp->bar0; |
| @@ -4762,14 +4812,10 @@ static irqreturn_t s2io_isr(int irq, void *dev_id) | |||
| 4762 | 4812 | ||
| 4763 | if (config->napi) { | 4813 | if (config->napi) { |
| 4764 | if (reason & GEN_INTR_RXTRAFFIC) { | 4814 | if (reason & GEN_INTR_RXTRAFFIC) { |
| 4765 | if (likely(netif_rx_schedule_prep(dev, | 4815 | netif_rx_schedule(dev, &sp->napi); |
| 4766 | &sp->napi))) { | 4816 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_mask); |
| 4767 | __netif_rx_schedule(dev, &sp->napi); | 4817 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); |
| 4768 | writeq(S2IO_MINUS_ONE, | 4818 | readl(&bar0->rx_traffic_int); |
| 4769 | &bar0->rx_traffic_mask); | ||
| 4770 | } else | ||
| 4771 | writeq(S2IO_MINUS_ONE, | ||
| 4772 | &bar0->rx_traffic_int); | ||
| 4773 | } | 4819 | } |
| 4774 | } else { | 4820 | } else { |
| 4775 | /* | 4821 | /* |
| @@ -4781,7 +4827,7 @@ static irqreturn_t s2io_isr(int irq, void *dev_id) | |||
| 4781 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); | 4827 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); |
| 4782 | 4828 | ||
| 4783 | for (i = 0; i < config->rx_ring_num; i++) | 4829 | for (i = 0; i < config->rx_ring_num; i++) |
| 4784 | rx_intr_handler(&mac_control->rings[i]); | 4830 | rx_intr_handler(&mac_control->rings[i], 0); |
| 4785 | } | 4831 | } |
| 4786 | 4832 | ||
| 4787 | /* | 4833 | /* |
| @@ -6984,62 +7030,62 @@ static int s2io_add_isr(struct s2io_nic * sp) | |||
| 6984 | 7030 | ||
| 6985 | /* After proper initialization of H/W, register ISR */ | 7031 | /* After proper initialization of H/W, register ISR */ |
| 6986 | if (sp->config.intr_type == MSI_X) { | 7032 | if (sp->config.intr_type == MSI_X) { |
| 6987 | int i, msix_tx_cnt=0,msix_rx_cnt=0; | 7033 | int i, msix_rx_cnt = 0; |
| 6988 | 7034 | ||
| 6989 | for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) { | 7035 | for (i = 0; i < sp->num_entries; i++) { |
| 6990 | if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) { | 7036 | if (sp->s2io_entries[i].in_use == MSIX_FLG) { |
| 6991 | sprintf(sp->desc[i], "%s:MSI-X-%d-TX", | 7037 | if (sp->s2io_entries[i].type == |
| 7038 | MSIX_RING_TYPE) { | ||
| 7039 | sprintf(sp->desc[i], "%s:MSI-X-%d-RX", | ||
| 7040 | dev->name, i); | ||
| 7041 | err = request_irq(sp->entries[i].vector, | ||
| 7042 | s2io_msix_ring_handle, 0, | ||
| 7043 | sp->desc[i], | ||
| 7044 | sp->s2io_entries[i].arg); | ||
| 7045 | } else if (sp->s2io_entries[i].type == | ||
| 7046 | MSIX_ALARM_TYPE) { | ||
| 7047 | sprintf(sp->desc[i], "%s:MSI-X-%d-TX", | ||
| 6992 | dev->name, i); | 7048 | dev->name, i); |
| 6993 | err = request_irq(sp->entries[i].vector, | 7049 | err = request_irq(sp->entries[i].vector, |
| 6994 | s2io_msix_fifo_handle, 0, sp->desc[i], | 7050 | s2io_msix_fifo_handle, 0, |
| 6995 | sp->s2io_entries[i].arg); | 7051 | sp->desc[i], |
| 6996 | /* If either data or addr is zero print it */ | 7052 | sp->s2io_entries[i].arg); |
| 6997 | if(!(sp->msix_info[i].addr && | 7053 | |
| 6998 | sp->msix_info[i].data)) { | ||
| 6999 | DBG_PRINT(ERR_DBG, "%s @ Addr:0x%llx " | ||
| 7000 | "Data:0x%llx\n",sp->desc[i], | ||
| 7001 | (unsigned long long) | ||
| 7002 | sp->msix_info[i].addr, | ||
| 7003 | (unsigned long long) | ||
| 7004 | sp->msix_info[i].data); | ||
| 7005 | } else { | ||
| 7006 | msix_tx_cnt++; | ||
| 7007 | } | 7054 | } |
| 7008 | } else { | 7055 | /* if either data or addr is zero print it. */ |
| 7009 | sprintf(sp->desc[i], "%s:MSI-X-%d-RX", | 7056 | if (!(sp->msix_info[i].addr && |
| 7010 | dev->name, i); | ||
| 7011 | err = request_irq(sp->entries[i].vector, | ||
| 7012 | s2io_msix_ring_handle, 0, sp->desc[i], | ||
| 7013 | sp->s2io_entries[i].arg); | ||
| 7014 | /* If either data or addr is zero print it */ | ||
| 7015 | if(!(sp->msix_info[i].addr && | ||
| 7016 | sp->msix_info[i].data)) { | 7057 | sp->msix_info[i].data)) { |
| 7017 | DBG_PRINT(ERR_DBG, "%s @ Addr:0x%llx " | 7058 | DBG_PRINT(ERR_DBG, |
| 7018 | "Data:0x%llx\n",sp->desc[i], | 7059 | "%s @Addr:0x%llx Data:0x%llx\n", |
| 7060 | sp->desc[i], | ||
| 7019 | (unsigned long long) | 7061 | (unsigned long long) |
| 7020 | sp->msix_info[i].addr, | 7062 | sp->msix_info[i].addr, |
| 7021 | (unsigned long long) | 7063 | (unsigned long long) |
| 7022 | sp->msix_info[i].data); | 7064 | ntohl(sp->msix_info[i].data)); |
| 7023 | } else { | 7065 | } else |
| 7024 | msix_rx_cnt++; | 7066 | msix_rx_cnt++; |
| 7067 | if (err) { | ||
| 7068 | remove_msix_isr(sp); | ||
| 7069 | |||
| 7070 | DBG_PRINT(ERR_DBG, | ||
| 7071 | "%s:MSI-X-%d registration " | ||
| 7072 | "failed\n", dev->name, i); | ||
| 7073 | |||
| 7074 | DBG_PRINT(ERR_DBG, | ||
| 7075 | "%s: Defaulting to INTA\n", | ||
| 7076 | dev->name); | ||
| 7077 | sp->config.intr_type = INTA; | ||
| 7078 | break; | ||
| 7025 | } | 7079 | } |
| 7080 | sp->s2io_entries[i].in_use = | ||
| 7081 | MSIX_REGISTERED_SUCCESS; | ||
| 7026 | } | 7082 | } |
| 7027 | if (err) { | ||
| 7028 | remove_msix_isr(sp); | ||
| 7029 | DBG_PRINT(ERR_DBG,"%s:MSI-X-%d registration " | ||
| 7030 | "failed\n", dev->name, i); | ||
| 7031 | DBG_PRINT(ERR_DBG, "%s: defaulting to INTA\n", | ||
| 7032 | dev->name); | ||
| 7033 | sp->config.intr_type = INTA; | ||
| 7034 | break; | ||
| 7035 | } | ||
| 7036 | sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS; | ||
| 7037 | } | 7083 | } |
| 7038 | if (!err) { | 7084 | if (!err) { |
| 7039 | printk(KERN_INFO "MSI-X-TX %d entries enabled\n", | ||
| 7040 | msix_tx_cnt); | ||
| 7041 | printk(KERN_INFO "MSI-X-RX %d entries enabled\n", | 7085 | printk(KERN_INFO "MSI-X-RX %d entries enabled\n", |
| 7042 | msix_rx_cnt); | 7086 | --msix_rx_cnt); |
| 7087 | DBG_PRINT(INFO_DBG, "MSI-X-TX entries enabled" | ||
| 7088 | " through alarm vector\n"); | ||
| 7043 | } | 7089 | } |
| 7044 | } | 7090 | } |
| 7045 | if (sp->config.intr_type == INTA) { | 7091 | if (sp->config.intr_type == INTA) { |
| @@ -7080,8 +7126,15 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io) | |||
| 7080 | clear_bit(__S2IO_STATE_CARD_UP, &sp->state); | 7126 | clear_bit(__S2IO_STATE_CARD_UP, &sp->state); |
| 7081 | 7127 | ||
| 7082 | /* Disable napi */ | 7128 | /* Disable napi */ |
| 7083 | if (config->napi) | 7129 | if (sp->config.napi) { |
| 7084 | napi_disable(&sp->napi); | 7130 | int off = 0; |
| 7131 | if (config->intr_type == MSI_X) { | ||
| 7132 | for (; off < sp->config.rx_ring_num; off++) | ||
| 7133 | napi_disable(&sp->mac_control.rings[off].napi); | ||
| 7134 | } | ||
| 7135 | else | ||
| 7136 | napi_disable(&sp->napi); | ||
| 7137 | } | ||
| 7085 | 7138 | ||
| 7086 | /* disable Tx and Rx traffic on the NIC */ | 7139 | /* disable Tx and Rx traffic on the NIC */ |
| 7087 | if (do_io) | 7140 | if (do_io) |
| @@ -7173,8 +7226,15 @@ static int s2io_card_up(struct s2io_nic * sp) | |||
| 7173 | } | 7226 | } |
| 7174 | 7227 | ||
| 7175 | /* Initialise napi */ | 7228 | /* Initialise napi */ |
| 7176 | if (config->napi) | 7229 | if (config->napi) { |
| 7177 | napi_enable(&sp->napi); | 7230 | int i; |
| 7231 | if (config->intr_type == MSI_X) { | ||
| 7232 | for (i = 0; i < sp->config.rx_ring_num; i++) | ||
| 7233 | napi_enable(&sp->mac_control.rings[i].napi); | ||
| 7234 | } else { | ||
| 7235 | napi_enable(&sp->napi); | ||
| 7236 | } | ||
| 7237 | } | ||
| 7178 | 7238 | ||
| 7179 | /* Maintain the state prior to the open */ | 7239 | /* Maintain the state prior to the open */ |
| 7180 | if (sp->promisc_flg) | 7240 | if (sp->promisc_flg) |
| @@ -7217,7 +7277,7 @@ static int s2io_card_up(struct s2io_nic * sp) | |||
| 7217 | /* Enable select interrupts */ | 7277 | /* Enable select interrupts */ |
| 7218 | en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS); | 7278 | en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS); |
| 7219 | if (sp->config.intr_type != INTA) | 7279 | if (sp->config.intr_type != INTA) |
| 7220 | en_dis_able_nic_intrs(sp, ENA_ALL_INTRS, DISABLE_INTRS); | 7280 | en_dis_able_nic_intrs(sp, TX_TRAFFIC_INTR, ENABLE_INTRS); |
| 7221 | else { | 7281 | else { |
| 7222 | interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR; | 7282 | interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR; |
| 7223 | interruptible |= TX_PIC_INTR; | 7283 | interruptible |= TX_PIC_INTR; |
| @@ -7615,9 +7675,6 @@ static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type, | |||
| 7615 | rx_ring_num = MAX_RX_RINGS; | 7675 | rx_ring_num = MAX_RX_RINGS; |
| 7616 | } | 7676 | } |
| 7617 | 7677 | ||
| 7618 | if (*dev_intr_type != INTA) | ||
| 7619 | napi = 0; | ||
| 7620 | |||
| 7621 | if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) { | 7678 | if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) { |
| 7622 | DBG_PRINT(ERR_DBG, "s2io: Wrong intr_type requested. " | 7679 | DBG_PRINT(ERR_DBG, "s2io: Wrong intr_type requested. " |
| 7623 | "Defaulting to INTA\n"); | 7680 | "Defaulting to INTA\n"); |
| @@ -7918,8 +7975,6 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 7918 | * will use eth_mac_addr() for dev->set_mac_address | 7975 | * will use eth_mac_addr() for dev->set_mac_address |
| 7919 | * mac address will be set every time dev->open() is called | 7976 | * mac address will be set every time dev->open() is called |
| 7920 | */ | 7977 | */ |
| 7921 | netif_napi_add(dev, &sp->napi, s2io_poll, 32); | ||
| 7922 | |||
| 7923 | #ifdef CONFIG_NET_POLL_CONTROLLER | 7978 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 7924 | dev->poll_controller = s2io_netpoll; | 7979 | dev->poll_controller = s2io_netpoll; |
| 7925 | #endif | 7980 | #endif |
| @@ -7963,6 +8018,32 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 7963 | } | 8018 | } |
| 7964 | } | 8019 | } |
| 7965 | 8020 | ||
| 8021 | if (sp->config.intr_type == MSI_X) { | ||
| 8022 | sp->num_entries = config->rx_ring_num + 1; | ||
| 8023 | ret = s2io_enable_msi_x(sp); | ||
| 8024 | |||
| 8025 | if (!ret) { | ||
| 8026 | ret = s2io_test_msi(sp); | ||
| 8027 | /* rollback MSI-X, will re-enable during add_isr() */ | ||
| 8028 | remove_msix_isr(sp); | ||
| 8029 | } | ||
| 8030 | if (ret) { | ||
| 8031 | |||
| 8032 | DBG_PRINT(ERR_DBG, | ||
| 8033 | "%s: MSI-X requested but failed to enable\n", | ||
| 8034 | dev->name); | ||
| 8035 | sp->config.intr_type = INTA; | ||
| 8036 | } | ||
| 8037 | } | ||
| 8038 | |||
| 8039 | if (config->intr_type == MSI_X) { | ||
| 8040 | for (i = 0; i < config->rx_ring_num ; i++) | ||
| 8041 | netif_napi_add(dev, &mac_control->rings[i].napi, | ||
| 8042 | s2io_poll_msix, 64); | ||
| 8043 | } else { | ||
| 8044 | netif_napi_add(dev, &sp->napi, s2io_poll_inta, 64); | ||
| 8045 | } | ||
| 8046 | |||
| 7966 | /* Not needed for Herc */ | 8047 | /* Not needed for Herc */ |
| 7967 | if (sp->device_type & XFRAME_I_DEVICE) { | 8048 | if (sp->device_type & XFRAME_I_DEVICE) { |
| 7968 | /* | 8049 | /* |
| @@ -8013,6 +8094,11 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 8013 | /* store mac addresses from CAM to s2io_nic structure */ | 8094 | /* store mac addresses from CAM to s2io_nic structure */ |
| 8014 | do_s2io_store_unicast_mc(sp); | 8095 | do_s2io_store_unicast_mc(sp); |
| 8015 | 8096 | ||
| 8097 | /* Configure MSIX vector for number of rings configured plus one */ | ||
| 8098 | if ((sp->device_type == XFRAME_II_DEVICE) && | ||
| 8099 | (config->intr_type == MSI_X)) | ||
| 8100 | sp->num_entries = config->rx_ring_num + 1; | ||
| 8101 | |||
| 8016 | /* Store the values of the MSIX table in the s2io_nic structure */ | 8102 | /* Store the values of the MSIX table in the s2io_nic structure */ |
| 8017 | store_xmsi_data(sp); | 8103 | store_xmsi_data(sp); |
| 8018 | /* reset Nic and bring it to known state */ | 8104 | /* reset Nic and bring it to known state */ |
| @@ -8078,8 +8164,14 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 8078 | break; | 8164 | break; |
| 8079 | } | 8165 | } |
| 8080 | 8166 | ||
| 8081 | if (napi) | 8167 | switch (sp->config.napi) { |
| 8168 | case 0: | ||
| 8169 | DBG_PRINT(ERR_DBG, "%s: NAPI disabled\n", dev->name); | ||
| 8170 | break; | ||
| 8171 | case 1: | ||
| 8082 | DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name); | 8172 | DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name); |
| 8173 | break; | ||
| 8174 | } | ||
| 8083 | 8175 | ||
| 8084 | DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name, | 8176 | DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name, |
| 8085 | sp->config.tx_fifo_num); | 8177 | sp->config.tx_fifo_num); |
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index 0709ebae9139..4706f7f9acb6 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h | |||
| @@ -706,7 +706,7 @@ struct ring_info { | |||
| 706 | /* per-ring buffer counter */ | 706 | /* per-ring buffer counter */ |
| 707 | u32 rx_bufs_left; | 707 | u32 rx_bufs_left; |
| 708 | 708 | ||
| 709 | #define MAX_LRO_SESSIONS 32 | 709 | #define MAX_LRO_SESSIONS 32 |
| 710 | struct lro lro0_n[MAX_LRO_SESSIONS]; | 710 | struct lro lro0_n[MAX_LRO_SESSIONS]; |
| 711 | u8 lro; | 711 | u8 lro; |
| 712 | 712 | ||
| @@ -725,6 +725,11 @@ struct ring_info { | |||
| 725 | /* copy of sp->pdev pointer */ | 725 | /* copy of sp->pdev pointer */ |
| 726 | struct pci_dev *pdev; | 726 | struct pci_dev *pdev; |
| 727 | 727 | ||
| 728 | /* Per ring napi struct */ | ||
| 729 | struct napi_struct napi; | ||
| 730 | |||
| 731 | unsigned long interrupt_count; | ||
| 732 | |||
| 728 | /* | 733 | /* |
| 729 | * Place holders for the virtual and physical addresses of | 734 | * Place holders for the virtual and physical addresses of |
| 730 | * all the Rx Blocks | 735 | * all the Rx Blocks |
| @@ -841,7 +846,7 @@ struct usr_addr { | |||
| 841 | * Structure to keep track of the MSI-X vectors and the corresponding | 846 | * Structure to keep track of the MSI-X vectors and the corresponding |
| 842 | * argument registered against each vector | 847 | * argument registered against each vector |
| 843 | */ | 848 | */ |
| 844 | #define MAX_REQUESTED_MSI_X 17 | 849 | #define MAX_REQUESTED_MSI_X 9 |
| 845 | struct s2io_msix_entry | 850 | struct s2io_msix_entry |
| 846 | { | 851 | { |
| 847 | u16 vector; | 852 | u16 vector; |
| @@ -849,8 +854,8 @@ struct s2io_msix_entry | |||
| 849 | void *arg; | 854 | void *arg; |
| 850 | 855 | ||
| 851 | u8 type; | 856 | u8 type; |
| 852 | #define MSIX_FIFO_TYPE 1 | 857 | #define MSIX_ALARM_TYPE 1 |
| 853 | #define MSIX_RING_TYPE 2 | 858 | #define MSIX_RING_TYPE 2 |
| 854 | 859 | ||
| 855 | u8 in_use; | 860 | u8 in_use; |
| 856 | #define MSIX_REGISTERED_SUCCESS 0xAA | 861 | #define MSIX_REGISTERED_SUCCESS 0xAA |
| @@ -877,7 +882,6 @@ struct s2io_nic { | |||
| 877 | */ | 882 | */ |
| 878 | int pkts_to_process; | 883 | int pkts_to_process; |
| 879 | struct net_device *dev; | 884 | struct net_device *dev; |
| 880 | struct napi_struct napi; | ||
| 881 | struct mac_info mac_control; | 885 | struct mac_info mac_control; |
| 882 | struct config_param config; | 886 | struct config_param config; |
| 883 | struct pci_dev *pdev; | 887 | struct pci_dev *pdev; |
| @@ -948,6 +952,7 @@ struct s2io_nic { | |||
| 948 | */ | 952 | */ |
| 949 | u8 other_fifo_idx; | 953 | u8 other_fifo_idx; |
| 950 | 954 | ||
| 955 | struct napi_struct napi; | ||
| 951 | /* after blink, the adapter must be restored with original | 956 | /* after blink, the adapter must be restored with original |
| 952 | * values. | 957 | * values. |
| 953 | */ | 958 | */ |
| @@ -962,6 +967,7 @@ struct s2io_nic { | |||
| 962 | unsigned long long start_time; | 967 | unsigned long long start_time; |
| 963 | struct vlan_group *vlgrp; | 968 | struct vlan_group *vlgrp; |
| 964 | #define MSIX_FLG 0xA5 | 969 | #define MSIX_FLG 0xA5 |
| 970 | int num_entries; | ||
| 965 | struct msix_entry *entries; | 971 | struct msix_entry *entries; |
| 966 | int msi_detected; | 972 | int msi_detected; |
| 967 | wait_queue_head_t msi_wait; | 973 | wait_queue_head_t msi_wait; |
| @@ -982,6 +988,7 @@ struct s2io_nic { | |||
| 982 | u16 lro_max_aggr_per_sess; | 988 | u16 lro_max_aggr_per_sess; |
| 983 | volatile unsigned long state; | 989 | volatile unsigned long state; |
| 984 | u64 general_int_mask; | 990 | u64 general_int_mask; |
| 991 | |||
| 985 | #define VPD_STRING_LEN 80 | 992 | #define VPD_STRING_LEN 80 |
| 986 | u8 product_name[VPD_STRING_LEN]; | 993 | u8 product_name[VPD_STRING_LEN]; |
| 987 | u8 serial_num[VPD_STRING_LEN]; | 994 | u8 serial_num[VPD_STRING_LEN]; |
| @@ -1103,7 +1110,7 @@ static void __devexit s2io_rem_nic(struct pci_dev *pdev); | |||
| 1103 | static int init_shared_mem(struct s2io_nic *sp); | 1110 | static int init_shared_mem(struct s2io_nic *sp); |
| 1104 | static void free_shared_mem(struct s2io_nic *sp); | 1111 | static void free_shared_mem(struct s2io_nic *sp); |
| 1105 | static int init_nic(struct s2io_nic *nic); | 1112 | static int init_nic(struct s2io_nic *nic); |
| 1106 | static void rx_intr_handler(struct ring_info *ring_data); | 1113 | static int rx_intr_handler(struct ring_info *ring_data, int budget); |
| 1107 | static void tx_intr_handler(struct fifo_info *fifo_data); | 1114 | static void tx_intr_handler(struct fifo_info *fifo_data); |
| 1108 | static void s2io_handle_errors(void * dev_id); | 1115 | static void s2io_handle_errors(void * dev_id); |
| 1109 | 1116 | ||
| @@ -1114,7 +1121,8 @@ static void s2io_set_multicast(struct net_device *dev); | |||
| 1114 | static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp); | 1121 | static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp); |
| 1115 | static void s2io_link(struct s2io_nic * sp, int link); | 1122 | static void s2io_link(struct s2io_nic * sp, int link); |
| 1116 | static void s2io_reset(struct s2io_nic * sp); | 1123 | static void s2io_reset(struct s2io_nic * sp); |
| 1117 | static int s2io_poll(struct napi_struct *napi, int budget); | 1124 | static int s2io_poll_msix(struct napi_struct *napi, int budget); |
| 1125 | static int s2io_poll_inta(struct napi_struct *napi, int budget); | ||
| 1118 | static void s2io_init_pci(struct s2io_nic * sp); | 1126 | static void s2io_init_pci(struct s2io_nic * sp); |
| 1119 | static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr); | 1127 | static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr); |
| 1120 | static void s2io_alarm_handle(unsigned long data); | 1128 | static void s2io_alarm_handle(unsigned long data); |
diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c index 888b7dec9866..33bb18f810fb 100644 --- a/drivers/net/sb1250-mac.c +++ b/drivers/net/sb1250-mac.c | |||
| @@ -179,8 +179,7 @@ enum sbmac_state { | |||
| 179 | #define SBMAC_MAX_TXDESCR 256 | 179 | #define SBMAC_MAX_TXDESCR 256 |
| 180 | #define SBMAC_MAX_RXDESCR 256 | 180 | #define SBMAC_MAX_RXDESCR 256 |
| 181 | 181 | ||
| 182 | #define ETHER_ALIGN 2 | 182 | #define ETHER_ADDR_LEN 6 |
| 183 | #define ETHER_ADDR_LEN 6 | ||
| 184 | #define ENET_PACKET_SIZE 1518 | 183 | #define ENET_PACKET_SIZE 1518 |
| 185 | /*#define ENET_PACKET_SIZE 9216 */ | 184 | /*#define ENET_PACKET_SIZE 9216 */ |
| 186 | 185 | ||
| @@ -262,8 +261,6 @@ struct sbmac_softc { | |||
| 262 | spinlock_t sbm_lock; /* spin lock */ | 261 | spinlock_t sbm_lock; /* spin lock */ |
| 263 | int sbm_devflags; /* current device flags */ | 262 | int sbm_devflags; /* current device flags */ |
| 264 | 263 | ||
| 265 | int sbm_buffersize; | ||
| 266 | |||
| 267 | /* | 264 | /* |
| 268 | * Controller-specific things | 265 | * Controller-specific things |
| 269 | */ | 266 | */ |
| @@ -305,10 +302,11 @@ struct sbmac_softc { | |||
| 305 | static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan, | 302 | static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan, |
| 306 | int txrx, int maxdescr); | 303 | int txrx, int maxdescr); |
| 307 | static void sbdma_channel_start(struct sbmacdma *d, int rxtx); | 304 | static void sbdma_channel_start(struct sbmacdma *d, int rxtx); |
| 308 | static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *m); | 305 | static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, |
| 306 | struct sk_buff *m); | ||
| 309 | static int sbdma_add_txbuffer(struct sbmacdma *d, struct sk_buff *m); | 307 | static int sbdma_add_txbuffer(struct sbmacdma *d, struct sk_buff *m); |
| 310 | static void sbdma_emptyring(struct sbmacdma *d); | 308 | static void sbdma_emptyring(struct sbmacdma *d); |
| 311 | static void sbdma_fillring(struct sbmacdma *d); | 309 | static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d); |
| 312 | static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, | 310 | static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
| 313 | int work_to_do, int poll); | 311 | int work_to_do, int poll); |
| 314 | static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, | 312 | static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
| @@ -777,16 +775,13 @@ static void sbdma_channel_stop(struct sbmacdma *d) | |||
| 777 | d->sbdma_remptr = NULL; | 775 | d->sbdma_remptr = NULL; |
| 778 | } | 776 | } |
| 779 | 777 | ||
| 780 | static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | 778 | static inline void sbdma_align_skb(struct sk_buff *skb, |
| 779 | unsigned int power2, unsigned int offset) | ||
| 781 | { | 780 | { |
| 782 | unsigned long addr; | 781 | unsigned char *addr = skb->data; |
| 783 | unsigned long newaddr; | 782 | unsigned char *newaddr = PTR_ALIGN(addr, power2); |
| 784 | |||
| 785 | addr = (unsigned long) skb->data; | ||
| 786 | |||
| 787 | newaddr = (addr + power2 - 1) & ~(power2 - 1); | ||
| 788 | 783 | ||
| 789 | skb_reserve(skb,newaddr-addr+offset); | 784 | skb_reserve(skb, newaddr - addr + offset); |
| 790 | } | 785 | } |
| 791 | 786 | ||
| 792 | 787 | ||
| @@ -797,7 +792,8 @@ static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | |||
| 797 | * this queues a buffer for inbound packets. | 792 | * this queues a buffer for inbound packets. |
| 798 | * | 793 | * |
| 799 | * Input parameters: | 794 | * Input parameters: |
| 800 | * d - DMA channel descriptor | 795 | * sc - softc structure |
| 796 | * d - DMA channel descriptor | ||
| 801 | * sb - sk_buff to add, or NULL if we should allocate one | 797 | * sb - sk_buff to add, or NULL if we should allocate one |
| 802 | * | 798 | * |
| 803 | * Return value: | 799 | * Return value: |
| @@ -806,8 +802,10 @@ static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | |||
| 806 | ********************************************************************* */ | 802 | ********************************************************************* */ |
| 807 | 803 | ||
| 808 | 804 | ||
| 809 | static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) | 805 | static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, |
| 806 | struct sk_buff *sb) | ||
| 810 | { | 807 | { |
| 808 | struct net_device *dev = sc->sbm_dev; | ||
| 811 | struct sbdmadscr *dsc; | 809 | struct sbdmadscr *dsc; |
| 812 | struct sbdmadscr *nextdsc; | 810 | struct sbdmadscr *nextdsc; |
| 813 | struct sk_buff *sb_new = NULL; | 811 | struct sk_buff *sb_new = NULL; |
| @@ -848,14 +846,16 @@ static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) | |||
| 848 | */ | 846 | */ |
| 849 | 847 | ||
| 850 | if (sb == NULL) { | 848 | if (sb == NULL) { |
| 851 | sb_new = dev_alloc_skb(ENET_PACKET_SIZE + SMP_CACHE_BYTES * 2 + ETHER_ALIGN); | 849 | sb_new = netdev_alloc_skb(dev, ENET_PACKET_SIZE + |
| 850 | SMP_CACHE_BYTES * 2 + | ||
| 851 | NET_IP_ALIGN); | ||
| 852 | if (sb_new == NULL) { | 852 | if (sb_new == NULL) { |
| 853 | pr_info("%s: sk_buff allocation failed\n", | 853 | pr_info("%s: sk_buff allocation failed\n", |
| 854 | d->sbdma_eth->sbm_dev->name); | 854 | d->sbdma_eth->sbm_dev->name); |
| 855 | return -ENOBUFS; | 855 | return -ENOBUFS; |
| 856 | } | 856 | } |
| 857 | 857 | ||
| 858 | sbdma_align_skb(sb_new, SMP_CACHE_BYTES, ETHER_ALIGN); | 858 | sbdma_align_skb(sb_new, SMP_CACHE_BYTES, NET_IP_ALIGN); |
| 859 | } | 859 | } |
| 860 | else { | 860 | else { |
| 861 | sb_new = sb; | 861 | sb_new = sb; |
| @@ -874,10 +874,10 @@ static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) | |||
| 874 | * Do not interrupt per DMA transfer. | 874 | * Do not interrupt per DMA transfer. |
| 875 | */ | 875 | */ |
| 876 | dsc->dscr_a = virt_to_phys(sb_new->data) | | 876 | dsc->dscr_a = virt_to_phys(sb_new->data) | |
| 877 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize+ETHER_ALIGN)) | 0; | 877 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize + NET_IP_ALIGN)) | 0; |
| 878 | #else | 878 | #else |
| 879 | dsc->dscr_a = virt_to_phys(sb_new->data) | | 879 | dsc->dscr_a = virt_to_phys(sb_new->data) | |
| 880 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize+ETHER_ALIGN)) | | 880 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize + NET_IP_ALIGN)) | |
| 881 | M_DMA_DSCRA_INTERRUPT; | 881 | M_DMA_DSCRA_INTERRUPT; |
| 882 | #endif | 882 | #endif |
| 883 | 883 | ||
| @@ -1032,18 +1032,19 @@ static void sbdma_emptyring(struct sbmacdma *d) | |||
| 1032 | * with sk_buffs | 1032 | * with sk_buffs |
| 1033 | * | 1033 | * |
| 1034 | * Input parameters: | 1034 | * Input parameters: |
| 1035 | * d - DMA channel | 1035 | * sc - softc structure |
| 1036 | * d - DMA channel | ||
| 1036 | * | 1037 | * |
| 1037 | * Return value: | 1038 | * Return value: |
| 1038 | * nothing | 1039 | * nothing |
| 1039 | ********************************************************************* */ | 1040 | ********************************************************************* */ |
| 1040 | 1041 | ||
| 1041 | static void sbdma_fillring(struct sbmacdma *d) | 1042 | static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d) |
| 1042 | { | 1043 | { |
| 1043 | int idx; | 1044 | int idx; |
| 1044 | 1045 | ||
| 1045 | for (idx = 0; idx < SBMAC_MAX_RXDESCR-1; idx++) { | 1046 | for (idx = 0; idx < SBMAC_MAX_RXDESCR - 1; idx++) { |
| 1046 | if (sbdma_add_rcvbuffer(d,NULL) != 0) | 1047 | if (sbdma_add_rcvbuffer(sc, d, NULL) != 0) |
| 1047 | break; | 1048 | break; |
| 1048 | } | 1049 | } |
| 1049 | } | 1050 | } |
| @@ -1159,10 +1160,11 @@ again: | |||
| 1159 | * packet and put it right back on the receive ring. | 1160 | * packet and put it right back on the receive ring. |
| 1160 | */ | 1161 | */ |
| 1161 | 1162 | ||
| 1162 | if (unlikely (sbdma_add_rcvbuffer(d,NULL) == | 1163 | if (unlikely(sbdma_add_rcvbuffer(sc, d, NULL) == |
| 1163 | -ENOBUFS)) { | 1164 | -ENOBUFS)) { |
| 1164 | dev->stats.rx_dropped++; | 1165 | dev->stats.rx_dropped++; |
| 1165 | sbdma_add_rcvbuffer(d,sb); /* re-add old buffer */ | 1166 | /* Re-add old buffer */ |
| 1167 | sbdma_add_rcvbuffer(sc, d, sb); | ||
| 1166 | /* No point in continuing at the moment */ | 1168 | /* No point in continuing at the moment */ |
| 1167 | printk(KERN_ERR "dropped packet (1)\n"); | 1169 | printk(KERN_ERR "dropped packet (1)\n"); |
| 1168 | d->sbdma_remptr = SBDMA_NEXTBUF(d,sbdma_remptr); | 1170 | d->sbdma_remptr = SBDMA_NEXTBUF(d,sbdma_remptr); |
| @@ -1212,7 +1214,7 @@ again: | |||
| 1212 | * put it back on the receive ring. | 1214 | * put it back on the receive ring. |
| 1213 | */ | 1215 | */ |
| 1214 | dev->stats.rx_errors++; | 1216 | dev->stats.rx_errors++; |
| 1215 | sbdma_add_rcvbuffer(d,sb); | 1217 | sbdma_add_rcvbuffer(sc, d, sb); |
| 1216 | } | 1218 | } |
| 1217 | 1219 | ||
| 1218 | 1220 | ||
| @@ -1570,7 +1572,7 @@ static void sbmac_channel_start(struct sbmac_softc *s) | |||
| 1570 | * Fill the receive ring | 1572 | * Fill the receive ring |
| 1571 | */ | 1573 | */ |
| 1572 | 1574 | ||
| 1573 | sbdma_fillring(&(s->sbm_rxdma)); | 1575 | sbdma_fillring(s, &(s->sbm_rxdma)); |
| 1574 | 1576 | ||
| 1575 | /* | 1577 | /* |
| 1576 | * Turn on the rest of the bits in the enable register | 1578 | * Turn on the rest of the bits in the enable register |
| @@ -2312,13 +2314,6 @@ static int sbmac_init(struct platform_device *pldev, long long base) | |||
| 2312 | dev->dev_addr[i] = eaddr[i]; | 2314 | dev->dev_addr[i] = eaddr[i]; |
| 2313 | } | 2315 | } |
| 2314 | 2316 | ||
| 2315 | |||
| 2316 | /* | ||
| 2317 | * Init packet size | ||
| 2318 | */ | ||
| 2319 | |||
| 2320 | sc->sbm_buffersize = ENET_PACKET_SIZE + SMP_CACHE_BYTES * 2 + ETHER_ALIGN; | ||
| 2321 | |||
| 2322 | /* | 2317 | /* |
| 2323 | * Initialize context (get pointers to registers and stuff), then | 2318 | * Initialize context (get pointers to registers and stuff), then |
| 2324 | * allocate the memory for the descriptor tables. | 2319 | * allocate the memory for the descriptor tables. |
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c index f64a860029b7..b4b63805ee8f 100644 --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c | |||
| @@ -953,9 +953,6 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 953 | unsigned entry; | 953 | unsigned entry; |
| 954 | u32 tx_status; | 954 | u32 tx_status; |
| 955 | 955 | ||
| 956 | if (skb_padto(skb, ETH_ZLEN)) | ||
| 957 | return NETDEV_TX_OK; | ||
| 958 | |||
| 959 | if (unlikely(skb->len > TX_BUF_SIZE)) { | 956 | if (unlikely(skb->len > TX_BUF_SIZE)) { |
| 960 | dev->stats.tx_dropped++; | 957 | dev->stats.tx_dropped++; |
| 961 | goto out; | 958 | goto out; |
| @@ -975,6 +972,11 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 975 | skb_copy_and_csum_dev(skb, priv->tx_bufs + entry * TX_BUF_SIZE); | 972 | skb_copy_and_csum_dev(skb, priv->tx_bufs + entry * TX_BUF_SIZE); |
| 976 | 973 | ||
| 977 | len = skb->len; | 974 | len = skb->len; |
| 975 | if (unlikely(len < ETH_ZLEN)) { | ||
| 976 | memset(priv->tx_bufs + entry * TX_BUF_SIZE + len, | ||
| 977 | 0, ETH_ZLEN - len); | ||
| 978 | len = ETH_ZLEN; | ||
| 979 | } | ||
| 978 | 980 | ||
| 979 | wmb(); | 981 | wmb(); |
| 980 | 982 | ||
diff --git a/drivers/net/sfc/bitfield.h b/drivers/net/sfc/bitfield.h index 2806201644cc..2c79d27404e0 100644 --- a/drivers/net/sfc/bitfield.h +++ b/drivers/net/sfc/bitfield.h | |||
| @@ -483,7 +483,7 @@ typedef union efx_oword { | |||
| 483 | #endif | 483 | #endif |
| 484 | 484 | ||
| 485 | #define EFX_SET_OWORD_FIELD_VER(efx, oword, field, value) do { \ | 485 | #define EFX_SET_OWORD_FIELD_VER(efx, oword, field, value) do { \ |
| 486 | if (FALCON_REV(efx) >= FALCON_REV_B0) { \ | 486 | if (falcon_rev(efx) >= FALCON_REV_B0) { \ |
| 487 | EFX_SET_OWORD_FIELD((oword), field##_B0, (value)); \ | 487 | EFX_SET_OWORD_FIELD((oword), field##_B0, (value)); \ |
| 488 | } else { \ | 488 | } else { \ |
| 489 | EFX_SET_OWORD_FIELD((oword), field##_A1, (value)); \ | 489 | EFX_SET_OWORD_FIELD((oword), field##_A1, (value)); \ |
| @@ -491,7 +491,7 @@ typedef union efx_oword { | |||
| 491 | } while (0) | 491 | } while (0) |
| 492 | 492 | ||
| 493 | #define EFX_QWORD_FIELD_VER(efx, qword, field) \ | 493 | #define EFX_QWORD_FIELD_VER(efx, qword, field) \ |
| 494 | (FALCON_REV(efx) >= FALCON_REV_B0 ? \ | 494 | (falcon_rev(efx) >= FALCON_REV_B0 ? \ |
| 495 | EFX_QWORD_FIELD((qword), field##_B0) : \ | 495 | EFX_QWORD_FIELD((qword), field##_B0) : \ |
| 496 | EFX_QWORD_FIELD((qword), field##_A1)) | 496 | EFX_QWORD_FIELD((qword), field##_A1)) |
| 497 | 497 | ||
| @@ -501,8 +501,5 @@ typedef union efx_oword { | |||
| 501 | #define DMA_ADDR_T_WIDTH (8 * sizeof(dma_addr_t)) | 501 | #define DMA_ADDR_T_WIDTH (8 * sizeof(dma_addr_t)) |
| 502 | #define EFX_DMA_TYPE_WIDTH(width) \ | 502 | #define EFX_DMA_TYPE_WIDTH(width) \ |
| 503 | (((width) < DMA_ADDR_T_WIDTH) ? (width) : DMA_ADDR_T_WIDTH) | 503 | (((width) < DMA_ADDR_T_WIDTH) ? (width) : DMA_ADDR_T_WIDTH) |
| 504 | #define EFX_DMA_MAX_MASK ((DMA_ADDR_T_WIDTH == 64) ? \ | ||
| 505 | ~((u64) 0) : ~((u32) 0)) | ||
| 506 | #define EFX_DMA_MASK(mask) ((mask) & EFX_DMA_MAX_MASK) | ||
| 507 | 504 | ||
| 508 | #endif /* EFX_BITFIELD_H */ | 505 | #endif /* EFX_BITFIELD_H */ |
diff --git a/drivers/net/sfc/boards.c b/drivers/net/sfc/boards.c index eecaa6d58584..7fc0328dc055 100644 --- a/drivers/net/sfc/boards.c +++ b/drivers/net/sfc/boards.c | |||
| @@ -27,10 +27,8 @@ static void blink_led_timer(unsigned long context) | |||
| 27 | struct efx_blinker *bl = &efx->board_info.blinker; | 27 | struct efx_blinker *bl = &efx->board_info.blinker; |
| 28 | efx->board_info.set_fault_led(efx, bl->state); | 28 | efx->board_info.set_fault_led(efx, bl->state); |
| 29 | bl->state = !bl->state; | 29 | bl->state = !bl->state; |
| 30 | if (bl->resubmit) { | 30 | if (bl->resubmit) |
| 31 | bl->timer.expires = jiffies + BLINK_INTERVAL; | 31 | mod_timer(&bl->timer, jiffies + BLINK_INTERVAL); |
| 32 | add_timer(&bl->timer); | ||
| 33 | } | ||
| 34 | } | 32 | } |
| 35 | 33 | ||
| 36 | static void board_blink(struct efx_nic *efx, int blink) | 34 | static void board_blink(struct efx_nic *efx, int blink) |
| @@ -44,8 +42,7 @@ static void board_blink(struct efx_nic *efx, int blink) | |||
| 44 | blinker->state = 0; | 42 | blinker->state = 0; |
| 45 | setup_timer(&blinker->timer, blink_led_timer, | 43 | setup_timer(&blinker->timer, blink_led_timer, |
| 46 | (unsigned long)efx); | 44 | (unsigned long)efx); |
| 47 | blinker->timer.expires = jiffies + BLINK_INTERVAL; | 45 | mod_timer(&blinker->timer, jiffies + BLINK_INTERVAL); |
| 48 | add_timer(&blinker->timer); | ||
| 49 | } else { | 46 | } else { |
| 50 | blinker->resubmit = 0; | 47 | blinker->resubmit = 0; |
| 51 | if (blinker->timer.function) | 48 | if (blinker->timer.function) |
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c index 418f2e53a95b..449760642e31 100644 --- a/drivers/net/sfc/efx.c +++ b/drivers/net/sfc/efx.c | |||
| @@ -199,11 +199,12 @@ static inline int efx_process_channel(struct efx_channel *channel, int rx_quota) | |||
| 199 | */ | 199 | */ |
| 200 | static inline void efx_channel_processed(struct efx_channel *channel) | 200 | static inline void efx_channel_processed(struct efx_channel *channel) |
| 201 | { | 201 | { |
| 202 | /* Write to EVQ_RPTR_REG. If a new event arrived in a race | 202 | /* The interrupt handler for this channel may set work_pending |
| 203 | * with finishing processing, a new interrupt will be raised. | 203 | * as soon as we acknowledge the events we've seen. Make sure |
| 204 | */ | 204 | * it's cleared before then. */ |
| 205 | channel->work_pending = 0; | 205 | channel->work_pending = 0; |
| 206 | smp_wmb(); /* Ensure channel updated before any new interrupt. */ | 206 | smp_wmb(); |
| 207 | |||
| 207 | falcon_eventq_read_ack(channel); | 208 | falcon_eventq_read_ack(channel); |
| 208 | } | 209 | } |
| 209 | 210 | ||
| @@ -265,7 +266,7 @@ void efx_process_channel_now(struct efx_channel *channel) | |||
| 265 | napi_disable(&channel->napi_str); | 266 | napi_disable(&channel->napi_str); |
| 266 | 267 | ||
| 267 | /* Poll the channel */ | 268 | /* Poll the channel */ |
| 268 | (void) efx_process_channel(channel, efx->type->evq_size); | 269 | efx_process_channel(channel, efx->type->evq_size); |
| 269 | 270 | ||
| 270 | /* Ack the eventq. This may cause an interrupt to be generated | 271 | /* Ack the eventq. This may cause an interrupt to be generated |
| 271 | * when they are reenabled */ | 272 | * when they are reenabled */ |
| @@ -317,26 +318,6 @@ static void efx_remove_eventq(struct efx_channel *channel) | |||
| 317 | * | 318 | * |
| 318 | *************************************************************************/ | 319 | *************************************************************************/ |
| 319 | 320 | ||
| 320 | /* Setup per-NIC RX buffer parameters. | ||
| 321 | * Calculate the rx buffer allocation parameters required to support | ||
| 322 | * the current MTU, including padding for header alignment and overruns. | ||
| 323 | */ | ||
| 324 | static void efx_calc_rx_buffer_params(struct efx_nic *efx) | ||
| 325 | { | ||
| 326 | unsigned int order, len; | ||
| 327 | |||
| 328 | len = (max(EFX_PAGE_IP_ALIGN, NET_IP_ALIGN) + | ||
| 329 | EFX_MAX_FRAME_LEN(efx->net_dev->mtu) + | ||
| 330 | efx->type->rx_buffer_padding); | ||
| 331 | |||
| 332 | /* Calculate page-order */ | ||
| 333 | for (order = 0; ((1u << order) * PAGE_SIZE) < len; ++order) | ||
| 334 | ; | ||
| 335 | |||
| 336 | efx->rx_buffer_len = len; | ||
| 337 | efx->rx_buffer_order = order; | ||
| 338 | } | ||
| 339 | |||
| 340 | static int efx_probe_channel(struct efx_channel *channel) | 321 | static int efx_probe_channel(struct efx_channel *channel) |
| 341 | { | 322 | { |
| 342 | struct efx_tx_queue *tx_queue; | 323 | struct efx_tx_queue *tx_queue; |
| @@ -387,7 +368,14 @@ static int efx_init_channels(struct efx_nic *efx) | |||
| 387 | struct efx_channel *channel; | 368 | struct efx_channel *channel; |
| 388 | int rc = 0; | 369 | int rc = 0; |
| 389 | 370 | ||
| 390 | efx_calc_rx_buffer_params(efx); | 371 | /* Calculate the rx buffer allocation parameters required to |
| 372 | * support the current MTU, including padding for header | ||
| 373 | * alignment and overruns. | ||
| 374 | */ | ||
| 375 | efx->rx_buffer_len = (max(EFX_PAGE_IP_ALIGN, NET_IP_ALIGN) + | ||
| 376 | EFX_MAX_FRAME_LEN(efx->net_dev->mtu) + | ||
| 377 | efx->type->rx_buffer_padding); | ||
| 378 | efx->rx_buffer_order = get_order(efx->rx_buffer_len); | ||
| 391 | 379 | ||
| 392 | /* Initialise the channels */ | 380 | /* Initialise the channels */ |
| 393 | efx_for_each_channel(channel, efx) { | 381 | efx_for_each_channel(channel, efx) { |
| @@ -440,9 +428,12 @@ static void efx_start_channel(struct efx_channel *channel) | |||
| 440 | netif_napi_add(channel->napi_dev, &channel->napi_str, | 428 | netif_napi_add(channel->napi_dev, &channel->napi_str, |
| 441 | efx_poll, napi_weight); | 429 | efx_poll, napi_weight); |
| 442 | 430 | ||
| 431 | /* The interrupt handler for this channel may set work_pending | ||
| 432 | * as soon as we enable it. Make sure it's cleared before | ||
| 433 | * then. Similarly, make sure it sees the enabled flag set. */ | ||
| 443 | channel->work_pending = 0; | 434 | channel->work_pending = 0; |
| 444 | channel->enabled = 1; | 435 | channel->enabled = 1; |
| 445 | smp_wmb(); /* ensure channel updated before first interrupt */ | 436 | smp_wmb(); |
| 446 | 437 | ||
| 447 | napi_enable(&channel->napi_str); | 438 | napi_enable(&channel->napi_str); |
| 448 | 439 | ||
| @@ -704,7 +695,7 @@ static void efx_stop_port(struct efx_nic *efx) | |||
| 704 | mutex_unlock(&efx->mac_lock); | 695 | mutex_unlock(&efx->mac_lock); |
| 705 | 696 | ||
| 706 | /* Serialise against efx_set_multicast_list() */ | 697 | /* Serialise against efx_set_multicast_list() */ |
| 707 | if (NET_DEV_REGISTERED(efx)) { | 698 | if (efx_dev_registered(efx)) { |
| 708 | netif_tx_lock_bh(efx->net_dev); | 699 | netif_tx_lock_bh(efx->net_dev); |
| 709 | netif_tx_unlock_bh(efx->net_dev); | 700 | netif_tx_unlock_bh(efx->net_dev); |
| 710 | } | 701 | } |
| @@ -791,22 +782,23 @@ static int efx_init_io(struct efx_nic *efx) | |||
| 791 | efx->membase = ioremap_nocache(efx->membase_phys, | 782 | efx->membase = ioremap_nocache(efx->membase_phys, |
| 792 | efx->type->mem_map_size); | 783 | efx->type->mem_map_size); |
| 793 | if (!efx->membase) { | 784 | if (!efx->membase) { |
| 794 | EFX_ERR(efx, "could not map memory BAR %d at %lx+%x\n", | 785 | EFX_ERR(efx, "could not map memory BAR %d at %llx+%x\n", |
| 795 | efx->type->mem_bar, efx->membase_phys, | 786 | efx->type->mem_bar, |
| 787 | (unsigned long long)efx->membase_phys, | ||
| 796 | efx->type->mem_map_size); | 788 | efx->type->mem_map_size); |
| 797 | rc = -ENOMEM; | 789 | rc = -ENOMEM; |
| 798 | goto fail4; | 790 | goto fail4; |
| 799 | } | 791 | } |
| 800 | EFX_LOG(efx, "memory BAR %u at %lx+%x (virtual %p)\n", | 792 | EFX_LOG(efx, "memory BAR %u at %llx+%x (virtual %p)\n", |
| 801 | efx->type->mem_bar, efx->membase_phys, efx->type->mem_map_size, | 793 | efx->type->mem_bar, (unsigned long long)efx->membase_phys, |
| 802 | efx->membase); | 794 | efx->type->mem_map_size, efx->membase); |
| 803 | 795 | ||
| 804 | return 0; | 796 | return 0; |
| 805 | 797 | ||
| 806 | fail4: | 798 | fail4: |
| 807 | release_mem_region(efx->membase_phys, efx->type->mem_map_size); | 799 | release_mem_region(efx->membase_phys, efx->type->mem_map_size); |
| 808 | fail3: | 800 | fail3: |
| 809 | efx->membase_phys = 0UL; | 801 | efx->membase_phys = 0; |
| 810 | fail2: | 802 | fail2: |
| 811 | pci_disable_device(efx->pci_dev); | 803 | pci_disable_device(efx->pci_dev); |
| 812 | fail1: | 804 | fail1: |
| @@ -824,7 +816,7 @@ static void efx_fini_io(struct efx_nic *efx) | |||
| 824 | 816 | ||
| 825 | if (efx->membase_phys) { | 817 | if (efx->membase_phys) { |
| 826 | pci_release_region(efx->pci_dev, efx->type->mem_bar); | 818 | pci_release_region(efx->pci_dev, efx->type->mem_bar); |
| 827 | efx->membase_phys = 0UL; | 819 | efx->membase_phys = 0; |
| 828 | } | 820 | } |
| 829 | 821 | ||
| 830 | pci_disable_device(efx->pci_dev); | 822 | pci_disable_device(efx->pci_dev); |
| @@ -1043,7 +1035,7 @@ static void efx_start_all(struct efx_nic *efx) | |||
| 1043 | return; | 1035 | return; |
| 1044 | if ((efx->state != STATE_RUNNING) && (efx->state != STATE_INIT)) | 1036 | if ((efx->state != STATE_RUNNING) && (efx->state != STATE_INIT)) |
| 1045 | return; | 1037 | return; |
| 1046 | if (NET_DEV_REGISTERED(efx) && !netif_running(efx->net_dev)) | 1038 | if (efx_dev_registered(efx) && !netif_running(efx->net_dev)) |
| 1047 | return; | 1039 | return; |
| 1048 | 1040 | ||
| 1049 | /* Mark the port as enabled so port reconfigurations can start, then | 1041 | /* Mark the port as enabled so port reconfigurations can start, then |
| @@ -1073,9 +1065,8 @@ static void efx_flush_all(struct efx_nic *efx) | |||
| 1073 | cancel_delayed_work_sync(&efx->monitor_work); | 1065 | cancel_delayed_work_sync(&efx->monitor_work); |
| 1074 | 1066 | ||
| 1075 | /* Ensure that all RX slow refills are complete. */ | 1067 | /* Ensure that all RX slow refills are complete. */ |
| 1076 | efx_for_each_rx_queue(rx_queue, efx) { | 1068 | efx_for_each_rx_queue(rx_queue, efx) |
| 1077 | cancel_delayed_work_sync(&rx_queue->work); | 1069 | cancel_delayed_work_sync(&rx_queue->work); |
| 1078 | } | ||
| 1079 | 1070 | ||
| 1080 | /* Stop scheduled port reconfigurations */ | 1071 | /* Stop scheduled port reconfigurations */ |
| 1081 | cancel_work_sync(&efx->reconfigure_work); | 1072 | cancel_work_sync(&efx->reconfigure_work); |
| @@ -1101,9 +1092,10 @@ static void efx_stop_all(struct efx_nic *efx) | |||
| 1101 | falcon_disable_interrupts(efx); | 1092 | falcon_disable_interrupts(efx); |
| 1102 | if (efx->legacy_irq) | 1093 | if (efx->legacy_irq) |
| 1103 | synchronize_irq(efx->legacy_irq); | 1094 | synchronize_irq(efx->legacy_irq); |
| 1104 | efx_for_each_channel_with_interrupt(channel, efx) | 1095 | efx_for_each_channel_with_interrupt(channel, efx) { |
| 1105 | if (channel->irq) | 1096 | if (channel->irq) |
| 1106 | synchronize_irq(channel->irq); | 1097 | synchronize_irq(channel->irq); |
| 1098 | } | ||
| 1107 | 1099 | ||
| 1108 | /* Stop all NAPI processing and synchronous rx refills */ | 1100 | /* Stop all NAPI processing and synchronous rx refills */ |
| 1109 | efx_for_each_channel(channel, efx) | 1101 | efx_for_each_channel(channel, efx) |
| @@ -1125,7 +1117,7 @@ static void efx_stop_all(struct efx_nic *efx) | |||
| 1125 | /* Stop the kernel transmit interface late, so the watchdog | 1117 | /* Stop the kernel transmit interface late, so the watchdog |
| 1126 | * timer isn't ticking over the flush */ | 1118 | * timer isn't ticking over the flush */ |
| 1127 | efx_stop_queue(efx); | 1119 | efx_stop_queue(efx); |
| 1128 | if (NET_DEV_REGISTERED(efx)) { | 1120 | if (efx_dev_registered(efx)) { |
| 1129 | netif_tx_lock_bh(efx->net_dev); | 1121 | netif_tx_lock_bh(efx->net_dev); |
| 1130 | netif_tx_unlock_bh(efx->net_dev); | 1122 | netif_tx_unlock_bh(efx->net_dev); |
| 1131 | } | 1123 | } |
| @@ -1344,13 +1336,17 @@ static int efx_net_stop(struct net_device *net_dev) | |||
| 1344 | return 0; | 1336 | return 0; |
| 1345 | } | 1337 | } |
| 1346 | 1338 | ||
| 1347 | /* Context: process, dev_base_lock held, non-blocking. */ | 1339 | /* Context: process, dev_base_lock or RTNL held, non-blocking. */ |
| 1348 | static struct net_device_stats *efx_net_stats(struct net_device *net_dev) | 1340 | static struct net_device_stats *efx_net_stats(struct net_device *net_dev) |
| 1349 | { | 1341 | { |
| 1350 | struct efx_nic *efx = net_dev->priv; | 1342 | struct efx_nic *efx = net_dev->priv; |
| 1351 | struct efx_mac_stats *mac_stats = &efx->mac_stats; | 1343 | struct efx_mac_stats *mac_stats = &efx->mac_stats; |
| 1352 | struct net_device_stats *stats = &net_dev->stats; | 1344 | struct net_device_stats *stats = &net_dev->stats; |
| 1353 | 1345 | ||
| 1346 | /* Update stats if possible, but do not wait if another thread | ||
| 1347 | * is updating them (or resetting the NIC); slightly stale | ||
| 1348 | * stats are acceptable. | ||
| 1349 | */ | ||
| 1354 | if (!spin_trylock(&efx->stats_lock)) | 1350 | if (!spin_trylock(&efx->stats_lock)) |
| 1355 | return stats; | 1351 | return stats; |
| 1356 | if (efx->state == STATE_RUNNING) { | 1352 | if (efx->state == STATE_RUNNING) { |
| @@ -1494,7 +1490,7 @@ static void efx_set_multicast_list(struct net_device *net_dev) | |||
| 1494 | static int efx_netdev_event(struct notifier_block *this, | 1490 | static int efx_netdev_event(struct notifier_block *this, |
| 1495 | unsigned long event, void *ptr) | 1491 | unsigned long event, void *ptr) |
| 1496 | { | 1492 | { |
| 1497 | struct net_device *net_dev = (struct net_device *)ptr; | 1493 | struct net_device *net_dev = ptr; |
| 1498 | 1494 | ||
| 1499 | if (net_dev->open == efx_net_open && event == NETDEV_CHANGENAME) { | 1495 | if (net_dev->open == efx_net_open && event == NETDEV_CHANGENAME) { |
| 1500 | struct efx_nic *efx = net_dev->priv; | 1496 | struct efx_nic *efx = net_dev->priv; |
| @@ -1563,7 +1559,7 @@ static void efx_unregister_netdev(struct efx_nic *efx) | |||
| 1563 | efx_for_each_tx_queue(tx_queue, efx) | 1559 | efx_for_each_tx_queue(tx_queue, efx) |
| 1564 | efx_release_tx_buffers(tx_queue); | 1560 | efx_release_tx_buffers(tx_queue); |
| 1565 | 1561 | ||
| 1566 | if (NET_DEV_REGISTERED(efx)) { | 1562 | if (efx_dev_registered(efx)) { |
| 1567 | strlcpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name)); | 1563 | strlcpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name)); |
| 1568 | unregister_netdev(efx->net_dev); | 1564 | unregister_netdev(efx->net_dev); |
| 1569 | } | 1565 | } |
| @@ -1688,7 +1684,7 @@ static int efx_reset(struct efx_nic *efx) | |||
| 1688 | if (method == RESET_TYPE_DISABLE) { | 1684 | if (method == RESET_TYPE_DISABLE) { |
| 1689 | /* Reinitialise the device anyway so the driver unload sequence | 1685 | /* Reinitialise the device anyway so the driver unload sequence |
| 1690 | * can talk to the external SRAM */ | 1686 | * can talk to the external SRAM */ |
| 1691 | (void) falcon_init_nic(efx); | 1687 | falcon_init_nic(efx); |
| 1692 | rc = -EIO; | 1688 | rc = -EIO; |
| 1693 | goto fail4; | 1689 | goto fail4; |
| 1694 | } | 1690 | } |
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c index b57cc68058c0..d3f749c72d41 100644 --- a/drivers/net/sfc/falcon.c +++ b/drivers/net/sfc/falcon.c | |||
| @@ -116,17 +116,8 @@ MODULE_PARM_DESC(rx_xon_thresh_bytes, "RX fifo XON threshold"); | |||
| 116 | ************************************************************************** | 116 | ************************************************************************** |
| 117 | */ | 117 | */ |
| 118 | 118 | ||
| 119 | /* DMA address mask (up to 46-bit, avoiding compiler warnings) | 119 | /* DMA address mask */ |
| 120 | * | 120 | #define FALCON_DMA_MASK DMA_BIT_MASK(46) |
| 121 | * Note that it is possible to have a platform with 64-bit longs and | ||
| 122 | * 32-bit DMA addresses, or vice versa. EFX_DMA_MASK takes care of the | ||
| 123 | * platform DMA mask. | ||
| 124 | */ | ||
| 125 | #if BITS_PER_LONG == 64 | ||
| 126 | #define FALCON_DMA_MASK EFX_DMA_MASK(0x00003fffffffffffUL) | ||
| 127 | #else | ||
| 128 | #define FALCON_DMA_MASK EFX_DMA_MASK(0x00003fffffffffffULL) | ||
| 129 | #endif | ||
| 130 | 121 | ||
| 131 | /* TX DMA length mask (13-bit) */ | 122 | /* TX DMA length mask (13-bit) */ |
| 132 | #define FALCON_TX_DMA_MASK (4096 - 1) | 123 | #define FALCON_TX_DMA_MASK (4096 - 1) |
| @@ -145,7 +136,7 @@ MODULE_PARM_DESC(rx_xon_thresh_bytes, "RX fifo XON threshold"); | |||
| 145 | #define PCI_EXP_LNKSTA_LNK_WID_LBN 4 | 136 | #define PCI_EXP_LNKSTA_LNK_WID_LBN 4 |
| 146 | 137 | ||
| 147 | #define FALCON_IS_DUAL_FUNC(efx) \ | 138 | #define FALCON_IS_DUAL_FUNC(efx) \ |
| 148 | (FALCON_REV(efx) < FALCON_REV_B0) | 139 | (falcon_rev(efx) < FALCON_REV_B0) |
| 149 | 140 | ||
| 150 | /************************************************************************** | 141 | /************************************************************************** |
| 151 | * | 142 | * |
| @@ -465,7 +456,7 @@ int falcon_init_tx(struct efx_tx_queue *tx_queue) | |||
| 465 | TX_DESCQ_TYPE, 0, | 456 | TX_DESCQ_TYPE, 0, |
| 466 | TX_NON_IP_DROP_DIS_B0, 1); | 457 | TX_NON_IP_DROP_DIS_B0, 1); |
| 467 | 458 | ||
| 468 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 459 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 469 | int csum = !(efx->net_dev->features & NETIF_F_IP_CSUM); | 460 | int csum = !(efx->net_dev->features & NETIF_F_IP_CSUM); |
| 470 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_IP_CHKSM_DIS_B0, csum); | 461 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_IP_CHKSM_DIS_B0, csum); |
| 471 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_TCP_CHKSM_DIS_B0, csum); | 462 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_TCP_CHKSM_DIS_B0, csum); |
| @@ -474,7 +465,7 @@ int falcon_init_tx(struct efx_tx_queue *tx_queue) | |||
| 474 | falcon_write_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, | 465 | falcon_write_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, |
| 475 | tx_queue->queue); | 466 | tx_queue->queue); |
| 476 | 467 | ||
| 477 | if (FALCON_REV(efx) < FALCON_REV_B0) { | 468 | if (falcon_rev(efx) < FALCON_REV_B0) { |
| 478 | efx_oword_t reg; | 469 | efx_oword_t reg; |
| 479 | 470 | ||
| 480 | BUG_ON(tx_queue->queue >= 128); /* HW limit */ | 471 | BUG_ON(tx_queue->queue >= 128); /* HW limit */ |
| @@ -635,7 +626,7 @@ int falcon_init_rx(struct efx_rx_queue *rx_queue) | |||
| 635 | efx_oword_t rx_desc_ptr; | 626 | efx_oword_t rx_desc_ptr; |
| 636 | struct efx_nic *efx = rx_queue->efx; | 627 | struct efx_nic *efx = rx_queue->efx; |
| 637 | int rc; | 628 | int rc; |
| 638 | int is_b0 = FALCON_REV(efx) >= FALCON_REV_B0; | 629 | int is_b0 = falcon_rev(efx) >= FALCON_REV_B0; |
| 639 | int iscsi_digest_en = is_b0; | 630 | int iscsi_digest_en = is_b0; |
| 640 | 631 | ||
| 641 | EFX_LOG(efx, "RX queue %d ring in special buffers %d-%d\n", | 632 | EFX_LOG(efx, "RX queue %d ring in special buffers %d-%d\n", |
| @@ -822,10 +813,10 @@ static inline void falcon_handle_tx_event(struct efx_channel *channel, | |||
| 822 | tx_ev_q_label = EFX_QWORD_FIELD(*event, TX_EV_Q_LABEL); | 813 | tx_ev_q_label = EFX_QWORD_FIELD(*event, TX_EV_Q_LABEL); |
| 823 | tx_queue = &efx->tx_queue[tx_ev_q_label]; | 814 | tx_queue = &efx->tx_queue[tx_ev_q_label]; |
| 824 | 815 | ||
| 825 | if (NET_DEV_REGISTERED(efx)) | 816 | if (efx_dev_registered(efx)) |
| 826 | netif_tx_lock(efx->net_dev); | 817 | netif_tx_lock(efx->net_dev); |
| 827 | falcon_notify_tx_desc(tx_queue); | 818 | falcon_notify_tx_desc(tx_queue); |
| 828 | if (NET_DEV_REGISTERED(efx)) | 819 | if (efx_dev_registered(efx)) |
| 829 | netif_tx_unlock(efx->net_dev); | 820 | netif_tx_unlock(efx->net_dev); |
| 830 | } else if (EFX_QWORD_FIELD(*event, TX_EV_PKT_ERR) && | 821 | } else if (EFX_QWORD_FIELD(*event, TX_EV_PKT_ERR) && |
| 831 | EFX_WORKAROUND_10727(efx)) { | 822 | EFX_WORKAROUND_10727(efx)) { |
| @@ -884,7 +875,7 @@ static void falcon_handle_rx_not_ok(struct efx_rx_queue *rx_queue, | |||
| 884 | RX_EV_TCP_UDP_CHKSUM_ERR); | 875 | RX_EV_TCP_UDP_CHKSUM_ERR); |
| 885 | rx_ev_eth_crc_err = EFX_QWORD_FIELD(*event, RX_EV_ETH_CRC_ERR); | 876 | rx_ev_eth_crc_err = EFX_QWORD_FIELD(*event, RX_EV_ETH_CRC_ERR); |
| 886 | rx_ev_frm_trunc = EFX_QWORD_FIELD(*event, RX_EV_FRM_TRUNC); | 877 | rx_ev_frm_trunc = EFX_QWORD_FIELD(*event, RX_EV_FRM_TRUNC); |
| 887 | rx_ev_drib_nib = ((FALCON_REV(efx) >= FALCON_REV_B0) ? | 878 | rx_ev_drib_nib = ((falcon_rev(efx) >= FALCON_REV_B0) ? |
| 888 | 0 : EFX_QWORD_FIELD(*event, RX_EV_DRIB_NIB)); | 879 | 0 : EFX_QWORD_FIELD(*event, RX_EV_DRIB_NIB)); |
| 889 | rx_ev_pause_frm = EFX_QWORD_FIELD(*event, RX_EV_PAUSE_FRM_ERR); | 880 | rx_ev_pause_frm = EFX_QWORD_FIELD(*event, RX_EV_PAUSE_FRM_ERR); |
| 890 | 881 | ||
| @@ -1065,7 +1056,7 @@ static void falcon_handle_global_event(struct efx_channel *channel, | |||
| 1065 | EFX_QWORD_FIELD(*event, XG_PHY_INTR)) | 1056 | EFX_QWORD_FIELD(*event, XG_PHY_INTR)) |
| 1066 | is_phy_event = 1; | 1057 | is_phy_event = 1; |
| 1067 | 1058 | ||
| 1068 | if ((FALCON_REV(efx) >= FALCON_REV_B0) && | 1059 | if ((falcon_rev(efx) >= FALCON_REV_B0) && |
| 1069 | EFX_OWORD_FIELD(*event, XG_MNT_INTR_B0)) | 1060 | EFX_OWORD_FIELD(*event, XG_MNT_INTR_B0)) |
| 1070 | is_phy_event = 1; | 1061 | is_phy_event = 1; |
| 1071 | 1062 | ||
| @@ -1405,7 +1396,7 @@ static inline void falcon_irq_ack_a1(struct efx_nic *efx) | |||
| 1405 | static irqreturn_t falcon_fatal_interrupt(struct efx_nic *efx) | 1396 | static irqreturn_t falcon_fatal_interrupt(struct efx_nic *efx) |
| 1406 | { | 1397 | { |
| 1407 | struct falcon_nic_data *nic_data = efx->nic_data; | 1398 | struct falcon_nic_data *nic_data = efx->nic_data; |
| 1408 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1399 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1409 | efx_oword_t fatal_intr; | 1400 | efx_oword_t fatal_intr; |
| 1410 | int error, mem_perr; | 1401 | int error, mem_perr; |
| 1411 | static int n_int_errors; | 1402 | static int n_int_errors; |
| @@ -1451,8 +1442,8 @@ out: | |||
| 1451 | */ | 1442 | */ |
| 1452 | static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) | 1443 | static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) |
| 1453 | { | 1444 | { |
| 1454 | struct efx_nic *efx = (struct efx_nic *)dev_id; | 1445 | struct efx_nic *efx = dev_id; |
| 1455 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1446 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1456 | struct efx_channel *channel; | 1447 | struct efx_channel *channel; |
| 1457 | efx_dword_t reg; | 1448 | efx_dword_t reg; |
| 1458 | u32 queues; | 1449 | u32 queues; |
| @@ -1489,8 +1480,8 @@ static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) | |||
| 1489 | 1480 | ||
| 1490 | static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) | 1481 | static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) |
| 1491 | { | 1482 | { |
| 1492 | struct efx_nic *efx = (struct efx_nic *)dev_id; | 1483 | struct efx_nic *efx = dev_id; |
| 1493 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1484 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1494 | struct efx_channel *channel; | 1485 | struct efx_channel *channel; |
| 1495 | int syserr; | 1486 | int syserr; |
| 1496 | int queues; | 1487 | int queues; |
| @@ -1542,9 +1533,9 @@ static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) | |||
| 1542 | */ | 1533 | */ |
| 1543 | static irqreturn_t falcon_msi_interrupt(int irq, void *dev_id) | 1534 | static irqreturn_t falcon_msi_interrupt(int irq, void *dev_id) |
| 1544 | { | 1535 | { |
| 1545 | struct efx_channel *channel = (struct efx_channel *)dev_id; | 1536 | struct efx_channel *channel = dev_id; |
| 1546 | struct efx_nic *efx = channel->efx; | 1537 | struct efx_nic *efx = channel->efx; |
| 1547 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1538 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1548 | int syserr; | 1539 | int syserr; |
| 1549 | 1540 | ||
| 1550 | efx->last_irq_cpu = raw_smp_processor_id(); | 1541 | efx->last_irq_cpu = raw_smp_processor_id(); |
| @@ -1572,7 +1563,7 @@ static void falcon_setup_rss_indir_table(struct efx_nic *efx) | |||
| 1572 | unsigned long offset; | 1563 | unsigned long offset; |
| 1573 | efx_dword_t dword; | 1564 | efx_dword_t dword; |
| 1574 | 1565 | ||
| 1575 | if (FALCON_REV(efx) < FALCON_REV_B0) | 1566 | if (falcon_rev(efx) < FALCON_REV_B0) |
| 1576 | return; | 1567 | return; |
| 1577 | 1568 | ||
| 1578 | for (offset = RX_RSS_INDIR_TBL_B0; | 1569 | for (offset = RX_RSS_INDIR_TBL_B0; |
| @@ -1595,7 +1586,7 @@ int falcon_init_interrupt(struct efx_nic *efx) | |||
| 1595 | 1586 | ||
| 1596 | if (!EFX_INT_MODE_USE_MSI(efx)) { | 1587 | if (!EFX_INT_MODE_USE_MSI(efx)) { |
| 1597 | irq_handler_t handler; | 1588 | irq_handler_t handler; |
| 1598 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 1589 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 1599 | handler = falcon_legacy_interrupt_b0; | 1590 | handler = falcon_legacy_interrupt_b0; |
| 1600 | else | 1591 | else |
| 1601 | handler = falcon_legacy_interrupt_a1; | 1592 | handler = falcon_legacy_interrupt_a1; |
| @@ -1636,12 +1627,13 @@ void falcon_fini_interrupt(struct efx_nic *efx) | |||
| 1636 | efx_oword_t reg; | 1627 | efx_oword_t reg; |
| 1637 | 1628 | ||
| 1638 | /* Disable MSI/MSI-X interrupts */ | 1629 | /* Disable MSI/MSI-X interrupts */ |
| 1639 | efx_for_each_channel_with_interrupt(channel, efx) | 1630 | efx_for_each_channel_with_interrupt(channel, efx) { |
| 1640 | if (channel->irq) | 1631 | if (channel->irq) |
| 1641 | free_irq(channel->irq, channel); | 1632 | free_irq(channel->irq, channel); |
| 1633 | } | ||
| 1642 | 1634 | ||
| 1643 | /* ACK legacy interrupt */ | 1635 | /* ACK legacy interrupt */ |
| 1644 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 1636 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 1645 | falcon_read(efx, ®, INT_ISR0_B0); | 1637 | falcon_read(efx, ®, INT_ISR0_B0); |
| 1646 | else | 1638 | else |
| 1647 | falcon_irq_ack_a1(efx); | 1639 | falcon_irq_ack_a1(efx); |
| @@ -1732,7 +1724,7 @@ void falcon_drain_tx_fifo(struct efx_nic *efx) | |||
| 1732 | efx_oword_t temp; | 1724 | efx_oword_t temp; |
| 1733 | int count; | 1725 | int count; |
| 1734 | 1726 | ||
| 1735 | if ((FALCON_REV(efx) < FALCON_REV_B0) || | 1727 | if ((falcon_rev(efx) < FALCON_REV_B0) || |
| 1736 | (efx->loopback_mode != LOOPBACK_NONE)) | 1728 | (efx->loopback_mode != LOOPBACK_NONE)) |
| 1737 | return; | 1729 | return; |
| 1738 | 1730 | ||
| @@ -1785,7 +1777,7 @@ void falcon_deconfigure_mac_wrapper(struct efx_nic *efx) | |||
| 1785 | { | 1777 | { |
| 1786 | efx_oword_t temp; | 1778 | efx_oword_t temp; |
| 1787 | 1779 | ||
| 1788 | if (FALCON_REV(efx) < FALCON_REV_B0) | 1780 | if (falcon_rev(efx) < FALCON_REV_B0) |
| 1789 | return; | 1781 | return; |
| 1790 | 1782 | ||
| 1791 | /* Isolate the MAC -> RX */ | 1783 | /* Isolate the MAC -> RX */ |
| @@ -1823,7 +1815,7 @@ void falcon_reconfigure_mac_wrapper(struct efx_nic *efx) | |||
| 1823 | MAC_SPEED, link_speed); | 1815 | MAC_SPEED, link_speed); |
| 1824 | /* On B0, MAC backpressure can be disabled and packets get | 1816 | /* On B0, MAC backpressure can be disabled and packets get |
| 1825 | * discarded. */ | 1817 | * discarded. */ |
| 1826 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 1818 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 1827 | EFX_SET_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0, | 1819 | EFX_SET_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0, |
| 1828 | !efx->link_up); | 1820 | !efx->link_up); |
| 1829 | } | 1821 | } |
| @@ -1841,7 +1833,7 @@ void falcon_reconfigure_mac_wrapper(struct efx_nic *efx) | |||
| 1841 | EFX_SET_OWORD_FIELD_VER(efx, reg, RX_XOFF_MAC_EN, tx_fc); | 1833 | EFX_SET_OWORD_FIELD_VER(efx, reg, RX_XOFF_MAC_EN, tx_fc); |
| 1842 | 1834 | ||
| 1843 | /* Unisolate the MAC -> RX */ | 1835 | /* Unisolate the MAC -> RX */ |
| 1844 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 1836 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 1845 | EFX_SET_OWORD_FIELD(reg, RX_INGR_EN_B0, 1); | 1837 | EFX_SET_OWORD_FIELD(reg, RX_INGR_EN_B0, 1); |
| 1846 | falcon_write(efx, ®, RX_CFG_REG_KER); | 1838 | falcon_write(efx, ®, RX_CFG_REG_KER); |
| 1847 | } | 1839 | } |
| @@ -1856,7 +1848,7 @@ int falcon_dma_stats(struct efx_nic *efx, unsigned int done_offset) | |||
| 1856 | return 0; | 1848 | return 0; |
| 1857 | 1849 | ||
| 1858 | /* Statistics fetch will fail if the MAC is in TX drain */ | 1850 | /* Statistics fetch will fail if the MAC is in TX drain */ |
| 1859 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 1851 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 1860 | efx_oword_t temp; | 1852 | efx_oword_t temp; |
| 1861 | falcon_read(efx, &temp, MAC0_CTRL_REG_KER); | 1853 | falcon_read(efx, &temp, MAC0_CTRL_REG_KER); |
| 1862 | if (EFX_OWORD_FIELD(temp, TXFIFO_DRAIN_EN_B0)) | 1854 | if (EFX_OWORD_FIELD(temp, TXFIFO_DRAIN_EN_B0)) |
| @@ -1940,7 +1932,7 @@ static int falcon_gmii_wait(struct efx_nic *efx) | |||
| 1940 | static void falcon_mdio_write(struct net_device *net_dev, int phy_id, | 1932 | static void falcon_mdio_write(struct net_device *net_dev, int phy_id, |
| 1941 | int addr, int value) | 1933 | int addr, int value) |
| 1942 | { | 1934 | { |
| 1943 | struct efx_nic *efx = (struct efx_nic *)net_dev->priv; | 1935 | struct efx_nic *efx = net_dev->priv; |
| 1944 | unsigned int phy_id2 = phy_id & FALCON_PHY_ID_ID_MASK; | 1936 | unsigned int phy_id2 = phy_id & FALCON_PHY_ID_ID_MASK; |
| 1945 | efx_oword_t reg; | 1937 | efx_oword_t reg; |
| 1946 | 1938 | ||
| @@ -2008,7 +2000,7 @@ static void falcon_mdio_write(struct net_device *net_dev, int phy_id, | |||
| 2008 | * could be read, -1 will be returned. */ | 2000 | * could be read, -1 will be returned. */ |
| 2009 | static int falcon_mdio_read(struct net_device *net_dev, int phy_id, int addr) | 2001 | static int falcon_mdio_read(struct net_device *net_dev, int phy_id, int addr) |
| 2010 | { | 2002 | { |
| 2011 | struct efx_nic *efx = (struct efx_nic *)net_dev->priv; | 2003 | struct efx_nic *efx = net_dev->priv; |
| 2012 | unsigned int phy_addr = phy_id & FALCON_PHY_ID_ID_MASK; | 2004 | unsigned int phy_addr = phy_id & FALCON_PHY_ID_ID_MASK; |
| 2013 | efx_oword_t reg; | 2005 | efx_oword_t reg; |
| 2014 | int value = -1; | 2006 | int value = -1; |
| @@ -2113,7 +2105,7 @@ int falcon_probe_port(struct efx_nic *efx) | |||
| 2113 | falcon_init_mdio(&efx->mii); | 2105 | falcon_init_mdio(&efx->mii); |
| 2114 | 2106 | ||
| 2115 | /* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */ | 2107 | /* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */ |
| 2116 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 2108 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 2117 | efx->flow_control = EFX_FC_RX | EFX_FC_TX; | 2109 | efx->flow_control = EFX_FC_RX | EFX_FC_TX; |
| 2118 | else | 2110 | else |
| 2119 | efx->flow_control = EFX_FC_RX; | 2111 | efx->flow_control = EFX_FC_RX; |
| @@ -2373,7 +2365,7 @@ static int falcon_probe_nic_variant(struct efx_nic *efx) | |||
| 2373 | return -ENODEV; | 2365 | return -ENODEV; |
| 2374 | } | 2366 | } |
| 2375 | 2367 | ||
| 2376 | switch (FALCON_REV(efx)) { | 2368 | switch (falcon_rev(efx)) { |
| 2377 | case FALCON_REV_A0: | 2369 | case FALCON_REV_A0: |
| 2378 | case 0xff: | 2370 | case 0xff: |
| 2379 | EFX_ERR(efx, "Falcon rev A0 not supported\n"); | 2371 | EFX_ERR(efx, "Falcon rev A0 not supported\n"); |
| @@ -2399,7 +2391,7 @@ static int falcon_probe_nic_variant(struct efx_nic *efx) | |||
| 2399 | break; | 2391 | break; |
| 2400 | 2392 | ||
| 2401 | default: | 2393 | default: |
| 2402 | EFX_ERR(efx, "Unknown Falcon rev %d\n", FALCON_REV(efx)); | 2394 | EFX_ERR(efx, "Unknown Falcon rev %d\n", falcon_rev(efx)); |
| 2403 | return -ENODEV; | 2395 | return -ENODEV; |
| 2404 | } | 2396 | } |
| 2405 | 2397 | ||
| @@ -2419,7 +2411,7 @@ int falcon_probe_nic(struct efx_nic *efx) | |||
| 2419 | 2411 | ||
| 2420 | /* Allocate storage for hardware specific data */ | 2412 | /* Allocate storage for hardware specific data */ |
| 2421 | nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL); | 2413 | nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL); |
| 2422 | efx->nic_data = (void *) nic_data; | 2414 | efx->nic_data = nic_data; |
| 2423 | 2415 | ||
| 2424 | /* Determine number of ports etc. */ | 2416 | /* Determine number of ports etc. */ |
| 2425 | rc = falcon_probe_nic_variant(efx); | 2417 | rc = falcon_probe_nic_variant(efx); |
| @@ -2489,13 +2481,10 @@ int falcon_probe_nic(struct efx_nic *efx) | |||
| 2489 | */ | 2481 | */ |
| 2490 | int falcon_init_nic(struct efx_nic *efx) | 2482 | int falcon_init_nic(struct efx_nic *efx) |
| 2491 | { | 2483 | { |
| 2492 | struct falcon_nic_data *data; | ||
| 2493 | efx_oword_t temp; | 2484 | efx_oword_t temp; |
| 2494 | unsigned thresh; | 2485 | unsigned thresh; |
| 2495 | int rc; | 2486 | int rc; |
| 2496 | 2487 | ||
| 2497 | data = (struct falcon_nic_data *)efx->nic_data; | ||
| 2498 | |||
| 2499 | /* Set up the address region register. This is only needed | 2488 | /* Set up the address region register. This is only needed |
| 2500 | * for the B0 FPGA, but since we are just pushing in the | 2489 | * for the B0 FPGA, but since we are just pushing in the |
| 2501 | * reset defaults this may as well be unconditional. */ | 2490 | * reset defaults this may as well be unconditional. */ |
| @@ -2562,7 +2551,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2562 | 2551 | ||
| 2563 | /* Set number of RSS queues for receive path. */ | 2552 | /* Set number of RSS queues for receive path. */ |
| 2564 | falcon_read(efx, &temp, RX_FILTER_CTL_REG); | 2553 | falcon_read(efx, &temp, RX_FILTER_CTL_REG); |
| 2565 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 2554 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 2566 | EFX_SET_OWORD_FIELD(temp, NUM_KER, 0); | 2555 | EFX_SET_OWORD_FIELD(temp, NUM_KER, 0); |
| 2567 | else | 2556 | else |
| 2568 | EFX_SET_OWORD_FIELD(temp, NUM_KER, efx->rss_queues - 1); | 2557 | EFX_SET_OWORD_FIELD(temp, NUM_KER, efx->rss_queues - 1); |
| @@ -2600,7 +2589,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2600 | /* Prefetch threshold 2 => fetch when descriptor cache half empty */ | 2589 | /* Prefetch threshold 2 => fetch when descriptor cache half empty */ |
| 2601 | EFX_SET_OWORD_FIELD(temp, TX_PREF_THRESHOLD, 2); | 2590 | EFX_SET_OWORD_FIELD(temp, TX_PREF_THRESHOLD, 2); |
| 2602 | /* Squash TX of packets of 16 bytes or less */ | 2591 | /* Squash TX of packets of 16 bytes or less */ |
| 2603 | if (FALCON_REV(efx) >= FALCON_REV_B0 && EFX_WORKAROUND_9141(efx)) | 2592 | if (falcon_rev(efx) >= FALCON_REV_B0 && EFX_WORKAROUND_9141(efx)) |
| 2604 | EFX_SET_OWORD_FIELD(temp, TX_FLUSH_MIN_LEN_EN_B0, 1); | 2593 | EFX_SET_OWORD_FIELD(temp, TX_FLUSH_MIN_LEN_EN_B0, 1); |
| 2605 | falcon_write(efx, &temp, TX_CFG2_REG_KER); | 2594 | falcon_write(efx, &temp, TX_CFG2_REG_KER); |
| 2606 | 2595 | ||
| @@ -2617,7 +2606,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2617 | if (EFX_WORKAROUND_7575(efx)) | 2606 | if (EFX_WORKAROUND_7575(efx)) |
| 2618 | EFX_SET_OWORD_FIELD_VER(efx, temp, RX_USR_BUF_SIZE, | 2607 | EFX_SET_OWORD_FIELD_VER(efx, temp, RX_USR_BUF_SIZE, |
| 2619 | (3 * 4096) / 32); | 2608 | (3 * 4096) / 32); |
| 2620 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 2609 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 2621 | EFX_SET_OWORD_FIELD(temp, RX_INGR_EN_B0, 1); | 2610 | EFX_SET_OWORD_FIELD(temp, RX_INGR_EN_B0, 1); |
| 2622 | 2611 | ||
| 2623 | /* RX FIFO flow control thresholds */ | 2612 | /* RX FIFO flow control thresholds */ |
| @@ -2633,7 +2622,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2633 | falcon_write(efx, &temp, RX_CFG_REG_KER); | 2622 | falcon_write(efx, &temp, RX_CFG_REG_KER); |
| 2634 | 2623 | ||
| 2635 | /* Set destination of both TX and RX Flush events */ | 2624 | /* Set destination of both TX and RX Flush events */ |
| 2636 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 2625 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 2637 | EFX_POPULATE_OWORD_1(temp, FLS_EVQ_ID, 0); | 2626 | EFX_POPULATE_OWORD_1(temp, FLS_EVQ_ID, 0); |
| 2638 | falcon_write(efx, &temp, DP_CTRL_REG); | 2627 | falcon_write(efx, &temp, DP_CTRL_REG); |
| 2639 | } | 2628 | } |
| @@ -2647,7 +2636,7 @@ void falcon_remove_nic(struct efx_nic *efx) | |||
| 2647 | 2636 | ||
| 2648 | falcon_free_buffer(efx, &efx->irq_status); | 2637 | falcon_free_buffer(efx, &efx->irq_status); |
| 2649 | 2638 | ||
| 2650 | (void) falcon_reset_hw(efx, RESET_TYPE_ALL); | 2639 | falcon_reset_hw(efx, RESET_TYPE_ALL); |
| 2651 | 2640 | ||
| 2652 | /* Release the second function after the reset */ | 2641 | /* Release the second function after the reset */ |
| 2653 | if (nic_data->pci_dev2) { | 2642 | if (nic_data->pci_dev2) { |
diff --git a/drivers/net/sfc/falcon.h b/drivers/net/sfc/falcon.h index 6117403b0c03..492f9bc28840 100644 --- a/drivers/net/sfc/falcon.h +++ b/drivers/net/sfc/falcon.h | |||
| @@ -23,7 +23,10 @@ enum falcon_revision { | |||
| 23 | FALCON_REV_B0 = 2, | 23 | FALCON_REV_B0 = 2, |
| 24 | }; | 24 | }; |
| 25 | 25 | ||
| 26 | #define FALCON_REV(efx) ((efx)->pci_dev->revision) | 26 | static inline int falcon_rev(struct efx_nic *efx) |
| 27 | { | ||
| 28 | return efx->pci_dev->revision; | ||
| 29 | } | ||
| 27 | 30 | ||
| 28 | extern struct efx_nic_type falcon_a_nic_type; | 31 | extern struct efx_nic_type falcon_a_nic_type; |
| 29 | extern struct efx_nic_type falcon_b_nic_type; | 32 | extern struct efx_nic_type falcon_b_nic_type; |
diff --git a/drivers/net/sfc/falcon_hwdefs.h b/drivers/net/sfc/falcon_hwdefs.h index 06e2d68fc3d1..6d003114eeab 100644 --- a/drivers/net/sfc/falcon_hwdefs.h +++ b/drivers/net/sfc/falcon_hwdefs.h | |||
| @@ -1125,7 +1125,7 @@ struct falcon_nvconfig_board_v2 { | |||
| 1125 | u8 port1_phy_type; | 1125 | u8 port1_phy_type; |
| 1126 | __le16 asic_sub_revision; | 1126 | __le16 asic_sub_revision; |
| 1127 | __le16 board_revision; | 1127 | __le16 board_revision; |
| 1128 | } __attribute__ ((packed)); | 1128 | } __packed; |
| 1129 | 1129 | ||
| 1130 | #define NVCONFIG_BASE 0x300 | 1130 | #define NVCONFIG_BASE 0x300 |
| 1131 | #define NVCONFIG_BOARD_MAGIC_NUM 0xFA1C | 1131 | #define NVCONFIG_BOARD_MAGIC_NUM 0xFA1C |
| @@ -1144,6 +1144,6 @@ struct falcon_nvconfig { | |||
| 1144 | __le16 board_struct_ver; | 1144 | __le16 board_struct_ver; |
| 1145 | __le16 board_checksum; | 1145 | __le16 board_checksum; |
| 1146 | struct falcon_nvconfig_board_v2 board_v2; | 1146 | struct falcon_nvconfig_board_v2 board_v2; |
| 1147 | } __attribute__ ((packed)); | 1147 | } __packed; |
| 1148 | 1148 | ||
| 1149 | #endif /* EFX_FALCON_HWDEFS_H */ | 1149 | #endif /* EFX_FALCON_HWDEFS_H */ |
diff --git a/drivers/net/sfc/falcon_io.h b/drivers/net/sfc/falcon_io.h index ea08184ddfa9..6670cdfc41ab 100644 --- a/drivers/net/sfc/falcon_io.h +++ b/drivers/net/sfc/falcon_io.h | |||
| @@ -56,14 +56,27 @@ | |||
| 56 | #define FALCON_USE_QWORD_IO 1 | 56 | #define FALCON_USE_QWORD_IO 1 |
| 57 | #endif | 57 | #endif |
| 58 | 58 | ||
| 59 | #define _falcon_writeq(efx, value, reg) \ | 59 | #ifdef FALCON_USE_QWORD_IO |
| 60 | __raw_writeq((__force u64) (value), (efx)->membase + (reg)) | 60 | static inline void _falcon_writeq(struct efx_nic *efx, __le64 value, |
| 61 | #define _falcon_writel(efx, value, reg) \ | 61 | unsigned int reg) |
| 62 | __raw_writel((__force u32) (value), (efx)->membase + (reg)) | 62 | { |
| 63 | #define _falcon_readq(efx, reg) \ | 63 | __raw_writeq((__force u64)value, efx->membase + reg); |
| 64 | ((__force __le64) __raw_readq((efx)->membase + (reg))) | 64 | } |
| 65 | #define _falcon_readl(efx, reg) \ | 65 | static inline __le64 _falcon_readq(struct efx_nic *efx, unsigned int reg) |
| 66 | ((__force __le32) __raw_readl((efx)->membase + (reg))) | 66 | { |
| 67 | return (__force __le64)__raw_readq(efx->membase + reg); | ||
| 68 | } | ||
| 69 | #endif | ||
| 70 | |||
| 71 | static inline void _falcon_writel(struct efx_nic *efx, __le32 value, | ||
| 72 | unsigned int reg) | ||
| 73 | { | ||
| 74 | __raw_writel((__force u32)value, efx->membase + reg); | ||
| 75 | } | ||
| 76 | static inline __le32 _falcon_readl(struct efx_nic *efx, unsigned int reg) | ||
| 77 | { | ||
| 78 | return (__force __le32)__raw_readl(efx->membase + reg); | ||
| 79 | } | ||
| 67 | 80 | ||
| 68 | /* Writes to a normal 16-byte Falcon register, locking as appropriate. */ | 81 | /* Writes to a normal 16-byte Falcon register, locking as appropriate. */ |
| 69 | static inline void falcon_write(struct efx_nic *efx, efx_oword_t *value, | 82 | static inline void falcon_write(struct efx_nic *efx, efx_oword_t *value, |
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c index a74b7931a3c4..dbdcee4b0f8d 100644 --- a/drivers/net/sfc/falcon_xmac.c +++ b/drivers/net/sfc/falcon_xmac.c | |||
| @@ -221,7 +221,7 @@ static int falcon_xgmii_status(struct efx_nic *efx) | |||
| 221 | { | 221 | { |
| 222 | efx_dword_t reg; | 222 | efx_dword_t reg; |
| 223 | 223 | ||
| 224 | if (FALCON_REV(efx) < FALCON_REV_B0) | 224 | if (falcon_rev(efx) < FALCON_REV_B0) |
| 225 | return 1; | 225 | return 1; |
| 226 | 226 | ||
| 227 | /* The ISR latches, so clear it and re-read */ | 227 | /* The ISR latches, so clear it and re-read */ |
| @@ -241,7 +241,7 @@ static void falcon_mask_status_intr(struct efx_nic *efx, int enable) | |||
| 241 | { | 241 | { |
| 242 | efx_dword_t reg; | 242 | efx_dword_t reg; |
| 243 | 243 | ||
| 244 | if ((FALCON_REV(efx) < FALCON_REV_B0) || LOOPBACK_INTERNAL(efx)) | 244 | if ((falcon_rev(efx) < FALCON_REV_B0) || LOOPBACK_INTERNAL(efx)) |
| 245 | return; | 245 | return; |
| 246 | 246 | ||
| 247 | /* Flush the ISR */ | 247 | /* Flush the ISR */ |
| @@ -454,7 +454,7 @@ static int falcon_check_xaui_link_up(struct efx_nic *efx) | |||
| 454 | 454 | ||
| 455 | EFX_LOG(efx, "%s Clobbering XAUI (%d tries left).\n", | 455 | EFX_LOG(efx, "%s Clobbering XAUI (%d tries left).\n", |
| 456 | __func__, tries); | 456 | __func__, tries); |
| 457 | (void) falcon_reset_xaui(efx); | 457 | falcon_reset_xaui(efx); |
| 458 | udelay(200); | 458 | udelay(200); |
| 459 | tries--; | 459 | tries--; |
| 460 | } | 460 | } |
| @@ -572,7 +572,7 @@ int falcon_check_xmac(struct efx_nic *efx) | |||
| 572 | xaui_link_ok = falcon_xaui_link_ok(efx); | 572 | xaui_link_ok = falcon_xaui_link_ok(efx); |
| 573 | 573 | ||
| 574 | if (EFX_WORKAROUND_5147(efx) && !xaui_link_ok) | 574 | if (EFX_WORKAROUND_5147(efx) && !xaui_link_ok) |
| 575 | (void) falcon_reset_xaui(efx); | 575 | falcon_reset_xaui(efx); |
| 576 | 576 | ||
| 577 | /* Call the PHY check_hw routine */ | 577 | /* Call the PHY check_hw routine */ |
| 578 | rc = efx->phy_op->check_hw(efx); | 578 | rc = efx->phy_op->check_hw(efx); |
| @@ -639,7 +639,7 @@ int falcon_xmac_set_pause(struct efx_nic *efx, enum efx_fc_type flow_control) | |||
| 639 | reset = ((flow_control & EFX_FC_TX) && | 639 | reset = ((flow_control & EFX_FC_TX) && |
| 640 | !(efx->flow_control & EFX_FC_TX)); | 640 | !(efx->flow_control & EFX_FC_TX)); |
| 641 | if (EFX_WORKAROUND_11482(efx) && reset) { | 641 | if (EFX_WORKAROUND_11482(efx) && reset) { |
| 642 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 642 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 643 | /* Recover by resetting the EM block */ | 643 | /* Recover by resetting the EM block */ |
| 644 | if (efx->link_up) | 644 | if (efx->link_up) |
| 645 | falcon_drain_tx_fifo(efx); | 645 | falcon_drain_tx_fifo(efx); |
diff --git a/drivers/net/sfc/net_driver.h b/drivers/net/sfc/net_driver.h index 59f261b4171f..5e20e7551dae 100644 --- a/drivers/net/sfc/net_driver.h +++ b/drivers/net/sfc/net_driver.h | |||
| @@ -42,7 +42,7 @@ | |||
| 42 | #ifndef EFX_DRIVER_NAME | 42 | #ifndef EFX_DRIVER_NAME |
| 43 | #define EFX_DRIVER_NAME "sfc" | 43 | #define EFX_DRIVER_NAME "sfc" |
| 44 | #endif | 44 | #endif |
| 45 | #define EFX_DRIVER_VERSION "2.2.0136" | 45 | #define EFX_DRIVER_VERSION "2.2" |
| 46 | 46 | ||
| 47 | #ifdef EFX_ENABLE_DEBUG | 47 | #ifdef EFX_ENABLE_DEBUG |
| 48 | #define EFX_BUG_ON_PARANOID(x) BUG_ON(x) | 48 | #define EFX_BUG_ON_PARANOID(x) BUG_ON(x) |
| @@ -52,28 +52,19 @@ | |||
| 52 | #define EFX_WARN_ON_PARANOID(x) do {} while (0) | 52 | #define EFX_WARN_ON_PARANOID(x) do {} while (0) |
| 53 | #endif | 53 | #endif |
| 54 | 54 | ||
| 55 | #define NET_DEV_REGISTERED(efx) \ | ||
| 56 | ((efx)->net_dev->reg_state == NETREG_REGISTERED) | ||
| 57 | |||
| 58 | /* Include net device name in log messages if it has been registered. | ||
| 59 | * Use efx->name not efx->net_dev->name so that races with (un)registration | ||
| 60 | * are harmless. | ||
| 61 | */ | ||
| 62 | #define NET_DEV_NAME(efx) (NET_DEV_REGISTERED(efx) ? (efx)->name : "") | ||
| 63 | |||
| 64 | /* Un-rate-limited logging */ | 55 | /* Un-rate-limited logging */ |
| 65 | #define EFX_ERR(efx, fmt, args...) \ | 56 | #define EFX_ERR(efx, fmt, args...) \ |
| 66 | dev_err(&((efx)->pci_dev->dev), "ERR: %s " fmt, NET_DEV_NAME(efx), ##args) | 57 | dev_err(&((efx)->pci_dev->dev), "ERR: %s " fmt, efx_dev_name(efx), ##args) |
| 67 | 58 | ||
| 68 | #define EFX_INFO(efx, fmt, args...) \ | 59 | #define EFX_INFO(efx, fmt, args...) \ |
| 69 | dev_info(&((efx)->pci_dev->dev), "INFO: %s " fmt, NET_DEV_NAME(efx), ##args) | 60 | dev_info(&((efx)->pci_dev->dev), "INFO: %s " fmt, efx_dev_name(efx), ##args) |
| 70 | 61 | ||
| 71 | #ifdef EFX_ENABLE_DEBUG | 62 | #ifdef EFX_ENABLE_DEBUG |
| 72 | #define EFX_LOG(efx, fmt, args...) \ | 63 | #define EFX_LOG(efx, fmt, args...) \ |
| 73 | dev_info(&((efx)->pci_dev->dev), "DBG: %s " fmt, NET_DEV_NAME(efx), ##args) | 64 | dev_info(&((efx)->pci_dev->dev), "DBG: %s " fmt, efx_dev_name(efx), ##args) |
| 74 | #else | 65 | #else |
| 75 | #define EFX_LOG(efx, fmt, args...) \ | 66 | #define EFX_LOG(efx, fmt, args...) \ |
| 76 | dev_dbg(&((efx)->pci_dev->dev), "DBG: %s " fmt, NET_DEV_NAME(efx), ##args) | 67 | dev_dbg(&((efx)->pci_dev->dev), "DBG: %s " fmt, efx_dev_name(efx), ##args) |
| 77 | #endif | 68 | #endif |
| 78 | 69 | ||
| 79 | #define EFX_TRACE(efx, fmt, args...) do {} while (0) | 70 | #define EFX_TRACE(efx, fmt, args...) do {} while (0) |
| @@ -90,11 +81,6 @@ do {if (net_ratelimit()) EFX_INFO(efx, fmt, ##args); } while (0) | |||
| 90 | #define EFX_LOG_RL(efx, fmt, args...) \ | 81 | #define EFX_LOG_RL(efx, fmt, args...) \ |
| 91 | do {if (net_ratelimit()) EFX_LOG(efx, fmt, ##args); } while (0) | 82 | do {if (net_ratelimit()) EFX_LOG(efx, fmt, ##args); } while (0) |
| 92 | 83 | ||
| 93 | /* Kernel headers may redefine inline anyway */ | ||
| 94 | #ifndef inline | ||
| 95 | #define inline inline __attribute__ ((always_inline)) | ||
| 96 | #endif | ||
| 97 | |||
| 98 | /************************************************************************** | 84 | /************************************************************************** |
| 99 | * | 85 | * |
| 100 | * Efx data structures | 86 | * Efx data structures |
| @@ -695,7 +681,7 @@ struct efx_nic { | |||
| 695 | struct workqueue_struct *workqueue; | 681 | struct workqueue_struct *workqueue; |
| 696 | struct work_struct reset_work; | 682 | struct work_struct reset_work; |
| 697 | struct delayed_work monitor_work; | 683 | struct delayed_work monitor_work; |
| 698 | unsigned long membase_phys; | 684 | resource_size_t membase_phys; |
| 699 | void __iomem *membase; | 685 | void __iomem *membase; |
| 700 | spinlock_t biu_lock; | 686 | spinlock_t biu_lock; |
| 701 | enum efx_int_mode interrupt_mode; | 687 | enum efx_int_mode interrupt_mode; |
| @@ -719,7 +705,7 @@ struct efx_nic { | |||
| 719 | 705 | ||
| 720 | unsigned n_rx_nodesc_drop_cnt; | 706 | unsigned n_rx_nodesc_drop_cnt; |
| 721 | 707 | ||
| 722 | void *nic_data; | 708 | struct falcon_nic_data *nic_data; |
| 723 | 709 | ||
| 724 | struct mutex mac_lock; | 710 | struct mutex mac_lock; |
| 725 | int port_enabled; | 711 | int port_enabled; |
| @@ -760,6 +746,20 @@ struct efx_nic { | |||
| 760 | void *loopback_selftest; | 746 | void *loopback_selftest; |
| 761 | }; | 747 | }; |
| 762 | 748 | ||
| 749 | static inline int efx_dev_registered(struct efx_nic *efx) | ||
| 750 | { | ||
| 751 | return efx->net_dev->reg_state == NETREG_REGISTERED; | ||
| 752 | } | ||
| 753 | |||
| 754 | /* Net device name, for inclusion in log messages if it has been registered. | ||
| 755 | * Use efx->name not efx->net_dev->name so that races with (un)registration | ||
| 756 | * are harmless. | ||
| 757 | */ | ||
| 758 | static inline const char *efx_dev_name(struct efx_nic *efx) | ||
| 759 | { | ||
| 760 | return efx_dev_registered(efx) ? efx->name : ""; | ||
| 761 | } | ||
| 762 | |||
| 763 | /** | 763 | /** |
| 764 | * struct efx_nic_type - Efx device type definition | 764 | * struct efx_nic_type - Efx device type definition |
| 765 | * @mem_bar: Memory BAR number | 765 | * @mem_bar: Memory BAR number |
| @@ -795,7 +795,7 @@ struct efx_nic_type { | |||
| 795 | unsigned int txd_ring_mask; | 795 | unsigned int txd_ring_mask; |
| 796 | unsigned int rxd_ring_mask; | 796 | unsigned int rxd_ring_mask; |
| 797 | unsigned int evq_size; | 797 | unsigned int evq_size; |
| 798 | dma_addr_t max_dma_mask; | 798 | u64 max_dma_mask; |
| 799 | unsigned int tx_dma_mask; | 799 | unsigned int tx_dma_mask; |
| 800 | unsigned bug5391_mask; | 800 | unsigned bug5391_mask; |
| 801 | 801 | ||
diff --git a/drivers/net/sfc/rx.c b/drivers/net/sfc/rx.c index 670622373ddf..601b001437c0 100644 --- a/drivers/net/sfc/rx.c +++ b/drivers/net/sfc/rx.c | |||
| @@ -86,14 +86,17 @@ static unsigned int rx_refill_limit = 95; | |||
| 86 | */ | 86 | */ |
| 87 | #define EFX_RXD_HEAD_ROOM 2 | 87 | #define EFX_RXD_HEAD_ROOM 2 |
| 88 | 88 | ||
| 89 | /* Macros for zero-order pages (potentially) containing multiple RX buffers */ | 89 | static inline unsigned int efx_rx_buf_offset(struct efx_rx_buffer *buf) |
| 90 | #define RX_DATA_OFFSET(_data) \ | 90 | { |
| 91 | (((unsigned long) (_data)) & (PAGE_SIZE-1)) | 91 | /* Offset is always within one page, so we don't need to consider |
| 92 | #define RX_BUF_OFFSET(_rx_buf) \ | 92 | * the page order. |
| 93 | RX_DATA_OFFSET((_rx_buf)->data) | 93 | */ |
| 94 | 94 | return (__force unsigned long) buf->data & (PAGE_SIZE - 1); | |
| 95 | #define RX_PAGE_SIZE(_efx) \ | 95 | } |
| 96 | (PAGE_SIZE * (1u << (_efx)->rx_buffer_order)) | 96 | static inline unsigned int efx_rx_buf_size(struct efx_nic *efx) |
| 97 | { | ||
| 98 | return PAGE_SIZE << efx->rx_buffer_order; | ||
| 99 | } | ||
| 97 | 100 | ||
| 98 | 101 | ||
| 99 | /************************************************************************** | 102 | /************************************************************************** |
| @@ -106,7 +109,7 @@ static unsigned int rx_refill_limit = 95; | |||
| 106 | static int efx_lro_get_skb_hdr(struct sk_buff *skb, void **ip_hdr, | 109 | static int efx_lro_get_skb_hdr(struct sk_buff *skb, void **ip_hdr, |
| 107 | void **tcpudp_hdr, u64 *hdr_flags, void *priv) | 110 | void **tcpudp_hdr, u64 *hdr_flags, void *priv) |
| 108 | { | 111 | { |
| 109 | struct efx_channel *channel = (struct efx_channel *)priv; | 112 | struct efx_channel *channel = priv; |
| 110 | struct iphdr *iph; | 113 | struct iphdr *iph; |
| 111 | struct tcphdr *th; | 114 | struct tcphdr *th; |
| 112 | 115 | ||
| @@ -131,12 +134,12 @@ static int efx_get_frag_hdr(struct skb_frag_struct *frag, void **mac_hdr, | |||
| 131 | void **ip_hdr, void **tcpudp_hdr, u64 *hdr_flags, | 134 | void **ip_hdr, void **tcpudp_hdr, u64 *hdr_flags, |
| 132 | void *priv) | 135 | void *priv) |
| 133 | { | 136 | { |
| 134 | struct efx_channel *channel = (struct efx_channel *)priv; | 137 | struct efx_channel *channel = priv; |
| 135 | struct ethhdr *eh; | 138 | struct ethhdr *eh; |
| 136 | struct iphdr *iph; | 139 | struct iphdr *iph; |
| 137 | 140 | ||
| 138 | /* We support EtherII and VLAN encapsulated IPv4 */ | 141 | /* We support EtherII and VLAN encapsulated IPv4 */ |
| 139 | eh = (struct ethhdr *)(page_address(frag->page) + frag->page_offset); | 142 | eh = page_address(frag->page) + frag->page_offset; |
| 140 | *mac_hdr = eh; | 143 | *mac_hdr = eh; |
| 141 | 144 | ||
| 142 | if (eh->h_proto == htons(ETH_P_IP)) { | 145 | if (eh->h_proto == htons(ETH_P_IP)) { |
| @@ -269,7 +272,7 @@ static inline int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, | |||
| 269 | return -ENOMEM; | 272 | return -ENOMEM; |
| 270 | 273 | ||
| 271 | dma_addr = pci_map_page(efx->pci_dev, rx_buf->page, | 274 | dma_addr = pci_map_page(efx->pci_dev, rx_buf->page, |
| 272 | 0, RX_PAGE_SIZE(efx), | 275 | 0, efx_rx_buf_size(efx), |
| 273 | PCI_DMA_FROMDEVICE); | 276 | PCI_DMA_FROMDEVICE); |
| 274 | 277 | ||
| 275 | if (unlikely(pci_dma_mapping_error(dma_addr))) { | 278 | if (unlikely(pci_dma_mapping_error(dma_addr))) { |
| @@ -280,14 +283,14 @@ static inline int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, | |||
| 280 | 283 | ||
| 281 | rx_queue->buf_page = rx_buf->page; | 284 | rx_queue->buf_page = rx_buf->page; |
| 282 | rx_queue->buf_dma_addr = dma_addr; | 285 | rx_queue->buf_dma_addr = dma_addr; |
| 283 | rx_queue->buf_data = ((char *) page_address(rx_buf->page) + | 286 | rx_queue->buf_data = (page_address(rx_buf->page) + |
| 284 | EFX_PAGE_IP_ALIGN); | 287 | EFX_PAGE_IP_ALIGN); |
| 285 | } | 288 | } |
| 286 | 289 | ||
| 287 | offset = RX_DATA_OFFSET(rx_queue->buf_data); | ||
| 288 | rx_buf->len = bytes; | 290 | rx_buf->len = bytes; |
| 289 | rx_buf->dma_addr = rx_queue->buf_dma_addr + offset; | ||
| 290 | rx_buf->data = rx_queue->buf_data; | 291 | rx_buf->data = rx_queue->buf_data; |
| 292 | offset = efx_rx_buf_offset(rx_buf); | ||
| 293 | rx_buf->dma_addr = rx_queue->buf_dma_addr + offset; | ||
| 291 | 294 | ||
| 292 | /* Try to pack multiple buffers per page */ | 295 | /* Try to pack multiple buffers per page */ |
| 293 | if (efx->rx_buffer_order == 0) { | 296 | if (efx->rx_buffer_order == 0) { |
| @@ -295,7 +298,7 @@ static inline int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, | |||
| 295 | rx_queue->buf_data += ((bytes + 0x1ff) & ~0x1ff); | 298 | rx_queue->buf_data += ((bytes + 0x1ff) & ~0x1ff); |
| 296 | offset += ((bytes + 0x1ff) & ~0x1ff); | 299 | offset += ((bytes + 0x1ff) & ~0x1ff); |
| 297 | 300 | ||
| 298 | space = RX_PAGE_SIZE(efx) - offset; | 301 | space = efx_rx_buf_size(efx) - offset; |
| 299 | if (space >= bytes) { | 302 | if (space >= bytes) { |
| 300 | /* Refs dropped on kernel releasing each skb */ | 303 | /* Refs dropped on kernel releasing each skb */ |
| 301 | get_page(rx_queue->buf_page); | 304 | get_page(rx_queue->buf_page); |
| @@ -344,7 +347,8 @@ static inline void efx_unmap_rx_buffer(struct efx_nic *efx, | |||
| 344 | EFX_BUG_ON_PARANOID(rx_buf->skb); | 347 | EFX_BUG_ON_PARANOID(rx_buf->skb); |
| 345 | if (rx_buf->unmap_addr) { | 348 | if (rx_buf->unmap_addr) { |
| 346 | pci_unmap_page(efx->pci_dev, rx_buf->unmap_addr, | 349 | pci_unmap_page(efx->pci_dev, rx_buf->unmap_addr, |
| 347 | RX_PAGE_SIZE(efx), PCI_DMA_FROMDEVICE); | 350 | efx_rx_buf_size(efx), |
| 351 | PCI_DMA_FROMDEVICE); | ||
| 348 | rx_buf->unmap_addr = 0; | 352 | rx_buf->unmap_addr = 0; |
| 349 | } | 353 | } |
| 350 | } else if (likely(rx_buf->skb)) { | 354 | } else if (likely(rx_buf->skb)) { |
| @@ -400,9 +404,10 @@ static int __efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue, | |||
| 400 | return 0; | 404 | return 0; |
| 401 | 405 | ||
| 402 | /* Record minimum fill level */ | 406 | /* Record minimum fill level */ |
| 403 | if (unlikely(fill_level < rx_queue->min_fill)) | 407 | if (unlikely(fill_level < rx_queue->min_fill)) { |
| 404 | if (fill_level) | 408 | if (fill_level) |
| 405 | rx_queue->min_fill = fill_level; | 409 | rx_queue->min_fill = fill_level; |
| 410 | } | ||
| 406 | 411 | ||
| 407 | /* Acquire RX add lock. If this lock is contended, then a fast | 412 | /* Acquire RX add lock. If this lock is contended, then a fast |
| 408 | * fill must already be in progress (e.g. in the refill | 413 | * fill must already be in progress (e.g. in the refill |
| @@ -552,7 +557,7 @@ static inline void efx_rx_packet_lro(struct efx_channel *channel, | |||
| 552 | struct skb_frag_struct frags; | 557 | struct skb_frag_struct frags; |
| 553 | 558 | ||
| 554 | frags.page = rx_buf->page; | 559 | frags.page = rx_buf->page; |
| 555 | frags.page_offset = RX_BUF_OFFSET(rx_buf); | 560 | frags.page_offset = efx_rx_buf_offset(rx_buf); |
| 556 | frags.size = rx_buf->len; | 561 | frags.size = rx_buf->len; |
| 557 | 562 | ||
| 558 | lro_receive_frags(lro_mgr, &frags, rx_buf->len, | 563 | lro_receive_frags(lro_mgr, &frags, rx_buf->len, |
| @@ -597,7 +602,7 @@ static inline struct sk_buff *efx_rx_mk_skb(struct efx_rx_buffer *rx_buf, | |||
| 597 | if (unlikely(rx_buf->len > hdr_len)) { | 602 | if (unlikely(rx_buf->len > hdr_len)) { |
| 598 | struct skb_frag_struct *frag = skb_shinfo(skb)->frags; | 603 | struct skb_frag_struct *frag = skb_shinfo(skb)->frags; |
| 599 | frag->page = rx_buf->page; | 604 | frag->page = rx_buf->page; |
| 600 | frag->page_offset = RX_BUF_OFFSET(rx_buf) + hdr_len; | 605 | frag->page_offset = efx_rx_buf_offset(rx_buf) + hdr_len; |
| 601 | frag->size = skb->len - hdr_len; | 606 | frag->size = skb->len - hdr_len; |
| 602 | skb_shinfo(skb)->nr_frags = 1; | 607 | skb_shinfo(skb)->nr_frags = 1; |
| 603 | skb->data_len = frag->size; | 608 | skb->data_len = frag->size; |
| @@ -851,7 +856,8 @@ void efx_fini_rx_queue(struct efx_rx_queue *rx_queue) | |||
| 851 | /* For a page that is part-way through splitting into RX buffers */ | 856 | /* For a page that is part-way through splitting into RX buffers */ |
| 852 | if (rx_queue->buf_page != NULL) { | 857 | if (rx_queue->buf_page != NULL) { |
| 853 | pci_unmap_page(rx_queue->efx->pci_dev, rx_queue->buf_dma_addr, | 858 | pci_unmap_page(rx_queue->efx->pci_dev, rx_queue->buf_dma_addr, |
| 854 | RX_PAGE_SIZE(rx_queue->efx), PCI_DMA_FROMDEVICE); | 859 | efx_rx_buf_size(rx_queue->efx), |
| 860 | PCI_DMA_FROMDEVICE); | ||
| 855 | __free_pages(rx_queue->buf_page, | 861 | __free_pages(rx_queue->buf_page, |
| 856 | rx_queue->efx->rx_buffer_order); | 862 | rx_queue->efx->rx_buffer_order); |
| 857 | rx_queue->buf_page = NULL; | 863 | rx_queue->buf_page = NULL; |
diff --git a/drivers/net/sfc/selftest.c b/drivers/net/sfc/selftest.c index cbda15946e8f..3b2de9fe7f27 100644 --- a/drivers/net/sfc/selftest.c +++ b/drivers/net/sfc/selftest.c | |||
| @@ -290,7 +290,7 @@ void efx_loopback_rx_packet(struct efx_nic *efx, | |||
| 290 | 290 | ||
| 291 | payload = &state->payload; | 291 | payload = &state->payload; |
| 292 | 292 | ||
| 293 | received = (struct efx_loopback_payload *)(char *) buf_ptr; | 293 | received = (struct efx_loopback_payload *) buf_ptr; |
| 294 | received->ip.saddr = payload->ip.saddr; | 294 | received->ip.saddr = payload->ip.saddr; |
| 295 | received->ip.check = payload->ip.check; | 295 | received->ip.check = payload->ip.check; |
| 296 | 296 | ||
| @@ -424,10 +424,10 @@ static int efx_tx_loopback(struct efx_tx_queue *tx_queue) | |||
| 424 | * interrupt handler. */ | 424 | * interrupt handler. */ |
| 425 | smp_wmb(); | 425 | smp_wmb(); |
| 426 | 426 | ||
| 427 | if (NET_DEV_REGISTERED(efx)) | 427 | if (efx_dev_registered(efx)) |
| 428 | netif_tx_lock_bh(efx->net_dev); | 428 | netif_tx_lock_bh(efx->net_dev); |
| 429 | rc = efx_xmit(efx, tx_queue, skb); | 429 | rc = efx_xmit(efx, tx_queue, skb); |
| 430 | if (NET_DEV_REGISTERED(efx)) | 430 | if (efx_dev_registered(efx)) |
| 431 | netif_tx_unlock_bh(efx->net_dev); | 431 | netif_tx_unlock_bh(efx->net_dev); |
| 432 | 432 | ||
| 433 | if (rc != NETDEV_TX_OK) { | 433 | if (rc != NETDEV_TX_OK) { |
| @@ -453,7 +453,7 @@ static int efx_rx_loopback(struct efx_tx_queue *tx_queue, | |||
| 453 | int tx_done = 0, rx_good, rx_bad; | 453 | int tx_done = 0, rx_good, rx_bad; |
| 454 | int i, rc = 0; | 454 | int i, rc = 0; |
| 455 | 455 | ||
| 456 | if (NET_DEV_REGISTERED(efx)) | 456 | if (efx_dev_registered(efx)) |
| 457 | netif_tx_lock_bh(efx->net_dev); | 457 | netif_tx_lock_bh(efx->net_dev); |
| 458 | 458 | ||
| 459 | /* Count the number of tx completions, and decrement the refcnt. Any | 459 | /* Count the number of tx completions, and decrement the refcnt. Any |
| @@ -465,7 +465,7 @@ static int efx_rx_loopback(struct efx_tx_queue *tx_queue, | |||
| 465 | dev_kfree_skb_any(skb); | 465 | dev_kfree_skb_any(skb); |
| 466 | } | 466 | } |
| 467 | 467 | ||
| 468 | if (NET_DEV_REGISTERED(efx)) | 468 | if (efx_dev_registered(efx)) |
| 469 | netif_tx_unlock_bh(efx->net_dev); | 469 | netif_tx_unlock_bh(efx->net_dev); |
| 470 | 470 | ||
| 471 | /* Check TX completion and received packet counts */ | 471 | /* Check TX completion and received packet counts */ |
| @@ -517,6 +517,8 @@ efx_test_loopback(struct efx_tx_queue *tx_queue, | |||
| 517 | state->packet_count = min(1 << (i << 2), state->packet_count); | 517 | state->packet_count = min(1 << (i << 2), state->packet_count); |
| 518 | state->skbs = kzalloc(sizeof(state->skbs[0]) * | 518 | state->skbs = kzalloc(sizeof(state->skbs[0]) * |
| 519 | state->packet_count, GFP_KERNEL); | 519 | state->packet_count, GFP_KERNEL); |
| 520 | if (!state->skbs) | ||
| 521 | return -ENOMEM; | ||
| 520 | state->flush = 0; | 522 | state->flush = 0; |
| 521 | 523 | ||
| 522 | EFX_LOG(efx, "TX queue %d testing %s loopback with %d " | 524 | EFX_LOG(efx, "TX queue %d testing %s loopback with %d " |
| @@ -700,7 +702,7 @@ int efx_offline_test(struct efx_nic *efx, | |||
| 700 | * "flushing" so all inflight packets are dropped */ | 702 | * "flushing" so all inflight packets are dropped */ |
| 701 | BUG_ON(efx->loopback_selftest); | 703 | BUG_ON(efx->loopback_selftest); |
| 702 | state->flush = 1; | 704 | state->flush = 1; |
| 703 | efx->loopback_selftest = (void *)state; | 705 | efx->loopback_selftest = state; |
| 704 | 706 | ||
| 705 | rc = efx_test_loopbacks(efx, tests, loopback_modes); | 707 | rc = efx_test_loopbacks(efx, tests, loopback_modes); |
| 706 | 708 | ||
diff --git a/drivers/net/sfc/sfe4001.c b/drivers/net/sfc/sfe4001.c index 725d1a539c49..66a0d1442aba 100644 --- a/drivers/net/sfc/sfe4001.c +++ b/drivers/net/sfc/sfe4001.c | |||
| @@ -116,18 +116,18 @@ void sfe4001_poweroff(struct efx_nic *efx) | |||
| 116 | 116 | ||
| 117 | /* Turn off all power rails */ | 117 | /* Turn off all power rails */ |
| 118 | out = 0xff; | 118 | out = 0xff; |
| 119 | (void) efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); | 119 | efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); |
| 120 | 120 | ||
| 121 | /* Disable port 1 outputs on IO expander */ | 121 | /* Disable port 1 outputs on IO expander */ |
| 122 | cfg = 0xff; | 122 | cfg = 0xff; |
| 123 | (void) efx_i2c_write(i2c, PCA9539, P1_CONFIG, &cfg, 1); | 123 | efx_i2c_write(i2c, PCA9539, P1_CONFIG, &cfg, 1); |
| 124 | 124 | ||
| 125 | /* Disable port 0 outputs on IO expander */ | 125 | /* Disable port 0 outputs on IO expander */ |
| 126 | cfg = 0xff; | 126 | cfg = 0xff; |
| 127 | (void) efx_i2c_write(i2c, PCA9539, P0_CONFIG, &cfg, 1); | 127 | efx_i2c_write(i2c, PCA9539, P0_CONFIG, &cfg, 1); |
| 128 | 128 | ||
| 129 | /* Clear any over-temperature alert */ | 129 | /* Clear any over-temperature alert */ |
| 130 | (void) efx_i2c_read(i2c, MAX6647, RSL, &in, 1); | 130 | efx_i2c_read(i2c, MAX6647, RSL, &in, 1); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | /* The P0_EN_3V3X line on SFE4001 boards (from A2 onward) is connected | 133 | /* The P0_EN_3V3X line on SFE4001 boards (from A2 onward) is connected |
| @@ -253,14 +253,14 @@ done: | |||
| 253 | fail3: | 253 | fail3: |
| 254 | /* Turn off all power rails */ | 254 | /* Turn off all power rails */ |
| 255 | out = 0xff; | 255 | out = 0xff; |
| 256 | (void) efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); | 256 | efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); |
| 257 | /* Disable port 1 outputs on IO expander */ | 257 | /* Disable port 1 outputs on IO expander */ |
| 258 | out = 0xff; | 258 | out = 0xff; |
| 259 | (void) efx_i2c_write(i2c, PCA9539, P1_CONFIG, &out, 1); | 259 | efx_i2c_write(i2c, PCA9539, P1_CONFIG, &out, 1); |
| 260 | fail2: | 260 | fail2: |
| 261 | /* Disable port 0 outputs on IO expander */ | 261 | /* Disable port 0 outputs on IO expander */ |
| 262 | out = 0xff; | 262 | out = 0xff; |
| 263 | (void) efx_i2c_write(i2c, PCA9539, P0_CONFIG, &out, 1); | 263 | efx_i2c_write(i2c, PCA9539, P0_CONFIG, &out, 1); |
| 264 | fail1: | 264 | fail1: |
| 265 | return rc; | 265 | return rc; |
| 266 | } | 266 | } |
diff --git a/drivers/net/sfc/tenxpress.c b/drivers/net/sfc/tenxpress.c index b1cd6deec01f..c0146061c326 100644 --- a/drivers/net/sfc/tenxpress.c +++ b/drivers/net/sfc/tenxpress.c | |||
| @@ -211,6 +211,8 @@ static int tenxpress_phy_init(struct efx_nic *efx) | |||
| 211 | int rc = 0; | 211 | int rc = 0; |
| 212 | 212 | ||
| 213 | phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL); | 213 | phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL); |
| 214 | if (!phy_data) | ||
| 215 | return -ENOMEM; | ||
| 214 | efx->phy_data = phy_data; | 216 | efx->phy_data = phy_data; |
| 215 | 217 | ||
| 216 | tenxpress_set_state(efx, TENXPRESS_STATUS_NORMAL); | 218 | tenxpress_set_state(efx, TENXPRESS_STATUS_NORMAL); |
| @@ -376,7 +378,7 @@ static void tenxpress_phy_reconfigure(struct efx_nic *efx) | |||
| 376 | * perform a special software reset */ | 378 | * perform a special software reset */ |
| 377 | if ((phy_data->tx_disabled && !efx->tx_disabled) || | 379 | if ((phy_data->tx_disabled && !efx->tx_disabled) || |
| 378 | loop_change) { | 380 | loop_change) { |
| 379 | (void) tenxpress_special_reset(efx); | 381 | tenxpress_special_reset(efx); |
| 380 | falcon_reset_xaui(efx); | 382 | falcon_reset_xaui(efx); |
| 381 | } | 383 | } |
| 382 | 384 | ||
diff --git a/drivers/net/sfc/tx.c b/drivers/net/sfc/tx.c index 9b436f5b4888..5cdd082ab8f6 100644 --- a/drivers/net/sfc/tx.c +++ b/drivers/net/sfc/tx.c | |||
| @@ -387,7 +387,7 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) | |||
| 387 | if (unlikely(tx_queue->stopped)) { | 387 | if (unlikely(tx_queue->stopped)) { |
| 388 | fill_level = tx_queue->insert_count - tx_queue->read_count; | 388 | fill_level = tx_queue->insert_count - tx_queue->read_count; |
| 389 | if (fill_level < EFX_NETDEV_TX_THRESHOLD(tx_queue)) { | 389 | if (fill_level < EFX_NETDEV_TX_THRESHOLD(tx_queue)) { |
| 390 | EFX_BUG_ON_PARANOID(!NET_DEV_REGISTERED(efx)); | 390 | EFX_BUG_ON_PARANOID(!efx_dev_registered(efx)); |
| 391 | 391 | ||
| 392 | /* Do this under netif_tx_lock(), to avoid racing | 392 | /* Do this under netif_tx_lock(), to avoid racing |
| 393 | * with efx_xmit(). */ | 393 | * with efx_xmit(). */ |
| @@ -639,11 +639,12 @@ static void efx_tsoh_block_free(struct efx_tx_queue *tx_queue, | |||
| 639 | base_dma = tsoh->dma_addr & PAGE_MASK; | 639 | base_dma = tsoh->dma_addr & PAGE_MASK; |
| 640 | 640 | ||
| 641 | p = &tx_queue->tso_headers_free; | 641 | p = &tx_queue->tso_headers_free; |
| 642 | while (*p != NULL) | 642 | while (*p != NULL) { |
| 643 | if (((unsigned long)*p & PAGE_MASK) == base_kva) | 643 | if (((unsigned long)*p & PAGE_MASK) == base_kva) |
| 644 | *p = (*p)->next; | 644 | *p = (*p)->next; |
| 645 | else | 645 | else |
| 646 | p = &(*p)->next; | 646 | p = &(*p)->next; |
| 647 | } | ||
| 647 | 648 | ||
| 648 | pci_free_consistent(pci_dev, PAGE_SIZE, (void *)base_kva, base_dma); | 649 | pci_free_consistent(pci_dev, PAGE_SIZE, (void *)base_kva, base_dma); |
| 649 | } | 650 | } |
| @@ -939,9 +940,10 @@ static inline int tso_start_new_packet(struct efx_tx_queue *tx_queue, | |||
| 939 | 940 | ||
| 940 | /* Allocate a DMA-mapped header buffer. */ | 941 | /* Allocate a DMA-mapped header buffer. */ |
| 941 | if (likely(TSOH_SIZE(st->p.header_length) <= TSOH_STD_SIZE)) { | 942 | if (likely(TSOH_SIZE(st->p.header_length) <= TSOH_STD_SIZE)) { |
| 942 | if (tx_queue->tso_headers_free == NULL) | 943 | if (tx_queue->tso_headers_free == NULL) { |
| 943 | if (efx_tsoh_block_alloc(tx_queue)) | 944 | if (efx_tsoh_block_alloc(tx_queue)) |
| 944 | return -1; | 945 | return -1; |
| 946 | } | ||
| 945 | EFX_BUG_ON_PARANOID(!tx_queue->tso_headers_free); | 947 | EFX_BUG_ON_PARANOID(!tx_queue->tso_headers_free); |
| 946 | tsoh = tx_queue->tso_headers_free; | 948 | tsoh = tx_queue->tso_headers_free; |
| 947 | tx_queue->tso_headers_free = tsoh->next; | 949 | tx_queue->tso_headers_free = tsoh->next; |
| @@ -1106,9 +1108,10 @@ static void efx_fini_tso(struct efx_tx_queue *tx_queue) | |||
| 1106 | { | 1108 | { |
| 1107 | unsigned i; | 1109 | unsigned i; |
| 1108 | 1110 | ||
| 1109 | if (tx_queue->buffer) | 1111 | if (tx_queue->buffer) { |
| 1110 | for (i = 0; i <= tx_queue->efx->type->txd_ring_mask; ++i) | 1112 | for (i = 0; i <= tx_queue->efx->type->txd_ring_mask; ++i) |
| 1111 | efx_tsoh_free(tx_queue, &tx_queue->buffer[i]); | 1113 | efx_tsoh_free(tx_queue, &tx_queue->buffer[i]); |
| 1114 | } | ||
| 1112 | 1115 | ||
| 1113 | while (tx_queue->tso_headers_free != NULL) | 1116 | while (tx_queue->tso_headers_free != NULL) |
| 1114 | efx_tsoh_block_free(tx_queue, tx_queue->tso_headers_free, | 1117 | efx_tsoh_block_free(tx_queue, tx_queue->tso_headers_free, |
diff --git a/drivers/net/sfc/workarounds.h b/drivers/net/sfc/workarounds.h index dca62f190198..35ab19c27f8d 100644 --- a/drivers/net/sfc/workarounds.h +++ b/drivers/net/sfc/workarounds.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | */ | 16 | */ |
| 17 | 17 | ||
| 18 | #define EFX_WORKAROUND_ALWAYS(efx) 1 | 18 | #define EFX_WORKAROUND_ALWAYS(efx) 1 |
| 19 | #define EFX_WORKAROUND_FALCON_A(efx) (FALCON_REV(efx) <= FALCON_REV_A1) | 19 | #define EFX_WORKAROUND_FALCON_A(efx) (falcon_rev(efx) <= FALCON_REV_A1) |
| 20 | 20 | ||
| 21 | /* XAUI resets if link not detected */ | 21 | /* XAUI resets if link not detected */ |
| 22 | #define EFX_WORKAROUND_5147 EFX_WORKAROUND_ALWAYS | 22 | #define EFX_WORKAROUND_5147 EFX_WORKAROUND_ALWAYS |
diff --git a/drivers/net/sfc/xfp_phy.c b/drivers/net/sfc/xfp_phy.c index 3b9f9ddbc372..f3684ad28887 100644 --- a/drivers/net/sfc/xfp_phy.c +++ b/drivers/net/sfc/xfp_phy.c | |||
| @@ -85,7 +85,9 @@ static int xfp_phy_init(struct efx_nic *efx) | |||
| 85 | int rc; | 85 | int rc; |
| 86 | 86 | ||
| 87 | phy_data = kzalloc(sizeof(struct xfp_phy_data), GFP_KERNEL); | 87 | phy_data = kzalloc(sizeof(struct xfp_phy_data), GFP_KERNEL); |
| 88 | efx->phy_data = (void *) phy_data; | 88 | if (!phy_data) |
| 89 | return -ENOMEM; | ||
| 90 | efx->phy_data = phy_data; | ||
| 89 | 91 | ||
| 90 | EFX_INFO(efx, "XFP: PHY ID reg %x (OUI %x model %x revision" | 92 | EFX_INFO(efx, "XFP: PHY ID reg %x (OUI %x model %x revision" |
| 91 | " %x)\n", devid, MDIO_ID_OUI(devid), MDIO_ID_MODEL(devid), | 93 | " %x)\n", devid, MDIO_ID_OUI(devid), MDIO_ID_MODEL(devid), |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index f226bcac7d17..3bb60530d4d7 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -1159,17 +1159,9 @@ static int sky2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
| 1159 | } | 1159 | } |
| 1160 | 1160 | ||
| 1161 | #ifdef SKY2_VLAN_TAG_USED | 1161 | #ifdef SKY2_VLAN_TAG_USED |
| 1162 | static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) | 1162 | static void sky2_set_vlan_mode(struct sky2_hw *hw, u16 port, bool onoff) |
| 1163 | { | 1163 | { |
| 1164 | struct sky2_port *sky2 = netdev_priv(dev); | 1164 | if (onoff) { |
| 1165 | struct sky2_hw *hw = sky2->hw; | ||
| 1166 | u16 port = sky2->port; | ||
| 1167 | |||
| 1168 | netif_tx_lock_bh(dev); | ||
| 1169 | napi_disable(&hw->napi); | ||
| 1170 | |||
| 1171 | sky2->vlgrp = grp; | ||
| 1172 | if (grp) { | ||
| 1173 | sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), | 1165 | sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), |
| 1174 | RX_VLAN_STRIP_ON); | 1166 | RX_VLAN_STRIP_ON); |
| 1175 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), | 1167 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), |
| @@ -1180,6 +1172,19 @@ static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp | |||
| 1180 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), | 1172 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), |
| 1181 | TX_VLAN_TAG_OFF); | 1173 | TX_VLAN_TAG_OFF); |
| 1182 | } | 1174 | } |
| 1175 | } | ||
| 1176 | |||
| 1177 | static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) | ||
| 1178 | { | ||
| 1179 | struct sky2_port *sky2 = netdev_priv(dev); | ||
| 1180 | struct sky2_hw *hw = sky2->hw; | ||
| 1181 | u16 port = sky2->port; | ||
| 1182 | |||
| 1183 | netif_tx_lock_bh(dev); | ||
| 1184 | napi_disable(&hw->napi); | ||
| 1185 | |||
| 1186 | sky2->vlgrp = grp; | ||
| 1187 | sky2_set_vlan_mode(hw, port, grp != NULL); | ||
| 1183 | 1188 | ||
| 1184 | sky2_read32(hw, B0_Y2_SP_LISR); | 1189 | sky2_read32(hw, B0_Y2_SP_LISR); |
| 1185 | napi_enable(&hw->napi); | 1190 | napi_enable(&hw->napi); |
| @@ -1418,6 +1423,10 @@ static int sky2_up(struct net_device *dev) | |||
| 1418 | sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map, | 1423 | sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map, |
| 1419 | TX_RING_SIZE - 1); | 1424 | TX_RING_SIZE - 1); |
| 1420 | 1425 | ||
| 1426 | #ifdef SKY2_VLAN_TAG_USED | ||
| 1427 | sky2_set_vlan_mode(hw, port, sky2->vlgrp != NULL); | ||
| 1428 | #endif | ||
| 1429 | |||
| 1421 | err = sky2_rx_start(sky2); | 1430 | err = sky2_rx_start(sky2); |
| 1422 | if (err) | 1431 | if (err) |
| 1423 | goto err_out; | 1432 | goto err_out; |
diff --git a/drivers/net/tokenring/3c359.h b/drivers/net/tokenring/3c359.h index b880cba0f6fd..74cf8e1a181b 100644 --- a/drivers/net/tokenring/3c359.h +++ b/drivers/net/tokenring/3c359.h | |||
| @@ -264,7 +264,7 @@ struct xl_private { | |||
| 264 | u16 asb; | 264 | u16 asb; |
| 265 | 265 | ||
| 266 | u8 __iomem *xl_mmio; | 266 | u8 __iomem *xl_mmio; |
| 267 | char *xl_card_name; | 267 | const char *xl_card_name; |
| 268 | struct pci_dev *pdev ; | 268 | struct pci_dev *pdev ; |
| 269 | 269 | ||
| 270 | spinlock_t xl_lock ; | 270 | spinlock_t xl_lock ; |
diff --git a/drivers/net/tokenring/olympic.h b/drivers/net/tokenring/olympic.h index c91956310fb2..10fbba08978f 100644 --- a/drivers/net/tokenring/olympic.h +++ b/drivers/net/tokenring/olympic.h | |||
| @@ -254,7 +254,7 @@ struct olympic_private { | |||
| 254 | u8 __iomem *olympic_mmio; | 254 | u8 __iomem *olympic_mmio; |
| 255 | u8 __iomem *olympic_lap; | 255 | u8 __iomem *olympic_lap; |
| 256 | struct pci_dev *pdev ; | 256 | struct pci_dev *pdev ; |
| 257 | char *olympic_card_name ; | 257 | const char *olympic_card_name; |
| 258 | 258 | ||
| 259 | spinlock_t olympic_lock ; | 259 | spinlock_t olympic_lock ; |
| 260 | 260 | ||
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c index 2511ca7a12aa..e9e628621639 100644 --- a/drivers/net/tulip/uli526x.c +++ b/drivers/net/tulip/uli526x.c | |||
| @@ -225,6 +225,9 @@ static void uli526x_set_filter_mode(struct net_device *); | |||
| 225 | static const struct ethtool_ops netdev_ethtool_ops; | 225 | static const struct ethtool_ops netdev_ethtool_ops; |
| 226 | static u16 read_srom_word(long, int); | 226 | static u16 read_srom_word(long, int); |
| 227 | static irqreturn_t uli526x_interrupt(int, void *); | 227 | static irqreturn_t uli526x_interrupt(int, void *); |
| 228 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 229 | static void uli526x_poll(struct net_device *dev); | ||
| 230 | #endif | ||
| 228 | static void uli526x_descriptor_init(struct uli526x_board_info *, unsigned long); | 231 | static void uli526x_descriptor_init(struct uli526x_board_info *, unsigned long); |
| 229 | static void allocate_rx_buffer(struct uli526x_board_info *); | 232 | static void allocate_rx_buffer(struct uli526x_board_info *); |
| 230 | static void update_cr6(u32, unsigned long); | 233 | static void update_cr6(u32, unsigned long); |
| @@ -339,6 +342,9 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev, | |||
| 339 | dev->get_stats = &uli526x_get_stats; | 342 | dev->get_stats = &uli526x_get_stats; |
| 340 | dev->set_multicast_list = &uli526x_set_filter_mode; | 343 | dev->set_multicast_list = &uli526x_set_filter_mode; |
| 341 | dev->ethtool_ops = &netdev_ethtool_ops; | 344 | dev->ethtool_ops = &netdev_ethtool_ops; |
| 345 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 346 | dev->poll_controller = &uli526x_poll; | ||
| 347 | #endif | ||
| 342 | spin_lock_init(&db->lock); | 348 | spin_lock_init(&db->lock); |
| 343 | 349 | ||
| 344 | 350 | ||
| @@ -681,8 +687,9 @@ static irqreturn_t uli526x_interrupt(int irq, void *dev_id) | |||
| 681 | db->cr5_data = inl(ioaddr + DCR5); | 687 | db->cr5_data = inl(ioaddr + DCR5); |
| 682 | outl(db->cr5_data, ioaddr + DCR5); | 688 | outl(db->cr5_data, ioaddr + DCR5); |
| 683 | if ( !(db->cr5_data & 0x180c1) ) { | 689 | if ( !(db->cr5_data & 0x180c1) ) { |
| 684 | spin_unlock_irqrestore(&db->lock, flags); | 690 | /* Restore CR7 to enable interrupt mask */ |
| 685 | outl(db->cr7_data, ioaddr + DCR7); | 691 | outl(db->cr7_data, ioaddr + DCR7); |
| 692 | spin_unlock_irqrestore(&db->lock, flags); | ||
| 686 | return IRQ_HANDLED; | 693 | return IRQ_HANDLED; |
| 687 | } | 694 | } |
| 688 | 695 | ||
| @@ -715,6 +722,13 @@ static irqreturn_t uli526x_interrupt(int irq, void *dev_id) | |||
| 715 | return IRQ_HANDLED; | 722 | return IRQ_HANDLED; |
| 716 | } | 723 | } |
| 717 | 724 | ||
| 725 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 726 | static void uli526x_poll(struct net_device *dev) | ||
| 727 | { | ||
| 728 | /* ISR grabs the irqsave lock, so this should be safe */ | ||
| 729 | uli526x_interrupt(dev->irq, dev); | ||
| 730 | } | ||
| 731 | #endif | ||
| 718 | 732 | ||
| 719 | /* | 733 | /* |
| 720 | * Free TX resource after TX complete | 734 | * Free TX resource after TX complete |
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c index ca0bdac07a78..fb0b918e5ccb 100644 --- a/drivers/net/ucc_geth.c +++ b/drivers/net/ucc_geth.c | |||
| @@ -237,7 +237,7 @@ static struct sk_buff *get_new_skb(struct ucc_geth_private *ugeth, | |||
| 237 | skb->dev = ugeth->dev; | 237 | skb->dev = ugeth->dev; |
| 238 | 238 | ||
| 239 | out_be32(&((struct qe_bd __iomem *)bd)->buf, | 239 | out_be32(&((struct qe_bd __iomem *)bd)->buf, |
| 240 | dma_map_single(NULL, | 240 | dma_map_single(&ugeth->dev->dev, |
| 241 | skb->data, | 241 | skb->data, |
| 242 | ugeth->ug_info->uf_info.max_rx_buf_length + | 242 | ugeth->ug_info->uf_info.max_rx_buf_length + |
| 243 | UCC_GETH_RX_DATA_BUF_ALIGNMENT, | 243 | UCC_GETH_RX_DATA_BUF_ALIGNMENT, |
| @@ -2158,7 +2158,7 @@ static void ucc_geth_memclean(struct ucc_geth_private *ugeth) | |||
| 2158 | continue; | 2158 | continue; |
| 2159 | for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { | 2159 | for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { |
| 2160 | if (ugeth->tx_skbuff[i][j]) { | 2160 | if (ugeth->tx_skbuff[i][j]) { |
| 2161 | dma_unmap_single(NULL, | 2161 | dma_unmap_single(&ugeth->dev->dev, |
| 2162 | in_be32(&((struct qe_bd __iomem *)bd)->buf), | 2162 | in_be32(&((struct qe_bd __iomem *)bd)->buf), |
| 2163 | (in_be32((u32 __iomem *)bd) & | 2163 | (in_be32((u32 __iomem *)bd) & |
| 2164 | BD_LENGTH_MASK), | 2164 | BD_LENGTH_MASK), |
| @@ -2186,7 +2186,7 @@ static void ucc_geth_memclean(struct ucc_geth_private *ugeth) | |||
| 2186 | bd = ugeth->p_rx_bd_ring[i]; | 2186 | bd = ugeth->p_rx_bd_ring[i]; |
| 2187 | for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { | 2187 | for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { |
| 2188 | if (ugeth->rx_skbuff[i][j]) { | 2188 | if (ugeth->rx_skbuff[i][j]) { |
| 2189 | dma_unmap_single(NULL, | 2189 | dma_unmap_single(&ugeth->dev->dev, |
| 2190 | in_be32(&((struct qe_bd __iomem *)bd)->buf), | 2190 | in_be32(&((struct qe_bd __iomem *)bd)->buf), |
| 2191 | ugeth->ug_info-> | 2191 | ugeth->ug_info-> |
| 2192 | uf_info.max_rx_buf_length + | 2192 | uf_info.max_rx_buf_length + |
| @@ -3406,7 +3406,8 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 3406 | 3406 | ||
| 3407 | /* set up the buffer descriptor */ | 3407 | /* set up the buffer descriptor */ |
| 3408 | out_be32(&((struct qe_bd __iomem *)bd)->buf, | 3408 | out_be32(&((struct qe_bd __iomem *)bd)->buf, |
| 3409 | dma_map_single(NULL, skb->data, skb->len, DMA_TO_DEVICE)); | 3409 | dma_map_single(&ugeth->dev->dev, skb->data, |
| 3410 | skb->len, DMA_TO_DEVICE)); | ||
| 3410 | 3411 | ||
| 3411 | /* printk(KERN_DEBUG"skb->data is 0x%x\n",skb->data); */ | 3412 | /* printk(KERN_DEBUG"skb->data is 0x%x\n",skb->data); */ |
| 3412 | 3413 | ||
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index dc6f097062df..37ecf845edfe 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c | |||
| @@ -1440,6 +1440,10 @@ static const struct usb_device_id products [] = { | |||
| 1440 | // Belkin F5D5055 | 1440 | // Belkin F5D5055 |
| 1441 | USB_DEVICE(0x050d, 0x5055), | 1441 | USB_DEVICE(0x050d, 0x5055), |
| 1442 | .driver_info = (unsigned long) &ax88178_info, | 1442 | .driver_info = (unsigned long) &ax88178_info, |
| 1443 | }, { | ||
| 1444 | // Apple USB Ethernet Adapter | ||
| 1445 | USB_DEVICE(0x05ac, 0x1402), | ||
| 1446 | .driver_info = (unsigned long) &ax88772_info, | ||
| 1443 | }, | 1447 | }, |
| 1444 | { }, // END | 1448 | { }, // END |
| 1445 | }; | 1449 | }; |
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c index 3969b7a2b8e6..ae467f182c40 100644 --- a/drivers/net/usb/rndis_host.c +++ b/drivers/net/usb/rndis_host.c | |||
| @@ -194,7 +194,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf) | |||
| 194 | dev_dbg(&info->control->dev, | 194 | dev_dbg(&info->control->dev, |
| 195 | "rndis response error, code %d\n", retval); | 195 | "rndis response error, code %d\n", retval); |
| 196 | } | 196 | } |
| 197 | msleep(2); | 197 | msleep(20); |
| 198 | } | 198 | } |
| 199 | dev_dbg(&info->control->dev, "rndis response timeout\n"); | 199 | dev_dbg(&info->control->dev, "rndis response timeout\n"); |
| 200 | return -ETIMEDOUT; | 200 | return -ETIMEDOUT; |
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index f926b5ab3d09..fe7cdf2a2a23 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
| @@ -470,8 +470,7 @@ static void virtnet_remove(struct virtio_device *vdev) | |||
| 470 | kfree_skb(skb); | 470 | kfree_skb(skb); |
| 471 | vi->num--; | 471 | vi->num--; |
| 472 | } | 472 | } |
| 473 | while ((skb = __skb_dequeue(&vi->send)) != NULL) | 473 | __skb_queue_purge(&vi->send); |
| 474 | kfree_skb(skb); | ||
| 475 | 474 | ||
| 476 | BUG_ON(vi->num != 0); | 475 | BUG_ON(vi->num != 0); |
| 477 | 476 | ||
diff --git a/drivers/net/wan/hdlc.c b/drivers/net/wan/hdlc.c index 9a83c9d5b8cf..7f984895b0d5 100644 --- a/drivers/net/wan/hdlc.c +++ b/drivers/net/wan/hdlc.c | |||
| @@ -43,8 +43,7 @@ static const char* version = "HDLC support module revision 1.22"; | |||
| 43 | 43 | ||
| 44 | #undef DEBUG_LINK | 44 | #undef DEBUG_LINK |
| 45 | 45 | ||
| 46 | static struct hdlc_proto *first_proto = NULL; | 46 | static struct hdlc_proto *first_proto; |
| 47 | |||
| 48 | 47 | ||
| 49 | static int hdlc_change_mtu(struct net_device *dev, int new_mtu) | 48 | static int hdlc_change_mtu(struct net_device *dev, int new_mtu) |
| 50 | { | 49 | { |
| @@ -314,21 +313,25 @@ void detach_hdlc_protocol(struct net_device *dev) | |||
| 314 | 313 | ||
| 315 | void register_hdlc_protocol(struct hdlc_proto *proto) | 314 | void register_hdlc_protocol(struct hdlc_proto *proto) |
| 316 | { | 315 | { |
| 316 | rtnl_lock(); | ||
| 317 | proto->next = first_proto; | 317 | proto->next = first_proto; |
| 318 | first_proto = proto; | 318 | first_proto = proto; |
| 319 | rtnl_unlock(); | ||
| 319 | } | 320 | } |
| 320 | 321 | ||
| 321 | 322 | ||
| 322 | void unregister_hdlc_protocol(struct hdlc_proto *proto) | 323 | void unregister_hdlc_protocol(struct hdlc_proto *proto) |
| 323 | { | 324 | { |
| 324 | struct hdlc_proto **p = &first_proto; | 325 | struct hdlc_proto **p; |
| 325 | while (*p) { | 326 | |
| 326 | if (*p == proto) { | 327 | rtnl_lock(); |
| 327 | *p = proto->next; | 328 | p = &first_proto; |
| 328 | return; | 329 | while (*p != proto) { |
| 329 | } | 330 | BUG_ON(!*p); |
| 330 | p = &((*p)->next); | 331 | p = &((*p)->next); |
| 331 | } | 332 | } |
| 333 | *p = proto->next; | ||
| 334 | rtnl_unlock(); | ||
| 332 | } | 335 | } |
| 333 | 336 | ||
| 334 | 337 | ||
diff --git a/drivers/net/wan/hdlc_cisco.c b/drivers/net/wan/hdlc_cisco.c index 7133c688cf20..762d21c1c703 100644 --- a/drivers/net/wan/hdlc_cisco.c +++ b/drivers/net/wan/hdlc_cisco.c | |||
| @@ -56,6 +56,7 @@ struct cisco_state { | |||
| 56 | cisco_proto settings; | 56 | cisco_proto settings; |
| 57 | 57 | ||
| 58 | struct timer_list timer; | 58 | struct timer_list timer; |
| 59 | spinlock_t lock; | ||
| 59 | unsigned long last_poll; | 60 | unsigned long last_poll; |
| 60 | int up; | 61 | int up; |
| 61 | int request_sent; | 62 | int request_sent; |
| @@ -158,6 +159,7 @@ static int cisco_rx(struct sk_buff *skb) | |||
| 158 | { | 159 | { |
| 159 | struct net_device *dev = skb->dev; | 160 | struct net_device *dev = skb->dev; |
| 160 | hdlc_device *hdlc = dev_to_hdlc(dev); | 161 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 162 | struct cisco_state *st = state(hdlc); | ||
| 161 | struct hdlc_header *data = (struct hdlc_header*)skb->data; | 163 | struct hdlc_header *data = (struct hdlc_header*)skb->data; |
| 162 | struct cisco_packet *cisco_data; | 164 | struct cisco_packet *cisco_data; |
| 163 | struct in_device *in_dev; | 165 | struct in_device *in_dev; |
| @@ -220,11 +222,12 @@ static int cisco_rx(struct sk_buff *skb) | |||
| 220 | goto rx_error; | 222 | goto rx_error; |
| 221 | 223 | ||
| 222 | case CISCO_KEEPALIVE_REQ: | 224 | case CISCO_KEEPALIVE_REQ: |
| 223 | state(hdlc)->rxseq = ntohl(cisco_data->par1); | 225 | spin_lock(&st->lock); |
| 224 | if (state(hdlc)->request_sent && | 226 | st->rxseq = ntohl(cisco_data->par1); |
| 225 | ntohl(cisco_data->par2) == state(hdlc)->txseq) { | 227 | if (st->request_sent && |
| 226 | state(hdlc)->last_poll = jiffies; | 228 | ntohl(cisco_data->par2) == st->txseq) { |
| 227 | if (!state(hdlc)->up) { | 229 | st->last_poll = jiffies; |
| 230 | if (!st->up) { | ||
| 228 | u32 sec, min, hrs, days; | 231 | u32 sec, min, hrs, days; |
| 229 | sec = ntohl(cisco_data->time) / 1000; | 232 | sec = ntohl(cisco_data->time) / 1000; |
| 230 | min = sec / 60; sec -= min * 60; | 233 | min = sec / 60; sec -= min * 60; |
| @@ -232,12 +235,12 @@ static int cisco_rx(struct sk_buff *skb) | |||
| 232 | days = hrs / 24; hrs -= days * 24; | 235 | days = hrs / 24; hrs -= days * 24; |
| 233 | printk(KERN_INFO "%s: Link up (peer " | 236 | printk(KERN_INFO "%s: Link up (peer " |
| 234 | "uptime %ud%uh%um%us)\n", | 237 | "uptime %ud%uh%um%us)\n", |
| 235 | dev->name, days, hrs, | 238 | dev->name, days, hrs, min, sec); |
| 236 | min, sec); | ||
| 237 | netif_dormant_off(dev); | 239 | netif_dormant_off(dev); |
| 238 | state(hdlc)->up = 1; | 240 | st->up = 1; |
| 239 | } | 241 | } |
| 240 | } | 242 | } |
| 243 | spin_unlock(&st->lock); | ||
| 241 | 244 | ||
| 242 | dev_kfree_skb_any(skb); | 245 | dev_kfree_skb_any(skb); |
| 243 | return NET_RX_SUCCESS; | 246 | return NET_RX_SUCCESS; |
| @@ -261,24 +264,25 @@ static void cisco_timer(unsigned long arg) | |||
| 261 | { | 264 | { |
| 262 | struct net_device *dev = (struct net_device *)arg; | 265 | struct net_device *dev = (struct net_device *)arg; |
| 263 | hdlc_device *hdlc = dev_to_hdlc(dev); | 266 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 267 | struct cisco_state *st = state(hdlc); | ||
| 264 | 268 | ||
| 265 | if (state(hdlc)->up && | 269 | spin_lock(&st->lock); |
| 266 | time_after(jiffies, state(hdlc)->last_poll + | 270 | if (st->up && |
| 267 | state(hdlc)->settings.timeout * HZ)) { | 271 | time_after(jiffies, st->last_poll + st->settings.timeout * HZ)) { |
| 268 | state(hdlc)->up = 0; | 272 | st->up = 0; |
| 269 | printk(KERN_INFO "%s: Link down\n", dev->name); | 273 | printk(KERN_INFO "%s: Link down\n", dev->name); |
| 270 | netif_dormant_on(dev); | 274 | netif_dormant_on(dev); |
| 271 | } | 275 | } |
| 272 | 276 | ||
| 273 | cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ, | 277 | cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ, htonl(++st->txseq), |
| 274 | htonl(++state(hdlc)->txseq), | 278 | htonl(st->rxseq)); |
| 275 | htonl(state(hdlc)->rxseq)); | 279 | st->request_sent = 1; |
| 276 | state(hdlc)->request_sent = 1; | 280 | spin_unlock(&st->lock); |
| 277 | state(hdlc)->timer.expires = jiffies + | 281 | |
| 278 | state(hdlc)->settings.interval * HZ; | 282 | st->timer.expires = jiffies + st->settings.interval * HZ; |
| 279 | state(hdlc)->timer.function = cisco_timer; | 283 | st->timer.function = cisco_timer; |
| 280 | state(hdlc)->timer.data = arg; | 284 | st->timer.data = arg; |
| 281 | add_timer(&state(hdlc)->timer); | 285 | add_timer(&st->timer); |
| 282 | } | 286 | } |
| 283 | 287 | ||
| 284 | 288 | ||
| @@ -286,15 +290,20 @@ static void cisco_timer(unsigned long arg) | |||
| 286 | static void cisco_start(struct net_device *dev) | 290 | static void cisco_start(struct net_device *dev) |
| 287 | { | 291 | { |
| 288 | hdlc_device *hdlc = dev_to_hdlc(dev); | 292 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 289 | state(hdlc)->up = 0; | 293 | struct cisco_state *st = state(hdlc); |
| 290 | state(hdlc)->request_sent = 0; | 294 | unsigned long flags; |
| 291 | state(hdlc)->txseq = state(hdlc)->rxseq = 0; | 295 | |
| 292 | 296 | spin_lock_irqsave(&st->lock, flags); | |
| 293 | init_timer(&state(hdlc)->timer); | 297 | st->up = 0; |
| 294 | state(hdlc)->timer.expires = jiffies + HZ; /*First poll after 1s*/ | 298 | st->request_sent = 0; |
| 295 | state(hdlc)->timer.function = cisco_timer; | 299 | st->txseq = st->rxseq = 0; |
| 296 | state(hdlc)->timer.data = (unsigned long)dev; | 300 | spin_unlock_irqrestore(&st->lock, flags); |
| 297 | add_timer(&state(hdlc)->timer); | 301 | |
| 302 | init_timer(&st->timer); | ||
| 303 | st->timer.expires = jiffies + HZ; /* First poll after 1 s */ | ||
| 304 | st->timer.function = cisco_timer; | ||
| 305 | st->timer.data = (unsigned long)dev; | ||
| 306 | add_timer(&st->timer); | ||
| 298 | } | 307 | } |
| 299 | 308 | ||
| 300 | 309 | ||
| @@ -302,10 +311,16 @@ static void cisco_start(struct net_device *dev) | |||
| 302 | static void cisco_stop(struct net_device *dev) | 311 | static void cisco_stop(struct net_device *dev) |
| 303 | { | 312 | { |
| 304 | hdlc_device *hdlc = dev_to_hdlc(dev); | 313 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 305 | del_timer_sync(&state(hdlc)->timer); | 314 | struct cisco_state *st = state(hdlc); |
| 315 | unsigned long flags; | ||
| 316 | |||
| 317 | del_timer_sync(&st->timer); | ||
| 318 | |||
| 319 | spin_lock_irqsave(&st->lock, flags); | ||
| 306 | netif_dormant_on(dev); | 320 | netif_dormant_on(dev); |
| 307 | state(hdlc)->up = 0; | 321 | st->up = 0; |
| 308 | state(hdlc)->request_sent = 0; | 322 | st->request_sent = 0; |
| 323 | spin_unlock_irqrestore(&st->lock, flags); | ||
| 309 | } | 324 | } |
| 310 | 325 | ||
| 311 | 326 | ||
| @@ -367,6 +382,7 @@ static int cisco_ioctl(struct net_device *dev, struct ifreq *ifr) | |||
| 367 | return result; | 382 | return result; |
| 368 | 383 | ||
| 369 | memcpy(&state(hdlc)->settings, &new_settings, size); | 384 | memcpy(&state(hdlc)->settings, &new_settings, size); |
| 385 | spin_lock_init(&state(hdlc)->lock); | ||
| 370 | dev->hard_start_xmit = hdlc->xmit; | 386 | dev->hard_start_xmit = hdlc->xmit; |
| 371 | dev->header_ops = &cisco_header_ops; | 387 | dev->header_ops = &cisco_header_ops; |
| 372 | dev->type = ARPHRD_CISCO; | 388 | dev->type = ARPHRD_CISCO; |
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h index 37783cdd301a..dfa4bdd5597c 100644 --- a/drivers/net/wireless/b43/b43.h +++ b/drivers/net/wireless/b43/b43.h | |||
| @@ -737,6 +737,7 @@ struct b43_wl { | |||
| 737 | struct ieee80211_tx_control beacon_txctl; | 737 | struct ieee80211_tx_control beacon_txctl; |
| 738 | bool beacon0_uploaded; | 738 | bool beacon0_uploaded; |
| 739 | bool beacon1_uploaded; | 739 | bool beacon1_uploaded; |
| 740 | bool beacon_templates_virgin; /* Never wrote the templates? */ | ||
| 740 | struct work_struct beacon_update_trigger; | 741 | struct work_struct beacon_update_trigger; |
| 741 | 742 | ||
| 742 | /* The current QOS parameters for the 4 queues. | 743 | /* The current QOS parameters for the 4 queues. |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 8fdba9415c04..6c3d9ea0a9f8 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_template(struct b43_wldev *dev, | |||
| 1544 | kfree(probe_resp_data); | 1544 | kfree(probe_resp_data); |
| 1545 | } | 1545 | } |
| 1546 | 1546 | ||
| 1547 | static void b43_upload_beacon0(struct b43_wldev *dev) | ||
| 1548 | { | ||
| 1549 | struct b43_wl *wl = dev->wl; | ||
| 1550 | |||
| 1551 | if (wl->beacon0_uploaded) | ||
| 1552 | return; | ||
| 1553 | b43_write_beacon_template(dev, 0x68, 0x18); | ||
| 1554 | /* FIXME: Probe resp upload doesn't really belong here, | ||
| 1555 | * but we don't use that feature anyway. */ | ||
| 1556 | b43_write_probe_resp_template(dev, 0x268, 0x4A, | ||
| 1557 | &__b43_ratetable[3]); | ||
| 1558 | wl->beacon0_uploaded = 1; | ||
| 1559 | } | ||
| 1560 | |||
| 1561 | static void b43_upload_beacon1(struct b43_wldev *dev) | ||
| 1562 | { | ||
| 1563 | struct b43_wl *wl = dev->wl; | ||
| 1564 | |||
| 1565 | if (wl->beacon1_uploaded) | ||
| 1566 | return; | ||
| 1567 | b43_write_beacon_template(dev, 0x468, 0x1A); | ||
| 1568 | wl->beacon1_uploaded = 1; | ||
| 1569 | } | ||
| 1570 | |||
| 1547 | static void handle_irq_beacon(struct b43_wldev *dev) | 1571 | static void handle_irq_beacon(struct b43_wldev *dev) |
| 1548 | { | 1572 | { |
| 1549 | struct b43_wl *wl = dev->wl; | 1573 | struct b43_wl *wl = dev->wl; |
| @@ -1568,24 +1592,27 @@ static void handle_irq_beacon(struct b43_wldev *dev) | |||
| 1568 | return; | 1592 | return; |
| 1569 | } | 1593 | } |
| 1570 | 1594 | ||
| 1571 | if (!beacon0_valid) { | 1595 | if (unlikely(wl->beacon_templates_virgin)) { |
| 1572 | if (!wl->beacon0_uploaded) { | 1596 | /* We never uploaded a beacon before. |
| 1573 | b43_write_beacon_template(dev, 0x68, 0x18); | 1597 | * Upload both templates now, but only mark one valid. */ |
| 1574 | b43_write_probe_resp_template(dev, 0x268, 0x4A, | 1598 | wl->beacon_templates_virgin = 0; |
| 1575 | &__b43_ratetable[3]); | 1599 | b43_upload_beacon0(dev); |
| 1576 | wl->beacon0_uploaded = 1; | 1600 | b43_upload_beacon1(dev); |
| 1577 | } | ||
| 1578 | cmd = b43_read32(dev, B43_MMIO_MACCMD); | 1601 | cmd = b43_read32(dev, B43_MMIO_MACCMD); |
| 1579 | cmd |= B43_MACCMD_BEACON0_VALID; | 1602 | cmd |= B43_MACCMD_BEACON0_VALID; |
| 1580 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | 1603 | b43_write32(dev, B43_MMIO_MACCMD, cmd); |
| 1581 | } else if (!beacon1_valid) { | 1604 | } else { |
| 1582 | if (!wl->beacon1_uploaded) { | 1605 | if (!beacon0_valid) { |
| 1583 | b43_write_beacon_template(dev, 0x468, 0x1A); | 1606 | b43_upload_beacon0(dev); |
| 1584 | wl->beacon1_uploaded = 1; | 1607 | cmd = b43_read32(dev, B43_MMIO_MACCMD); |
| 1608 | cmd |= B43_MACCMD_BEACON0_VALID; | ||
| 1609 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | ||
| 1610 | } else if (!beacon1_valid) { | ||
| 1611 | b43_upload_beacon1(dev); | ||
| 1612 | cmd = b43_read32(dev, B43_MMIO_MACCMD); | ||
| 1613 | cmd |= B43_MACCMD_BEACON1_VALID; | ||
| 1614 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | ||
| 1585 | } | 1615 | } |
| 1586 | cmd = b43_read32(dev, B43_MMIO_MACCMD); | ||
| 1587 | cmd |= B43_MACCMD_BEACON1_VALID; | ||
| 1588 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | ||
| 1589 | } | 1616 | } |
| 1590 | } | 1617 | } |
| 1591 | 1618 | ||
| @@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211_hw *hw) | |||
| 4073 | wl->filter_flags = 0; | 4100 | wl->filter_flags = 0; |
| 4074 | wl->radiotap_enabled = 0; | 4101 | wl->radiotap_enabled = 0; |
| 4075 | b43_qos_clear(wl); | 4102 | b43_qos_clear(wl); |
| 4103 | wl->beacon0_uploaded = 0; | ||
| 4104 | wl->beacon1_uploaded = 0; | ||
| 4105 | wl->beacon_templates_virgin = 1; | ||
| 4076 | 4106 | ||
| 4077 | /* First register RFkill. | 4107 | /* First register RFkill. |
| 4078 | * LEDs that are registered later depend on it. */ | 4108 | * LEDs that are registered later depend on it. */ |
| @@ -4241,7 +4271,9 @@ static void b43_chip_reset(struct work_struct *work) | |||
| 4241 | goto out; | 4271 | goto out; |
| 4242 | } | 4272 | } |
| 4243 | } | 4273 | } |
| 4244 | out: | 4274 | out: |
| 4275 | if (err) | ||
| 4276 | wl->current_dev = NULL; /* Failed to init the dev. */ | ||
| 4245 | mutex_unlock(&wl->mutex); | 4277 | mutex_unlock(&wl->mutex); |
| 4246 | if (err) | 4278 | if (err) |
| 4247 | b43err(wl, "Controller restart FAILED\n"); | 4279 | b43err(wl, "Controller restart FAILED\n"); |
| @@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct ssb_device *dev) | |||
| 4382 | struct b43_wldev *wldev; | 4414 | struct b43_wldev *wldev; |
| 4383 | struct b43_wl *wl; | 4415 | struct b43_wl *wl; |
| 4384 | 4416 | ||
| 4417 | /* Do not cancel ieee80211-workqueue based work here. | ||
| 4418 | * See comment in b43_remove(). */ | ||
| 4419 | |||
| 4385 | wldev = ssb_get_drvdata(dev); | 4420 | wldev = ssb_get_drvdata(dev); |
| 4386 | wl = wldev->wl; | 4421 | wl = wldev->wl; |
| 4387 | cancel_work_sync(&wldev->restart_work); | ||
| 4388 | b43_debugfs_remove_device(wldev); | 4422 | b43_debugfs_remove_device(wldev); |
| 4389 | b43_wireless_core_detach(wldev); | 4423 | b43_wireless_core_detach(wldev); |
| 4390 | list_del(&wldev->list); | 4424 | list_del(&wldev->list); |
| @@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device *dev) | |||
| 4569 | struct b43_wl *wl = ssb_get_devtypedata(dev); | 4603 | struct b43_wl *wl = ssb_get_devtypedata(dev); |
| 4570 | struct b43_wldev *wldev = ssb_get_drvdata(dev); | 4604 | struct b43_wldev *wldev = ssb_get_drvdata(dev); |
| 4571 | 4605 | ||
| 4606 | /* We must cancel any work here before unregistering from ieee80211, | ||
| 4607 | * as the ieee80211 unreg will destroy the workqueue. */ | ||
| 4608 | cancel_work_sync(&wldev->restart_work); | ||
| 4609 | |||
| 4572 | B43_WARN_ON(!wl); | 4610 | B43_WARN_ON(!wl); |
| 4573 | if (wl->current_dev == wldev) | 4611 | if (wl->current_dev == wldev) |
| 4574 | ieee80211_unregister_hw(wl->hw); | 4612 | ieee80211_unregister_hw(wl->hw); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c index c9847b1a67f7..3a7f0cb710ec 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c | |||
| @@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_priv *priv, | |||
| 1162 | 1162 | ||
| 1163 | /* Higher rate not available, use the original */ | 1163 | /* Higher rate not available, use the original */ |
| 1164 | } else { | 1164 | } else { |
| 1165 | new_rate = rate; | ||
| 1166 | break; | 1165 | break; |
| 1167 | } | 1166 | } |
| 1168 | } | 1167 | } |
| @@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
| 2009 | * 2) Not just finishing up a search | 2008 | * 2) Not just finishing up a search |
| 2010 | * 3) Allowing a new search | 2009 | * 3) Allowing a new search |
| 2011 | */ | 2010 | */ |
| 2012 | if (!update_lq && !done_search && !lq_sta->stay_in_tbl) { | 2011 | if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { |
| 2013 | /* Save current throughput to compare with "search" throughput*/ | 2012 | /* Save current throughput to compare with "search" throughput*/ |
| 2014 | lq_sta->last_tpt = current_tpt; | 2013 | lq_sta->last_tpt = current_tpt; |
| 2015 | 2014 | ||
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index d0b1fb15c709..18c9931e3267 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c | |||
| @@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval, | |||
| 116 | #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) | 116 | #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) |
| 117 | #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) | 117 | #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) |
| 118 | #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) | 118 | #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) |
| 119 | #define OID_802_11_ASSOCIATION_INFORMATION ccpu2(0x0d01011f) | ||
| 119 | #define OID_802_11_PMKID ccpu2(0x0d010123) | 120 | #define OID_802_11_PMKID ccpu2(0x0d010123) |
| 120 | #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) | 121 | #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) |
| 121 | #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) | 122 | #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) |
| @@ -271,6 +272,26 @@ struct ndis_config_param { | |||
| 271 | __le32 value_length; | 272 | __le32 value_length; |
| 272 | } __attribute__((packed)); | 273 | } __attribute__((packed)); |
| 273 | 274 | ||
| 275 | struct ndis_80211_assoc_info { | ||
| 276 | __le32 length; | ||
| 277 | __le16 req_ies; | ||
| 278 | struct req_ie { | ||
| 279 | __le16 capa; | ||
| 280 | __le16 listen_interval; | ||
| 281 | u8 cur_ap_address[6]; | ||
| 282 | } req_ie; | ||
| 283 | __le32 req_ie_length; | ||
| 284 | __le32 offset_req_ies; | ||
| 285 | __le16 resp_ies; | ||
| 286 | struct resp_ie { | ||
| 287 | __le16 capa; | ||
| 288 | __le16 status_code; | ||
| 289 | __le16 assoc_id; | ||
| 290 | } resp_ie; | ||
| 291 | __le32 resp_ie_length; | ||
| 292 | __le32 offset_resp_ies; | ||
| 293 | } __attribute__((packed)); | ||
| 294 | |||
| 274 | /* these have to match what is in wpa_supplicant */ | 295 | /* these have to match what is in wpa_supplicant */ |
| 275 | enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; | 296 | enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; |
| 276 | enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, | 297 | enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, |
| @@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbdev, u8 bssid[ETH_ALEN]) | |||
| 674 | return ret; | 695 | return ret; |
| 675 | } | 696 | } |
| 676 | 697 | ||
| 698 | static int get_association_info(struct usbnet *usbdev, | ||
| 699 | struct ndis_80211_assoc_info *info, int len) | ||
| 700 | { | ||
| 701 | return rndis_query_oid(usbdev, OID_802_11_ASSOCIATION_INFORMATION, | ||
| 702 | info, &len); | ||
| 703 | } | ||
| 677 | 704 | ||
| 678 | static int is_associated(struct usbnet *usbdev) | 705 | static int is_associated(struct usbnet *usbdev) |
| 679 | { | 706 | { |
| @@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct work_struct *work) | |||
| 2182 | struct usbnet *usbdev = priv->usbdev; | 2209 | struct usbnet *usbdev = priv->usbdev; |
| 2183 | union iwreq_data evt; | 2210 | union iwreq_data evt; |
| 2184 | unsigned char bssid[ETH_ALEN]; | 2211 | unsigned char bssid[ETH_ALEN]; |
| 2185 | int ret; | 2212 | struct ndis_80211_assoc_info *info; |
| 2213 | int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32; | ||
| 2214 | int ret, offset; | ||
| 2186 | 2215 | ||
| 2187 | if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { | 2216 | if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { |
| 2188 | ret = get_bssid(usbdev, bssid); | 2217 | info = kzalloc(assoc_size, GFP_KERNEL); |
| 2218 | if (!info) | ||
| 2219 | goto get_bssid; | ||
| 2220 | |||
| 2221 | /* Get association info IEs from device and send them back to | ||
| 2222 | * userspace. */ | ||
| 2223 | ret = get_association_info(usbdev, info, assoc_size); | ||
| 2224 | if (!ret) { | ||
| 2225 | evt.data.length = le32_to_cpu(info->req_ie_length); | ||
| 2226 | if (evt.data.length > 0) { | ||
| 2227 | offset = le32_to_cpu(info->offset_req_ies); | ||
| 2228 | wireless_send_event(usbdev->net, | ||
| 2229 | IWEVASSOCREQIE, &evt, | ||
| 2230 | (char *)info + offset); | ||
| 2231 | } | ||
| 2232 | |||
| 2233 | evt.data.length = le32_to_cpu(info->resp_ie_length); | ||
| 2234 | if (evt.data.length > 0) { | ||
| 2235 | offset = le32_to_cpu(info->offset_resp_ies); | ||
| 2236 | wireless_send_event(usbdev->net, | ||
| 2237 | IWEVASSOCRESPIE, &evt, | ||
| 2238 | (char *)info + offset); | ||
| 2239 | } | ||
| 2240 | } | ||
| 2241 | |||
| 2242 | kfree(info); | ||
| 2189 | 2243 | ||
| 2244 | get_bssid: | ||
| 2245 | ret = get_bssid(usbdev, bssid); | ||
| 2190 | if (!ret) { | 2246 | if (!ret) { |
| 2191 | evt.data.flags = 0; | 2247 | evt.data.flags = 0; |
| 2192 | evt.data.length = 0; | 2248 | evt.data.length = 0; |
| @@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usbnet *dev) | |||
| 2414 | else if (priv->param_power_save > 2) | 2470 | else if (priv->param_power_save > 2) |
| 2415 | priv->param_power_save = 2; | 2471 | priv->param_power_save = 2; |
| 2416 | 2472 | ||
| 2473 | if (priv->param_power_output < 0) | ||
| 2474 | priv->param_power_output = 0; | ||
| 2475 | else if (priv->param_power_output > 3) | ||
| 2476 | priv->param_power_output = 3; | ||
| 2477 | |||
| 2417 | if (priv->param_roamtrigger < -80) | 2478 | if (priv->param_roamtrigger < -80) |
| 2418 | priv->param_roamtrigger = -80; | 2479 | priv->param_roamtrigger = -80; |
| 2419 | else if (priv->param_roamtrigger > -60) | 2480 | else if (priv->param_roamtrigger > -60) |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 57bdc153952f..611d98320593 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
| @@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rssi(struct link *link) | |||
| 328 | return DEFAULT_RSSI; | 328 | return DEFAULT_RSSI; |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | static inline void rt2x00_reset_link_ant_rssi(struct link *link) | ||
| 332 | { | ||
| 333 | link->ant.rssi_ant = 0; | ||
| 334 | } | ||
| 335 | |||
| 331 | static inline int rt2x00_get_link_ant_rssi_history(struct link *link, | 336 | static inline int rt2x00_get_link_ant_rssi_history(struct link *link, |
| 332 | enum antenna ant) | 337 | enum antenna ant) |
| 333 | { | 338 | { |
diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c index a9930a03f450..48608e8cc8b4 100644 --- a/drivers/net/wireless/rt2x00/rt2x00config.c +++ b/drivers/net/wireless/rt2x00/rt2x00config.c | |||
| @@ -129,6 +129,7 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, | |||
| 129 | */ | 129 | */ |
| 130 | rt2x00dev->ops->lib->config(rt2x00dev, &libconf, CONFIG_UPDATE_ANTENNA); | 130 | rt2x00dev->ops->lib->config(rt2x00dev, &libconf, CONFIG_UPDATE_ANTENNA); |
| 131 | rt2x00lib_reset_link_tuner(rt2x00dev); | 131 | rt2x00lib_reset_link_tuner(rt2x00dev); |
| 132 | rt2x00_reset_link_ant_rssi(&rt2x00dev->link); | ||
| 132 | 133 | ||
| 133 | rt2x00dev->link.ant.active.rx = libconf.ant.rx; | 134 | rt2x00dev->link.ant.active.rx = libconf.ant.rx; |
| 134 | rt2x00dev->link.ant.active.tx = libconf.ant.tx; | 135 | rt2x00dev->link.ant.active.tx = libconf.ant.tx; |
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index b22c02737185..2673d568bcac 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
| @@ -483,9 +483,9 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev) | |||
| 483 | if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) | 483 | if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) |
| 484 | return; | 484 | return; |
| 485 | 485 | ||
| 486 | ieee80211_iterate_active_interfaces(rt2x00dev->hw, | 486 | ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw, |
| 487 | rt2x00lib_beacondone_iter, | 487 | rt2x00lib_beacondone_iter, |
| 488 | rt2x00dev); | 488 | rt2x00dev); |
| 489 | 489 | ||
| 490 | queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work); | 490 | queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work); |
| 491 | } | 491 | } |
| @@ -507,7 +507,7 @@ void rt2x00lib_txdone(struct queue_entry *entry, | |||
| 507 | * Update TX statistics. | 507 | * Update TX statistics. |
| 508 | */ | 508 | */ |
| 509 | rt2x00dev->link.qual.tx_success += success; | 509 | rt2x00dev->link.qual.tx_success += success; |
| 510 | rt2x00dev->link.qual.tx_failed += txdesc->retry + fail; | 510 | rt2x00dev->link.qual.tx_failed += fail; |
| 511 | 511 | ||
| 512 | /* | 512 | /* |
| 513 | * Initialize TX status | 513 | * Initialize TX status |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index c206b5092070..87e280a21971 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
| @@ -93,6 +93,7 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
| 93 | */ | 93 | */ |
| 94 | if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) { | 94 | if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) { |
| 95 | ieee80211_stop_queues(hw); | 95 | ieee80211_stop_queues(hw); |
| 96 | dev_kfree_skb_any(skb); | ||
| 96 | return NETDEV_TX_OK; | 97 | return NETDEV_TX_OK; |
| 97 | } | 98 | } |
| 98 | 99 | ||
diff --git a/drivers/net/wireless/rtl8180_grf5101.c b/drivers/net/wireless/rtl8180_grf5101.c index 5d47935dbac3..947ee55f18b2 100644 --- a/drivers/net/wireless/rtl8180_grf5101.c +++ b/drivers/net/wireless/rtl8180_grf5101.c | |||
| @@ -88,7 +88,7 @@ static void grf5101_rf_set_channel(struct ieee80211_hw *dev, | |||
| 88 | write_grf5101(dev, 0x0B, chan); | 88 | write_grf5101(dev, 0x0B, chan); |
| 89 | write_grf5101(dev, 0x07, 0x1000); | 89 | write_grf5101(dev, 0x07, 0x1000); |
| 90 | 90 | ||
| 91 | grf5101_write_phy_antenna(dev, chan); | 91 | grf5101_write_phy_antenna(dev, channel); |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | static void grf5101_rf_stop(struct ieee80211_hw *dev) | 94 | static void grf5101_rf_stop(struct ieee80211_hw *dev) |
diff --git a/drivers/net/wireless/rtl8180_max2820.c b/drivers/net/wireless/rtl8180_max2820.c index a34dfd382b6d..6c825fd7f3b6 100644 --- a/drivers/net/wireless/rtl8180_max2820.c +++ b/drivers/net/wireless/rtl8180_max2820.c | |||
| @@ -78,7 +78,8 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev, | |||
| 78 | struct ieee80211_conf *conf) | 78 | struct ieee80211_conf *conf) |
| 79 | { | 79 | { |
| 80 | struct rtl8180_priv *priv = dev->priv; | 80 | struct rtl8180_priv *priv = dev->priv; |
| 81 | int channel = ieee80211_frequency_to_channel(conf->channel->center_freq); | 81 | int channel = conf ? |
| 82 | ieee80211_frequency_to_channel(conf->channel->center_freq) : 1; | ||
| 82 | unsigned int chan_idx = channel - 1; | 83 | unsigned int chan_idx = channel - 1; |
| 83 | u32 txpw = priv->channels[chan_idx].hw_value & 0xFF; | 84 | u32 txpw = priv->channels[chan_idx].hw_value & 0xFF; |
| 84 | u32 chan = max2820_chan[chan_idx]; | 85 | u32 chan = max2820_chan[chan_idx]; |
| @@ -87,7 +88,7 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev, | |||
| 87 | * sa2400, for MAXIM we do this directly from BB */ | 88 | * sa2400, for MAXIM we do this directly from BB */ |
| 88 | rtl8180_write_phy(dev, 3, txpw); | 89 | rtl8180_write_phy(dev, 3, txpw); |
| 89 | 90 | ||
| 90 | max2820_write_phy_antenna(dev, chan); | 91 | max2820_write_phy_antenna(dev, channel); |
| 91 | write_max2820(dev, 3, chan); | 92 | write_max2820(dev, 3, chan); |
| 92 | } | 93 | } |
| 93 | 94 | ||
diff --git a/drivers/net/wireless/rtl8180_sa2400.c b/drivers/net/wireless/rtl8180_sa2400.c index 0311b4ea124c..cea4e0ccb92d 100644 --- a/drivers/net/wireless/rtl8180_sa2400.c +++ b/drivers/net/wireless/rtl8180_sa2400.c | |||
| @@ -86,7 +86,7 @@ static void sa2400_rf_set_channel(struct ieee80211_hw *dev, | |||
| 86 | 86 | ||
| 87 | write_sa2400(dev, 7, txpw); | 87 | write_sa2400(dev, 7, txpw); |
| 88 | 88 | ||
| 89 | sa2400_write_phy_antenna(dev, chan); | 89 | sa2400_write_phy_antenna(dev, channel); |
| 90 | 90 | ||
| 91 | write_sa2400(dev, 0, chan); | 91 | write_sa2400(dev, 0, chan); |
| 92 | write_sa2400(dev, 1, 0xbb50); | 92 | write_sa2400(dev, 1, 0xbb50); |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 8bddff150c70..d26f69b0184f 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
| @@ -946,8 +946,7 @@ err: | |||
| 946 | work_done++; | 946 | work_done++; |
| 947 | } | 947 | } |
| 948 | 948 | ||
| 949 | while ((skb = __skb_dequeue(&errq))) | 949 | __skb_queue_purge(&errq); |
| 950 | kfree_skb(skb); | ||
| 951 | 950 | ||
| 952 | work_done -= handle_incoming_queue(dev, &rxq); | 951 | work_done -= handle_incoming_queue(dev, &rxq); |
| 953 | 952 | ||
| @@ -1079,8 +1078,7 @@ static void xennet_release_rx_bufs(struct netfront_info *np) | |||
| 1079 | } | 1078 | } |
| 1080 | } | 1079 | } |
| 1081 | 1080 | ||
| 1082 | while ((skb = __skb_dequeue(&free_list)) != NULL) | 1081 | __skb_queue_purge(&free_list); |
| 1083 | dev_kfree_skb(skb); | ||
| 1084 | 1082 | ||
| 1085 | spin_unlock_bh(&np->rx_lock); | 1083 | spin_unlock_bh(&np->rx_lock); |
| 1086 | } | 1084 | } |
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c index 925ba16355ce..a11021e8ce37 100644 --- a/drivers/pci/hotplug/pci_hotplug_core.c +++ b/drivers/pci/hotplug/pci_hotplug_core.c | |||
| @@ -619,6 +619,7 @@ static struct hotplug_slot *get_slot_from_name (const char *name) | |||
| 619 | int pci_hp_register (struct hotplug_slot *slot) | 619 | int pci_hp_register (struct hotplug_slot *slot) |
| 620 | { | 620 | { |
| 621 | int result; | 621 | int result; |
| 622 | struct hotplug_slot *tmp; | ||
| 622 | 623 | ||
| 623 | if (slot == NULL) | 624 | if (slot == NULL) |
| 624 | return -ENODEV; | 625 | return -ENODEV; |
| @@ -630,7 +631,11 @@ int pci_hp_register (struct hotplug_slot *slot) | |||
| 630 | return -EINVAL; | 631 | return -EINVAL; |
| 631 | } | 632 | } |
| 632 | 633 | ||
| 633 | /* this can fail if we have already registered a slot with the same name */ | 634 | /* Check if we have already registered a slot with the same name. */ |
| 635 | tmp = get_slot_from_name(slot->name); | ||
| 636 | if (tmp) | ||
| 637 | return -EEXIST; | ||
| 638 | |||
| 634 | slot->kobj.kset = pci_hotplug_slots_kset; | 639 | slot->kobj.kset = pci_hotplug_slots_kset; |
| 635 | result = kobject_init_and_add(&slot->kobj, &hotplug_slot_ktype, NULL, | 640 | result = kobject_init_and_add(&slot->kobj, &hotplug_slot_ktype, NULL, |
| 636 | "%s", slot->name); | 641 | "%s", slot->name); |
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index 8264a7680435..79c9ddaad3fb 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h | |||
| @@ -97,6 +97,7 @@ struct controller { | |||
| 97 | u8 cap_base; | 97 | u8 cap_base; |
| 98 | struct timer_list poll_timer; | 98 | struct timer_list poll_timer; |
| 99 | volatile int cmd_busy; | 99 | volatile int cmd_busy; |
| 100 | unsigned int no_cmd_complete:1; | ||
| 100 | }; | 101 | }; |
| 101 | 102 | ||
| 102 | #define INT_BUTTON_IGNORE 0 | 103 | #define INT_BUTTON_IGNORE 0 |
| @@ -135,6 +136,7 @@ struct controller { | |||
| 135 | #define PWR_LED_PRSN 0x00000010 | 136 | #define PWR_LED_PRSN 0x00000010 |
| 136 | #define HP_SUPR_RM_SUP 0x00000020 | 137 | #define HP_SUPR_RM_SUP 0x00000020 |
| 137 | #define EMI_PRSN 0x00020000 | 138 | #define EMI_PRSN 0x00020000 |
| 139 | #define NO_CMD_CMPL_SUP 0x00040000 | ||
| 138 | 140 | ||
| 139 | #define ATTN_BUTTN(ctrl) ((ctrl)->slot_cap & ATTN_BUTTN_PRSN) | 141 | #define ATTN_BUTTN(ctrl) ((ctrl)->slot_cap & ATTN_BUTTN_PRSN) |
| 140 | #define POWER_CTRL(ctrl) ((ctrl)->slot_cap & PWR_CTRL_PRSN) | 142 | #define POWER_CTRL(ctrl) ((ctrl)->slot_cap & PWR_CTRL_PRSN) |
| @@ -143,13 +145,14 @@ struct controller { | |||
| 143 | #define PWR_LED(ctrl) ((ctrl)->slot_cap & PWR_LED_PRSN) | 145 | #define PWR_LED(ctrl) ((ctrl)->slot_cap & PWR_LED_PRSN) |
| 144 | #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & HP_SUPR_RM_SUP) | 146 | #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & HP_SUPR_RM_SUP) |
| 145 | #define EMI(ctrl) ((ctrl)->slot_cap & EMI_PRSN) | 147 | #define EMI(ctrl) ((ctrl)->slot_cap & EMI_PRSN) |
| 148 | #define NO_CMD_CMPL(ctrl) ((ctrl)->slot_cap & NO_CMD_CMPL_SUP) | ||
| 146 | 149 | ||
| 147 | extern int pciehp_sysfs_enable_slot(struct slot *slot); | 150 | extern int pciehp_sysfs_enable_slot(struct slot *slot); |
| 148 | extern int pciehp_sysfs_disable_slot(struct slot *slot); | 151 | extern int pciehp_sysfs_disable_slot(struct slot *slot); |
| 149 | extern u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl); | 152 | extern u8 pciehp_handle_attention_button(struct slot *p_slot); |
| 150 | extern u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl); | 153 | extern u8 pciehp_handle_switch_change(struct slot *p_slot); |
| 151 | extern u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl); | 154 | extern u8 pciehp_handle_presence_change(struct slot *p_slot); |
| 152 | extern u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl); | 155 | extern u8 pciehp_handle_power_fault(struct slot *p_slot); |
| 153 | extern int pciehp_configure_device(struct slot *p_slot); | 156 | extern int pciehp_configure_device(struct slot *p_slot); |
| 154 | extern int pciehp_unconfigure_device(struct slot *p_slot); | 157 | extern int pciehp_unconfigure_device(struct slot *p_slot); |
| 155 | extern void pciehp_queue_pushbutton_work(struct work_struct *work); | 158 | extern void pciehp_queue_pushbutton_work(struct work_struct *work); |
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c index 43d8ddb2d679..48a2ed378914 100644 --- a/drivers/pci/hotplug/pciehp_core.c +++ b/drivers/pci/hotplug/pciehp_core.c | |||
| @@ -254,7 +254,11 @@ static int init_slots(struct controller *ctrl) | |||
| 254 | slot->hp_slot, slot->number, ctrl->slot_device_offset); | 254 | slot->hp_slot, slot->number, ctrl->slot_device_offset); |
| 255 | retval = pci_hp_register(hotplug_slot); | 255 | retval = pci_hp_register(hotplug_slot); |
| 256 | if (retval) { | 256 | if (retval) { |
| 257 | err ("pci_hp_register failed with error %d\n", retval); | 257 | err("pci_hp_register failed with error %d\n", retval); |
| 258 | if (retval == -EEXIST) | ||
| 259 | err("Failed to register slot because of name " | ||
| 260 | "collision. Try \'pciehp_slot_with_bus\' " | ||
| 261 | "module option.\n"); | ||
| 258 | goto error_info; | 262 | goto error_info; |
| 259 | } | 263 | } |
| 260 | /* create additional sysfs entries */ | 264 | /* create additional sysfs entries */ |
diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c index 0a7aa628e955..96a5d55a4983 100644 --- a/drivers/pci/hotplug/pciehp_ctrl.c +++ b/drivers/pci/hotplug/pciehp_ctrl.c | |||
| @@ -55,16 +55,13 @@ static int queue_interrupt_event(struct slot *p_slot, u32 event_type) | |||
| 55 | return 0; | 55 | return 0; |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl) | 58 | u8 pciehp_handle_attention_button(struct slot *p_slot) |
| 59 | { | 59 | { |
| 60 | struct slot *p_slot; | ||
| 61 | u32 event_type; | 60 | u32 event_type; |
| 62 | 61 | ||
| 63 | /* Attention Button Change */ | 62 | /* Attention Button Change */ |
| 64 | dbg("pciehp: Attention button interrupt received.\n"); | 63 | dbg("pciehp: Attention button interrupt received.\n"); |
| 65 | 64 | ||
| 66 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 67 | |||
| 68 | /* | 65 | /* |
| 69 | * Button pressed - See if need to TAKE ACTION!!! | 66 | * Button pressed - See if need to TAKE ACTION!!! |
| 70 | */ | 67 | */ |
| @@ -76,18 +73,15 @@ u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl) | |||
| 76 | return 0; | 73 | return 0; |
| 77 | } | 74 | } |
| 78 | 75 | ||
| 79 | u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl) | 76 | u8 pciehp_handle_switch_change(struct slot *p_slot) |
| 80 | { | 77 | { |
| 81 | struct slot *p_slot; | ||
| 82 | u8 getstatus; | 78 | u8 getstatus; |
| 83 | u32 event_type; | 79 | u32 event_type; |
| 84 | 80 | ||
| 85 | /* Switch Change */ | 81 | /* Switch Change */ |
| 86 | dbg("pciehp: Switch interrupt received.\n"); | 82 | dbg("pciehp: Switch interrupt received.\n"); |
| 87 | 83 | ||
| 88 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 89 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 84 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); |
| 90 | |||
| 91 | if (getstatus) { | 85 | if (getstatus) { |
| 92 | /* | 86 | /* |
| 93 | * Switch opened | 87 | * Switch opened |
| @@ -107,17 +101,14 @@ u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl) | |||
| 107 | return 1; | 101 | return 1; |
| 108 | } | 102 | } |
| 109 | 103 | ||
| 110 | u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl) | 104 | u8 pciehp_handle_presence_change(struct slot *p_slot) |
| 111 | { | 105 | { |
| 112 | struct slot *p_slot; | ||
| 113 | u32 event_type; | 106 | u32 event_type; |
| 114 | u8 presence_save; | 107 | u8 presence_save; |
| 115 | 108 | ||
| 116 | /* Presence Change */ | 109 | /* Presence Change */ |
| 117 | dbg("pciehp: Presence/Notify input change.\n"); | 110 | dbg("pciehp: Presence/Notify input change.\n"); |
| 118 | 111 | ||
| 119 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 120 | |||
| 121 | /* Switch is open, assume a presence change | 112 | /* Switch is open, assume a presence change |
| 122 | * Save the presence state | 113 | * Save the presence state |
| 123 | */ | 114 | */ |
| @@ -141,16 +132,13 @@ u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl) | |||
| 141 | return 1; | 132 | return 1; |
| 142 | } | 133 | } |
| 143 | 134 | ||
| 144 | u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl) | 135 | u8 pciehp_handle_power_fault(struct slot *p_slot) |
| 145 | { | 136 | { |
| 146 | struct slot *p_slot; | ||
| 147 | u32 event_type; | 137 | u32 event_type; |
| 148 | 138 | ||
| 149 | /* power fault */ | 139 | /* power fault */ |
| 150 | dbg("pciehp: Power fault interrupt received.\n"); | 140 | dbg("pciehp: Power fault interrupt received.\n"); |
| 151 | 141 | ||
| 152 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 153 | |||
| 154 | if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { | 142 | if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { |
| 155 | /* | 143 | /* |
| 156 | * power fault Cleared | 144 | * power fault Cleared |
| @@ -163,7 +151,7 @@ u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl) | |||
| 163 | */ | 151 | */ |
| 164 | info("Power fault on Slot(%s)\n", p_slot->name); | 152 | info("Power fault on Slot(%s)\n", p_slot->name); |
| 165 | event_type = INT_POWER_FAULT; | 153 | event_type = INT_POWER_FAULT; |
| 166 | info("power fault bit %x set\n", hp_slot); | 154 | info("power fault bit %x set\n", 0); |
| 167 | } | 155 | } |
| 168 | 156 | ||
| 169 | queue_interrupt_event(p_slot, event_type); | 157 | queue_interrupt_event(p_slot, event_type); |
| @@ -186,6 +174,13 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) | |||
| 186 | } | 174 | } |
| 187 | } | 175 | } |
| 188 | 176 | ||
| 177 | /* | ||
| 178 | * After turning power off, we must wait for at least 1 second | ||
| 179 | * before taking any action that relies on power having been | ||
| 180 | * removed from the slot/adapter. | ||
| 181 | */ | ||
| 182 | msleep(1000); | ||
| 183 | |||
| 189 | if (PWR_LED(ctrl)) | 184 | if (PWR_LED(ctrl)) |
| 190 | pslot->hpc_ops->green_led_off(pslot); | 185 | pslot->hpc_ops->green_led_off(pslot); |
| 191 | 186 | ||
| @@ -289,6 +284,13 @@ static int remove_board(struct slot *p_slot) | |||
| 289 | } | 284 | } |
| 290 | } | 285 | } |
| 291 | 286 | ||
| 287 | /* | ||
| 288 | * After turning power off, we must wait for at least 1 second | ||
| 289 | * before taking any action that relies on power having been | ||
| 290 | * removed from the slot/adapter. | ||
| 291 | */ | ||
| 292 | msleep(1000); | ||
| 293 | |||
| 292 | if (PWR_LED(ctrl)) | 294 | if (PWR_LED(ctrl)) |
| 293 | /* turn off Green LED */ | 295 | /* turn off Green LED */ |
| 294 | p_slot->hpc_ops->green_led_off(p_slot); | 296 | p_slot->hpc_ops->green_led_off(p_slot); |
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 891f81a0400c..79f104963166 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -247,14 +247,38 @@ static inline void pciehp_free_irq(struct controller *ctrl) | |||
| 247 | free_irq(ctrl->pci_dev->irq, ctrl); | 247 | free_irq(ctrl->pci_dev->irq, ctrl); |
| 248 | } | 248 | } |
| 249 | 249 | ||
| 250 | static inline int pcie_wait_cmd(struct controller *ctrl) | 250 | static inline int pcie_poll_cmd(struct controller *ctrl) |
| 251 | { | ||
| 252 | u16 slot_status; | ||
| 253 | int timeout = 1000; | ||
| 254 | |||
| 255 | if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) | ||
| 256 | if (slot_status & CMD_COMPLETED) | ||
| 257 | goto completed; | ||
| 258 | for (timeout = 1000; timeout > 0; timeout -= 100) { | ||
| 259 | msleep(100); | ||
| 260 | if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) | ||
| 261 | if (slot_status & CMD_COMPLETED) | ||
| 262 | goto completed; | ||
| 263 | } | ||
| 264 | return 0; /* timeout */ | ||
| 265 | |||
| 266 | completed: | ||
| 267 | pciehp_writew(ctrl, SLOTSTATUS, CMD_COMPLETED); | ||
| 268 | return timeout; | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline int pcie_wait_cmd(struct controller *ctrl, int poll) | ||
| 251 | { | 272 | { |
| 252 | int retval = 0; | 273 | int retval = 0; |
| 253 | unsigned int msecs = pciehp_poll_mode ? 2500 : 1000; | 274 | unsigned int msecs = pciehp_poll_mode ? 2500 : 1000; |
| 254 | unsigned long timeout = msecs_to_jiffies(msecs); | 275 | unsigned long timeout = msecs_to_jiffies(msecs); |
| 255 | int rc; | 276 | int rc; |
| 256 | 277 | ||
| 257 | rc = wait_event_interruptible_timeout(ctrl->queue, | 278 | if (poll) |
| 279 | rc = pcie_poll_cmd(ctrl); | ||
| 280 | else | ||
| 281 | rc = wait_event_interruptible_timeout(ctrl->queue, | ||
| 258 | !ctrl->cmd_busy, timeout); | 282 | !ctrl->cmd_busy, timeout); |
| 259 | if (!rc) | 283 | if (!rc) |
| 260 | dbg("Command not completed in 1000 msec\n"); | 284 | dbg("Command not completed in 1000 msec\n"); |
| @@ -286,12 +310,28 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) | |||
| 286 | goto out; | 310 | goto out; |
| 287 | } | 311 | } |
| 288 | 312 | ||
| 289 | if ((slot_status & CMD_COMPLETED) == CMD_COMPLETED ) { | 313 | if (slot_status & CMD_COMPLETED) { |
| 290 | /* After 1 sec and CMD_COMPLETED still not set, just | 314 | if (!ctrl->no_cmd_complete) { |
| 291 | proceed forward to issue the next command according | 315 | /* |
| 292 | to spec. Just print out the error message */ | 316 | * After 1 sec and CMD_COMPLETED still not set, just |
| 293 | dbg("%s: CMD_COMPLETED not clear after 1 sec.\n", | 317 | * proceed forward to issue the next command according |
| 294 | __func__); | 318 | * to spec. Just print out the error message. |
| 319 | */ | ||
| 320 | dbg("%s: CMD_COMPLETED not clear after 1 sec.\n", | ||
| 321 | __func__); | ||
| 322 | } else if (!NO_CMD_CMPL(ctrl)) { | ||
| 323 | /* | ||
| 324 | * This controller semms to notify of command completed | ||
| 325 | * event even though it supports none of power | ||
| 326 | * controller, attention led, power led and EMI. | ||
| 327 | */ | ||
| 328 | dbg("%s: Unexpected CMD_COMPLETED. Need to wait for " | ||
| 329 | "command completed event.\n", __func__); | ||
| 330 | ctrl->no_cmd_complete = 0; | ||
| 331 | } else { | ||
| 332 | dbg("%s: Unexpected CMD_COMPLETED. Maybe the " | ||
| 333 | "controller is broken.\n", __func__); | ||
| 334 | } | ||
| 295 | } | 335 | } |
| 296 | 336 | ||
| 297 | retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); | 337 | retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); |
| @@ -315,8 +355,18 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) | |||
| 315 | /* | 355 | /* |
| 316 | * Wait for command completion. | 356 | * Wait for command completion. |
| 317 | */ | 357 | */ |
| 318 | if (!retval) | 358 | if (!retval && !ctrl->no_cmd_complete) { |
| 319 | retval = pcie_wait_cmd(ctrl); | 359 | int poll = 0; |
| 360 | /* | ||
| 361 | * if hotplug interrupt is not enabled or command | ||
| 362 | * completed interrupt is not enabled, we need to poll | ||
| 363 | * command completed event. | ||
| 364 | */ | ||
| 365 | if (!(slot_ctrl & HP_INTR_ENABLE) || | ||
| 366 | !(slot_ctrl & CMD_CMPL_INTR_ENABLE)) | ||
| 367 | poll = 1; | ||
| 368 | retval = pcie_wait_cmd(ctrl, poll); | ||
| 369 | } | ||
| 320 | out: | 370 | out: |
| 321 | mutex_unlock(&ctrl->ctrl_lock); | 371 | mutex_unlock(&ctrl->ctrl_lock); |
| 322 | return retval; | 372 | return retval; |
| @@ -704,13 +754,6 @@ static int hpc_power_off_slot(struct slot * slot) | |||
| 704 | } | 754 | } |
| 705 | dbg("%s: SLOTCTRL %x write cmd %x\n", | 755 | dbg("%s: SLOTCTRL %x write cmd %x\n", |
| 706 | __func__, ctrl->cap_base + SLOTCTRL, slot_cmd); | 756 | __func__, ctrl->cap_base + SLOTCTRL, slot_cmd); |
| 707 | |||
| 708 | /* | ||
| 709 | * After turning power off, we must wait for at least 1 second | ||
| 710 | * before taking any action that relies on power having been | ||
| 711 | * removed from the slot/adapter. | ||
| 712 | */ | ||
| 713 | msleep(1000); | ||
| 714 | out: | 757 | out: |
| 715 | if (changed) | 758 | if (changed) |
| 716 | pcie_unmask_bad_dllp(ctrl); | 759 | pcie_unmask_bad_dllp(ctrl); |
| @@ -722,6 +765,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 722 | { | 765 | { |
| 723 | struct controller *ctrl = (struct controller *)dev_id; | 766 | struct controller *ctrl = (struct controller *)dev_id; |
| 724 | u16 detected, intr_loc; | 767 | u16 detected, intr_loc; |
| 768 | struct slot *p_slot; | ||
| 725 | 769 | ||
| 726 | /* | 770 | /* |
| 727 | * In order to guarantee that all interrupt events are | 771 | * In order to guarantee that all interrupt events are |
| @@ -756,21 +800,38 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 756 | wake_up_interruptible(&ctrl->queue); | 800 | wake_up_interruptible(&ctrl->queue); |
| 757 | } | 801 | } |
| 758 | 802 | ||
| 803 | if (!(intr_loc & ~CMD_COMPLETED)) | ||
| 804 | return IRQ_HANDLED; | ||
| 805 | |||
| 806 | /* | ||
| 807 | * Return without handling events if this handler routine is | ||
| 808 | * called before controller initialization is done. This may | ||
| 809 | * happen if hotplug event or another interrupt that shares | ||
| 810 | * the IRQ with pciehp arrives before slot initialization is | ||
| 811 | * done after interrupt handler is registered. | ||
| 812 | * | ||
| 813 | * FIXME - Need more structural fixes. We need to be ready to | ||
| 814 | * handle the event before installing interrupt handler. | ||
| 815 | */ | ||
| 816 | p_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset); | ||
| 817 | if (!p_slot || !p_slot->hpc_ops) | ||
| 818 | return IRQ_HANDLED; | ||
| 819 | |||
| 759 | /* Check MRL Sensor Changed */ | 820 | /* Check MRL Sensor Changed */ |
| 760 | if (intr_loc & MRL_SENS_CHANGED) | 821 | if (intr_loc & MRL_SENS_CHANGED) |
| 761 | pciehp_handle_switch_change(0, ctrl); | 822 | pciehp_handle_switch_change(p_slot); |
| 762 | 823 | ||
| 763 | /* Check Attention Button Pressed */ | 824 | /* Check Attention Button Pressed */ |
| 764 | if (intr_loc & ATTN_BUTTN_PRESSED) | 825 | if (intr_loc & ATTN_BUTTN_PRESSED) |
| 765 | pciehp_handle_attention_button(0, ctrl); | 826 | pciehp_handle_attention_button(p_slot); |
| 766 | 827 | ||
| 767 | /* Check Presence Detect Changed */ | 828 | /* Check Presence Detect Changed */ |
| 768 | if (intr_loc & PRSN_DETECT_CHANGED) | 829 | if (intr_loc & PRSN_DETECT_CHANGED) |
| 769 | pciehp_handle_presence_change(0, ctrl); | 830 | pciehp_handle_presence_change(p_slot); |
| 770 | 831 | ||
| 771 | /* Check Power Fault Detected */ | 832 | /* Check Power Fault Detected */ |
| 772 | if (intr_loc & PWR_FAULT_DETECTED) | 833 | if (intr_loc & PWR_FAULT_DETECTED) |
| 773 | pciehp_handle_power_fault(0, ctrl); | 834 | pciehp_handle_power_fault(p_slot); |
| 774 | 835 | ||
| 775 | return IRQ_HANDLED; | 836 | return IRQ_HANDLED; |
| 776 | } | 837 | } |
| @@ -1028,6 +1089,12 @@ static int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev) | |||
| 1028 | static int pcie_init_hardware_part1(struct controller *ctrl, | 1089 | static int pcie_init_hardware_part1(struct controller *ctrl, |
| 1029 | struct pcie_device *dev) | 1090 | struct pcie_device *dev) |
| 1030 | { | 1091 | { |
| 1092 | /* Clear all remaining event bits in Slot Status register */ | ||
| 1093 | if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) { | ||
| 1094 | err("%s: Cannot write to SLOTSTATUS register\n", __func__); | ||
| 1095 | return -1; | ||
| 1096 | } | ||
| 1097 | |||
| 1031 | /* Mask Hot-plug Interrupt Enable */ | 1098 | /* Mask Hot-plug Interrupt Enable */ |
| 1032 | if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE)) { | 1099 | if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE)) { |
| 1033 | err("%s: Cannot mask hotplug interrupt enable\n", __func__); | 1100 | err("%s: Cannot mask hotplug interrupt enable\n", __func__); |
| @@ -1040,16 +1107,6 @@ int pcie_init_hardware_part2(struct controller *ctrl, struct pcie_device *dev) | |||
| 1040 | { | 1107 | { |
| 1041 | u16 cmd, mask; | 1108 | u16 cmd, mask; |
| 1042 | 1109 | ||
| 1043 | /* | ||
| 1044 | * We need to clear all events before enabling hotplug interrupt | ||
| 1045 | * notification mechanism in order for hotplug controler to | ||
| 1046 | * generate interrupts. | ||
| 1047 | */ | ||
| 1048 | if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) { | ||
| 1049 | err("%s: Cannot write to SLOTSTATUS register\n", __FUNCTION__); | ||
| 1050 | return -1; | ||
| 1051 | } | ||
| 1052 | |||
| 1053 | cmd = PRSN_DETECT_ENABLE; | 1110 | cmd = PRSN_DETECT_ENABLE; |
| 1054 | if (ATTN_BUTTN(ctrl)) | 1111 | if (ATTN_BUTTN(ctrl)) |
| 1055 | cmd |= ATTN_BUTTN_ENABLE; | 1112 | cmd |= ATTN_BUTTN_ENABLE; |
| @@ -1116,6 +1173,7 @@ static inline void dbg_ctrl(struct controller *ctrl) | |||
| 1116 | dbg(" Power Indicator : %3s\n", PWR_LED(ctrl) ? "yes" : "no"); | 1173 | dbg(" Power Indicator : %3s\n", PWR_LED(ctrl) ? "yes" : "no"); |
| 1117 | dbg(" Hot-Plug Surprise : %3s\n", HP_SUPR_RM(ctrl) ? "yes" : "no"); | 1174 | dbg(" Hot-Plug Surprise : %3s\n", HP_SUPR_RM(ctrl) ? "yes" : "no"); |
| 1118 | dbg(" EMI Present : %3s\n", EMI(ctrl) ? "yes" : "no"); | 1175 | dbg(" EMI Present : %3s\n", EMI(ctrl) ? "yes" : "no"); |
| 1176 | dbg(" Comamnd Completed : %3s\n", NO_CMD_CMPL(ctrl)? "no" : "yes"); | ||
| 1119 | pciehp_readw(ctrl, SLOTSTATUS, ®16); | 1177 | pciehp_readw(ctrl, SLOTSTATUS, ®16); |
| 1120 | dbg("Slot Status : 0x%04x\n", reg16); | 1178 | dbg("Slot Status : 0x%04x\n", reg16); |
| 1121 | pciehp_readw(ctrl, SLOTSTATUS, ®16); | 1179 | pciehp_readw(ctrl, SLOTSTATUS, ®16); |
| @@ -1147,6 +1205,15 @@ int pcie_init(struct controller *ctrl, struct pcie_device *dev) | |||
| 1147 | mutex_init(&ctrl->ctrl_lock); | 1205 | mutex_init(&ctrl->ctrl_lock); |
| 1148 | init_waitqueue_head(&ctrl->queue); | 1206 | init_waitqueue_head(&ctrl->queue); |
| 1149 | dbg_ctrl(ctrl); | 1207 | dbg_ctrl(ctrl); |
| 1208 | /* | ||
| 1209 | * Controller doesn't notify of command completion if the "No | ||
| 1210 | * Command Completed Support" bit is set in Slot Capability | ||
| 1211 | * register or the controller supports none of power | ||
| 1212 | * controller, attention led, power led and EMI. | ||
| 1213 | */ | ||
| 1214 | if (NO_CMD_CMPL(ctrl) || | ||
| 1215 | !(POWER_CTRL(ctrl) | ATTN_LED(ctrl) | PWR_LED(ctrl) | EMI(ctrl))) | ||
| 1216 | ctrl->no_cmd_complete = 1; | ||
| 1150 | 1217 | ||
| 1151 | info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", | 1218 | info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", |
| 1152 | pdev->vendor, pdev->device, | 1219 | pdev->vendor, pdev->device, |
diff --git a/drivers/pci/hotplug/rpadlpar_sysfs.c b/drivers/pci/hotplug/rpadlpar_sysfs.c index e32148a8fa12..779c5db71be4 100644 --- a/drivers/pci/hotplug/rpadlpar_sysfs.c +++ b/drivers/pci/hotplug/rpadlpar_sysfs.c | |||
| @@ -18,8 +18,12 @@ | |||
| 18 | #include "rpadlpar.h" | 18 | #include "rpadlpar.h" |
| 19 | 19 | ||
| 20 | #define DLPAR_KOBJ_NAME "control" | 20 | #define DLPAR_KOBJ_NAME "control" |
| 21 | #define ADD_SLOT_ATTR_NAME "add_slot" | 21 | |
| 22 | #define REMOVE_SLOT_ATTR_NAME "remove_slot" | 22 | /* Those two have no quotes because they are passed to __ATTR() which |
| 23 | * stringifies the argument (yuck !) | ||
| 24 | */ | ||
| 25 | #define ADD_SLOT_ATTR_NAME add_slot | ||
| 26 | #define REMOVE_SLOT_ATTR_NAME remove_slot | ||
| 23 | 27 | ||
| 24 | #define MAX_DRC_NAME_LEN 64 | 28 | #define MAX_DRC_NAME_LEN 64 |
| 25 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c index 1648076600fc..97848654652a 100644 --- a/drivers/pci/hotplug/shpchp_core.c +++ b/drivers/pci/hotplug/shpchp_core.c | |||
| @@ -162,6 +162,10 @@ static int init_slots(struct controller *ctrl) | |||
| 162 | retval = pci_hp_register(slot->hotplug_slot); | 162 | retval = pci_hp_register(slot->hotplug_slot); |
| 163 | if (retval) { | 163 | if (retval) { |
| 164 | err("pci_hp_register failed with error %d\n", retval); | 164 | err("pci_hp_register failed with error %d\n", retval); |
| 165 | if (retval == -EEXIST) | ||
| 166 | err("Failed to register slot because of name " | ||
| 167 | "collision. Try \'shpchp_slot_with_bus\' " | ||
| 168 | "module option.\n"); | ||
| 165 | goto error_info; | 169 | goto error_info; |
| 166 | } | 170 | } |
| 167 | 171 | ||
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index 61fedb2448b6..f82495583e63 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c | |||
| @@ -506,6 +506,23 @@ static void free_link_state(struct pci_dev *pdev) | |||
| 506 | pdev->link_state = NULL; | 506 | pdev->link_state = NULL; |
| 507 | } | 507 | } |
| 508 | 508 | ||
| 509 | static int pcie_aspm_sanity_check(struct pci_dev *pdev) | ||
| 510 | { | ||
| 511 | struct pci_dev *child_dev; | ||
| 512 | int child_pos; | ||
| 513 | |||
| 514 | /* | ||
| 515 | * Some functions in a slot might not all be PCIE functions, very | ||
| 516 | * strange. Disable ASPM for the whole slot | ||
| 517 | */ | ||
| 518 | list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) { | ||
| 519 | child_pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP); | ||
| 520 | if (!child_pos) | ||
| 521 | return -EINVAL; | ||
| 522 | } | ||
| 523 | return 0; | ||
| 524 | } | ||
| 525 | |||
| 509 | /* | 526 | /* |
| 510 | * pcie_aspm_init_link_state: Initiate PCI express link state. | 527 | * pcie_aspm_init_link_state: Initiate PCI express link state. |
| 511 | * It is called after the pcie and its children devices are scaned. | 528 | * It is called after the pcie and its children devices are scaned. |
| @@ -526,6 +543,9 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev) | |||
| 526 | if (list_empty(&pdev->subordinate->devices)) | 543 | if (list_empty(&pdev->subordinate->devices)) |
| 527 | goto out; | 544 | goto out; |
| 528 | 545 | ||
| 546 | if (pcie_aspm_sanity_check(pdev)) | ||
| 547 | goto out; | ||
| 548 | |||
| 529 | mutex_lock(&aspm_lock); | 549 | mutex_lock(&aspm_lock); |
| 530 | 550 | ||
| 531 | link_state = kzalloc(sizeof(*link_state), GFP_KERNEL); | 551 | link_state = kzalloc(sizeof(*link_state), GFP_KERNEL); |
diff --git a/drivers/pcmcia/electra_cf.c b/drivers/pcmcia/electra_cf.c index 0a6cea1316b4..52d0aa8c2e7a 100644 --- a/drivers/pcmcia/electra_cf.c +++ b/drivers/pcmcia/electra_cf.c | |||
| @@ -352,6 +352,7 @@ static struct of_device_id electra_cf_match[] = { | |||
| 352 | }, | 352 | }, |
| 353 | {}, | 353 | {}, |
| 354 | }; | 354 | }; |
| 355 | MODULE_DEVICE_TABLE(of, electra_cf_match); | ||
| 355 | 356 | ||
| 356 | static struct of_platform_driver electra_cf_driver = { | 357 | static struct of_platform_driver electra_cf_driver = { |
| 357 | .name = (char *)driver_name, | 358 | .name = (char *)driver_name, |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 8ba3f135da22..1a4025683362 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
| @@ -63,6 +63,7 @@ static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); | |||
| 63 | */ | 63 | */ |
| 64 | static wait_queue_head_t dasd_init_waitq; | 64 | static wait_queue_head_t dasd_init_waitq; |
| 65 | static wait_queue_head_t dasd_flush_wq; | 65 | static wait_queue_head_t dasd_flush_wq; |
| 66 | static wait_queue_head_t generic_waitq; | ||
| 66 | 67 | ||
| 67 | /* | 68 | /* |
| 68 | * Allocate memory for a new device structure. | 69 | * Allocate memory for a new device structure. |
| @@ -1151,11 +1152,15 @@ static void __dasd_device_process_final_queue(struct dasd_device *device, | |||
| 1151 | struct list_head *l, *n; | 1152 | struct list_head *l, *n; |
| 1152 | struct dasd_ccw_req *cqr; | 1153 | struct dasd_ccw_req *cqr; |
| 1153 | struct dasd_block *block; | 1154 | struct dasd_block *block; |
| 1155 | void (*callback)(struct dasd_ccw_req *, void *data); | ||
| 1156 | void *callback_data; | ||
| 1154 | 1157 | ||
| 1155 | list_for_each_safe(l, n, final_queue) { | 1158 | list_for_each_safe(l, n, final_queue) { |
| 1156 | cqr = list_entry(l, struct dasd_ccw_req, devlist); | 1159 | cqr = list_entry(l, struct dasd_ccw_req, devlist); |
| 1157 | list_del_init(&cqr->devlist); | 1160 | list_del_init(&cqr->devlist); |
| 1158 | block = cqr->block; | 1161 | block = cqr->block; |
| 1162 | callback = cqr->callback; | ||
| 1163 | callback_data = cqr->callback_data; | ||
| 1159 | if (block) | 1164 | if (block) |
| 1160 | spin_lock_bh(&block->queue_lock); | 1165 | spin_lock_bh(&block->queue_lock); |
| 1161 | switch (cqr->status) { | 1166 | switch (cqr->status) { |
| @@ -1176,7 +1181,7 @@ static void __dasd_device_process_final_queue(struct dasd_device *device, | |||
| 1176 | BUG(); | 1181 | BUG(); |
| 1177 | } | 1182 | } |
| 1178 | if (cqr->callback != NULL) | 1183 | if (cqr->callback != NULL) |
| 1179 | (cqr->callback)(cqr, cqr->callback_data); | 1184 | (callback)(cqr, callback_data); |
| 1180 | if (block) | 1185 | if (block) |
| 1181 | spin_unlock_bh(&block->queue_lock); | 1186 | spin_unlock_bh(&block->queue_lock); |
| 1182 | } | 1187 | } |
| @@ -1406,17 +1411,15 @@ static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr) | |||
| 1406 | */ | 1411 | */ |
| 1407 | int dasd_sleep_on(struct dasd_ccw_req *cqr) | 1412 | int dasd_sleep_on(struct dasd_ccw_req *cqr) |
| 1408 | { | 1413 | { |
| 1409 | wait_queue_head_t wait_q; | ||
| 1410 | struct dasd_device *device; | 1414 | struct dasd_device *device; |
| 1411 | int rc; | 1415 | int rc; |
| 1412 | 1416 | ||
| 1413 | device = cqr->startdev; | 1417 | device = cqr->startdev; |
| 1414 | 1418 | ||
| 1415 | init_waitqueue_head (&wait_q); | ||
| 1416 | cqr->callback = dasd_wakeup_cb; | 1419 | cqr->callback = dasd_wakeup_cb; |
| 1417 | cqr->callback_data = (void *) &wait_q; | 1420 | cqr->callback_data = (void *) &generic_waitq; |
| 1418 | dasd_add_request_tail(cqr); | 1421 | dasd_add_request_tail(cqr); |
| 1419 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1422 | wait_event(generic_waitq, _wait_for_wakeup(cqr)); |
| 1420 | 1423 | ||
| 1421 | /* Request status is either done or failed. */ | 1424 | /* Request status is either done or failed. */ |
| 1422 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | 1425 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
| @@ -1429,20 +1432,18 @@ int dasd_sleep_on(struct dasd_ccw_req *cqr) | |||
| 1429 | */ | 1432 | */ |
| 1430 | int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) | 1433 | int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) |
| 1431 | { | 1434 | { |
| 1432 | wait_queue_head_t wait_q; | ||
| 1433 | struct dasd_device *device; | 1435 | struct dasd_device *device; |
| 1434 | int rc; | 1436 | int rc; |
| 1435 | 1437 | ||
| 1436 | device = cqr->startdev; | 1438 | device = cqr->startdev; |
| 1437 | init_waitqueue_head (&wait_q); | ||
| 1438 | cqr->callback = dasd_wakeup_cb; | 1439 | cqr->callback = dasd_wakeup_cb; |
| 1439 | cqr->callback_data = (void *) &wait_q; | 1440 | cqr->callback_data = (void *) &generic_waitq; |
| 1440 | dasd_add_request_tail(cqr); | 1441 | dasd_add_request_tail(cqr); |
| 1441 | rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr)); | 1442 | rc = wait_event_interruptible(generic_waitq, _wait_for_wakeup(cqr)); |
| 1442 | if (rc == -ERESTARTSYS) { | 1443 | if (rc == -ERESTARTSYS) { |
| 1443 | dasd_cancel_req(cqr); | 1444 | dasd_cancel_req(cqr); |
| 1444 | /* wait (non-interruptible) for final status */ | 1445 | /* wait (non-interruptible) for final status */ |
| 1445 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1446 | wait_event(generic_waitq, _wait_for_wakeup(cqr)); |
| 1446 | } | 1447 | } |
| 1447 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | 1448 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
| 1448 | return rc; | 1449 | return rc; |
| @@ -1466,7 +1467,6 @@ static inline int _dasd_term_running_cqr(struct dasd_device *device) | |||
| 1466 | 1467 | ||
| 1467 | int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) | 1468 | int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) |
| 1468 | { | 1469 | { |
| 1469 | wait_queue_head_t wait_q; | ||
| 1470 | struct dasd_device *device; | 1470 | struct dasd_device *device; |
| 1471 | int rc; | 1471 | int rc; |
| 1472 | 1472 | ||
| @@ -1478,9 +1478,8 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) | |||
| 1478 | return rc; | 1478 | return rc; |
| 1479 | } | 1479 | } |
| 1480 | 1480 | ||
| 1481 | init_waitqueue_head (&wait_q); | ||
| 1482 | cqr->callback = dasd_wakeup_cb; | 1481 | cqr->callback = dasd_wakeup_cb; |
| 1483 | cqr->callback_data = (void *) &wait_q; | 1482 | cqr->callback_data = (void *) &generic_waitq; |
| 1484 | cqr->status = DASD_CQR_QUEUED; | 1483 | cqr->status = DASD_CQR_QUEUED; |
| 1485 | list_add(&cqr->devlist, &device->ccw_queue); | 1484 | list_add(&cqr->devlist, &device->ccw_queue); |
| 1486 | 1485 | ||
| @@ -1489,7 +1488,7 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) | |||
| 1489 | 1488 | ||
| 1490 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1489 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
| 1491 | 1490 | ||
| 1492 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1491 | wait_event(generic_waitq, _wait_for_wakeup(cqr)); |
| 1493 | 1492 | ||
| 1494 | /* Request status is either done or failed. */ | 1493 | /* Request status is either done or failed. */ |
| 1495 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | 1494 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
| @@ -2430,6 +2429,7 @@ static int __init dasd_init(void) | |||
| 2430 | 2429 | ||
| 2431 | init_waitqueue_head(&dasd_init_waitq); | 2430 | init_waitqueue_head(&dasd_init_waitq); |
| 2432 | init_waitqueue_head(&dasd_flush_wq); | 2431 | init_waitqueue_head(&dasd_flush_wq); |
| 2432 | init_waitqueue_head(&generic_waitq); | ||
| 2433 | 2433 | ||
| 2434 | /* register 'common' DASD debug area, used for all DBF_XXX calls */ | 2434 | /* register 'common' DASD debug area, used for all DBF_XXX calls */ |
| 2435 | dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long)); | 2435 | dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long)); |
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c index 0d98f1ff2edd..848ef7e8523f 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c | |||
| @@ -549,7 +549,6 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view, | |||
| 549 | struct raw3270_request *rq) | 549 | struct raw3270_request *rq) |
| 550 | { | 550 | { |
| 551 | unsigned long flags; | 551 | unsigned long flags; |
| 552 | wait_queue_head_t wq; | ||
| 553 | int rc; | 552 | int rc; |
| 554 | 553 | ||
| 555 | #ifdef CONFIG_TN3270_CONSOLE | 554 | #ifdef CONFIG_TN3270_CONSOLE |
| @@ -566,20 +565,20 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view, | |||
| 566 | return rq->rc; | 565 | return rq->rc; |
| 567 | } | 566 | } |
| 568 | #endif | 567 | #endif |
| 569 | init_waitqueue_head(&wq); | ||
| 570 | rq->callback = raw3270_wake_init; | 568 | rq->callback = raw3270_wake_init; |
| 571 | rq->callback_data = &wq; | 569 | rq->callback_data = &raw3270_wait_queue; |
| 572 | spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags); | 570 | spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags); |
| 573 | rc = __raw3270_start(rp, view, rq); | 571 | rc = __raw3270_start(rp, view, rq); |
| 574 | spin_unlock_irqrestore(get_ccwdev_lock(view->dev->cdev), flags); | 572 | spin_unlock_irqrestore(get_ccwdev_lock(view->dev->cdev), flags); |
| 575 | if (rc) | 573 | if (rc) |
| 576 | return rc; | 574 | return rc; |
| 577 | /* Now wait for the completion. */ | 575 | /* Now wait for the completion. */ |
| 578 | rc = wait_event_interruptible(wq, raw3270_request_final(rq)); | 576 | rc = wait_event_interruptible(raw3270_wait_queue, |
| 577 | raw3270_request_final(rq)); | ||
| 579 | if (rc == -ERESTARTSYS) { /* Interrupted by a signal. */ | 578 | if (rc == -ERESTARTSYS) { /* Interrupted by a signal. */ |
| 580 | raw3270_halt_io(view->dev, rq); | 579 | raw3270_halt_io(view->dev, rq); |
| 581 | /* No wait for the halt to complete. */ | 580 | /* No wait for the halt to complete. */ |
| 582 | wait_event(wq, raw3270_request_final(rq)); | 581 | wait_event(raw3270_wait_queue, raw3270_request_final(rq)); |
| 583 | return -ERESTARTSYS; | 582 | return -ERESTARTSYS; |
| 584 | } | 583 | } |
| 585 | return rq->rc; | 584 | return rq->rc; |
diff --git a/drivers/s390/char/sclp_config.c b/drivers/s390/char/sclp_config.c index 9e784d5f7f57..ad05a87bc480 100644 --- a/drivers/s390/char/sclp_config.c +++ b/drivers/s390/char/sclp_config.c | |||
| @@ -40,7 +40,7 @@ static void sclp_cpu_capability_notify(struct work_struct *work) | |||
| 40 | put_online_cpus(); | 40 | put_online_cpus(); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | static void sclp_cpu_change_notify(struct work_struct *work) | 43 | static void __ref sclp_cpu_change_notify(struct work_struct *work) |
| 44 | { | 44 | { |
| 45 | smp_rescan_cpus(); | 45 | smp_rescan_cpus(); |
| 46 | } | 46 | } |
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index 35707c04e613..62576af36f47 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c | |||
| @@ -71,9 +71,6 @@ static struct list_head sclp_vt220_outqueue; | |||
| 71 | /* Number of requests in outqueue */ | 71 | /* Number of requests in outqueue */ |
| 72 | static int sclp_vt220_outqueue_count; | 72 | static int sclp_vt220_outqueue_count; |
| 73 | 73 | ||
| 74 | /* Wait queue used to delay write requests while we've run out of buffers */ | ||
| 75 | static wait_queue_head_t sclp_vt220_waitq; | ||
| 76 | |||
| 77 | /* Timer used for delaying write requests to merge subsequent messages into | 74 | /* Timer used for delaying write requests to merge subsequent messages into |
| 78 | * a single buffer */ | 75 | * a single buffer */ |
| 79 | static struct timer_list sclp_vt220_timer; | 76 | static struct timer_list sclp_vt220_timer; |
| @@ -133,7 +130,6 @@ sclp_vt220_process_queue(struct sclp_vt220_request *request) | |||
| 133 | } while (request && __sclp_vt220_emit(request)); | 130 | } while (request && __sclp_vt220_emit(request)); |
| 134 | if (request == NULL && sclp_vt220_flush_later) | 131 | if (request == NULL && sclp_vt220_flush_later) |
| 135 | sclp_vt220_emit_current(); | 132 | sclp_vt220_emit_current(); |
| 136 | wake_up(&sclp_vt220_waitq); | ||
| 137 | /* Check if the tty needs a wake up call */ | 133 | /* Check if the tty needs a wake up call */ |
| 138 | if (sclp_vt220_tty != NULL) { | 134 | if (sclp_vt220_tty != NULL) { |
| 139 | tty_wakeup(sclp_vt220_tty); | 135 | tty_wakeup(sclp_vt220_tty); |
| @@ -383,7 +379,7 @@ sclp_vt220_timeout(unsigned long data) | |||
| 383 | */ | 379 | */ |
| 384 | static int | 380 | static int |
| 385 | __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, | 381 | __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, |
| 386 | int convertlf, int may_schedule) | 382 | int convertlf, int may_fail) |
| 387 | { | 383 | { |
| 388 | unsigned long flags; | 384 | unsigned long flags; |
| 389 | void *page; | 385 | void *page; |
| @@ -395,15 +391,14 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, | |||
| 395 | overall_written = 0; | 391 | overall_written = 0; |
| 396 | spin_lock_irqsave(&sclp_vt220_lock, flags); | 392 | spin_lock_irqsave(&sclp_vt220_lock, flags); |
| 397 | do { | 393 | do { |
| 398 | /* Create a sclp output buffer if none exists yet */ | 394 | /* Create an sclp output buffer if none exists yet */ |
| 399 | if (sclp_vt220_current_request == NULL) { | 395 | if (sclp_vt220_current_request == NULL) { |
| 400 | while (list_empty(&sclp_vt220_empty)) { | 396 | while (list_empty(&sclp_vt220_empty)) { |
| 401 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); | 397 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); |
| 402 | if (in_interrupt() || !may_schedule) | 398 | if (may_fail) |
| 403 | sclp_sync_wait(); | 399 | goto out; |
| 404 | else | 400 | else |
| 405 | wait_event(sclp_vt220_waitq, | 401 | sclp_sync_wait(); |
| 406 | !list_empty(&sclp_vt220_empty)); | ||
| 407 | spin_lock_irqsave(&sclp_vt220_lock, flags); | 402 | spin_lock_irqsave(&sclp_vt220_lock, flags); |
| 408 | } | 403 | } |
| 409 | page = (void *) sclp_vt220_empty.next; | 404 | page = (void *) sclp_vt220_empty.next; |
| @@ -437,6 +432,7 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, | |||
| 437 | add_timer(&sclp_vt220_timer); | 432 | add_timer(&sclp_vt220_timer); |
| 438 | } | 433 | } |
| 439 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); | 434 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); |
| 435 | out: | ||
| 440 | return overall_written; | 436 | return overall_written; |
| 441 | } | 437 | } |
| 442 | 438 | ||
| @@ -520,19 +516,11 @@ sclp_vt220_close(struct tty_struct *tty, struct file *filp) | |||
| 520 | * character to the tty device. If the kernel uses this routine, | 516 | * character to the tty device. If the kernel uses this routine, |
| 521 | * it must call the flush_chars() routine (if defined) when it is | 517 | * it must call the flush_chars() routine (if defined) when it is |
| 522 | * done stuffing characters into the driver. | 518 | * done stuffing characters into the driver. |
| 523 | * | ||
| 524 | * NOTE: include/linux/tty_driver.h specifies that a character should be | ||
| 525 | * ignored if there is no room in the queue. This driver implements a different | ||
| 526 | * semantic in that it will block when there is no more room left. | ||
| 527 | * | ||
| 528 | * FIXME: putchar can currently be called from BH and other non blocking | ||
| 529 | * handlers so this semantic isn't a good idea. | ||
| 530 | */ | 519 | */ |
| 531 | static int | 520 | static int |
| 532 | sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) | 521 | sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) |
| 533 | { | 522 | { |
| 534 | __sclp_vt220_write(&ch, 1, 0, 0, 1); | 523 | return __sclp_vt220_write(&ch, 1, 0, 0, 1); |
| 535 | return 1; | ||
| 536 | } | 524 | } |
| 537 | 525 | ||
| 538 | /* | 526 | /* |
| @@ -653,7 +641,6 @@ static int __init __sclp_vt220_init(void) | |||
| 653 | spin_lock_init(&sclp_vt220_lock); | 641 | spin_lock_init(&sclp_vt220_lock); |
| 654 | INIT_LIST_HEAD(&sclp_vt220_empty); | 642 | INIT_LIST_HEAD(&sclp_vt220_empty); |
| 655 | INIT_LIST_HEAD(&sclp_vt220_outqueue); | 643 | INIT_LIST_HEAD(&sclp_vt220_outqueue); |
| 656 | init_waitqueue_head(&sclp_vt220_waitq); | ||
| 657 | init_timer(&sclp_vt220_timer); | 644 | init_timer(&sclp_vt220_timer); |
| 658 | sclp_vt220_current_request = NULL; | 645 | sclp_vt220_current_request = NULL; |
| 659 | sclp_vt220_buffered_chars = 0; | 646 | sclp_vt220_buffered_chars = 0; |
diff --git a/drivers/s390/char/tape.h b/drivers/s390/char/tape.h index dddf8d62c153..d0d565a05dfe 100644 --- a/drivers/s390/char/tape.h +++ b/drivers/s390/char/tape.h | |||
| @@ -231,6 +231,9 @@ struct tape_device { | |||
| 231 | /* Request queue. */ | 231 | /* Request queue. */ |
| 232 | struct list_head req_queue; | 232 | struct list_head req_queue; |
| 233 | 233 | ||
| 234 | /* Request wait queue. */ | ||
| 235 | wait_queue_head_t wait_queue; | ||
| 236 | |||
| 234 | /* Each tape device has (currently) two minor numbers. */ | 237 | /* Each tape device has (currently) two minor numbers. */ |
| 235 | int first_minor; | 238 | int first_minor; |
| 236 | 239 | ||
diff --git a/drivers/s390/char/tape_block.c b/drivers/s390/char/tape_block.c index ddc4a114e7f4..95da72bc17e8 100644 --- a/drivers/s390/char/tape_block.c +++ b/drivers/s390/char/tape_block.c | |||
| @@ -179,11 +179,11 @@ tapeblock_requeue(struct work_struct *work) { | |||
| 179 | tapeblock_end_request(req, -EIO); | 179 | tapeblock_end_request(req, -EIO); |
| 180 | continue; | 180 | continue; |
| 181 | } | 181 | } |
| 182 | blkdev_dequeue_request(req); | ||
| 183 | nr_queued++; | ||
| 182 | spin_unlock_irq(&device->blk_data.request_queue_lock); | 184 | spin_unlock_irq(&device->blk_data.request_queue_lock); |
| 183 | rc = tapeblock_start_request(device, req); | 185 | rc = tapeblock_start_request(device, req); |
| 184 | spin_lock_irq(&device->blk_data.request_queue_lock); | 186 | spin_lock_irq(&device->blk_data.request_queue_lock); |
| 185 | blkdev_dequeue_request(req); | ||
| 186 | nr_queued++; | ||
| 187 | } | 187 | } |
| 188 | spin_unlock_irq(&device->blk_data.request_queue_lock); | 188 | spin_unlock_irq(&device->blk_data.request_queue_lock); |
| 189 | atomic_set(&device->blk_data.requeue_scheduled, 0); | 189 | atomic_set(&device->blk_data.requeue_scheduled, 0); |
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 76e44eb7c47f..c20e3c548343 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c | |||
| @@ -449,6 +449,7 @@ tape_alloc_device(void) | |||
| 449 | INIT_LIST_HEAD(&device->req_queue); | 449 | INIT_LIST_HEAD(&device->req_queue); |
| 450 | INIT_LIST_HEAD(&device->node); | 450 | INIT_LIST_HEAD(&device->node); |
| 451 | init_waitqueue_head(&device->state_change_wq); | 451 | init_waitqueue_head(&device->state_change_wq); |
| 452 | init_waitqueue_head(&device->wait_queue); | ||
| 452 | device->tape_state = TS_INIT; | 453 | device->tape_state = TS_INIT; |
| 453 | device->medium_state = MS_UNKNOWN; | 454 | device->medium_state = MS_UNKNOWN; |
| 454 | *device->modeset_byte = 0; | 455 | *device->modeset_byte = 0; |
| @@ -954,21 +955,19 @@ __tape_wake_up(struct tape_request *request, void *data) | |||
| 954 | int | 955 | int |
| 955 | tape_do_io(struct tape_device *device, struct tape_request *request) | 956 | tape_do_io(struct tape_device *device, struct tape_request *request) |
| 956 | { | 957 | { |
| 957 | wait_queue_head_t wq; | ||
| 958 | int rc; | 958 | int rc; |
| 959 | 959 | ||
| 960 | init_waitqueue_head(&wq); | ||
| 961 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 960 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
| 962 | /* Setup callback */ | 961 | /* Setup callback */ |
| 963 | request->callback = __tape_wake_up; | 962 | request->callback = __tape_wake_up; |
| 964 | request->callback_data = &wq; | 963 | request->callback_data = &device->wait_queue; |
| 965 | /* Add request to request queue and try to start it. */ | 964 | /* Add request to request queue and try to start it. */ |
| 966 | rc = __tape_start_request(device, request); | 965 | rc = __tape_start_request(device, request); |
| 967 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 966 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
| 968 | if (rc) | 967 | if (rc) |
| 969 | return rc; | 968 | return rc; |
| 970 | /* Request added to the queue. Wait for its completion. */ | 969 | /* Request added to the queue. Wait for its completion. */ |
| 971 | wait_event(wq, (request->callback == NULL)); | 970 | wait_event(device->wait_queue, (request->callback == NULL)); |
| 972 | /* Get rc from request */ | 971 | /* Get rc from request */ |
| 973 | return request->rc; | 972 | return request->rc; |
| 974 | } | 973 | } |
| @@ -989,20 +988,19 @@ int | |||
| 989 | tape_do_io_interruptible(struct tape_device *device, | 988 | tape_do_io_interruptible(struct tape_device *device, |
| 990 | struct tape_request *request) | 989 | struct tape_request *request) |
| 991 | { | 990 | { |
| 992 | wait_queue_head_t wq; | ||
| 993 | int rc; | 991 | int rc; |
| 994 | 992 | ||
| 995 | init_waitqueue_head(&wq); | ||
| 996 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 993 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
| 997 | /* Setup callback */ | 994 | /* Setup callback */ |
| 998 | request->callback = __tape_wake_up_interruptible; | 995 | request->callback = __tape_wake_up_interruptible; |
| 999 | request->callback_data = &wq; | 996 | request->callback_data = &device->wait_queue; |
| 1000 | rc = __tape_start_request(device, request); | 997 | rc = __tape_start_request(device, request); |
| 1001 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 998 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
| 1002 | if (rc) | 999 | if (rc) |
| 1003 | return rc; | 1000 | return rc; |
| 1004 | /* Request added to the queue. Wait for its completion. */ | 1001 | /* Request added to the queue. Wait for its completion. */ |
| 1005 | rc = wait_event_interruptible(wq, (request->callback == NULL)); | 1002 | rc = wait_event_interruptible(device->wait_queue, |
| 1003 | (request->callback == NULL)); | ||
| 1006 | if (rc != -ERESTARTSYS) | 1004 | if (rc != -ERESTARTSYS) |
| 1007 | /* Request finished normally. */ | 1005 | /* Request finished normally. */ |
| 1008 | return request->rc; | 1006 | return request->rc; |
| @@ -1015,7 +1013,7 @@ tape_do_io_interruptible(struct tape_device *device, | |||
| 1015 | /* Wait for the interrupt that acknowledges the halt. */ | 1013 | /* Wait for the interrupt that acknowledges the halt. */ |
| 1016 | do { | 1014 | do { |
| 1017 | rc = wait_event_interruptible( | 1015 | rc = wait_event_interruptible( |
| 1018 | wq, | 1016 | device->wait_queue, |
| 1019 | (request->callback == NULL) | 1017 | (request->callback == NULL) |
| 1020 | ); | 1018 | ); |
| 1021 | } while (rc == -ERESTARTSYS); | 1019 | } while (rc == -ERESTARTSYS); |
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index 9f55ce6f3c78..5ab34340919b 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
| @@ -31,11 +31,6 @@ | |||
| 31 | */ | 31 | */ |
| 32 | static void *kvm_devices; | 32 | static void *kvm_devices; |
| 33 | 33 | ||
| 34 | /* | ||
| 35 | * Unique numbering for kvm devices. | ||
| 36 | */ | ||
| 37 | static unsigned int dev_index; | ||
| 38 | |||
| 39 | struct kvm_device { | 34 | struct kvm_device { |
| 40 | struct virtio_device vdev; | 35 | struct virtio_device vdev; |
| 41 | struct kvm_device_desc *desc; | 36 | struct kvm_device_desc *desc; |
| @@ -250,26 +245,25 @@ static struct device kvm_root = { | |||
| 250 | * adds a new device and register it with virtio | 245 | * adds a new device and register it with virtio |
| 251 | * appropriate drivers are loaded by the device model | 246 | * appropriate drivers are loaded by the device model |
| 252 | */ | 247 | */ |
| 253 | static void add_kvm_device(struct kvm_device_desc *d) | 248 | static void add_kvm_device(struct kvm_device_desc *d, unsigned int offset) |
| 254 | { | 249 | { |
| 255 | struct kvm_device *kdev; | 250 | struct kvm_device *kdev; |
| 256 | 251 | ||
| 257 | kdev = kzalloc(sizeof(*kdev), GFP_KERNEL); | 252 | kdev = kzalloc(sizeof(*kdev), GFP_KERNEL); |
| 258 | if (!kdev) { | 253 | if (!kdev) { |
| 259 | printk(KERN_EMERG "Cannot allocate kvm dev %u\n", | 254 | printk(KERN_EMERG "Cannot allocate kvm dev %u type %u\n", |
| 260 | dev_index++); | 255 | offset, d->type); |
| 261 | return; | 256 | return; |
| 262 | } | 257 | } |
| 263 | 258 | ||
| 264 | kdev->vdev.dev.parent = &kvm_root; | 259 | kdev->vdev.dev.parent = &kvm_root; |
| 265 | kdev->vdev.index = dev_index++; | ||
| 266 | kdev->vdev.id.device = d->type; | 260 | kdev->vdev.id.device = d->type; |
| 267 | kdev->vdev.config = &kvm_vq_configspace_ops; | 261 | kdev->vdev.config = &kvm_vq_configspace_ops; |
| 268 | kdev->desc = d; | 262 | kdev->desc = d; |
| 269 | 263 | ||
| 270 | if (register_virtio_device(&kdev->vdev) != 0) { | 264 | if (register_virtio_device(&kdev->vdev) != 0) { |
| 271 | printk(KERN_ERR "Failed to register kvm device %u\n", | 265 | printk(KERN_ERR "Failed to register kvm device %u type %u\n", |
| 272 | kdev->vdev.index); | 266 | offset, d->type); |
| 273 | kfree(kdev); | 267 | kfree(kdev); |
| 274 | } | 268 | } |
| 275 | } | 269 | } |
| @@ -289,7 +283,7 @@ static void scan_devices(void) | |||
| 289 | if (d->type == 0) | 283 | if (d->type == 0) |
| 290 | break; | 284 | break; |
| 291 | 285 | ||
| 292 | add_kvm_device(d); | 286 | add_kvm_device(d, i); |
| 293 | } | 287 | } |
| 294 | } | 288 | } |
| 295 | 289 | ||
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 1400ea6a2491..1bc00b721e9d 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -43,7 +43,6 @@ | |||
| 43 | 43 | ||
| 44 | #include <asm/io.h> | 44 | #include <asm/io.h> |
| 45 | #include <asm/irq.h> | 45 | #include <asm/irq.h> |
| 46 | #include <asm/serial.h> | ||
| 47 | 46 | ||
| 48 | #include "8250.h" | 47 | #include "8250.h" |
| 49 | 48 | ||
| @@ -93,6 +92,7 @@ static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS; | |||
| 93 | */ | 92 | */ |
| 94 | #define CONFIG_HUB6 1 | 93 | #define CONFIG_HUB6 1 |
| 95 | 94 | ||
| 95 | #include <asm/serial.h> | ||
| 96 | /* | 96 | /* |
| 97 | * SERIAL_PORT_DFNS tells us about built-in ports that have no | 97 | * SERIAL_PORT_DFNS tells us about built-in ports that have no |
| 98 | * standard enumeration mechanism. Platforms that can find all | 98 | * standard enumeration mechanism. Platforms that can find all |
| @@ -1547,8 +1547,6 @@ static int serial_link_irq_chain(struct uart_8250_port *up) | |||
| 1547 | i->head = &up->list; | 1547 | i->head = &up->list; |
| 1548 | spin_unlock_irq(&i->lock); | 1548 | spin_unlock_irq(&i->lock); |
| 1549 | 1549 | ||
| 1550 | irq_flags |= SERIAL_EXTRA_IRQ_FLAGS; | ||
| 1551 | |||
| 1552 | ret = request_irq(up->port.irq, serial8250_interrupt, | 1550 | ret = request_irq(up->port.irq, serial8250_interrupt, |
| 1553 | irq_flags, "serial", i); | 1551 | irq_flags, "serial", i); |
| 1554 | if (ret < 0) | 1552 | if (ret < 0) |
diff --git a/drivers/serial/8250.h b/drivers/serial/8250.h index a10a40cc0d9e..91bd28f2bb47 100644 --- a/drivers/serial/8250.h +++ b/drivers/serial/8250.h | |||
| @@ -78,8 +78,3 @@ struct serial8250_config { | |||
| 78 | #else | 78 | #else |
| 79 | #define ALPHA_KLUDGE_MCR 0 | 79 | #define ALPHA_KLUDGE_MCR 0 |
| 80 | #endif | 80 | #endif |
| 81 | |||
| 82 | #ifndef SERIAL_EXTRA_IRQ_FLAGS | ||
| 83 | #define SERIAL_EXTRA_IRQ_FLAGS 0 | ||
| 84 | #endif | ||
| 85 | |||
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index c1cb94e9f242..7e912f21fd36 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c | |||
| @@ -155,9 +155,6 @@ static int generic_probe(struct usb_device *udev) | |||
| 155 | { | 155 | { |
| 156 | int err, c; | 156 | int err, c; |
| 157 | 157 | ||
| 158 | /* put device-specific files into sysfs */ | ||
| 159 | usb_create_sysfs_dev_files(udev); | ||
| 160 | |||
| 161 | /* Choose and set the configuration. This registers the interfaces | 158 | /* Choose and set the configuration. This registers the interfaces |
| 162 | * with the driver core and lets interface drivers bind to them. | 159 | * with the driver core and lets interface drivers bind to them. |
| 163 | */ | 160 | */ |
| @@ -189,8 +186,6 @@ static void generic_disconnect(struct usb_device *udev) | |||
| 189 | * unconfigure the device */ | 186 | * unconfigure the device */ |
| 190 | if (udev->actconfig) | 187 | if (udev->actconfig) |
| 191 | usb_set_configuration(udev, -1); | 188 | usb_set_configuration(udev, -1); |
| 192 | |||
| 193 | usb_remove_sysfs_dev_files(udev); | ||
| 194 | } | 189 | } |
| 195 | 190 | ||
| 196 | #ifdef CONFIG_PM | 191 | #ifdef CONFIG_PM |
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h index 1e4b81e9eb50..a0bf5df6cb6f 100644 --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h | |||
| @@ -213,6 +213,8 @@ struct hc_driver { | |||
| 213 | 213 | ||
| 214 | /* force handover of high-speed port to full-speed companion */ | 214 | /* force handover of high-speed port to full-speed companion */ |
| 215 | void (*relinquish_port)(struct usb_hcd *, int); | 215 | void (*relinquish_port)(struct usb_hcd *, int); |
| 216 | /* has a port been handed over to a companion? */ | ||
| 217 | int (*port_handed_over)(struct usb_hcd *, int); | ||
| 216 | }; | 218 | }; |
| 217 | 219 | ||
| 218 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); | 220 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index eb57fcc701d7..8eb4da332f56 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -1326,6 +1326,12 @@ void usb_disconnect(struct usb_device **pdev) | |||
| 1326 | 1326 | ||
| 1327 | usb_unlock_device(udev); | 1327 | usb_unlock_device(udev); |
| 1328 | 1328 | ||
| 1329 | /* Remove the device-specific files from sysfs. This must be | ||
| 1330 | * done with udev unlocked, because some of the attribute | ||
| 1331 | * routines try to acquire the device lock. | ||
| 1332 | */ | ||
| 1333 | usb_remove_sysfs_dev_files(udev); | ||
| 1334 | |||
| 1329 | /* Unregister the device. The device driver is responsible | 1335 | /* Unregister the device. The device driver is responsible |
| 1330 | * for removing the device files from usbfs and sysfs and for | 1336 | * for removing the device files from usbfs and sysfs and for |
| 1331 | * de-configuring the device. | 1337 | * de-configuring the device. |
| @@ -1541,6 +1547,9 @@ int usb_new_device(struct usb_device *udev) | |||
| 1541 | goto fail; | 1547 | goto fail; |
| 1542 | } | 1548 | } |
| 1543 | 1549 | ||
| 1550 | /* put device-specific files into sysfs */ | ||
| 1551 | usb_create_sysfs_dev_files(udev); | ||
| 1552 | |||
| 1544 | /* Tell the world! */ | 1553 | /* Tell the world! */ |
| 1545 | announce_device(udev); | 1554 | announce_device(udev); |
| 1546 | return err; | 1555 | return err; |
| @@ -2744,7 +2753,11 @@ loop: | |||
| 2744 | if ((status == -ENOTCONN) || (status == -ENOTSUPP)) | 2753 | if ((status == -ENOTCONN) || (status == -ENOTSUPP)) |
| 2745 | break; | 2754 | break; |
| 2746 | } | 2755 | } |
| 2747 | dev_err(hub_dev, "unable to enumerate USB device on port %d\n", port1); | 2756 | if (hub->hdev->parent || |
| 2757 | !hcd->driver->port_handed_over || | ||
| 2758 | !(hcd->driver->port_handed_over)(hcd, port1)) | ||
| 2759 | dev_err(hub_dev, "unable to enumerate USB device on port %d\n", | ||
| 2760 | port1); | ||
| 2748 | 2761 | ||
| 2749 | done: | 2762 | done: |
| 2750 | hub_port_disable(hub, port1, 1); | 2763 | hub_port_disable(hub, port1, 1); |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 2e2019390290..3da1ab4b389d 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -47,6 +47,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 47 | /* Edirol SD-20 */ | 47 | /* Edirol SD-20 */ |
| 48 | { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, | 48 | { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 49 | 49 | ||
| 50 | /* Avision AV600U */ | ||
| 51 | { USB_DEVICE(0x0638, 0x0a13), .driver_info = | ||
| 52 | USB_QUIRK_STRING_FETCH_255 }, | ||
| 53 | |||
| 50 | /* M-Systems Flash Disk Pioneers */ | 54 | /* M-Systems Flash Disk Pioneers */ |
| 51 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, | 55 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 52 | 56 | ||
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c index c783cb111847..5e1f5d55bf04 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c | |||
| @@ -588,35 +588,33 @@ read_descriptors(struct kobject *kobj, struct bin_attribute *attr, | |||
| 588 | container_of(kobj, struct device, kobj)); | 588 | container_of(kobj, struct device, kobj)); |
| 589 | size_t nleft = count; | 589 | size_t nleft = count; |
| 590 | size_t srclen, n; | 590 | size_t srclen, n; |
| 591 | int cfgno; | ||
| 592 | void *src; | ||
| 591 | 593 | ||
| 592 | usb_lock_device(udev); | 594 | /* The binary attribute begins with the device descriptor. |
| 593 | 595 | * Following that are the raw descriptor entries for all the | |
| 594 | /* The binary attribute begins with the device descriptor */ | 596 | * configurations (config plus subsidiary descriptors). |
| 595 | srclen = sizeof(struct usb_device_descriptor); | ||
| 596 | if (off < srclen) { | ||
| 597 | n = min_t(size_t, nleft, srclen - off); | ||
| 598 | memcpy(buf, off + (char *) &udev->descriptor, n); | ||
| 599 | nleft -= n; | ||
| 600 | buf += n; | ||
| 601 | off = 0; | ||
| 602 | } else { | ||
| 603 | off -= srclen; | ||
| 604 | } | ||
| 605 | |||
| 606 | /* Then follows the raw descriptor entry for the current | ||
| 607 | * configuration (config plus subsidiary descriptors). | ||
| 608 | */ | 597 | */ |
| 609 | if (udev->actconfig) { | 598 | for (cfgno = -1; cfgno < udev->descriptor.bNumConfigurations && |
| 610 | int cfgno = udev->actconfig - udev->config; | 599 | nleft > 0; ++cfgno) { |
| 611 | 600 | if (cfgno < 0) { | |
| 612 | srclen = __le16_to_cpu(udev->actconfig->desc.wTotalLength); | 601 | src = &udev->descriptor; |
| 602 | srclen = sizeof(struct usb_device_descriptor); | ||
| 603 | } else { | ||
| 604 | src = udev->rawdescriptors[cfgno]; | ||
| 605 | srclen = __le16_to_cpu(udev->config[cfgno].desc. | ||
| 606 | wTotalLength); | ||
| 607 | } | ||
| 613 | if (off < srclen) { | 608 | if (off < srclen) { |
| 614 | n = min_t(size_t, nleft, srclen - off); | 609 | n = min(nleft, srclen - (size_t) off); |
| 615 | memcpy(buf, off + udev->rawdescriptors[cfgno], n); | 610 | memcpy(buf, src + off, n); |
| 616 | nleft -= n; | 611 | nleft -= n; |
| 612 | buf += n; | ||
| 613 | off = 0; | ||
| 614 | } else { | ||
| 615 | off -= srclen; | ||
| 617 | } | 616 | } |
| 618 | } | 617 | } |
| 619 | usb_unlock_device(udev); | ||
| 620 | return count - nleft; | 618 | return count - nleft; |
| 621 | } | 619 | } |
| 622 | 620 | ||
diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c index 651b82701394..18687543d7fa 100644 --- a/drivers/usb/gadget/fsl_usb2_udc.c +++ b/drivers/usb/gadget/fsl_usb2_udc.c | |||
| @@ -1627,7 +1627,9 @@ static int reset_queues(struct fsl_udc *udc) | |||
| 1627 | udc_reset_ep_queue(udc, pipe); | 1627 | udc_reset_ep_queue(udc, pipe); |
| 1628 | 1628 | ||
| 1629 | /* report disconnect; the driver is already quiesced */ | 1629 | /* report disconnect; the driver is already quiesced */ |
| 1630 | spin_unlock(&udc->lock); | ||
| 1630 | udc->driver->disconnect(&udc->gadget); | 1631 | udc->driver->disconnect(&udc->gadget); |
| 1632 | spin_lock(&udc->lock); | ||
| 1631 | 1633 | ||
| 1632 | return 0; | 1634 | return 0; |
| 1633 | } | 1635 | } |
diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c index 8b5f991e949c..08a4335401a9 100644 --- a/drivers/usb/host/ehci-au1xxx.c +++ b/drivers/usb/host/ehci-au1xxx.c | |||
| @@ -223,6 +223,7 @@ static const struct hc_driver ehci_au1xxx_hc_driver = { | |||
| 223 | .bus_suspend = ehci_bus_suspend, | 223 | .bus_suspend = ehci_bus_suspend, |
| 224 | .bus_resume = ehci_bus_resume, | 224 | .bus_resume = ehci_bus_resume, |
| 225 | .relinquish_port = ehci_relinquish_port, | 225 | .relinquish_port = ehci_relinquish_port, |
| 226 | .port_handed_over = ehci_port_handed_over, | ||
| 226 | }; | 227 | }; |
| 227 | 228 | ||
| 228 | /*-------------------------------------------------------------------------*/ | 229 | /*-------------------------------------------------------------------------*/ |
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index 6d9bed6c1f48..7370d6187c64 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c | |||
| @@ -269,7 +269,7 @@ static int ehci_fsl_setup(struct usb_hcd *hcd) | |||
| 269 | if (retval) | 269 | if (retval) |
| 270 | return retval; | 270 | return retval; |
| 271 | 271 | ||
| 272 | ehci->is_tdi_rh_tt = 1; | 272 | hcd->has_tt = 1; |
| 273 | 273 | ||
| 274 | ehci->sbrn = 0x20; | 274 | ehci->sbrn = 0x20; |
| 275 | 275 | ||
| @@ -295,10 +295,6 @@ static const struct hc_driver ehci_fsl_hc_driver = { | |||
| 295 | */ | 295 | */ |
| 296 | .reset = ehci_fsl_setup, | 296 | .reset = ehci_fsl_setup, |
| 297 | .start = ehci_run, | 297 | .start = ehci_run, |
| 298 | #ifdef CONFIG_PM | ||
| 299 | .suspend = ehci_bus_suspend, | ||
| 300 | .resume = ehci_bus_resume, | ||
| 301 | #endif | ||
| 302 | .stop = ehci_stop, | 298 | .stop = ehci_stop, |
| 303 | .shutdown = ehci_shutdown, | 299 | .shutdown = ehci_shutdown, |
| 304 | 300 | ||
| @@ -322,6 +318,7 @@ static const struct hc_driver ehci_fsl_hc_driver = { | |||
| 322 | .bus_suspend = ehci_bus_suspend, | 318 | .bus_suspend = ehci_bus_suspend, |
| 323 | .bus_resume = ehci_bus_resume, | 319 | .bus_resume = ehci_bus_resume, |
| 324 | .relinquish_port = ehci_relinquish_port, | 320 | .relinquish_port = ehci_relinquish_port, |
| 321 | .port_handed_over = ehci_port_handed_over, | ||
| 325 | }; | 322 | }; |
| 326 | 323 | ||
| 327 | static int ehci_fsl_drv_probe(struct platform_device *pdev) | 324 | static int ehci_fsl_drv_probe(struct platform_device *pdev) |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 382587c4457c..740835bb8575 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
| @@ -609,7 +609,7 @@ static int ehci_hub_control ( | |||
| 609 | } | 609 | } |
| 610 | break; | 610 | break; |
| 611 | case USB_PORT_FEAT_C_SUSPEND: | 611 | case USB_PORT_FEAT_C_SUSPEND: |
| 612 | /* we auto-clear this feature */ | 612 | clear_bit(wIndex, &ehci->port_c_suspend); |
| 613 | break; | 613 | break; |
| 614 | case USB_PORT_FEAT_POWER: | 614 | case USB_PORT_FEAT_POWER: |
| 615 | if (HCS_PPC (ehci->hcs_params)) | 615 | if (HCS_PPC (ehci->hcs_params)) |
| @@ -688,7 +688,7 @@ static int ehci_hub_control ( | |||
| 688 | /* resume completed? */ | 688 | /* resume completed? */ |
| 689 | else if (time_after_eq(jiffies, | 689 | else if (time_after_eq(jiffies, |
| 690 | ehci->reset_done[wIndex])) { | 690 | ehci->reset_done[wIndex])) { |
| 691 | status |= 1 << USB_PORT_FEAT_C_SUSPEND; | 691 | set_bit(wIndex, &ehci->port_c_suspend); |
| 692 | ehci->reset_done[wIndex] = 0; | 692 | ehci->reset_done[wIndex] = 0; |
| 693 | 693 | ||
| 694 | /* stop resume signaling */ | 694 | /* stop resume signaling */ |
| @@ -765,6 +765,8 @@ static int ehci_hub_control ( | |||
| 765 | status |= 1 << USB_PORT_FEAT_RESET; | 765 | status |= 1 << USB_PORT_FEAT_RESET; |
| 766 | if (temp & PORT_POWER) | 766 | if (temp & PORT_POWER) |
| 767 | status |= 1 << USB_PORT_FEAT_POWER; | 767 | status |= 1 << USB_PORT_FEAT_POWER; |
| 768 | if (test_bit(wIndex, &ehci->port_c_suspend)) | ||
| 769 | status |= 1 << USB_PORT_FEAT_C_SUSPEND; | ||
| 768 | 770 | ||
| 769 | #ifndef VERBOSE_DEBUG | 771 | #ifndef VERBOSE_DEBUG |
| 770 | if (status & ~0xffff) /* only if wPortChange is interesting */ | 772 | if (status & ~0xffff) /* only if wPortChange is interesting */ |
| @@ -875,3 +877,13 @@ static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) | |||
| 875 | set_owner(ehci, --portnum, PORT_OWNER); | 877 | set_owner(ehci, --portnum, PORT_OWNER); |
| 876 | } | 878 | } |
| 877 | 879 | ||
| 880 | static int ehci_port_handed_over(struct usb_hcd *hcd, int portnum) | ||
| 881 | { | ||
| 882 | struct ehci_hcd *ehci = hcd_to_ehci(hcd); | ||
| 883 | u32 __iomem *reg; | ||
| 884 | |||
| 885 | if (ehci_is_TDI(ehci)) | ||
| 886 | return 0; | ||
| 887 | reg = &ehci->regs->port_status[portnum - 1]; | ||
| 888 | return ehci_readl(ehci, reg) & PORT_OWNER; | ||
| 889 | } | ||
diff --git a/drivers/usb/host/ehci-ixp4xx.c b/drivers/usb/host/ehci-ixp4xx.c index 601c8795a854..9d042f220097 100644 --- a/drivers/usb/host/ehci-ixp4xx.c +++ b/drivers/usb/host/ehci-ixp4xx.c | |||
| @@ -26,7 +26,7 @@ static int ixp4xx_ehci_init(struct usb_hcd *hcd) | |||
| 26 | + HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); | 26 | + HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); |
| 27 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); | 27 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); |
| 28 | 28 | ||
| 29 | ehci->is_tdi_rh_tt = 1; | 29 | hcd->has_tt = 1; |
| 30 | ehci_reset(ehci); | 30 | ehci_reset(ehci); |
| 31 | 31 | ||
| 32 | retval = ehci_init(hcd); | 32 | retval = ehci_init(hcd); |
| @@ -58,6 +58,8 @@ static const struct hc_driver ixp4xx_ehci_hc_driver = { | |||
| 58 | .bus_suspend = ehci_bus_suspend, | 58 | .bus_suspend = ehci_bus_suspend, |
| 59 | .bus_resume = ehci_bus_resume, | 59 | .bus_resume = ehci_bus_resume, |
| 60 | #endif | 60 | #endif |
| 61 | .relinquish_port = ehci_relinquish_port, | ||
| 62 | .port_handed_over = ehci_port_handed_over, | ||
| 61 | }; | 63 | }; |
| 62 | 64 | ||
| 63 | static int ixp4xx_ehci_probe(struct platform_device *pdev) | 65 | static int ixp4xx_ehci_probe(struct platform_device *pdev) |
diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c index 3adfda813a7b..ab625f0ba1d9 100644 --- a/drivers/usb/host/ehci-orion.c +++ b/drivers/usb/host/ehci-orion.c | |||
| @@ -139,10 +139,6 @@ static const struct hc_driver ehci_orion_hc_driver = { | |||
| 139 | */ | 139 | */ |
| 140 | .reset = ehci_orion_setup, | 140 | .reset = ehci_orion_setup, |
| 141 | .start = ehci_run, | 141 | .start = ehci_run, |
| 142 | #ifdef CONFIG_PM | ||
| 143 | .suspend = ehci_bus_suspend, | ||
| 144 | .resume = ehci_bus_resume, | ||
| 145 | #endif | ||
| 146 | .stop = ehci_stop, | 142 | .stop = ehci_stop, |
| 147 | .shutdown = ehci_shutdown, | 143 | .shutdown = ehci_shutdown, |
| 148 | 144 | ||
| @@ -165,6 +161,8 @@ static const struct hc_driver ehci_orion_hc_driver = { | |||
| 165 | .hub_control = ehci_hub_control, | 161 | .hub_control = ehci_hub_control, |
| 166 | .bus_suspend = ehci_bus_suspend, | 162 | .bus_suspend = ehci_bus_suspend, |
| 167 | .bus_resume = ehci_bus_resume, | 163 | .bus_resume = ehci_bus_resume, |
| 164 | .relinquish_port = ehci_relinquish_port, | ||
| 165 | .port_handed_over = ehci_port_handed_over, | ||
| 168 | }; | 166 | }; |
| 169 | 167 | ||
| 170 | static void __init | 168 | static void __init |
| @@ -250,7 +248,7 @@ static int __init ehci_orion_drv_probe(struct platform_device *pdev) | |||
| 250 | ehci->regs = hcd->regs + 0x100 + | 248 | ehci->regs = hcd->regs + 0x100 + |
| 251 | HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); | 249 | HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); |
| 252 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); | 250 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); |
| 253 | ehci->is_tdi_rh_tt = 1; | 251 | hcd->has_tt = 1; |
| 254 | ehci->sbrn = 0x20; | 252 | ehci->sbrn = 0x20; |
| 255 | 253 | ||
| 256 | /* | 254 | /* |
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 5bb7f6bb13f3..c46a58f9181d 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
| @@ -129,7 +129,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
| 129 | switch (pdev->vendor) { | 129 | switch (pdev->vendor) { |
| 130 | case PCI_VENDOR_ID_TDI: | 130 | case PCI_VENDOR_ID_TDI: |
| 131 | if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) { | 131 | if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) { |
| 132 | ehci->is_tdi_rh_tt = 1; | ||
| 133 | hcd->has_tt = 1; | 132 | hcd->has_tt = 1; |
| 134 | tdi_reset(ehci); | 133 | tdi_reset(ehci); |
| 135 | } | 134 | } |
| @@ -379,7 +378,8 @@ static const struct hc_driver ehci_pci_hc_driver = { | |||
| 379 | .hub_control = ehci_hub_control, | 378 | .hub_control = ehci_hub_control, |
| 380 | .bus_suspend = ehci_bus_suspend, | 379 | .bus_suspend = ehci_bus_suspend, |
| 381 | .bus_resume = ehci_bus_resume, | 380 | .bus_resume = ehci_bus_resume, |
| 382 | .relinquish_port = ehci_relinquish_port, | 381 | .relinquish_port = ehci_relinquish_port, |
| 382 | .port_handed_over = ehci_port_handed_over, | ||
| 383 | }; | 383 | }; |
| 384 | 384 | ||
| 385 | /*-------------------------------------------------------------------------*/ | 385 | /*-------------------------------------------------------------------------*/ |
diff --git a/drivers/usb/host/ehci-ppc-of.c b/drivers/usb/host/ehci-ppc-of.c index ee305b1f99ff..b018deed2e8f 100644 --- a/drivers/usb/host/ehci-ppc-of.c +++ b/drivers/usb/host/ehci-ppc-of.c | |||
| @@ -76,6 +76,8 @@ static const struct hc_driver ehci_ppc_of_hc_driver = { | |||
| 76 | .bus_suspend = ehci_bus_suspend, | 76 | .bus_suspend = ehci_bus_suspend, |
| 77 | .bus_resume = ehci_bus_resume, | 77 | .bus_resume = ehci_bus_resume, |
| 78 | #endif | 78 | #endif |
| 79 | .relinquish_port = ehci_relinquish_port, | ||
| 80 | .port_handed_over = ehci_port_handed_over, | ||
| 79 | }; | 81 | }; |
| 80 | 82 | ||
| 81 | 83 | ||
diff --git a/drivers/usb/host/ehci-ppc-soc.c b/drivers/usb/host/ehci-ppc-soc.c index 6c76036783a1..529590eb4037 100644 --- a/drivers/usb/host/ehci-ppc-soc.c +++ b/drivers/usb/host/ehci-ppc-soc.c | |||
| @@ -163,6 +163,7 @@ static const struct hc_driver ehci_ppc_soc_hc_driver = { | |||
| 163 | .bus_suspend = ehci_bus_suspend, | 163 | .bus_suspend = ehci_bus_suspend, |
| 164 | .bus_resume = ehci_bus_resume, | 164 | .bus_resume = ehci_bus_resume, |
| 165 | .relinquish_port = ehci_relinquish_port, | 165 | .relinquish_port = ehci_relinquish_port, |
| 166 | .port_handed_over = ehci_port_handed_over, | ||
| 166 | }; | 167 | }; |
| 167 | 168 | ||
| 168 | static int ehci_hcd_ppc_soc_drv_probe(struct platform_device *pdev) | 169 | static int ehci_hcd_ppc_soc_drv_probe(struct platform_device *pdev) |
diff --git a/drivers/usb/host/ehci-ps3.c b/drivers/usb/host/ehci-ps3.c index 69782221bcf3..37e6abeb794c 100644 --- a/drivers/usb/host/ehci-ps3.c +++ b/drivers/usb/host/ehci-ps3.c | |||
| @@ -73,6 +73,7 @@ static const struct hc_driver ps3_ehci_hc_driver = { | |||
| 73 | .bus_resume = ehci_bus_resume, | 73 | .bus_resume = ehci_bus_resume, |
| 74 | #endif | 74 | #endif |
| 75 | .relinquish_port = ehci_relinquish_port, | 75 | .relinquish_port = ehci_relinquish_port, |
| 76 | .port_handed_over = ehci_port_handed_over, | ||
| 76 | }; | 77 | }; |
| 77 | 78 | ||
| 78 | static int ps3_ehci_probe(struct ps3_system_bus_device *dev) | 79 | static int ps3_ehci_probe(struct ps3_system_bus_device *dev) |
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index be575e46eac3..b7853c8bac0f 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
| @@ -1349,18 +1349,27 @@ iso_stream_schedule ( | |||
| 1349 | /* when's the last uframe this urb could start? */ | 1349 | /* when's the last uframe this urb could start? */ |
| 1350 | max = now + mod; | 1350 | max = now + mod; |
| 1351 | 1351 | ||
| 1352 | /* typical case: reuse current schedule. stream is still active, | 1352 | /* Typical case: reuse current schedule, stream is still active. |
| 1353 | * and no gaps from host falling behind (irq delays etc) | 1353 | * Hopefully there are no gaps from the host falling behind |
| 1354 | * (irq delays etc), but if there are we'll take the next | ||
| 1355 | * slot in the schedule, implicitly assuming URB_ISO_ASAP. | ||
| 1354 | */ | 1356 | */ |
| 1355 | if (likely (!list_empty (&stream->td_list))) { | 1357 | if (likely (!list_empty (&stream->td_list))) { |
| 1356 | start = stream->next_uframe; | 1358 | start = stream->next_uframe; |
| 1357 | if (start < now) | 1359 | if (start < now) |
| 1358 | start += mod; | 1360 | start += mod; |
| 1359 | if (likely ((start + sched->span) < max)) | 1361 | |
| 1360 | goto ready; | 1362 | /* Fell behind (by up to twice the slop amount)? */ |
| 1361 | /* else fell behind; someday, try to reschedule */ | 1363 | if (start >= max - 2 * 8 * SCHEDULE_SLOP) |
| 1362 | status = -EL2NSYNC; | 1364 | start += stream->interval * DIV_ROUND_UP( |
| 1363 | goto fail; | 1365 | max - start, stream->interval) - mod; |
| 1366 | |||
| 1367 | /* Tried to schedule too far into the future? */ | ||
| 1368 | if (unlikely((start + sched->span) >= max)) { | ||
| 1369 | status = -EFBIG; | ||
| 1370 | goto fail; | ||
| 1371 | } | ||
| 1372 | goto ready; | ||
| 1364 | } | 1373 | } |
| 1365 | 1374 | ||
| 1366 | /* need to schedule; when's the next (u)frame we could start? | 1375 | /* need to schedule; when's the next (u)frame we could start? |
| @@ -1613,6 +1622,9 @@ itd_complete ( | |||
| 1613 | } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { | 1622 | } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { |
| 1614 | desc->status = 0; | 1623 | desc->status = 0; |
| 1615 | desc->actual_length = EHCI_ITD_LENGTH (t); | 1624 | desc->actual_length = EHCI_ITD_LENGTH (t); |
| 1625 | } else { | ||
| 1626 | /* URB was too late */ | ||
| 1627 | desc->status = -EXDEV; | ||
| 1616 | } | 1628 | } |
| 1617 | } | 1629 | } |
| 1618 | 1630 | ||
| @@ -2095,7 +2107,7 @@ done: | |||
| 2095 | static void | 2107 | static void |
| 2096 | scan_periodic (struct ehci_hcd *ehci) | 2108 | scan_periodic (struct ehci_hcd *ehci) |
| 2097 | { | 2109 | { |
| 2098 | unsigned frame, clock, now_uframe, mod; | 2110 | unsigned now_uframe, frame, clock, clock_frame, mod; |
| 2099 | unsigned modified; | 2111 | unsigned modified; |
| 2100 | 2112 | ||
| 2101 | mod = ehci->periodic_size << 3; | 2113 | mod = ehci->periodic_size << 3; |
| @@ -2111,6 +2123,7 @@ scan_periodic (struct ehci_hcd *ehci) | |||
| 2111 | else | 2123 | else |
| 2112 | clock = now_uframe + mod - 1; | 2124 | clock = now_uframe + mod - 1; |
| 2113 | clock %= mod; | 2125 | clock %= mod; |
| 2126 | clock_frame = clock >> 3; | ||
| 2114 | 2127 | ||
| 2115 | for (;;) { | 2128 | for (;;) { |
| 2116 | union ehci_shadow q, *q_p; | 2129 | union ehci_shadow q, *q_p; |
| @@ -2157,22 +2170,26 @@ restart: | |||
| 2157 | case Q_TYPE_ITD: | 2170 | case Q_TYPE_ITD: |
| 2158 | /* If this ITD is still active, leave it for | 2171 | /* If this ITD is still active, leave it for |
| 2159 | * later processing ... check the next entry. | 2172 | * later processing ... check the next entry. |
| 2173 | * No need to check for activity unless the | ||
| 2174 | * frame is current. | ||
| 2160 | */ | 2175 | */ |
| 2161 | rmb (); | 2176 | if (frame == clock_frame && live) { |
| 2162 | for (uf = 0; uf < 8 && live; uf++) { | 2177 | rmb(); |
| 2163 | if (0 == (q.itd->hw_transaction [uf] | 2178 | for (uf = 0; uf < 8; uf++) { |
| 2164 | & ITD_ACTIVE(ehci))) | 2179 | if (q.itd->hw_transaction[uf] & |
| 2165 | continue; | 2180 | ITD_ACTIVE(ehci)) |
| 2166 | incomplete = true; | 2181 | break; |
| 2167 | q_p = &q.itd->itd_next; | 2182 | } |
| 2168 | hw_p = &q.itd->hw_next; | 2183 | if (uf < 8) { |
| 2169 | type = Q_NEXT_TYPE(ehci, | 2184 | incomplete = true; |
| 2185 | q_p = &q.itd->itd_next; | ||
| 2186 | hw_p = &q.itd->hw_next; | ||
| 2187 | type = Q_NEXT_TYPE(ehci, | ||
| 2170 | q.itd->hw_next); | 2188 | q.itd->hw_next); |
| 2171 | q = *q_p; | 2189 | q = *q_p; |
| 2172 | break; | 2190 | break; |
| 2191 | } | ||
| 2173 | } | 2192 | } |
| 2174 | if (uf < 8 && live) | ||
| 2175 | break; | ||
| 2176 | 2193 | ||
| 2177 | /* Take finished ITDs out of the schedule | 2194 | /* Take finished ITDs out of the schedule |
| 2178 | * and process them: recycle, maybe report | 2195 | * and process them: recycle, maybe report |
| @@ -2189,9 +2206,12 @@ restart: | |||
| 2189 | case Q_TYPE_SITD: | 2206 | case Q_TYPE_SITD: |
| 2190 | /* If this SITD is still active, leave it for | 2207 | /* If this SITD is still active, leave it for |
| 2191 | * later processing ... check the next entry. | 2208 | * later processing ... check the next entry. |
| 2209 | * No need to check for activity unless the | ||
| 2210 | * frame is current. | ||
| 2192 | */ | 2211 | */ |
| 2193 | if ((q.sitd->hw_results & SITD_ACTIVE(ehci)) | 2212 | if (frame == clock_frame && live && |
| 2194 | && live) { | 2213 | (q.sitd->hw_results & |
| 2214 | SITD_ACTIVE(ehci))) { | ||
| 2195 | incomplete = true; | 2215 | incomplete = true; |
| 2196 | q_p = &q.sitd->sitd_next; | 2216 | q_p = &q.sitd->sitd_next; |
| 2197 | hw_p = &q.sitd->hw_next; | 2217 | hw_p = &q.sitd->hw_next; |
| @@ -2260,6 +2280,7 @@ restart: | |||
| 2260 | 2280 | ||
| 2261 | /* rescan the rest of this frame, then ... */ | 2281 | /* rescan the rest of this frame, then ... */ |
| 2262 | clock = now; | 2282 | clock = now; |
| 2283 | clock_frame = clock >> 3; | ||
| 2263 | } else { | 2284 | } else { |
| 2264 | now_uframe++; | 2285 | now_uframe++; |
| 2265 | now_uframe %= mod; | 2286 | now_uframe %= mod; |
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index bf92d209a1a9..35a03095757e 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
| @@ -97,6 +97,8 @@ struct ehci_hcd { /* one per controller */ | |||
| 97 | dedicated to the companion controller */ | 97 | dedicated to the companion controller */ |
| 98 | unsigned long owned_ports; /* which ports are | 98 | unsigned long owned_ports; /* which ports are |
| 99 | owned by the companion during a bus suspend */ | 99 | owned by the companion during a bus suspend */ |
| 100 | unsigned long port_c_suspend; /* which ports have | ||
| 101 | the change-suspend feature turned on */ | ||
| 100 | 102 | ||
| 101 | /* per-HC memory pools (could be per-bus, but ...) */ | 103 | /* per-HC memory pools (could be per-bus, but ...) */ |
| 102 | struct dma_pool *qh_pool; /* qh per active urb */ | 104 | struct dma_pool *qh_pool; /* qh per active urb */ |
| @@ -112,7 +114,6 @@ struct ehci_hcd { /* one per controller */ | |||
| 112 | u32 command; | 114 | u32 command; |
| 113 | 115 | ||
| 114 | /* SILICON QUIRKS */ | 116 | /* SILICON QUIRKS */ |
| 115 | unsigned is_tdi_rh_tt:1; /* TDI roothub with TT */ | ||
| 116 | unsigned no_selective_suspend:1; | 117 | unsigned no_selective_suspend:1; |
| 117 | unsigned has_fsl_port_bug:1; /* FreeScale */ | 118 | unsigned has_fsl_port_bug:1; /* FreeScale */ |
| 118 | unsigned big_endian_mmio:1; | 119 | unsigned big_endian_mmio:1; |
| @@ -678,7 +679,7 @@ struct ehci_fstn { | |||
| 678 | * needed (mostly in root hub code). | 679 | * needed (mostly in root hub code). |
| 679 | */ | 680 | */ |
| 680 | 681 | ||
| 681 | #define ehci_is_TDI(e) ((e)->is_tdi_rh_tt) | 682 | #define ehci_is_TDI(e) (ehci_to_hcd(e)->has_tt) |
| 682 | 683 | ||
| 683 | /* Returns the speed of a device attached to a port on the root hub. */ | 684 | /* Returns the speed of a device attached to a port on the root hub. */ |
| 684 | static inline unsigned int | 685 | static inline unsigned int |
diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig index a53db1d4e07a..eb6c06979f3b 100644 --- a/drivers/usb/misc/Kconfig +++ b/drivers/usb/misc/Kconfig | |||
| @@ -269,3 +269,14 @@ config USB_TEST | |||
| 269 | See <http://www.linux-usb.org/usbtest/> for more information, | 269 | See <http://www.linux-usb.org/usbtest/> for more information, |
| 270 | including sample test device firmware and "how to use it". | 270 | including sample test device firmware and "how to use it". |
| 271 | 271 | ||
| 272 | config USB_ISIGHTFW | ||
| 273 | tristate "iSight firmware loading support" | ||
| 274 | depends on USB | ||
| 275 | help | ||
| 276 | This driver loads firmware for USB Apple iSight cameras, allowing | ||
| 277 | them to be driven by the USB video class driver available at | ||
| 278 | http://linux-uvc.berlios.de | ||
| 279 | |||
| 280 | The firmware for this driver must be extracted from the MacOS | ||
| 281 | driver beforehand. Tools for doing so are available at | ||
| 282 | http://bersace03.free.fr | ||
diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile index b68e6b774f1a..aba091cb5ec0 100644 --- a/drivers/usb/misc/Makefile +++ b/drivers/usb/misc/Makefile | |||
| @@ -14,6 +14,7 @@ obj-$(CONFIG_USB_EMI62) += emi62.o | |||
| 14 | obj-$(CONFIG_USB_FTDI_ELAN) += ftdi-elan.o | 14 | obj-$(CONFIG_USB_FTDI_ELAN) += ftdi-elan.o |
| 15 | obj-$(CONFIG_USB_IDMOUSE) += idmouse.o | 15 | obj-$(CONFIG_USB_IDMOUSE) += idmouse.o |
| 16 | obj-$(CONFIG_USB_IOWARRIOR) += iowarrior.o | 16 | obj-$(CONFIG_USB_IOWARRIOR) += iowarrior.o |
| 17 | obj-$(CONFIG_USB_ISIGHTFW) += isight_firmware.o | ||
| 17 | obj-$(CONFIG_USB_LCD) += usblcd.o | 18 | obj-$(CONFIG_USB_LCD) += usblcd.o |
| 18 | obj-$(CONFIG_USB_LD) += ldusb.o | 19 | obj-$(CONFIG_USB_LD) += ldusb.o |
| 19 | obj-$(CONFIG_USB_LED) += usbled.o | 20 | obj-$(CONFIG_USB_LED) += usbled.o |
diff --git a/drivers/usb/misc/isight_firmware.c b/drivers/usb/misc/isight_firmware.c new file mode 100644 index 000000000000..390e04885536 --- /dev/null +++ b/drivers/usb/misc/isight_firmware.c | |||
| @@ -0,0 +1,131 @@ | |||
| 1 | /* | ||
| 2 | * Driver for loading USB isight firmware | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Matthew Garrett <mjg@redhat.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify it | ||
| 7 | * under the terms of the GNU General Public License as published by the Free | ||
| 8 | * Software Foundation, version 2. | ||
| 9 | * | ||
| 10 | * The USB isight cameras in recent Apples are roughly compatible with the USB | ||
| 11 | * video class specification, and can be driven by uvcvideo. However, they | ||
| 12 | * need firmware to be loaded beforehand. After firmware loading, the device | ||
| 13 | * detaches from the USB bus and reattaches with a new device ID. It can then | ||
| 14 | * be claimed by the uvc driver. | ||
| 15 | * | ||
| 16 | * The firmware is non-free and must be extracted by the user. Tools to do this | ||
| 17 | * are available at http://bersace03.free.fr/ift/ | ||
| 18 | * | ||
| 19 | * The isight firmware loading was reverse engineered by Johannes Berg | ||
| 20 | * <johannes@sipsolutions.de>, and this driver is based on code by Ronald | ||
| 21 | * Bultje <rbultje@ronald.bitfreak.net> | ||
| 22 | */ | ||
| 23 | |||
| 24 | #include <linux/usb.h> | ||
| 25 | #include <linux/firmware.h> | ||
| 26 | #include <linux/errno.h> | ||
| 27 | #include <linux/module.h> | ||
| 28 | |||
| 29 | static struct usb_device_id id_table[] = { | ||
| 30 | {USB_DEVICE(0x05ac, 0x8300)}, | ||
| 31 | {}, | ||
| 32 | }; | ||
| 33 | |||
| 34 | MODULE_DEVICE_TABLE(usb, id_table); | ||
| 35 | |||
| 36 | static int isight_firmware_load(struct usb_interface *intf, | ||
| 37 | const struct usb_device_id *id) | ||
| 38 | { | ||
| 39 | struct usb_device *dev = interface_to_usbdev(intf); | ||
| 40 | int llen, len, req, ret = 0; | ||
| 41 | const struct firmware *firmware; | ||
| 42 | unsigned char *buf; | ||
| 43 | unsigned char data[4]; | ||
| 44 | char *ptr; | ||
| 45 | |||
| 46 | if (request_firmware(&firmware, "isight.fw", &dev->dev) != 0) { | ||
| 47 | printk(KERN_ERR "Unable to load isight firmware\n"); | ||
| 48 | return -ENODEV; | ||
| 49 | } | ||
| 50 | |||
| 51 | ptr = firmware->data; | ||
| 52 | |||
| 53 | if (usb_control_msg | ||
| 54 | (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\1", 1, | ||
| 55 | 300) != 1) { | ||
| 56 | printk(KERN_ERR | ||
| 57 | "Failed to initialise isight firmware loader\n"); | ||
| 58 | ret = -ENODEV; | ||
| 59 | goto out; | ||
| 60 | } | ||
| 61 | |||
| 62 | while (1) { | ||
| 63 | memcpy(data, ptr, 4); | ||
| 64 | len = (data[0] << 8 | data[1]); | ||
| 65 | req = (data[2] << 8 | data[3]); | ||
| 66 | ptr += 4; | ||
| 67 | |||
| 68 | if (len == 0x8001) | ||
| 69 | break; /* success */ | ||
| 70 | else if (len == 0) | ||
| 71 | continue; | ||
| 72 | |||
| 73 | for (; len > 0; req += 50) { | ||
| 74 | llen = len > 50 ? 50 : len; | ||
| 75 | len -= llen; | ||
| 76 | |||
| 77 | buf = kmalloc(llen, GFP_KERNEL); | ||
| 78 | memcpy(buf, ptr, llen); | ||
| 79 | |||
| 80 | ptr += llen; | ||
| 81 | |||
| 82 | if (usb_control_msg | ||
| 83 | (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, req, 0, | ||
| 84 | buf, llen, 300) != llen) { | ||
| 85 | printk(KERN_ERR | ||
| 86 | "Failed to load isight firmware\n"); | ||
| 87 | kfree(buf); | ||
| 88 | ret = -ENODEV; | ||
| 89 | goto out; | ||
| 90 | } | ||
| 91 | |||
| 92 | kfree(buf); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | if (usb_control_msg | ||
| 96 | (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\0", 1, | ||
| 97 | 300) != 1) { | ||
| 98 | printk(KERN_ERR "isight firmware loading completion failed\n"); | ||
| 99 | ret = -ENODEV; | ||
| 100 | } | ||
| 101 | out: | ||
| 102 | release_firmware(firmware); | ||
| 103 | return ret; | ||
| 104 | } | ||
| 105 | |||
| 106 | static void isight_firmware_disconnect(struct usb_interface *intf) | ||
| 107 | { | ||
| 108 | } | ||
| 109 | |||
| 110 | static struct usb_driver isight_firmware_driver = { | ||
| 111 | .name = "isight_firmware", | ||
| 112 | .probe = isight_firmware_load, | ||
| 113 | .disconnect = isight_firmware_disconnect, | ||
| 114 | .id_table = id_table, | ||
| 115 | }; | ||
| 116 | |||
| 117 | static int __init isight_firmware_init(void) | ||
| 118 | { | ||
| 119 | return usb_register(&isight_firmware_driver); | ||
| 120 | } | ||
| 121 | |||
| 122 | static void __exit isight_firmware_exit(void) | ||
| 123 | { | ||
| 124 | usb_deregister(&isight_firmware_driver); | ||
| 125 | } | ||
| 126 | |||
| 127 | module_init(isight_firmware_init); | ||
| 128 | module_exit(isight_firmware_exit); | ||
| 129 | |||
| 130 | MODULE_LICENSE("GPL"); | ||
| 131 | MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>"); | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 3cee6feac174..5234e7a3bd2c 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -174,8 +174,270 @@ static struct usb_device_id id_table_combined [] = { | |||
| 174 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) }, | 174 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) }, |
| 175 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, | 175 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, |
| 176 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, | 176 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, |
| 177 | { USB_DEVICE(MTXORB_VK_VID, MTXORB_VK_PID), | 177 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0100_PID) }, |
| 178 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0101_PID) }, | ||
| 179 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0102_PID) }, | ||
| 180 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0103_PID) }, | ||
| 181 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0104_PID) }, | ||
| 182 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0105_PID) }, | ||
| 183 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0106_PID) }, | ||
| 184 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0107_PID) }, | ||
| 185 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0108_PID) }, | ||
| 186 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0109_PID) }, | ||
| 187 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010A_PID) }, | ||
| 188 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010B_PID) }, | ||
| 189 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010C_PID) }, | ||
| 190 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010D_PID) }, | ||
| 191 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010E_PID) }, | ||
| 192 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010F_PID) }, | ||
| 193 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0110_PID) }, | ||
| 194 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0111_PID) }, | ||
| 195 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0112_PID) }, | ||
| 196 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0113_PID) }, | ||
| 197 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0114_PID) }, | ||
| 198 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0115_PID) }, | ||
| 199 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0116_PID) }, | ||
| 200 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0117_PID) }, | ||
| 201 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0118_PID) }, | ||
| 202 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0119_PID) }, | ||
| 203 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011A_PID) }, | ||
| 204 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011B_PID) }, | ||
| 205 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011C_PID) }, | ||
| 206 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011D_PID) }, | ||
| 207 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011E_PID) }, | ||
| 208 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011F_PID) }, | ||
| 209 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0120_PID) }, | ||
| 210 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0121_PID) }, | ||
| 211 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0122_PID) }, | ||
| 212 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0123_PID) }, | ||
| 213 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0124_PID) }, | ||
| 214 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0125_PID) }, | ||
| 215 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0126_PID) }, | ||
| 216 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0127_PID), | ||
| 178 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | 217 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, |
| 218 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0128_PID) }, | ||
| 219 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0129_PID) }, | ||
| 220 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012A_PID) }, | ||
| 221 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012B_PID) }, | ||
| 222 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012C_PID), | ||
| 223 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 224 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012D_PID) }, | ||
| 225 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012E_PID) }, | ||
| 226 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012F_PID) }, | ||
| 227 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0130_PID) }, | ||
| 228 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0131_PID) }, | ||
| 229 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0132_PID) }, | ||
| 230 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0133_PID) }, | ||
| 231 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0134_PID) }, | ||
| 232 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0135_PID) }, | ||
| 233 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0136_PID) }, | ||
| 234 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0137_PID) }, | ||
| 235 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0138_PID) }, | ||
| 236 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0139_PID) }, | ||
| 237 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013A_PID) }, | ||
| 238 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013B_PID) }, | ||
| 239 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013C_PID) }, | ||
| 240 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013D_PID) }, | ||
| 241 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013E_PID) }, | ||
| 242 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013F_PID) }, | ||
| 243 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0140_PID) }, | ||
| 244 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0141_PID) }, | ||
| 245 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0142_PID) }, | ||
| 246 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0143_PID) }, | ||
| 247 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0144_PID) }, | ||
| 248 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0145_PID) }, | ||
| 249 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0146_PID) }, | ||
| 250 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0147_PID) }, | ||
| 251 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0148_PID) }, | ||
| 252 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0149_PID) }, | ||
| 253 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014A_PID) }, | ||
| 254 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014B_PID) }, | ||
| 255 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014C_PID) }, | ||
| 256 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014D_PID) }, | ||
| 257 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014E_PID) }, | ||
| 258 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014F_PID) }, | ||
| 259 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0150_PID) }, | ||
| 260 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0151_PID) }, | ||
| 261 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0152_PID) }, | ||
| 262 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0153_PID), | ||
| 263 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 264 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0154_PID), | ||
| 265 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 266 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0155_PID), | ||
| 267 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 268 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0156_PID), | ||
| 269 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 270 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0157_PID), | ||
| 271 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 272 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0158_PID), | ||
| 273 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 274 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0159_PID) }, | ||
| 275 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015A_PID) }, | ||
| 276 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015B_PID) }, | ||
| 277 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015C_PID) }, | ||
| 278 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015D_PID) }, | ||
| 279 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015E_PID) }, | ||
| 280 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015F_PID) }, | ||
| 281 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0160_PID) }, | ||
| 282 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0161_PID) }, | ||
| 283 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0162_PID) }, | ||
| 284 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0163_PID) }, | ||
| 285 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0164_PID) }, | ||
| 286 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0165_PID) }, | ||
| 287 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0166_PID) }, | ||
| 288 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0167_PID) }, | ||
| 289 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0168_PID) }, | ||
| 290 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0169_PID) }, | ||
| 291 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016A_PID) }, | ||
| 292 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016B_PID) }, | ||
| 293 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016C_PID) }, | ||
| 294 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016D_PID) }, | ||
| 295 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016E_PID) }, | ||
| 296 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016F_PID) }, | ||
| 297 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0170_PID) }, | ||
| 298 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0171_PID) }, | ||
| 299 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0172_PID) }, | ||
| 300 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0173_PID) }, | ||
| 301 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0174_PID) }, | ||
| 302 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0175_PID) }, | ||
| 303 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0176_PID) }, | ||
| 304 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0177_PID) }, | ||
| 305 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0178_PID) }, | ||
| 306 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0179_PID) }, | ||
| 307 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017A_PID) }, | ||
| 308 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017B_PID) }, | ||
| 309 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017C_PID) }, | ||
| 310 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017D_PID) }, | ||
| 311 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017E_PID) }, | ||
| 312 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017F_PID) }, | ||
| 313 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0180_PID) }, | ||
| 314 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0181_PID) }, | ||
| 315 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0182_PID) }, | ||
| 316 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0183_PID) }, | ||
| 317 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0184_PID) }, | ||
| 318 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0185_PID) }, | ||
| 319 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0186_PID) }, | ||
| 320 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0187_PID) }, | ||
| 321 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0188_PID) }, | ||
| 322 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0189_PID) }, | ||
| 323 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018A_PID) }, | ||
| 324 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018B_PID) }, | ||
| 325 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018C_PID) }, | ||
| 326 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018D_PID) }, | ||
| 327 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018E_PID) }, | ||
| 328 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018F_PID) }, | ||
| 329 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0190_PID) }, | ||
| 330 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0191_PID) }, | ||
| 331 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0192_PID) }, | ||
| 332 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0193_PID) }, | ||
| 333 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0194_PID) }, | ||
| 334 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0195_PID) }, | ||
| 335 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0196_PID) }, | ||
| 336 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0197_PID) }, | ||
| 337 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0198_PID) }, | ||
| 338 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0199_PID) }, | ||
| 339 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019A_PID) }, | ||
| 340 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019B_PID) }, | ||
| 341 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019C_PID) }, | ||
| 342 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019D_PID) }, | ||
| 343 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019E_PID) }, | ||
| 344 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019F_PID) }, | ||
| 345 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A0_PID) }, | ||
| 346 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A1_PID) }, | ||
| 347 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A2_PID) }, | ||
| 348 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A3_PID) }, | ||
| 349 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A4_PID) }, | ||
| 350 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A5_PID) }, | ||
| 351 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A6_PID) }, | ||
| 352 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A7_PID) }, | ||
| 353 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A8_PID) }, | ||
| 354 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A9_PID) }, | ||
| 355 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AA_PID) }, | ||
| 356 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AB_PID) }, | ||
| 357 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AC_PID) }, | ||
| 358 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AD_PID) }, | ||
| 359 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AE_PID) }, | ||
| 360 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AF_PID) }, | ||
| 361 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B0_PID) }, | ||
| 362 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B1_PID) }, | ||
| 363 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B2_PID) }, | ||
| 364 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B3_PID) }, | ||
| 365 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B4_PID) }, | ||
| 366 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B5_PID) }, | ||
| 367 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B6_PID) }, | ||
| 368 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B7_PID) }, | ||
| 369 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B8_PID) }, | ||
| 370 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B9_PID) }, | ||
| 371 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BA_PID) }, | ||
| 372 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BB_PID) }, | ||
| 373 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BC_PID) }, | ||
| 374 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BD_PID) }, | ||
| 375 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BE_PID) }, | ||
| 376 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BF_PID) }, | ||
| 377 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C0_PID) }, | ||
| 378 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C1_PID) }, | ||
| 379 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C2_PID) }, | ||
| 380 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C3_PID) }, | ||
| 381 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C4_PID) }, | ||
| 382 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C5_PID) }, | ||
| 383 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C6_PID) }, | ||
| 384 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C7_PID) }, | ||
| 385 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C8_PID) }, | ||
| 386 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C9_PID) }, | ||
| 387 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CA_PID) }, | ||
| 388 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CB_PID) }, | ||
| 389 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CC_PID) }, | ||
| 390 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CD_PID) }, | ||
| 391 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CE_PID) }, | ||
| 392 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CF_PID) }, | ||
| 393 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D0_PID) }, | ||
| 394 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D1_PID) }, | ||
| 395 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D2_PID) }, | ||
| 396 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D3_PID) }, | ||
| 397 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D4_PID) }, | ||
| 398 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D5_PID) }, | ||
| 399 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D6_PID) }, | ||
| 400 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D7_PID) }, | ||
| 401 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D8_PID) }, | ||
| 402 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D9_PID) }, | ||
| 403 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DA_PID) }, | ||
| 404 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DB_PID) }, | ||
| 405 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DC_PID) }, | ||
| 406 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DD_PID) }, | ||
| 407 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DE_PID) }, | ||
| 408 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DF_PID) }, | ||
| 409 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E0_PID) }, | ||
| 410 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E1_PID) }, | ||
| 411 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E2_PID) }, | ||
| 412 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E3_PID) }, | ||
| 413 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E4_PID) }, | ||
| 414 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E5_PID) }, | ||
| 415 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E6_PID) }, | ||
| 416 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E7_PID) }, | ||
| 417 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E8_PID) }, | ||
| 418 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E9_PID) }, | ||
| 419 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EA_PID) }, | ||
| 420 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EB_PID) }, | ||
| 421 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EC_PID) }, | ||
| 422 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01ED_PID) }, | ||
| 423 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EE_PID) }, | ||
| 424 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EF_PID) }, | ||
| 425 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F0_PID) }, | ||
| 426 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F1_PID) }, | ||
| 427 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F2_PID) }, | ||
| 428 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F3_PID) }, | ||
| 429 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F4_PID) }, | ||
| 430 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F5_PID) }, | ||
| 431 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F6_PID) }, | ||
| 432 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F7_PID) }, | ||
| 433 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F8_PID) }, | ||
| 434 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F9_PID) }, | ||
| 435 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FA_PID) }, | ||
| 436 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FB_PID) }, | ||
| 437 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FC_PID) }, | ||
| 438 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FD_PID) }, | ||
| 439 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FE_PID) }, | ||
| 440 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FF_PID) }, | ||
| 179 | { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) }, | 441 | { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) }, |
| 180 | { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) }, | 442 | { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) }, |
| 181 | { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) }, | 443 | { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index a72f2c81d664..06e0ecabb3eb 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -114,11 +114,268 @@ | |||
| 114 | #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ | 114 | #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ |
| 115 | 115 | ||
| 116 | /* | 116 | /* |
| 117 | * The following are the values for the Matrix Orbital VK204-25-USB | 117 | * The following are the values for the Matrix Orbital FTDI Range |
| 118 | * display, which use the FT232RL. | 118 | * Anything in this range will use an FT232RL. |
| 119 | */ | 119 | */ |
| 120 | #define MTXORB_VK_VID 0x1b3d | 120 | #define MTXORB_VID 0x1B3D |
| 121 | #define MTXORB_VK_PID 0x0158 | 121 | #define MTXORB_FTDI_RANGE_0100_PID 0x0100 |
| 122 | #define MTXORB_FTDI_RANGE_0101_PID 0x0101 | ||
| 123 | #define MTXORB_FTDI_RANGE_0102_PID 0x0102 | ||
| 124 | #define MTXORB_FTDI_RANGE_0103_PID 0x0103 | ||
| 125 | #define MTXORB_FTDI_RANGE_0104_PID 0x0104 | ||
| 126 | #define MTXORB_FTDI_RANGE_0105_PID 0x0105 | ||
| 127 | #define MTXORB_FTDI_RANGE_0106_PID 0x0106 | ||
| 128 | #define MTXORB_FTDI_RANGE_0107_PID 0x0107 | ||
| 129 | #define MTXORB_FTDI_RANGE_0108_PID 0x0108 | ||
| 130 | #define MTXORB_FTDI_RANGE_0109_PID 0x0109 | ||
| 131 | #define MTXORB_FTDI_RANGE_010A_PID 0x010A | ||
| 132 | #define MTXORB_FTDI_RANGE_010B_PID 0x010B | ||
| 133 | #define MTXORB_FTDI_RANGE_010C_PID 0x010C | ||
| 134 | #define MTXORB_FTDI_RANGE_010D_PID 0x010D | ||
| 135 | #define MTXORB_FTDI_RANGE_010E_PID 0x010E | ||
| 136 | #define MTXORB_FTDI_RANGE_010F_PID 0x010F | ||
| 137 | #define MTXORB_FTDI_RANGE_0110_PID 0x0110 | ||
| 138 | #define MTXORB_FTDI_RANGE_0111_PID 0x0111 | ||
| 139 | #define MTXORB_FTDI_RANGE_0112_PID 0x0112 | ||
| 140 | #define MTXORB_FTDI_RANGE_0113_PID 0x0113 | ||
| 141 | #define MTXORB_FTDI_RANGE_0114_PID 0x0114 | ||
| 142 | #define MTXORB_FTDI_RANGE_0115_PID 0x0115 | ||
| 143 | #define MTXORB_FTDI_RANGE_0116_PID 0x0116 | ||
| 144 | #define MTXORB_FTDI_RANGE_0117_PID 0x0117 | ||
| 145 | #define MTXORB_FTDI_RANGE_0118_PID 0x0118 | ||
| 146 | #define MTXORB_FTDI_RANGE_0119_PID 0x0119 | ||
| 147 | #define MTXORB_FTDI_RANGE_011A_PID 0x011A | ||
| 148 | #define MTXORB_FTDI_RANGE_011B_PID 0x011B | ||
| 149 | #define MTXORB_FTDI_RANGE_011C_PID 0x011C | ||
| 150 | #define MTXORB_FTDI_RANGE_011D_PID 0x011D | ||
| 151 | #define MTXORB_FTDI_RANGE_011E_PID 0x011E | ||
| 152 | #define MTXORB_FTDI_RANGE_011F_PID 0x011F | ||
| 153 | #define MTXORB_FTDI_RANGE_0120_PID 0x0120 | ||
| 154 | #define MTXORB_FTDI_RANGE_0121_PID 0x0121 | ||
| 155 | #define MTXORB_FTDI_RANGE_0122_PID 0x0122 | ||
| 156 | #define MTXORB_FTDI_RANGE_0123_PID 0x0123 | ||
| 157 | #define MTXORB_FTDI_RANGE_0124_PID 0x0124 | ||
| 158 | #define MTXORB_FTDI_RANGE_0125_PID 0x0125 | ||
| 159 | #define MTXORB_FTDI_RANGE_0126_PID 0x0126 | ||
| 160 | #define MTXORB_FTDI_RANGE_0127_PID 0x0127 | ||
| 161 | #define MTXORB_FTDI_RANGE_0128_PID 0x0128 | ||
| 162 | #define MTXORB_FTDI_RANGE_0129_PID 0x0129 | ||
| 163 | #define MTXORB_FTDI_RANGE_012A_PID 0x012A | ||
| 164 | #define MTXORB_FTDI_RANGE_012B_PID 0x012B | ||
| 165 | #define MTXORB_FTDI_RANGE_012C_PID 0x012C | ||
| 166 | #define MTXORB_FTDI_RANGE_012D_PID 0x012D | ||
| 167 | #define MTXORB_FTDI_RANGE_012E_PID 0x012E | ||
| 168 | #define MTXORB_FTDI_RANGE_012F_PID 0x012F | ||
| 169 | #define MTXORB_FTDI_RANGE_0130_PID 0x0130 | ||
| 170 | #define MTXORB_FTDI_RANGE_0131_PID 0x0131 | ||
| 171 | #define MTXORB_FTDI_RANGE_0132_PID 0x0132 | ||
| 172 | #define MTXORB_FTDI_RANGE_0133_PID 0x0133 | ||
| 173 | #define MTXORB_FTDI_RANGE_0134_PID 0x0134 | ||
| 174 | #define MTXORB_FTDI_RANGE_0135_PID 0x0135 | ||
| 175 | #define MTXORB_FTDI_RANGE_0136_PID 0x0136 | ||
| 176 | #define MTXORB_FTDI_RANGE_0137_PID 0x0137 | ||
| 177 | #define MTXORB_FTDI_RANGE_0138_PID 0x0138 | ||
| 178 | #define MTXORB_FTDI_RANGE_0139_PID 0x0139 | ||
| 179 | #define MTXORB_FTDI_RANGE_013A_PID 0x013A | ||
| 180 | #define MTXORB_FTDI_RANGE_013B_PID 0x013B | ||
| 181 | #define MTXORB_FTDI_RANGE_013C_PID 0x013C | ||
| 182 | #define MTXORB_FTDI_RANGE_013D_PID 0x013D | ||
| 183 | #define MTXORB_FTDI_RANGE_013E_PID 0x013E | ||
| 184 | #define MTXORB_FTDI_RANGE_013F_PID 0x013F | ||
| 185 | #define MTXORB_FTDI_RANGE_0140_PID 0x0140 | ||
| 186 | #define MTXORB_FTDI_RANGE_0141_PID 0x0141 | ||
| 187 | #define MTXORB_FTDI_RANGE_0142_PID 0x0142 | ||
| 188 | #define MTXORB_FTDI_RANGE_0143_PID 0x0143 | ||
| 189 | #define MTXORB_FTDI_RANGE_0144_PID 0x0144 | ||
| 190 | #define MTXORB_FTDI_RANGE_0145_PID 0x0145 | ||
| 191 | #define MTXORB_FTDI_RANGE_0146_PID 0x0146 | ||
| 192 | #define MTXORB_FTDI_RANGE_0147_PID 0x0147 | ||
| 193 | #define MTXORB_FTDI_RANGE_0148_PID 0x0148 | ||
| 194 | #define MTXORB_FTDI_RANGE_0149_PID 0x0149 | ||
| 195 | #define MTXORB_FTDI_RANGE_014A_PID 0x014A | ||
| 196 | #define MTXORB_FTDI_RANGE_014B_PID 0x014B | ||
| 197 | #define MTXORB_FTDI_RANGE_014C_PID 0x014C | ||
| 198 | #define MTXORB_FTDI_RANGE_014D_PID 0x014D | ||
| 199 | #define MTXORB_FTDI_RANGE_014E_PID 0x014E | ||
| 200 | #define MTXORB_FTDI_RANGE_014F_PID 0x014F | ||
| 201 | #define MTXORB_FTDI_RANGE_0150_PID 0x0150 | ||
| 202 | #define MTXORB_FTDI_RANGE_0151_PID 0x0151 | ||
| 203 | #define MTXORB_FTDI_RANGE_0152_PID 0x0152 | ||
| 204 | #define MTXORB_FTDI_RANGE_0153_PID 0x0153 | ||
| 205 | #define MTXORB_FTDI_RANGE_0154_PID 0x0154 | ||
| 206 | #define MTXORB_FTDI_RANGE_0155_PID 0x0155 | ||
| 207 | #define MTXORB_FTDI_RANGE_0156_PID 0x0156 | ||
| 208 | #define MTXORB_FTDI_RANGE_0157_PID 0x0157 | ||
| 209 | #define MTXORB_FTDI_RANGE_0158_PID 0x0158 | ||
| 210 | #define MTXORB_FTDI_RANGE_0159_PID 0x0159 | ||
| 211 | #define MTXORB_FTDI_RANGE_015A_PID 0x015A | ||
| 212 | #define MTXORB_FTDI_RANGE_015B_PID 0x015B | ||
| 213 | #define MTXORB_FTDI_RANGE_015C_PID 0x015C | ||
| 214 | #define MTXORB_FTDI_RANGE_015D_PID 0x015D | ||
| 215 | #define MTXORB_FTDI_RANGE_015E_PID 0x015E | ||
| 216 | #define MTXORB_FTDI_RANGE_015F_PID 0x015F | ||
| 217 | #define MTXORB_FTDI_RANGE_0160_PID 0x0160 | ||
| 218 | #define MTXORB_FTDI_RANGE_0161_PID 0x0161 | ||
| 219 | #define MTXORB_FTDI_RANGE_0162_PID 0x0162 | ||
| 220 | #define MTXORB_FTDI_RANGE_0163_PID 0x0163 | ||
| 221 | #define MTXORB_FTDI_RANGE_0164_PID 0x0164 | ||
| 222 | #define MTXORB_FTDI_RANGE_0165_PID 0x0165 | ||
| 223 | #define MTXORB_FTDI_RANGE_0166_PID 0x0166 | ||
| 224 | #define MTXORB_FTDI_RANGE_0167_PID 0x0167 | ||
| 225 | #define MTXORB_FTDI_RANGE_0168_PID 0x0168 | ||
| 226 | #define MTXORB_FTDI_RANGE_0169_PID 0x0169 | ||
| 227 | #define MTXORB_FTDI_RANGE_016A_PID 0x016A | ||
| 228 | #define MTXORB_FTDI_RANGE_016B_PID 0x016B | ||
| 229 | #define MTXORB_FTDI_RANGE_016C_PID 0x016C | ||
| 230 | #define MTXORB_FTDI_RANGE_016D_PID 0x016D | ||
| 231 | #define MTXORB_FTDI_RANGE_016E_PID 0x016E | ||
| 232 | #define MTXORB_FTDI_RANGE_016F_PID 0x016F | ||
| 233 | #define MTXORB_FTDI_RANGE_0170_PID 0x0170 | ||
| 234 | #define MTXORB_FTDI_RANGE_0171_PID 0x0171 | ||
| 235 | #define MTXORB_FTDI_RANGE_0172_PID 0x0172 | ||
| 236 | #define MTXORB_FTDI_RANGE_0173_PID 0x0173 | ||
| 237 | #define MTXORB_FTDI_RANGE_0174_PID 0x0174 | ||
| 238 | #define MTXORB_FTDI_RANGE_0175_PID 0x0175 | ||
| 239 | #define MTXORB_FTDI_RANGE_0176_PID 0x0176 | ||
| 240 | #define MTXORB_FTDI_RANGE_0177_PID 0x0177 | ||
| 241 | #define MTXORB_FTDI_RANGE_0178_PID 0x0178 | ||
| 242 | #define MTXORB_FTDI_RANGE_0179_PID 0x0179 | ||
| 243 | #define MTXORB_FTDI_RANGE_017A_PID 0x017A | ||
| 244 | #define MTXORB_FTDI_RANGE_017B_PID 0x017B | ||
| 245 | #define MTXORB_FTDI_RANGE_017C_PID 0x017C | ||
| 246 | #define MTXORB_FTDI_RANGE_017D_PID 0x017D | ||
| 247 | #define MTXORB_FTDI_RANGE_017E_PID 0x017E | ||
| 248 | #define MTXORB_FTDI_RANGE_017F_PID 0x017F | ||
| 249 | #define MTXORB_FTDI_RANGE_0180_PID 0x0180 | ||
| 250 | #define MTXORB_FTDI_RANGE_0181_PID 0x0181 | ||
| 251 | #define MTXORB_FTDI_RANGE_0182_PID 0x0182 | ||
| 252 | #define MTXORB_FTDI_RANGE_0183_PID 0x0183 | ||
| 253 | #define MTXORB_FTDI_RANGE_0184_PID 0x0184 | ||
| 254 | #define MTXORB_FTDI_RANGE_0185_PID 0x0185 | ||
| 255 | #define MTXORB_FTDI_RANGE_0186_PID 0x0186 | ||
| 256 | #define MTXORB_FTDI_RANGE_0187_PID 0x0187 | ||
| 257 | #define MTXORB_FTDI_RANGE_0188_PID 0x0188 | ||
| 258 | #define MTXORB_FTDI_RANGE_0189_PID 0x0189 | ||
| 259 | #define MTXORB_FTDI_RANGE_018A_PID 0x018A | ||
| 260 | #define MTXORB_FTDI_RANGE_018B_PID 0x018B | ||
| 261 | #define MTXORB_FTDI_RANGE_018C_PID 0x018C | ||
| 262 | #define MTXORB_FTDI_RANGE_018D_PID 0x018D | ||
| 263 | #define MTXORB_FTDI_RANGE_018E_PID 0x018E | ||
| 264 | #define MTXORB_FTDI_RANGE_018F_PID 0x018F | ||
| 265 | #define MTXORB_FTDI_RANGE_0190_PID 0x0190 | ||
| 266 | #define MTXORB_FTDI_RANGE_0191_PID 0x0191 | ||
| 267 | #define MTXORB_FTDI_RANGE_0192_PID 0x0192 | ||
| 268 | #define MTXORB_FTDI_RANGE_0193_PID 0x0193 | ||
| 269 | #define MTXORB_FTDI_RANGE_0194_PID 0x0194 | ||
| 270 | #define MTXORB_FTDI_RANGE_0195_PID 0x0195 | ||
| 271 | #define MTXORB_FTDI_RANGE_0196_PID 0x0196 | ||
| 272 | #define MTXORB_FTDI_RANGE_0197_PID 0x0197 | ||
| 273 | #define MTXORB_FTDI_RANGE_0198_PID 0x0198 | ||
| 274 | #define MTXORB_FTDI_RANGE_0199_PID 0x0199 | ||
| 275 | #define MTXORB_FTDI_RANGE_019A_PID 0x019A | ||
| 276 | #define MTXORB_FTDI_RANGE_019B_PID 0x019B | ||
| 277 | #define MTXORB_FTDI_RANGE_019C_PID 0x019C | ||
| 278 | #define MTXORB_FTDI_RANGE_019D_PID 0x019D | ||
| 279 | #define MTXORB_FTDI_RANGE_019E_PID 0x019E | ||
| 280 | #define MTXORB_FTDI_RANGE_019F_PID 0x019F | ||
| 281 | #define MTXORB_FTDI_RANGE_01A0_PID 0x01A0 | ||
| 282 | #define MTXORB_FTDI_RANGE_01A1_PID 0x01A1 | ||
| 283 | #define MTXORB_FTDI_RANGE_01A2_PID 0x01A2 | ||
| 284 | #define MTXORB_FTDI_RANGE_01A3_PID 0x01A3 | ||
| 285 | #define MTXORB_FTDI_RANGE_01A4_PID 0x01A4 | ||
| 286 | #define MTXORB_FTDI_RANGE_01A5_PID 0x01A5 | ||
| 287 | #define MTXORB_FTDI_RANGE_01A6_PID 0x01A6 | ||
| 288 | #define MTXORB_FTDI_RANGE_01A7_PID 0x01A7 | ||
| 289 | #define MTXORB_FTDI_RANGE_01A8_PID 0x01A8 | ||
| 290 | #define MTXORB_FTDI_RANGE_01A9_PID 0x01A9 | ||
| 291 | #define MTXORB_FTDI_RANGE_01AA_PID 0x01AA | ||
| 292 | #define MTXORB_FTDI_RANGE_01AB_PID 0x01AB | ||
| 293 | #define MTXORB_FTDI_RANGE_01AC_PID 0x01AC | ||
| 294 | #define MTXORB_FTDI_RANGE_01AD_PID 0x01AD | ||
| 295 | #define MTXORB_FTDI_RANGE_01AE_PID 0x01AE | ||
| 296 | #define MTXORB_FTDI_RANGE_01AF_PID 0x01AF | ||
| 297 | #define MTXORB_FTDI_RANGE_01B0_PID 0x01B0 | ||
| 298 | #define MTXORB_FTDI_RANGE_01B1_PID 0x01B1 | ||
| 299 | #define MTXORB_FTDI_RANGE_01B2_PID 0x01B2 | ||
| 300 | #define MTXORB_FTDI_RANGE_01B3_PID 0x01B3 | ||
| 301 | #define MTXORB_FTDI_RANGE_01B4_PID 0x01B4 | ||
| 302 | #define MTXORB_FTDI_RANGE_01B5_PID 0x01B5 | ||
| 303 | #define MTXORB_FTDI_RANGE_01B6_PID 0x01B6 | ||
| 304 | #define MTXORB_FTDI_RANGE_01B7_PID 0x01B7 | ||
| 305 | #define MTXORB_FTDI_RANGE_01B8_PID 0x01B8 | ||
| 306 | #define MTXORB_FTDI_RANGE_01B9_PID 0x01B9 | ||
| 307 | #define MTXORB_FTDI_RANGE_01BA_PID 0x01BA | ||
| 308 | #define MTXORB_FTDI_RANGE_01BB_PID 0x01BB | ||
| 309 | #define MTXORB_FTDI_RANGE_01BC_PID 0x01BC | ||
| 310 | #define MTXORB_FTDI_RANGE_01BD_PID 0x01BD | ||
| 311 | #define MTXORB_FTDI_RANGE_01BE_PID 0x01BE | ||
| 312 | #define MTXORB_FTDI_RANGE_01BF_PID 0x01BF | ||
| 313 | #define MTXORB_FTDI_RANGE_01C0_PID 0x01C0 | ||
| 314 | #define MTXORB_FTDI_RANGE_01C1_PID 0x01C1 | ||
| 315 | #define MTXORB_FTDI_RANGE_01C2_PID 0x01C2 | ||
| 316 | #define MTXORB_FTDI_RANGE_01C3_PID 0x01C3 | ||
| 317 | #define MTXORB_FTDI_RANGE_01C4_PID 0x01C4 | ||
| 318 | #define MTXORB_FTDI_RANGE_01C5_PID 0x01C5 | ||
| 319 | #define MTXORB_FTDI_RANGE_01C6_PID 0x01C6 | ||
| 320 | #define MTXORB_FTDI_RANGE_01C7_PID 0x01C7 | ||
| 321 | #define MTXORB_FTDI_RANGE_01C8_PID 0x01C8 | ||
| 322 | #define MTXORB_FTDI_RANGE_01C9_PID 0x01C9 | ||
| 323 | #define MTXORB_FTDI_RANGE_01CA_PID 0x01CA | ||
| 324 | #define MTXORB_FTDI_RANGE_01CB_PID 0x01CB | ||
| 325 | #define MTXORB_FTDI_RANGE_01CC_PID 0x01CC | ||
| 326 | #define MTXORB_FTDI_RANGE_01CD_PID 0x01CD | ||
| 327 | #define MTXORB_FTDI_RANGE_01CE_PID 0x01CE | ||
| 328 | #define MTXORB_FTDI_RANGE_01CF_PID 0x01CF | ||
| 329 | #define MTXORB_FTDI_RANGE_01D0_PID 0x01D0 | ||
| 330 | #define MTXORB_FTDI_RANGE_01D1_PID 0x01D1 | ||
| 331 | #define MTXORB_FTDI_RANGE_01D2_PID 0x01D2 | ||
| 332 | #define MTXORB_FTDI_RANGE_01D3_PID 0x01D3 | ||
| 333 | #define MTXORB_FTDI_RANGE_01D4_PID 0x01D4 | ||
| 334 | #define MTXORB_FTDI_RANGE_01D5_PID 0x01D5 | ||
| 335 | #define MTXORB_FTDI_RANGE_01D6_PID 0x01D6 | ||
| 336 | #define MTXORB_FTDI_RANGE_01D7_PID 0x01D7 | ||
| 337 | #define MTXORB_FTDI_RANGE_01D8_PID 0x01D8 | ||
| 338 | #define MTXORB_FTDI_RANGE_01D9_PID 0x01D9 | ||
| 339 | #define MTXORB_FTDI_RANGE_01DA_PID 0x01DA | ||
| 340 | #define MTXORB_FTDI_RANGE_01DB_PID 0x01DB | ||
| 341 | #define MTXORB_FTDI_RANGE_01DC_PID 0x01DC | ||
| 342 | #define MTXORB_FTDI_RANGE_01DD_PID 0x01DD | ||
| 343 | #define MTXORB_FTDI_RANGE_01DE_PID 0x01DE | ||
| 344 | #define MTXORB_FTDI_RANGE_01DF_PID 0x01DF | ||
| 345 | #define MTXORB_FTDI_RANGE_01E0_PID 0x01E0 | ||
| 346 | #define MTXORB_FTDI_RANGE_01E1_PID 0x01E1 | ||
| 347 | #define MTXORB_FTDI_RANGE_01E2_PID 0x01E2 | ||
| 348 | #define MTXORB_FTDI_RANGE_01E3_PID 0x01E3 | ||
| 349 | #define MTXORB_FTDI_RANGE_01E4_PID 0x01E4 | ||
| 350 | #define MTXORB_FTDI_RANGE_01E5_PID 0x01E5 | ||
| 351 | #define MTXORB_FTDI_RANGE_01E6_PID 0x01E6 | ||
| 352 | #define MTXORB_FTDI_RANGE_01E7_PID 0x01E7 | ||
| 353 | #define MTXORB_FTDI_RANGE_01E8_PID 0x01E8 | ||
| 354 | #define MTXORB_FTDI_RANGE_01E9_PID 0x01E9 | ||
| 355 | #define MTXORB_FTDI_RANGE_01EA_PID 0x01EA | ||
| 356 | #define MTXORB_FTDI_RANGE_01EB_PID 0x01EB | ||
| 357 | #define MTXORB_FTDI_RANGE_01EC_PID 0x01EC | ||
| 358 | #define MTXORB_FTDI_RANGE_01ED_PID 0x01ED | ||
| 359 | #define MTXORB_FTDI_RANGE_01EE_PID 0x01EE | ||
| 360 | #define MTXORB_FTDI_RANGE_01EF_PID 0x01EF | ||
| 361 | #define MTXORB_FTDI_RANGE_01F0_PID 0x01F0 | ||
| 362 | #define MTXORB_FTDI_RANGE_01F1_PID 0x01F1 | ||
| 363 | #define MTXORB_FTDI_RANGE_01F2_PID 0x01F2 | ||
| 364 | #define MTXORB_FTDI_RANGE_01F3_PID 0x01F3 | ||
| 365 | #define MTXORB_FTDI_RANGE_01F4_PID 0x01F4 | ||
| 366 | #define MTXORB_FTDI_RANGE_01F5_PID 0x01F5 | ||
| 367 | #define MTXORB_FTDI_RANGE_01F6_PID 0x01F6 | ||
| 368 | #define MTXORB_FTDI_RANGE_01F7_PID 0x01F7 | ||
| 369 | #define MTXORB_FTDI_RANGE_01F8_PID 0x01F8 | ||
| 370 | #define MTXORB_FTDI_RANGE_01F9_PID 0x01F9 | ||
| 371 | #define MTXORB_FTDI_RANGE_01FA_PID 0x01FA | ||
| 372 | #define MTXORB_FTDI_RANGE_01FB_PID 0x01FB | ||
| 373 | #define MTXORB_FTDI_RANGE_01FC_PID 0x01FC | ||
| 374 | #define MTXORB_FTDI_RANGE_01FD_PID 0x01FD | ||
| 375 | #define MTXORB_FTDI_RANGE_01FE_PID 0x01FE | ||
| 376 | #define MTXORB_FTDI_RANGE_01FF_PID 0x01FF | ||
| 377 | |||
| 378 | |||
| 122 | 379 | ||
| 123 | /* Interbiometrics USB I/O Board */ | 380 | /* Interbiometrics USB I/O Board */ |
| 124 | /* Developed for Interbiometrics by Rudolf Gugler */ | 381 | /* Developed for Interbiometrics by Rudolf Gugler */ |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 6cecd2c12b1d..43cfde83a93b 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -236,25 +236,25 @@ static struct usb_device_id option_ids[] = { | |||
| 236 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) }, | 236 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) }, |
| 237 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, | 237 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, |
| 238 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, | 238 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, |
| 239 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, | 239 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, |
| 240 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, | 240 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, |
| 241 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, | 241 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, |
| 242 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401) }, | 242 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) }, |
| 243 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403) }, | 243 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) }, |
| 244 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405) }, | 244 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) }, |
| 245 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406) }, | 245 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) }, |
| 246 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408) }, | 246 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) }, |
| 247 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409) }, | 247 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) }, |
| 248 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410) }, | 248 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) }, |
| 249 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411) }, | 249 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) }, |
| 250 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412) }, | 250 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) }, |
| 251 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413) }, | 251 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) }, |
| 252 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414) }, | 252 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) }, |
| 253 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415) }, | 253 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) }, |
| 254 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416) }, | 254 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) }, |
| 255 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417) }, | 255 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) }, |
| 256 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418) }, | 256 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) }, |
| 257 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419) }, | 257 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) }, |
| 258 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, | 258 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, |
| 259 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ | 259 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ |
| 260 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ | 260 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 234c5eea95a2..103195abd417 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
| @@ -56,6 +56,7 @@ static struct usb_device_id id_table [] = { | |||
| 56 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, | 56 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, |
| 57 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, | 57 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, |
| 58 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, | 58 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, |
| 59 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, | ||
| 59 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, | 60 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, |
| 60 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, | 61 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, |
| 61 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, | 62 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, |
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h index 3bdefe020501..cff160abb130 100644 --- a/drivers/usb/serial/pl2303.h +++ b/drivers/usb/serial/pl2303.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #define PL2303_PRODUCT_ID_PHAROS 0xaaa0 | 14 | #define PL2303_PRODUCT_ID_PHAROS 0xaaa0 |
| 15 | #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 | 15 | #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 |
| 16 | #define PL2303_PRODUCT_ID_ALDIGA 0x0611 | 16 | #define PL2303_PRODUCT_ID_ALDIGA 0x0611 |
| 17 | #define PL2303_PRODUCT_ID_MMX 0x0612 | ||
| 17 | 18 | ||
| 18 | #define ATEN_VENDOR_ID 0x0557 | 19 | #define ATEN_VENDOR_ID 0x0557 |
| 19 | #define ATEN_VENDOR_ID2 0x0547 | 20 | #define ATEN_VENDOR_ID2 0x0547 |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 1b09578cbb10..45fe3663fa7f 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -405,7 +405,7 @@ UNUSUAL_DEV( 0x04a5, 0x3010, 0x0100, 0x0100, | |||
| 405 | UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, | 405 | UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, |
| 406 | "Cypress", | 406 | "Cypress", |
| 407 | "Cypress AT2LP", | 407 | "Cypress AT2LP", |
| 408 | US_SC_CYP_ATACB, US_PR_BULK, NULL, | 408 | US_SC_CYP_ATACB, US_PR_DEVICE, NULL, |
| 409 | 0), | 409 | 0), |
| 410 | #endif | 410 | #endif |
| 411 | 411 | ||
| @@ -1522,7 +1522,7 @@ UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000, | |||
| 1522 | "Sony Ericsson", | 1522 | "Sony Ericsson", |
| 1523 | "M600i", | 1523 | "M600i", |
| 1524 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1524 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1525 | US_FL_FIX_CAPACITY ), | 1525 | US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), |
| 1526 | 1526 | ||
| 1527 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> | 1527 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> |
| 1528 | * Tested on hardware version 1.10. | 1528 | * Tested on hardware version 1.10. |
| @@ -1716,10 +1716,12 @@ UNUSUAL_DEV( 0x22b8, 0x3010, 0x0001, 0x0001, | |||
| 1716 | /* | 1716 | /* |
| 1717 | * Patch by Pete Zaitcev <zaitcev@redhat.com> | 1717 | * Patch by Pete Zaitcev <zaitcev@redhat.com> |
| 1718 | * Report by Mark Patton. Red Hat bz#208928. | 1718 | * Report by Mark Patton. Red Hat bz#208928. |
| 1719 | * Added support for rev 0x0002 (Motorola ROKR W5) | ||
| 1720 | * by Javier Smaldone <javier@smaldone.com.ar> | ||
| 1719 | */ | 1721 | */ |
| 1720 | UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0001, | 1722 | UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0002, |
| 1721 | "Motorola", | 1723 | "Motorola", |
| 1722 | "RAZR V3i", | 1724 | "RAZR V3i/ROKR W5", |
| 1723 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1725 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1724 | US_FL_FIX_CAPACITY), | 1726 | US_FL_FIX_CAPACITY), |
| 1725 | 1727 | ||
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 13866789b356..0f3c2bb7bf35 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | #include <linux/spinlock.h> | 2 | #include <linux/spinlock.h> |
| 3 | #include <linux/virtio_config.h> | 3 | #include <linux/virtio_config.h> |
| 4 | 4 | ||
| 5 | /* Unique numbering for virtio devices. */ | ||
| 6 | static unsigned int dev_index; | ||
| 7 | |||
| 5 | static ssize_t device_show(struct device *_d, | 8 | static ssize_t device_show(struct device *_d, |
| 6 | struct device_attribute *attr, char *buf) | 9 | struct device_attribute *attr, char *buf) |
| 7 | { | 10 | { |
| @@ -166,7 +169,10 @@ int register_virtio_device(struct virtio_device *dev) | |||
| 166 | int err; | 169 | int err; |
| 167 | 170 | ||
| 168 | dev->dev.bus = &virtio_bus; | 171 | dev->dev.bus = &virtio_bus; |
| 169 | sprintf(dev->dev.bus_id, "%u", dev->index); | 172 | |
| 173 | /* Assign a unique device index and hence name. */ | ||
| 174 | dev->index = dev_index++; | ||
| 175 | sprintf(dev->dev.bus_id, "virtio%u", dev->index); | ||
| 170 | 176 | ||
| 171 | /* We always start by resetting the device, in case a previous | 177 | /* We always start by resetting the device, in case a previous |
| 172 | * driver messed it up. This also tests that code path a little. */ | 178 | * driver messed it up. This also tests that code path a little. */ |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 27e9fc9117cd..eae7236310e4 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -78,9 +78,6 @@ static struct device virtio_pci_root = { | |||
| 78 | .bus_id = "virtio-pci", | 78 | .bus_id = "virtio-pci", |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | /* Unique numbering for devices under the kvm root */ | ||
| 82 | static unsigned int dev_index; | ||
| 83 | |||
| 84 | /* Convert a generic virtio device to our structure */ | 81 | /* Convert a generic virtio device to our structure */ |
| 85 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) | 82 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) |
| 86 | { | 83 | { |
| @@ -325,10 +322,6 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, | |||
| 325 | if (vp_dev == NULL) | 322 | if (vp_dev == NULL) |
| 326 | return -ENOMEM; | 323 | return -ENOMEM; |
| 327 | 324 | ||
| 328 | snprintf(vp_dev->vdev.dev.bus_id, BUS_ID_SIZE, "virtio%d", dev_index); | ||
| 329 | vp_dev->vdev.index = dev_index; | ||
| 330 | dev_index++; | ||
| 331 | |||
| 332 | vp_dev->vdev.dev.parent = &virtio_pci_root; | 325 | vp_dev->vdev.dev.parent = &virtio_pci_root; |
| 333 | vp_dev->vdev.config = &virtio_pci_config_ops; | 326 | vp_dev->vdev.config = &virtio_pci_config_ops; |
| 334 | vp_dev->pci_dev = pci_dev; | 327 | vp_dev->pci_dev = pci_dev; |
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 937a49d6772c..72bf8bc09014 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
| @@ -227,7 +227,6 @@ static bool vring_enable_cb(struct virtqueue *_vq) | |||
| 227 | struct vring_virtqueue *vq = to_vvq(_vq); | 227 | struct vring_virtqueue *vq = to_vvq(_vq); |
| 228 | 228 | ||
| 229 | START_USE(vq); | 229 | START_USE(vq); |
| 230 | BUG_ON(!(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)); | ||
| 231 | 230 | ||
| 232 | /* We optimistically turn back on interrupts, then check if there was | 231 | /* We optimistically turn back on interrupts, then check if there was |
| 233 | * more to do. */ | 232 | * more to do. */ |
| @@ -254,13 +253,6 @@ irqreturn_t vring_interrupt(int irq, void *_vq) | |||
| 254 | if (unlikely(vq->broken)) | 253 | if (unlikely(vq->broken)) |
| 255 | return IRQ_HANDLED; | 254 | return IRQ_HANDLED; |
| 256 | 255 | ||
| 257 | /* Other side may have missed us turning off the interrupt, | ||
| 258 | * but we should preserve disable semantic for virtio users. */ | ||
| 259 | if (unlikely(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) { | ||
| 260 | pr_debug("virtqueue interrupt after disable for %p\n", vq); | ||
| 261 | return IRQ_HANDLED; | ||
| 262 | } | ||
| 263 | |||
| 264 | pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); | 256 | pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); |
| 265 | if (vq->vq.callback) | 257 | if (vq->vq.callback) |
| 266 | vq->vq.callback(&vq->vq); | 258 | vq->vq.callback(&vq->vq); |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 254d115cafab..ccb78f66c2b6 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
| @@ -295,6 +295,19 @@ config ALIM7101_WDT | |||
| 295 | 295 | ||
| 296 | Most people will say N. | 296 | Most people will say N. |
| 297 | 297 | ||
| 298 | config GEODE_WDT | ||
| 299 | tristate "AMD Geode CS5535/CS5536 Watchdog" | ||
| 300 | depends on MGEODE_LX | ||
| 301 | help | ||
| 302 | This driver enables a watchdog capability built into the | ||
| 303 | CS5535/CS5536 companion chips for the AMD Geode GX and LX | ||
| 304 | processors. This watchdog watches your kernel to make sure | ||
| 305 | it doesn't freeze, and if it does, it reboots your computer after | ||
| 306 | a certain amount of time. | ||
| 307 | |||
| 308 | You can compile this driver directly into the kernel, or use | ||
| 309 | it as a module. The module will be called geodewdt. | ||
| 310 | |||
| 298 | config SC520_WDT | 311 | config SC520_WDT |
| 299 | tristate "AMD Elan SC520 processor Watchdog" | 312 | tristate "AMD Elan SC520 processor Watchdog" |
| 300 | depends on X86 | 313 | depends on X86 |
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index f3fb170fe5c6..25b352b664d9 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile | |||
| @@ -59,6 +59,7 @@ obj-$(CONFIG_ACQUIRE_WDT) += acquirewdt.o | |||
| 59 | obj-$(CONFIG_ADVANTECH_WDT) += advantechwdt.o | 59 | obj-$(CONFIG_ADVANTECH_WDT) += advantechwdt.o |
| 60 | obj-$(CONFIG_ALIM1535_WDT) += alim1535_wdt.o | 60 | obj-$(CONFIG_ALIM1535_WDT) += alim1535_wdt.o |
| 61 | obj-$(CONFIG_ALIM7101_WDT) += alim7101_wdt.o | 61 | obj-$(CONFIG_ALIM7101_WDT) += alim7101_wdt.o |
| 62 | obj-$(CONFIG_GEODE_WDT) += geodewdt.o | ||
| 62 | obj-$(CONFIG_SC520_WDT) += sc520_wdt.o | 63 | obj-$(CONFIG_SC520_WDT) += sc520_wdt.o |
| 63 | obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o | 64 | obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o |
| 64 | obj-$(CONFIG_IB700_WDT) += ib700wdt.o | 65 | obj-$(CONFIG_IB700_WDT) += ib700wdt.o |
diff --git a/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c index 1237113dc14a..03b3e3d91e7c 100644 --- a/drivers/watchdog/bfin_wdt.c +++ b/drivers/watchdog/bfin_wdt.c | |||
| @@ -29,7 +29,8 @@ | |||
| 29 | 29 | ||
| 30 | #define stamp(fmt, args...) pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args) | 30 | #define stamp(fmt, args...) pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args) |
| 31 | #define stampit() stamp("here i am") | 31 | #define stampit() stamp("here i am") |
| 32 | #define pr_init(fmt, args...) ({ static const __initdata char __fmt[] = fmt; printk(__fmt, ## args); }) | 32 | #define pr_devinit(fmt, args...) ({ static const __devinitconst char __fmt[] = fmt; printk(__fmt, ## args); }) |
| 33 | #define pr_init(fmt, args...) ({ static const __initconst char __fmt[] = fmt; printk(__fmt, ## args); }) | ||
| 33 | 34 | ||
| 34 | #define WATCHDOG_NAME "bfin-wdt" | 35 | #define WATCHDOG_NAME "bfin-wdt" |
| 35 | #define PFX WATCHDOG_NAME ": " | 36 | #define PFX WATCHDOG_NAME ": " |
| @@ -377,20 +378,6 @@ static int bfin_wdt_resume(struct platform_device *pdev) | |||
| 377 | # define bfin_wdt_resume NULL | 378 | # define bfin_wdt_resume NULL |
| 378 | #endif | 379 | #endif |
| 379 | 380 | ||
| 380 | static struct platform_device bfin_wdt_device = { | ||
| 381 | .name = WATCHDOG_NAME, | ||
| 382 | .id = -1, | ||
| 383 | }; | ||
| 384 | |||
| 385 | static struct platform_driver bfin_wdt_driver = { | ||
| 386 | .driver = { | ||
| 387 | .name = WATCHDOG_NAME, | ||
| 388 | .owner = THIS_MODULE, | ||
| 389 | }, | ||
| 390 | .suspend = bfin_wdt_suspend, | ||
| 391 | .resume = bfin_wdt_resume, | ||
| 392 | }; | ||
| 393 | |||
| 394 | static const struct file_operations bfin_wdt_fops = { | 381 | static const struct file_operations bfin_wdt_fops = { |
| 395 | .owner = THIS_MODULE, | 382 | .owner = THIS_MODULE, |
| 396 | .llseek = no_llseek, | 383 | .llseek = no_llseek, |
| @@ -418,11 +405,67 @@ static struct notifier_block bfin_wdt_notifier = { | |||
| 418 | }; | 405 | }; |
| 419 | 406 | ||
| 420 | /** | 407 | /** |
| 421 | * bfin_wdt_init - Initialize module | 408 | * bfin_wdt_probe - Initialize module |
| 422 | * | 409 | * |
| 423 | * Registers the device and notifier handler. Actual device | 410 | * Registers the misc device and notifier handler. Actual device |
| 424 | * initialization is handled by bfin_wdt_open(). | 411 | * initialization is handled by bfin_wdt_open(). |
| 425 | */ | 412 | */ |
| 413 | static int __devinit bfin_wdt_probe(struct platform_device *pdev) | ||
| 414 | { | ||
| 415 | int ret; | ||
| 416 | |||
| 417 | ret = register_reboot_notifier(&bfin_wdt_notifier); | ||
| 418 | if (ret) { | ||
| 419 | pr_devinit(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); | ||
| 420 | return ret; | ||
| 421 | } | ||
| 422 | |||
| 423 | ret = misc_register(&bfin_wdt_miscdev); | ||
| 424 | if (ret) { | ||
| 425 | pr_devinit(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 426 | WATCHDOG_MINOR, ret); | ||
| 427 | unregister_reboot_notifier(&bfin_wdt_notifier); | ||
| 428 | return ret; | ||
| 429 | } | ||
| 430 | |||
| 431 | pr_devinit(KERN_INFO PFX "initialized: timeout=%d sec (nowayout=%d)\n", | ||
| 432 | timeout, nowayout); | ||
| 433 | |||
| 434 | return 0; | ||
| 435 | } | ||
| 436 | |||
| 437 | /** | ||
| 438 | * bfin_wdt_remove - Initialize module | ||
| 439 | * | ||
| 440 | * Unregisters the misc device and notifier handler. Actual device | ||
| 441 | * deinitialization is handled by bfin_wdt_close(). | ||
| 442 | */ | ||
| 443 | static int __devexit bfin_wdt_remove(struct platform_device *pdev) | ||
| 444 | { | ||
| 445 | misc_deregister(&bfin_wdt_miscdev); | ||
| 446 | unregister_reboot_notifier(&bfin_wdt_notifier); | ||
| 447 | return 0; | ||
| 448 | } | ||
| 449 | |||
| 450 | static struct platform_device *bfin_wdt_device; | ||
| 451 | |||
| 452 | static struct platform_driver bfin_wdt_driver = { | ||
| 453 | .probe = bfin_wdt_probe, | ||
| 454 | .remove = __devexit_p(bfin_wdt_remove), | ||
| 455 | .suspend = bfin_wdt_suspend, | ||
| 456 | .resume = bfin_wdt_resume, | ||
| 457 | .driver = { | ||
| 458 | .name = WATCHDOG_NAME, | ||
| 459 | .owner = THIS_MODULE, | ||
| 460 | }, | ||
| 461 | }; | ||
| 462 | |||
| 463 | /** | ||
| 464 | * bfin_wdt_init - Initialize module | ||
| 465 | * | ||
| 466 | * Checks the module params and registers the platform device & driver. | ||
| 467 | * Real work is in the platform probe function. | ||
| 468 | */ | ||
| 426 | static int __init bfin_wdt_init(void) | 469 | static int __init bfin_wdt_init(void) |
| 427 | { | 470 | { |
| 428 | int ret; | 471 | int ret; |
| @@ -436,44 +479,32 @@ static int __init bfin_wdt_init(void) | |||
| 436 | /* Since this is an on-chip device and needs no board-specific | 479 | /* Since this is an on-chip device and needs no board-specific |
| 437 | * resources, we'll handle all the platform device stuff here. | 480 | * resources, we'll handle all the platform device stuff here. |
| 438 | */ | 481 | */ |
| 439 | ret = platform_device_register(&bfin_wdt_device); | 482 | ret = platform_driver_register(&bfin_wdt_driver); |
| 440 | if (ret) | ||
| 441 | return ret; | ||
| 442 | |||
| 443 | ret = platform_driver_probe(&bfin_wdt_driver, NULL); | ||
| 444 | if (ret) | ||
| 445 | return ret; | ||
| 446 | |||
| 447 | ret = register_reboot_notifier(&bfin_wdt_notifier); | ||
| 448 | if (ret) { | 483 | if (ret) { |
| 449 | pr_init(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); | 484 | pr_init(KERN_ERR PFX "unable to register driver\n"); |
| 450 | return ret; | 485 | return ret; |
| 451 | } | 486 | } |
| 452 | 487 | ||
| 453 | ret = misc_register(&bfin_wdt_miscdev); | 488 | bfin_wdt_device = platform_device_register_simple(WATCHDOG_NAME, -1, NULL, 0); |
| 454 | if (ret) { | 489 | if (IS_ERR(bfin_wdt_device)) { |
| 455 | pr_init(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 490 | pr_init(KERN_ERR PFX "unable to register device\n"); |
| 456 | WATCHDOG_MINOR, ret); | 491 | platform_driver_unregister(&bfin_wdt_driver); |
| 457 | unregister_reboot_notifier(&bfin_wdt_notifier); | 492 | return PTR_ERR(bfin_wdt_device); |
| 458 | return ret; | ||
| 459 | } | 493 | } |
| 460 | 494 | ||
| 461 | pr_init(KERN_INFO PFX "initialized: timeout=%d sec (nowayout=%d)\n", | ||
| 462 | timeout, nowayout); | ||
| 463 | |||
| 464 | return 0; | 495 | return 0; |
| 465 | } | 496 | } |
| 466 | 497 | ||
| 467 | /** | 498 | /** |
| 468 | * bfin_wdt_exit - Deinitialize module | 499 | * bfin_wdt_exit - Deinitialize module |
| 469 | * | 500 | * |
| 470 | * Unregisters the device and notifier handler. Actual device | 501 | * Back out the platform device & driver steps. Real work is in the |
| 471 | * deinitialization is handled by bfin_wdt_close(). | 502 | * platform remove function. |
| 472 | */ | 503 | */ |
| 473 | static void __exit bfin_wdt_exit(void) | 504 | static void __exit bfin_wdt_exit(void) |
| 474 | { | 505 | { |
| 475 | misc_deregister(&bfin_wdt_miscdev); | 506 | platform_device_unregister(bfin_wdt_device); |
| 476 | unregister_reboot_notifier(&bfin_wdt_notifier); | 507 | platform_driver_unregister(&bfin_wdt_driver); |
| 477 | } | 508 | } |
| 478 | 509 | ||
| 479 | module_init(bfin_wdt_init); | 510 | module_init(bfin_wdt_init); |
diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c index d362f5bf658a..c1ba0db48501 100644 --- a/drivers/watchdog/booke_wdt.c +++ b/drivers/watchdog/booke_wdt.c | |||
| @@ -1,12 +1,10 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * drivers/char/watchdog/booke_wdt.c | ||
| 3 | * | ||
| 4 | * Watchdog timer for PowerPC Book-E systems | 2 | * Watchdog timer for PowerPC Book-E systems |
| 5 | * | 3 | * |
| 6 | * Author: Matthew McClintock | 4 | * Author: Matthew McClintock |
| 7 | * Maintainer: Kumar Gala <galak@kernel.crashing.org> | 5 | * Maintainer: Kumar Gala <galak@kernel.crashing.org> |
| 8 | * | 6 | * |
| 9 | * Copyright 2005 Freescale Semiconductor Inc. | 7 | * Copyright 2005, 2008 Freescale Semiconductor Inc. |
| 10 | * | 8 | * |
| 11 | * This program is free software; you can redistribute it and/or modify it | 9 | * This program is free software; you can redistribute it and/or modify it |
| 12 | * under the terms of the GNU General Public License as published by the | 10 | * under the terms of the GNU General Public License as published by the |
| @@ -16,6 +14,7 @@ | |||
| 16 | 14 | ||
| 17 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 18 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
| 17 | #include <linux/smp.h> | ||
| 19 | #include <linux/miscdevice.h> | 18 | #include <linux/miscdevice.h> |
| 20 | #include <linux/notifier.h> | 19 | #include <linux/notifier.h> |
| 21 | #include <linux/watchdog.h> | 20 | #include <linux/watchdog.h> |
| @@ -38,7 +37,7 @@ | |||
| 38 | #define WDT_PERIOD_DEFAULT 3 /* Refer to the PPC40x and PPC4xx manuals */ | 37 | #define WDT_PERIOD_DEFAULT 3 /* Refer to the PPC40x and PPC4xx manuals */ |
| 39 | #endif /* for timing information */ | 38 | #endif /* for timing information */ |
| 40 | 39 | ||
| 41 | u32 booke_wdt_enabled = 0; | 40 | u32 booke_wdt_enabled; |
| 42 | u32 booke_wdt_period = WDT_PERIOD_DEFAULT; | 41 | u32 booke_wdt_period = WDT_PERIOD_DEFAULT; |
| 43 | 42 | ||
| 44 | #ifdef CONFIG_FSL_BOOKE | 43 | #ifdef CONFIG_FSL_BOOKE |
| @@ -47,33 +46,31 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT; | |||
| 47 | #define WDTP(x) (TCR_WP(x)) | 46 | #define WDTP(x) (TCR_WP(x)) |
| 48 | #endif | 47 | #endif |
| 49 | 48 | ||
| 50 | /* | 49 | static DEFINE_SPINLOCK(booke_wdt_lock); |
| 51 | * booke_wdt_ping: | 50 | |
| 52 | */ | 51 | static void __booke_wdt_ping(void *data) |
| 53 | static __inline__ void booke_wdt_ping(void) | ||
| 54 | { | 52 | { |
| 55 | mtspr(SPRN_TSR, TSR_ENW|TSR_WIS); | 53 | mtspr(SPRN_TSR, TSR_ENW|TSR_WIS); |
| 56 | } | 54 | } |
| 57 | 55 | ||
| 58 | /* | 56 | static void booke_wdt_ping(void) |
| 59 | * booke_wdt_enable: | 57 | { |
| 60 | */ | 58 | on_each_cpu(__booke_wdt_ping, NULL, 0, 0); |
| 61 | static __inline__ void booke_wdt_enable(void) | 59 | } |
| 60 | |||
| 61 | static void __booke_wdt_enable(void *data) | ||
| 62 | { | 62 | { |
| 63 | u32 val; | 63 | u32 val; |
| 64 | 64 | ||
| 65 | /* clear status before enabling watchdog */ | 65 | /* clear status before enabling watchdog */ |
| 66 | booke_wdt_ping(); | 66 | __booke_wdt_ping(NULL); |
| 67 | val = mfspr(SPRN_TCR); | 67 | val = mfspr(SPRN_TCR); |
| 68 | val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period)); | 68 | val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period)); |
| 69 | 69 | ||
| 70 | mtspr(SPRN_TCR, val); | 70 | mtspr(SPRN_TCR, val); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | /* | 73 | static ssize_t booke_wdt_write(struct file *file, const char __user *buf, |
| 74 | * booke_wdt_write: | ||
| 75 | */ | ||
| 76 | static ssize_t booke_wdt_write (struct file *file, const char __user *buf, | ||
| 77 | size_t count, loff_t *ppos) | 74 | size_t count, loff_t *ppos) |
| 78 | { | 75 | { |
| 79 | booke_wdt_ping(); | 76 | booke_wdt_ping(); |
| @@ -81,15 +78,11 @@ static ssize_t booke_wdt_write (struct file *file, const char __user *buf, | |||
| 81 | } | 78 | } |
| 82 | 79 | ||
| 83 | static struct watchdog_info ident = { | 80 | static struct watchdog_info ident = { |
| 84 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, | 81 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, |
| 85 | .firmware_version = 0, | 82 | .identity = "PowerPC Book-E Watchdog", |
| 86 | .identity = "PowerPC Book-E Watchdog", | ||
| 87 | }; | 83 | }; |
| 88 | 84 | ||
| 89 | /* | 85 | static int booke_wdt_ioctl(struct inode *inode, struct file *file, |
| 90 | * booke_wdt_ioctl: | ||
| 91 | */ | ||
| 92 | static int booke_wdt_ioctl (struct inode *inode, struct file *file, | ||
| 93 | unsigned int cmd, unsigned long arg) | 86 | unsigned int cmd, unsigned long arg) |
| 94 | { | 87 | { |
| 95 | u32 tmp = 0; | 88 | u32 tmp = 0; |
| @@ -97,7 +90,7 @@ static int booke_wdt_ioctl (struct inode *inode, struct file *file, | |||
| 97 | 90 | ||
| 98 | switch (cmd) { | 91 | switch (cmd) { |
| 99 | case WDIOC_GETSUPPORT: | 92 | case WDIOC_GETSUPPORT: |
| 100 | if (copy_to_user ((struct watchdog_info __user *) arg, &ident, | 93 | if (copy_to_user((struct watchdog_info __user *)arg, &ident, |
| 101 | sizeof(struct watchdog_info))) | 94 | sizeof(struct watchdog_info))) |
| 102 | return -EFAULT; | 95 | return -EFAULT; |
| 103 | case WDIOC_GETSTATUS: | 96 | case WDIOC_GETSTATUS: |
| @@ -132,33 +125,33 @@ static int booke_wdt_ioctl (struct inode *inode, struct file *file, | |||
| 132 | 125 | ||
| 133 | return 0; | 126 | return 0; |
| 134 | } | 127 | } |
| 135 | /* | 128 | |
| 136 | * booke_wdt_open: | 129 | static int booke_wdt_open(struct inode *inode, struct file *file) |
| 137 | */ | ||
| 138 | static int booke_wdt_open (struct inode *inode, struct file *file) | ||
| 139 | { | 130 | { |
| 131 | spin_lock(&booke_wdt_lock); | ||
| 140 | if (booke_wdt_enabled == 0) { | 132 | if (booke_wdt_enabled == 0) { |
| 141 | booke_wdt_enabled = 1; | 133 | booke_wdt_enabled = 1; |
| 142 | booke_wdt_enable(); | 134 | on_each_cpu(__booke_wdt_enable, NULL, 0, 0); |
| 143 | printk (KERN_INFO "PowerPC Book-E Watchdog Timer Enabled (wdt_period=%d)\n", | 135 | printk(KERN_INFO "PowerPC Book-E Watchdog Timer Enabled " |
| 144 | booke_wdt_period); | 136 | "(wdt_period=%d)\n", booke_wdt_period); |
| 145 | } | 137 | } |
| 138 | spin_unlock(&booke_wdt_lock); | ||
| 146 | 139 | ||
| 147 | return nonseekable_open(inode, file); | 140 | return nonseekable_open(inode, file); |
| 148 | } | 141 | } |
| 149 | 142 | ||
| 150 | static const struct file_operations booke_wdt_fops = { | 143 | static const struct file_operations booke_wdt_fops = { |
| 151 | .owner = THIS_MODULE, | 144 | .owner = THIS_MODULE, |
| 152 | .llseek = no_llseek, | 145 | .llseek = no_llseek, |
| 153 | .write = booke_wdt_write, | 146 | .write = booke_wdt_write, |
| 154 | .ioctl = booke_wdt_ioctl, | 147 | .ioctl = booke_wdt_ioctl, |
| 155 | .open = booke_wdt_open, | 148 | .open = booke_wdt_open, |
| 156 | }; | 149 | }; |
| 157 | 150 | ||
| 158 | static struct miscdevice booke_wdt_miscdev = { | 151 | static struct miscdevice booke_wdt_miscdev = { |
| 159 | .minor = WATCHDOG_MINOR, | 152 | .minor = WATCHDOG_MINOR, |
| 160 | .name = "watchdog", | 153 | .name = "watchdog", |
| 161 | .fops = &booke_wdt_fops, | 154 | .fops = &booke_wdt_fops, |
| 162 | }; | 155 | }; |
| 163 | 156 | ||
| 164 | static void __exit booke_wdt_exit(void) | 157 | static void __exit booke_wdt_exit(void) |
| @@ -166,28 +159,27 @@ static void __exit booke_wdt_exit(void) | |||
| 166 | misc_deregister(&booke_wdt_miscdev); | 159 | misc_deregister(&booke_wdt_miscdev); |
| 167 | } | 160 | } |
| 168 | 161 | ||
| 169 | /* | ||
| 170 | * booke_wdt_init: | ||
| 171 | */ | ||
| 172 | static int __init booke_wdt_init(void) | 162 | static int __init booke_wdt_init(void) |
| 173 | { | 163 | { |
| 174 | int ret = 0; | 164 | int ret = 0; |
| 175 | 165 | ||
| 176 | printk (KERN_INFO "PowerPC Book-E Watchdog Timer Loaded\n"); | 166 | printk(KERN_INFO "PowerPC Book-E Watchdog Timer Loaded\n"); |
| 177 | ident.firmware_version = cur_cpu_spec->pvr_value; | 167 | ident.firmware_version = cur_cpu_spec->pvr_value; |
| 178 | 168 | ||
| 179 | ret = misc_register(&booke_wdt_miscdev); | 169 | ret = misc_register(&booke_wdt_miscdev); |
| 180 | if (ret) { | 170 | if (ret) { |
| 181 | printk (KERN_CRIT "Cannot register miscdev on minor=%d (err=%d)\n", | 171 | printk(KERN_CRIT "Cannot register miscdev on minor=%d: %d\n", |
| 182 | WATCHDOG_MINOR, ret); | 172 | WATCHDOG_MINOR, ret); |
| 183 | return ret; | 173 | return ret; |
| 184 | } | 174 | } |
| 185 | 175 | ||
| 176 | spin_lock(&booke_wdt_lock); | ||
| 186 | if (booke_wdt_enabled == 1) { | 177 | if (booke_wdt_enabled == 1) { |
| 187 | printk (KERN_INFO "PowerPC Book-E Watchdog Timer Enabled (wdt_period=%d)\n", | 178 | printk(KERN_INFO "PowerPC Book-E Watchdog Timer Enabled " |
| 188 | booke_wdt_period); | 179 | "(wdt_period=%d)\n", booke_wdt_period); |
| 189 | booke_wdt_enable(); | 180 | on_each_cpu(__booke_wdt_enable, NULL, 0, 0); |
| 190 | } | 181 | } |
| 182 | spin_unlock(&booke_wdt_lock); | ||
| 191 | 183 | ||
| 192 | return ret; | 184 | return ret; |
| 193 | } | 185 | } |
diff --git a/drivers/watchdog/geodewdt.c b/drivers/watchdog/geodewdt.c new file mode 100644 index 000000000000..30d09cbbad94 --- /dev/null +++ b/drivers/watchdog/geodewdt.c | |||
| @@ -0,0 +1,308 @@ | |||
| 1 | /* Watchdog timer for the Geode GX/LX with the CS5535/CS5536 companion chip | ||
| 2 | * | ||
| 3 | * Copyright (C) 2006-2007, Advanced Micro Devices, Inc. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or | ||
| 6 | * modify it under the terms of the GNU General Public License | ||
| 7 | * as published by the Free Software Foundation; either version | ||
| 8 | * 2 of the License, or (at your option) any later version. | ||
| 9 | */ | ||
| 10 | |||
| 11 | |||
| 12 | #include <linux/module.h> | ||
| 13 | #include <linux/moduleparam.h> | ||
| 14 | #include <linux/types.h> | ||
| 15 | #include <linux/miscdevice.h> | ||
| 16 | #include <linux/watchdog.h> | ||
| 17 | #include <linux/fs.h> | ||
| 18 | #include <linux/platform_device.h> | ||
| 19 | #include <linux/reboot.h> | ||
| 20 | |||
| 21 | #include <asm/uaccess.h> | ||
| 22 | #include <asm/geode.h> | ||
| 23 | |||
| 24 | #define GEODEWDT_HZ 500 | ||
| 25 | #define GEODEWDT_SCALE 6 | ||
| 26 | #define GEODEWDT_MAX_SECONDS 131 | ||
| 27 | |||
| 28 | #define WDT_FLAGS_OPEN 1 | ||
| 29 | #define WDT_FLAGS_ORPHAN 2 | ||
| 30 | |||
| 31 | #define DRV_NAME "geodewdt" | ||
| 32 | #define WATCHDOG_NAME "Geode GX/LX WDT" | ||
| 33 | #define WATCHDOG_TIMEOUT 60 | ||
| 34 | |||
| 35 | static int timeout = WATCHDOG_TIMEOUT; | ||
| 36 | module_param(timeout, int, 0); | ||
| 37 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=131, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) "."); | ||
| 38 | |||
| 39 | static int nowayout = WATCHDOG_NOWAYOUT; | ||
| 40 | module_param(nowayout, int, 0); | ||
| 41 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 42 | |||
| 43 | static struct platform_device *geodewdt_platform_device; | ||
| 44 | static unsigned long wdt_flags; | ||
| 45 | static int wdt_timer; | ||
| 46 | static int safe_close; | ||
| 47 | |||
| 48 | static void geodewdt_ping(void) | ||
| 49 | { | ||
| 50 | /* Stop the counter */ | ||
| 51 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0); | ||
| 52 | |||
| 53 | /* Reset the counter */ | ||
| 54 | geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0); | ||
| 55 | |||
| 56 | /* Enable the counter */ | ||
| 57 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN); | ||
| 58 | } | ||
| 59 | |||
| 60 | static void geodewdt_disable(void) | ||
| 61 | { | ||
| 62 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0); | ||
| 63 | geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0); | ||
| 64 | } | ||
| 65 | |||
| 66 | static int geodewdt_set_heartbeat(int val) | ||
| 67 | { | ||
| 68 | if (val < 1 || val > GEODEWDT_MAX_SECONDS) | ||
| 69 | return -EINVAL; | ||
| 70 | |||
| 71 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0); | ||
| 72 | geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, val * GEODEWDT_HZ); | ||
| 73 | geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0); | ||
| 74 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN); | ||
| 75 | |||
| 76 | timeout = val; | ||
| 77 | return 0; | ||
| 78 | } | ||
| 79 | |||
| 80 | static int | ||
| 81 | geodewdt_open(struct inode *inode, struct file *file) | ||
| 82 | { | ||
| 83 | if (test_and_set_bit(WDT_FLAGS_OPEN, &wdt_flags)) | ||
| 84 | return -EBUSY; | ||
| 85 | |||
| 86 | if (!test_and_clear_bit(WDT_FLAGS_ORPHAN, &wdt_flags)) | ||
| 87 | __module_get(THIS_MODULE); | ||
| 88 | |||
| 89 | geodewdt_ping(); | ||
| 90 | return nonseekable_open(inode, file); | ||
| 91 | } | ||
| 92 | |||
| 93 | static int | ||
| 94 | geodewdt_release(struct inode *inode, struct file *file) | ||
| 95 | { | ||
| 96 | if (safe_close) { | ||
| 97 | geodewdt_disable(); | ||
| 98 | module_put(THIS_MODULE); | ||
| 99 | } | ||
| 100 | else { | ||
| 101 | printk(KERN_CRIT "Unexpected close - watchdog is not stopping.\n"); | ||
| 102 | geodewdt_ping(); | ||
| 103 | |||
| 104 | set_bit(WDT_FLAGS_ORPHAN, &wdt_flags); | ||
| 105 | } | ||
| 106 | |||
| 107 | clear_bit(WDT_FLAGS_OPEN, &wdt_flags); | ||
| 108 | safe_close = 0; | ||
| 109 | return 0; | ||
| 110 | } | ||
| 111 | |||
| 112 | static ssize_t | ||
| 113 | geodewdt_write(struct file *file, const char __user *data, size_t len, | ||
| 114 | loff_t *ppos) | ||
| 115 | { | ||
| 116 | if(len) { | ||
| 117 | if (!nowayout) { | ||
| 118 | size_t i; | ||
| 119 | safe_close = 0; | ||
| 120 | |||
| 121 | for (i = 0; i != len; i++) { | ||
| 122 | char c; | ||
| 123 | |||
| 124 | if (get_user(c, data + i)) | ||
| 125 | return -EFAULT; | ||
| 126 | |||
| 127 | if (c == 'V') | ||
| 128 | safe_close = 1; | ||
| 129 | } | ||
| 130 | } | ||
| 131 | |||
| 132 | geodewdt_ping(); | ||
| 133 | } | ||
| 134 | return len; | ||
| 135 | } | ||
| 136 | |||
| 137 | static int | ||
| 138 | geodewdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | ||
| 139 | unsigned long arg) | ||
| 140 | { | ||
| 141 | void __user *argp = (void __user *)arg; | ||
| 142 | int __user *p = argp; | ||
| 143 | int interval; | ||
| 144 | |||
| 145 | static struct watchdog_info ident = { | ||
| 146 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | ||
| 147 | | WDIOF_MAGICCLOSE, | ||
| 148 | .firmware_version = 1, | ||
| 149 | .identity = WATCHDOG_NAME, | ||
| 150 | }; | ||
| 151 | |||
| 152 | switch(cmd) { | ||
| 153 | case WDIOC_GETSUPPORT: | ||
| 154 | return copy_to_user(argp, &ident, | ||
| 155 | sizeof(ident)) ? -EFAULT : 0; | ||
| 156 | break; | ||
| 157 | |||
| 158 | case WDIOC_GETSTATUS: | ||
| 159 | case WDIOC_GETBOOTSTATUS: | ||
| 160 | return put_user(0, p); | ||
| 161 | |||
| 162 | case WDIOC_KEEPALIVE: | ||
| 163 | geodewdt_ping(); | ||
| 164 | return 0; | ||
| 165 | |||
| 166 | case WDIOC_SETTIMEOUT: | ||
| 167 | if (get_user(interval, p)) | ||
| 168 | return -EFAULT; | ||
| 169 | |||
| 170 | if (geodewdt_set_heartbeat(interval)) | ||
| 171 | return -EINVAL; | ||
| 172 | |||
| 173 | /* Fall through */ | ||
| 174 | |||
| 175 | case WDIOC_GETTIMEOUT: | ||
| 176 | return put_user(timeout, p); | ||
| 177 | |||
| 178 | case WDIOC_SETOPTIONS: | ||
| 179 | { | ||
| 180 | int options, ret = -EINVAL; | ||
| 181 | |||
| 182 | if (get_user(options, p)) | ||
| 183 | return -EFAULT; | ||
| 184 | |||
| 185 | if (options & WDIOS_DISABLECARD) { | ||
| 186 | geodewdt_disable(); | ||
| 187 | ret = 0; | ||
| 188 | } | ||
| 189 | |||
| 190 | if (options & WDIOS_ENABLECARD) { | ||
| 191 | geodewdt_ping(); | ||
| 192 | ret = 0; | ||
| 193 | } | ||
| 194 | |||
| 195 | return ret; | ||
| 196 | } | ||
| 197 | default: | ||
| 198 | return -ENOTTY; | ||
| 199 | } | ||
| 200 | |||
| 201 | return 0; | ||
| 202 | } | ||
| 203 | |||
| 204 | static const struct file_operations geodewdt_fops = { | ||
| 205 | .owner = THIS_MODULE, | ||
| 206 | .llseek = no_llseek, | ||
| 207 | .write = geodewdt_write, | ||
| 208 | .ioctl = geodewdt_ioctl, | ||
| 209 | .open = geodewdt_open, | ||
| 210 | .release = geodewdt_release, | ||
| 211 | }; | ||
| 212 | |||
| 213 | static struct miscdevice geodewdt_miscdev = { | ||
| 214 | .minor = WATCHDOG_MINOR, | ||
| 215 | .name = "watchdog", | ||
| 216 | .fops = &geodewdt_fops | ||
| 217 | }; | ||
| 218 | |||
| 219 | static int __devinit | ||
| 220 | geodewdt_probe(struct platform_device *dev) | ||
| 221 | { | ||
| 222 | int ret, timer; | ||
| 223 | |||
| 224 | timer = geode_mfgpt_alloc_timer(MFGPT_TIMER_ANY, MFGPT_DOMAIN_WORKING); | ||
| 225 | |||
| 226 | if (timer == -1) { | ||
| 227 | printk(KERN_ERR "geodewdt: No timers were available\n"); | ||
| 228 | return -ENODEV; | ||
| 229 | } | ||
| 230 | |||
| 231 | wdt_timer = timer; | ||
| 232 | |||
| 233 | /* Set up the timer */ | ||
| 234 | |||
| 235 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, | ||
| 236 | GEODEWDT_SCALE | (3 << 8)); | ||
| 237 | |||
| 238 | /* Set up comparator 2 to reset when the event fires */ | ||
| 239 | geode_mfgpt_toggle_event(wdt_timer, MFGPT_CMP2, MFGPT_EVENT_RESET, 1); | ||
| 240 | |||
| 241 | /* Set up the initial timeout */ | ||
| 242 | |||
| 243 | geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, | ||
| 244 | timeout * GEODEWDT_HZ); | ||
| 245 | |||
| 246 | ret = misc_register(&geodewdt_miscdev); | ||
| 247 | |||
| 248 | return ret; | ||
| 249 | } | ||
| 250 | |||
| 251 | static int __devexit | ||
| 252 | geodewdt_remove(struct platform_device *dev) | ||
| 253 | { | ||
| 254 | misc_deregister(&geodewdt_miscdev); | ||
| 255 | return 0; | ||
| 256 | } | ||
| 257 | |||
| 258 | static void | ||
| 259 | geodewdt_shutdown(struct platform_device *dev) | ||
| 260 | { | ||
| 261 | geodewdt_disable(); | ||
| 262 | } | ||
| 263 | |||
| 264 | static struct platform_driver geodewdt_driver = { | ||
| 265 | .probe = geodewdt_probe, | ||
| 266 | .remove = __devexit_p(geodewdt_remove), | ||
| 267 | .shutdown = geodewdt_shutdown, | ||
| 268 | .driver = { | ||
| 269 | .owner = THIS_MODULE, | ||
| 270 | .name = DRV_NAME, | ||
| 271 | }, | ||
| 272 | }; | ||
| 273 | |||
| 274 | static int __init | ||
| 275 | geodewdt_init(void) | ||
| 276 | { | ||
| 277 | int ret; | ||
| 278 | |||
| 279 | ret = platform_driver_register(&geodewdt_driver); | ||
| 280 | if (ret) | ||
| 281 | return ret; | ||
| 282 | |||
| 283 | geodewdt_platform_device = platform_device_register_simple(DRV_NAME, -1, NULL, 0); | ||
| 284 | if (IS_ERR(geodewdt_platform_device)) { | ||
| 285 | ret = PTR_ERR(geodewdt_platform_device); | ||
| 286 | goto err; | ||
| 287 | } | ||
| 288 | |||
| 289 | return 0; | ||
| 290 | err: | ||
| 291 | platform_driver_unregister(&geodewdt_driver); | ||
| 292 | return ret; | ||
| 293 | } | ||
| 294 | |||
| 295 | static void __exit | ||
| 296 | geodewdt_exit(void) | ||
| 297 | { | ||
| 298 | platform_device_unregister(geodewdt_platform_device); | ||
| 299 | platform_driver_unregister(&geodewdt_driver); | ||
| 300 | } | ||
| 301 | |||
| 302 | module_init(geodewdt_init); | ||
| 303 | module_exit(geodewdt_exit); | ||
| 304 | |||
| 305 | MODULE_AUTHOR("Advanced Micro Devices, Inc"); | ||
| 306 | MODULE_DESCRIPTION("Geode GX/LX Watchdog Driver"); | ||
| 307 | MODULE_LICENSE("GPL"); | ||
| 308 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | ||
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 6483d1066b95..6a63535fc04d 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
| @@ -418,23 +418,20 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason, | |||
| 418 | static unsigned long rom_pl; | 418 | static unsigned long rom_pl; |
| 419 | static int die_nmi_called; | 419 | static int die_nmi_called; |
| 420 | 420 | ||
| 421 | if (ulReason != DIE_NMI && ulReason != DIE_NMI_IPI) | 421 | if (ulReason == DIE_NMI || ulReason == DIE_NMI_IPI) { |
| 422 | return NOTIFY_OK; | 422 | spin_lock_irqsave(&rom_lock, rom_pl); |
| 423 | 423 | if (!die_nmi_called) | |
| 424 | spin_lock_irqsave(&rom_lock, rom_pl); | 424 | asminline_call(&cmn_regs, cru_rom_addr); |
| 425 | if (!die_nmi_called) | 425 | die_nmi_called = 1; |
| 426 | asminline_call(&cmn_regs, cru_rom_addr); | 426 | spin_unlock_irqrestore(&rom_lock, rom_pl); |
| 427 | die_nmi_called = 1; | 427 | if (cmn_regs.u1.ral != 0) { |
| 428 | spin_unlock_irqrestore(&rom_lock, rom_pl); | 428 | panic("An NMI occurred, please see the Integrated " |
| 429 | if (cmn_regs.u1.ral == 0) { | 429 | "Management Log for details.\n"); |
| 430 | printk(KERN_WARNING "hpwdt: An NMI occurred, " | 430 | } |
| 431 | "but unable to determine source.\n"); | ||
| 432 | } else { | ||
| 433 | panic("An NMI occurred, please see the Integrated " | ||
| 434 | "Management Log for details.\n"); | ||
| 435 | } | 431 | } |
| 436 | 432 | ||
| 437 | return NOTIFY_STOP; | 433 | die_nmi_called = 0; |
| 434 | return NOTIFY_DONE; | ||
| 438 | } | 435 | } |
| 439 | 436 | ||
| 440 | /* | 437 | /* |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index a0e6809e369f..95ba985bd341 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
| @@ -41,9 +41,10 @@ | |||
| 41 | * 82801HH (ICH8DH) : document number 313056-003, 313057-009, | 41 | * 82801HH (ICH8DH) : document number 313056-003, 313057-009, |
| 42 | * 82801HO (ICH8DO) : document number 313056-003, 313057-009, | 42 | * 82801HO (ICH8DO) : document number 313056-003, 313057-009, |
| 43 | * 82801HEM (ICH8M-E) : document number 313056-003, 313057-009, | 43 | * 82801HEM (ICH8M-E) : document number 313056-003, 313057-009, |
| 44 | * 82801IB (ICH9) : document number 316972-001, 316973-001, | 44 | * 82801IB (ICH9) : document number 316972-001, 316973-006, |
| 45 | * 82801IR (ICH9R) : document number 316972-001, 316973-001, | 45 | * 82801IR (ICH9R) : document number 316972-001, 316973-006, |
| 46 | * 82801IH (ICH9DH) : document number 316972-001, 316973-001, | 46 | * 82801IH (ICH9DH) : document number 316972-001, 316973-006, |
| 47 | * 82801IO (ICH9DO) : document number 316972-001, 316973-006, | ||
| 47 | * 6300ESB (6300ESB) : document number 300641-003, 300884-010, | 48 | * 6300ESB (6300ESB) : document number 300641-003, 300884-010, |
| 48 | * 631xESB (631xESB) : document number 313082-001, 313075-005, | 49 | * 631xESB (631xESB) : document number 313082-001, 313075-005, |
| 49 | * 632xESB (632xESB) : document number 313082-001, 313075-005 | 50 | * 632xESB (632xESB) : document number 313082-001, 313075-005 |
| @@ -55,8 +56,8 @@ | |||
| 55 | 56 | ||
| 56 | /* Module and version information */ | 57 | /* Module and version information */ |
| 57 | #define DRV_NAME "iTCO_wdt" | 58 | #define DRV_NAME "iTCO_wdt" |
| 58 | #define DRV_VERSION "1.02" | 59 | #define DRV_VERSION "1.03" |
| 59 | #define DRV_RELDATE "26-Jul-2007" | 60 | #define DRV_RELDATE "30-Apr-2008" |
| 60 | #define PFX DRV_NAME ": " | 61 | #define PFX DRV_NAME ": " |
| 61 | 62 | ||
| 62 | /* Includes */ | 63 | /* Includes */ |
| @@ -104,6 +105,7 @@ enum iTCO_chipsets { | |||
| 104 | TCO_ICH9, /* ICH9 */ | 105 | TCO_ICH9, /* ICH9 */ |
| 105 | TCO_ICH9R, /* ICH9R */ | 106 | TCO_ICH9R, /* ICH9R */ |
| 106 | TCO_ICH9DH, /* ICH9DH */ | 107 | TCO_ICH9DH, /* ICH9DH */ |
| 108 | TCO_ICH9DO, /* ICH9DO */ | ||
| 107 | TCO_631XESB, /* 631xESB/632xESB */ | 109 | TCO_631XESB, /* 631xESB/632xESB */ |
| 108 | }; | 110 | }; |
| 109 | 111 | ||
| @@ -136,6 +138,7 @@ static struct { | |||
| 136 | {"ICH9", 2}, | 138 | {"ICH9", 2}, |
| 137 | {"ICH9R", 2}, | 139 | {"ICH9R", 2}, |
| 138 | {"ICH9DH", 2}, | 140 | {"ICH9DH", 2}, |
| 141 | {"ICH9DO", 2}, | ||
| 139 | {"631xESB/632xESB", 2}, | 142 | {"631xESB/632xESB", 2}, |
| 140 | {NULL,0} | 143 | {NULL,0} |
| 141 | }; | 144 | }; |
| @@ -181,6 +184,7 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = { | |||
| 181 | { ITCO_PCI_DEVICE(0x2918, TCO_ICH9 )}, | 184 | { ITCO_PCI_DEVICE(0x2918, TCO_ICH9 )}, |
| 182 | { ITCO_PCI_DEVICE(0x2916, TCO_ICH9R )}, | 185 | { ITCO_PCI_DEVICE(0x2916, TCO_ICH9R )}, |
| 183 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_2, TCO_ICH9DH )}, | 186 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_2, TCO_ICH9DH )}, |
| 187 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_4, TCO_ICH9DO )}, | ||
| 184 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ESB2_0, TCO_631XESB)}, | 188 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ESB2_0, TCO_631XESB)}, |
| 185 | { ITCO_PCI_DEVICE(0x2671, TCO_631XESB)}, | 189 | { ITCO_PCI_DEVICE(0x2671, TCO_631XESB)}, |
| 186 | { ITCO_PCI_DEVICE(0x2672, TCO_631XESB)}, | 190 | { ITCO_PCI_DEVICE(0x2672, TCO_631XESB)}, |
diff --git a/drivers/watchdog/w83697hf_wdt.c b/drivers/watchdog/w83697hf_wdt.c index c622a0e6c9ae..528b882420b6 100644 --- a/drivers/watchdog/w83697hf_wdt.c +++ b/drivers/watchdog/w83697hf_wdt.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #define WATCHDOG_NAME "w83697hf/hg WDT" | 44 | #define WATCHDOG_NAME "w83697hf/hg WDT" |
| 45 | #define PFX WATCHDOG_NAME ": " | 45 | #define PFX WATCHDOG_NAME ": " |
| 46 | #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ | 46 | #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ |
| 47 | #define WATCHDOG_EARLY_DISABLE 1 /* Disable until userland kicks in */ | ||
| 47 | 48 | ||
| 48 | static unsigned long wdt_is_open; | 49 | static unsigned long wdt_is_open; |
| 49 | static char expect_close; | 50 | static char expect_close; |
| @@ -56,12 +57,16 @@ MODULE_PARM_DESC(wdt_io, "w83697hf/hg WDT io port (default 0x2e, 0 = autodetect) | |||
| 56 | 57 | ||
| 57 | static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ | 58 | static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ |
| 58 | module_param(timeout, int, 0); | 59 | module_param(timeout, int, 0); |
| 59 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=255, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) "."); | 60 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=255 (default=" __MODULE_STRING(WATCHDOG_TIMEOUT) ")"); |
| 60 | 61 | ||
| 61 | static int nowayout = WATCHDOG_NOWAYOUT; | 62 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 62 | module_param(nowayout, int, 0); | 63 | module_param(nowayout, int, 0); |
| 63 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 64 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); |
| 64 | 65 | ||
| 66 | static int early_disable = WATCHDOG_EARLY_DISABLE; | ||
| 67 | module_param(early_disable, int, 0); | ||
| 68 | MODULE_PARM_DESC(early_disable, "Watchdog gets disabled at boot time (default=" __MODULE_STRING(WATCHDOG_EARLY_DISABLE) ")"); | ||
| 69 | |||
| 65 | /* | 70 | /* |
| 66 | * Kernel methods. | 71 | * Kernel methods. |
| 67 | */ | 72 | */ |
| @@ -140,7 +145,7 @@ w83697hf_init(void) | |||
| 140 | w83697hf_deselect_wdt(); | 145 | w83697hf_deselect_wdt(); |
| 141 | } | 146 | } |
| 142 | 147 | ||
| 143 | static int | 148 | static void |
| 144 | wdt_ping(void) | 149 | wdt_ping(void) |
| 145 | { | 150 | { |
| 146 | spin_lock(&io_lock); | 151 | spin_lock(&io_lock); |
| @@ -150,10 +155,9 @@ wdt_ping(void) | |||
| 150 | 155 | ||
| 151 | w83697hf_deselect_wdt(); | 156 | w83697hf_deselect_wdt(); |
| 152 | spin_unlock(&io_lock); | 157 | spin_unlock(&io_lock); |
| 153 | return 0; | ||
| 154 | } | 158 | } |
| 155 | 159 | ||
| 156 | static int | 160 | static void |
| 157 | wdt_enable(void) | 161 | wdt_enable(void) |
| 158 | { | 162 | { |
| 159 | spin_lock(&io_lock); | 163 | spin_lock(&io_lock); |
| @@ -164,10 +168,9 @@ wdt_enable(void) | |||
| 164 | 168 | ||
| 165 | w83697hf_deselect_wdt(); | 169 | w83697hf_deselect_wdt(); |
| 166 | spin_unlock(&io_lock); | 170 | spin_unlock(&io_lock); |
| 167 | return 0; | ||
| 168 | } | 171 | } |
| 169 | 172 | ||
| 170 | static int | 173 | static void |
| 171 | wdt_disable(void) | 174 | wdt_disable(void) |
| 172 | { | 175 | { |
| 173 | spin_lock(&io_lock); | 176 | spin_lock(&io_lock); |
| @@ -178,7 +181,22 @@ wdt_disable(void) | |||
| 178 | 181 | ||
| 179 | w83697hf_deselect_wdt(); | 182 | w83697hf_deselect_wdt(); |
| 180 | spin_unlock(&io_lock); | 183 | spin_unlock(&io_lock); |
| 181 | return 0; | 184 | } |
| 185 | |||
| 186 | static unsigned char | ||
| 187 | wdt_running(void) | ||
| 188 | { | ||
| 189 | unsigned char t; | ||
| 190 | |||
| 191 | spin_lock(&io_lock); | ||
| 192 | w83697hf_select_wdt(); | ||
| 193 | |||
| 194 | t = w83697hf_get_reg(0xF4); /* Read timer */ | ||
| 195 | |||
| 196 | w83697hf_deselect_wdt(); | ||
| 197 | spin_unlock(&io_lock); | ||
| 198 | |||
| 199 | return t; | ||
| 182 | } | 200 | } |
| 183 | 201 | ||
| 184 | static int | 202 | static int |
| @@ -397,7 +415,11 @@ wdt_init(void) | |||
| 397 | } | 415 | } |
| 398 | 416 | ||
| 399 | w83697hf_init(); | 417 | w83697hf_init(); |
| 400 | wdt_disable(); /* Disable watchdog until first use */ | 418 | if (early_disable) { |
| 419 | if (wdt_running()) | ||
| 420 | printk (KERN_WARNING PFX "Stopping previously enabled watchdog until userland kicks in\n"); | ||
| 421 | wdt_disable(); | ||
| 422 | } | ||
| 401 | 423 | ||
| 402 | if (wdt_set_heartbeat(timeout)) { | 424 | if (wdt_set_heartbeat(timeout)) { |
| 403 | wdt_set_heartbeat(WATCHDOG_TIMEOUT); | 425 | wdt_set_heartbeat(WATCHDOG_TIMEOUT); |
| @@ -860,6 +860,7 @@ static int de_thread(struct task_struct *tsk) | |||
| 860 | 860 | ||
| 861 | no_thread_group: | 861 | no_thread_group: |
| 862 | exit_itimers(sig); | 862 | exit_itimers(sig); |
| 863 | flush_itimer_signals(); | ||
| 863 | if (leader) | 864 | if (leader) |
| 864 | release_task(leader); | 865 | release_task(leader); |
| 865 | 866 | ||
diff --git a/fs/splice.c b/fs/splice.c index 78150038b584..aa5f6f60b305 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
| @@ -58,8 +58,8 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, | |||
| 58 | */ | 58 | */ |
| 59 | wait_on_page_writeback(page); | 59 | wait_on_page_writeback(page); |
| 60 | 60 | ||
| 61 | if (PagePrivate(page)) | 61 | if (PagePrivate(page) && !try_to_release_page(page, GFP_KERNEL)) |
| 62 | try_to_release_page(page, GFP_KERNEL); | 62 | goto out_unlock; |
| 63 | 63 | ||
| 64 | /* | 64 | /* |
| 65 | * If we succeeded in removing the mapping, set LRU flag | 65 | * If we succeeded in removing the mapping, set LRU flag |
| @@ -75,6 +75,7 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, | |||
| 75 | * Raced with truncate or failed to remove page from current | 75 | * Raced with truncate or failed to remove page from current |
| 76 | * address space, unlock and return failure. | 76 | * address space, unlock and return failure. |
| 77 | */ | 77 | */ |
| 78 | out_unlock: | ||
| 78 | unlock_page(page); | 79 | unlock_page(page); |
| 79 | return 1; | 80 | return 1; |
| 80 | } | 81 | } |
| @@ -983,7 +984,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, | |||
| 983 | 984 | ||
| 984 | while (len) { | 985 | while (len) { |
| 985 | size_t read_len; | 986 | size_t read_len; |
| 986 | loff_t pos = sd->pos; | 987 | loff_t pos = sd->pos, prev_pos = pos; |
| 987 | 988 | ||
| 988 | ret = do_splice_to(in, &pos, pipe, len, flags); | 989 | ret = do_splice_to(in, &pos, pipe, len, flags); |
| 989 | if (unlikely(ret <= 0)) | 990 | if (unlikely(ret <= 0)) |
| @@ -998,15 +999,19 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, | |||
| 998 | * could get stuck data in the internal pipe: | 999 | * could get stuck data in the internal pipe: |
| 999 | */ | 1000 | */ |
| 1000 | ret = actor(pipe, sd); | 1001 | ret = actor(pipe, sd); |
| 1001 | if (unlikely(ret <= 0)) | 1002 | if (unlikely(ret <= 0)) { |
| 1003 | sd->pos = prev_pos; | ||
| 1002 | goto out_release; | 1004 | goto out_release; |
| 1005 | } | ||
| 1003 | 1006 | ||
| 1004 | bytes += ret; | 1007 | bytes += ret; |
| 1005 | len -= ret; | 1008 | len -= ret; |
| 1006 | sd->pos = pos; | 1009 | sd->pos = pos; |
| 1007 | 1010 | ||
| 1008 | if (ret < read_len) | 1011 | if (ret < read_len) { |
| 1012 | sd->pos = prev_pos + ret; | ||
| 1009 | goto out_release; | 1013 | goto out_release; |
| 1014 | } | ||
| 1010 | } | 1015 | } |
| 1011 | 1016 | ||
| 1012 | done: | 1017 | done: |
| @@ -1072,7 +1077,7 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | |||
| 1072 | 1077 | ||
| 1073 | ret = splice_direct_to_actor(in, &sd, direct_splice_actor); | 1078 | ret = splice_direct_to_actor(in, &sd, direct_splice_actor); |
| 1074 | if (ret > 0) | 1079 | if (ret > 0) |
| 1075 | *ppos += ret; | 1080 | *ppos = sd.pos; |
| 1076 | 1081 | ||
| 1077 | return ret; | 1082 | return ret; |
| 1078 | } | 1083 | } |
diff --git a/include/asm-blackfin/bfin-global.h b/include/asm-blackfin/bfin-global.h index a9248d883675..76033831eb35 100644 --- a/include/asm-blackfin/bfin-global.h +++ b/include/asm-blackfin/bfin-global.h | |||
| @@ -105,13 +105,6 @@ extern int sram_free(const void*); | |||
| 105 | extern void *sram_alloc_with_lsl(size_t, unsigned long); | 105 | extern void *sram_alloc_with_lsl(size_t, unsigned long); |
| 106 | extern int sram_free_with_lsl(const void*); | 106 | extern int sram_free_with_lsl(const void*); |
| 107 | 107 | ||
| 108 | extern void led_on(int); | ||
| 109 | extern void led_off(int); | ||
| 110 | extern void led_toggle(int); | ||
| 111 | extern void led_disp_num(int); | ||
| 112 | extern void led_toggle_num(int); | ||
| 113 | extern void init_leds(void); | ||
| 114 | |||
| 115 | extern const char bfin_board_name[]; | 108 | extern const char bfin_board_name[]; |
| 116 | extern unsigned long wall_jiffies; | 109 | extern unsigned long wall_jiffies; |
| 117 | 110 | ||
diff --git a/include/asm-blackfin/mach-bf527/anomaly.h b/include/asm-blackfin/mach-bf527/anomaly.h index 735fa02fafb2..4725268a5ada 100644 --- a/include/asm-blackfin/mach-bf527/anomaly.h +++ b/include/asm-blackfin/mach-bf527/anomaly.h | |||
| @@ -15,12 +15,16 @@ | |||
| 15 | 15 | ||
| 16 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ | 16 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
| 17 | #define ANOMALY_05000074 (1) | 17 | #define ANOMALY_05000074 (1) |
| 18 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | ||
| 19 | #define ANOMALY_05000119 (1) | ||
| 18 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 20 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
| 19 | #define ANOMALY_05000122 (1) | 21 | #define ANOMALY_05000122 (1) |
| 20 | /* Spurious Hardware Error from an Access in the Shadow of a Conditional Branch */ | 22 | /* Spurious Hardware Error from an Access in the Shadow of a Conditional Branch */ |
| 21 | #define ANOMALY_05000245 (1) | 23 | #define ANOMALY_05000245 (1) |
| 22 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ | 24 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ |
| 23 | #define ANOMALY_05000265 (1) | 25 | #define ANOMALY_05000265 (1) |
| 26 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | ||
| 27 | #define ANOMALY_05000312 (1) | ||
| 24 | /* Incorrect Access of OTP_STATUS During otp_write() Function */ | 28 | /* Incorrect Access of OTP_STATUS During otp_write() Function */ |
| 25 | #define ANOMALY_05000328 (1) | 29 | #define ANOMALY_05000328 (1) |
| 26 | /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */ | 30 | /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */ |
| @@ -92,7 +96,6 @@ | |||
| 92 | #define ANOMALY_05000266 (0) | 96 | #define ANOMALY_05000266 (0) |
| 93 | #define ANOMALY_05000273 (0) | 97 | #define ANOMALY_05000273 (0) |
| 94 | #define ANOMALY_05000311 (0) | 98 | #define ANOMALY_05000311 (0) |
| 95 | #define ANOMALY_05000312 (0) | ||
| 96 | #define ANOMALY_05000323 (0) | 99 | #define ANOMALY_05000323 (0) |
| 97 | #define ANOMALY_05000363 (0) | 100 | #define ANOMALY_05000363 (0) |
| 98 | 101 | ||
diff --git a/include/asm-blackfin/mach-bf533/anomaly.h b/include/asm-blackfin/mach-bf533/anomaly.h index 5a6dcc5fa36c..8f7ea112fd3a 100644 --- a/include/asm-blackfin/mach-bf533/anomaly.h +++ b/include/asm-blackfin/mach-bf533/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf533/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf533/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -176,6 +176,21 @@ | |||
| 176 | #define ANOMALY_05000315 (1) | 176 | #define ANOMALY_05000315 (1) |
| 177 | /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */ | 177 | /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */ |
| 178 | #define ANOMALY_05000319 (ANOMALY_BF531 || ANOMALY_BF532) | 178 | #define ANOMALY_05000319 (ANOMALY_BF531 || ANOMALY_BF532) |
| 179 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | ||
| 180 | #define ANOMALY_05000357 (1) | ||
| 181 | /* UART Break Signal Issues */ | ||
| 182 | #define ANOMALY_05000363 (__SILICON_REVISION__ < 5) | ||
| 183 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | ||
| 184 | #define ANOMALY_05000366 (1) | ||
| 185 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
| 186 | #define ANOMALY_05000371 (1) | ||
| 187 | /* PPI Does Not Start Properly In Specific Mode */ | ||
| 188 | #define ANOMALY_05000400 (__SILICON_REVISION__ >= 5) | ||
| 189 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | ||
| 190 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 5) | ||
| 191 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
| 192 | #define ANOMALY_05000403 (1) | ||
| 193 | |||
| 179 | 194 | ||
| 180 | /* These anomalies have been "phased" out of analog.com anomaly sheets and are | 195 | /* These anomalies have been "phased" out of analog.com anomaly sheets and are |
| 181 | * here to show running on older silicon just isn't feasible. | 196 | * here to show running on older silicon just isn't feasible. |
| @@ -249,20 +264,6 @@ | |||
| 249 | #define ANOMALY_05000192 (__SILICON_REVISION__ < 3) | 264 | #define ANOMALY_05000192 (__SILICON_REVISION__ < 3) |
| 250 | /* Internal Voltage Regulator may not start up */ | 265 | /* Internal Voltage Regulator may not start up */ |
| 251 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) | 266 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) |
| 252 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | ||
| 253 | #define ANOMALY_05000357 (1) | ||
| 254 | /* UART Break Signal Issues */ | ||
| 255 | #define ANOMALY_05000363 (__SILICON_REVISION__ < 5) | ||
| 256 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | ||
| 257 | #define ANOMALY_05000366 (1) | ||
| 258 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
| 259 | #define ANOMALY_05000371 (1) | ||
| 260 | /* PPI Does Not Start Properly In Specific Mode */ | ||
| 261 | #define ANOMALY_05000400 (__SILICON_REVISION__ == 5) | ||
| 262 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | ||
| 263 | #define ANOMALY_05000402 (__SILICON_REVISION__ == 5) | ||
| 264 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
| 265 | #define ANOMALY_05000403 (1) | ||
| 266 | 267 | ||
| 267 | /* Anomalies that don't exist on this proc */ | 268 | /* Anomalies that don't exist on this proc */ |
| 268 | #define ANOMALY_05000266 (0) | 269 | #define ANOMALY_05000266 (0) |
diff --git a/include/asm-blackfin/mach-bf537/anomaly.h b/include/asm-blackfin/mach-bf537/anomaly.h index a6b08facb242..8460ab9c324f 100644 --- a/include/asm-blackfin/mach-bf537/anomaly.h +++ b/include/asm-blackfin/mach-bf537/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf537/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf537/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -132,8 +132,8 @@ | |||
| 132 | #define ANOMALY_05000322 (1) | 132 | #define ANOMALY_05000322 (1) |
| 133 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ | 133 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ |
| 134 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) | 134 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) |
| 135 | /* New Feature: UART Remains Enabled after UART Boot (Not Available on Older Silicon) */ | 135 | /* New Feature: UART Remains Enabled after UART Boot */ |
| 136 | #define ANOMALY_05000350 (__SILICON_REVISION__ < 3) | 136 | #define ANOMALY_05000350 (__SILICON_REVISION__ >= 3) |
| 137 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ | 137 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ |
| 138 | #define ANOMALY_05000355 (1) | 138 | #define ANOMALY_05000355 (1) |
| 139 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | 139 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ |
| @@ -145,12 +145,10 @@ | |||
| 145 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | 145 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ |
| 146 | #define ANOMALY_05000371 (1) | 146 | #define ANOMALY_05000371 (1) |
| 147 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | 147 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ |
| 148 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 3) | 148 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 5) |
| 149 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | 149 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ |
| 150 | #define ANOMALY_05000403 (1) | 150 | #define ANOMALY_05000403 (1) |
| 151 | 151 | ||
| 152 | |||
| 153 | |||
| 154 | /* Anomalies that don't exist on this proc */ | 152 | /* Anomalies that don't exist on this proc */ |
| 155 | #define ANOMALY_05000125 (0) | 153 | #define ANOMALY_05000125 (0) |
| 156 | #define ANOMALY_05000158 (0) | 154 | #define ANOMALY_05000158 (0) |
diff --git a/include/asm-blackfin/mach-bf548/anomaly.h b/include/asm-blackfin/mach-bf548/anomaly.h index 49d3cebc5293..3ad59655881a 100644 --- a/include/asm-blackfin/mach-bf548/anomaly.h +++ b/include/asm-blackfin/mach-bf548/anomaly.h | |||
| @@ -75,6 +75,8 @@ | |||
| 75 | #define ANOMALY_05000365 (1) | 75 | #define ANOMALY_05000365 (1) |
| 76 | /* Addressing Conflict between Boot ROM and Asynchronous Memory */ | 76 | /* Addressing Conflict between Boot ROM and Asynchronous Memory */ |
| 77 | #define ANOMALY_05000369 (1) | 77 | #define ANOMALY_05000369 (1) |
| 78 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
| 79 | #define ANOMALY_05000371 (1) | ||
| 78 | /* Mobile DDR Operation Not Functional */ | 80 | /* Mobile DDR Operation Not Functional */ |
| 79 | #define ANOMALY_05000377 (1) | 81 | #define ANOMALY_05000377 (1) |
| 80 | /* Security/Authentication Speedpath Causes Authentication To Fail To Initiate */ | 82 | /* Security/Authentication Speedpath Causes Authentication To Fail To Initiate */ |
diff --git a/include/asm-blackfin/mach-bf561/anomaly.h b/include/asm-blackfin/mach-bf561/anomaly.h index 82157caa96a2..5c5d7d7d695f 100644 --- a/include/asm-blackfin/mach-bf561/anomaly.h +++ b/include/asm-blackfin/mach-bf561/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf561/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf561/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
diff --git a/include/asm-frv/mem-layout.h b/include/asm-frv/mem-layout.h index 734a1d0583b6..2947764fc0e0 100644 --- a/include/asm-frv/mem-layout.h +++ b/include/asm-frv/mem-layout.h | |||
| @@ -31,6 +31,13 @@ | |||
| 31 | 31 | ||
| 32 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 32 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
| 33 | 33 | ||
| 34 | /* | ||
| 35 | * the slab must be aligned such that load- and store-double instructions don't | ||
| 36 | * fault if used | ||
| 37 | */ | ||
| 38 | #define ARCH_KMALLOC_MINALIGN 8 | ||
| 39 | #define ARCH_SLAB_MINALIGN 8 | ||
| 40 | |||
| 34 | /*****************************************************************************/ | 41 | /*****************************************************************************/ |
| 35 | /* | 42 | /* |
| 36 | * virtual memory layout from kernel's point of view | 43 | * virtual memory layout from kernel's point of view |
diff --git a/include/asm-ia64/patch.h b/include/asm-ia64/patch.h index a71543084fb4..295fe6ab4584 100644 --- a/include/asm-ia64/patch.h +++ b/include/asm-ia64/patch.h | |||
| @@ -21,6 +21,7 @@ extern void ia64_patch_imm60 (u64 insn_addr, u64 val); /* patch "brl" w/ip-rel | |||
| 21 | extern void ia64_patch_mckinley_e9 (unsigned long start, unsigned long end); | 21 | extern void ia64_patch_mckinley_e9 (unsigned long start, unsigned long end); |
| 22 | extern void ia64_patch_vtop (unsigned long start, unsigned long end); | 22 | extern void ia64_patch_vtop (unsigned long start, unsigned long end); |
| 23 | extern void ia64_patch_phys_stack_reg(unsigned long val); | 23 | extern void ia64_patch_phys_stack_reg(unsigned long val); |
| 24 | extern void ia64_patch_rse (unsigned long start, unsigned long end); | ||
| 24 | extern void ia64_patch_gate (void); | 25 | extern void ia64_patch_gate (void); |
| 25 | 26 | ||
| 26 | #endif /* _ASM_IA64_PATCH_H */ | 27 | #endif /* _ASM_IA64_PATCH_H */ |
diff --git a/include/asm-ia64/ptrace.h b/include/asm-ia64/ptrace.h index 4b2a8d40ebc5..15f8dcfe6eee 100644 --- a/include/asm-ia64/ptrace.h +++ b/include/asm-ia64/ptrace.h | |||
| @@ -76,7 +76,7 @@ | |||
| 76 | # define KERNEL_STACK_SIZE_ORDER 0 | 76 | # define KERNEL_STACK_SIZE_ORDER 0 |
| 77 | #endif | 77 | #endif |
| 78 | 78 | ||
| 79 | #define IA64_RBS_OFFSET ((IA64_TASK_SIZE + IA64_THREAD_INFO_SIZE + 15) & ~15) | 79 | #define IA64_RBS_OFFSET ((IA64_TASK_SIZE + IA64_THREAD_INFO_SIZE + 31) & ~31) |
| 80 | #define IA64_STK_OFFSET ((1 << KERNEL_STACK_SIZE_ORDER)*PAGE_SIZE) | 80 | #define IA64_STK_OFFSET ((1 << KERNEL_STACK_SIZE_ORDER)*PAGE_SIZE) |
| 81 | 81 | ||
| 82 | #define KERNEL_STACK_SIZE IA64_STK_OFFSET | 82 | #define KERNEL_STACK_SIZE IA64_STK_OFFSET |
diff --git a/include/asm-ia64/sections.h b/include/asm-ia64/sections.h index dc42a359894f..7286e4a9fe84 100644 --- a/include/asm-ia64/sections.h +++ b/include/asm-ia64/sections.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; | 11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; |
| 12 | extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; | 12 | extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; |
| 13 | extern char __start___rse_patchlist[], __end___rse_patchlist[]; | ||
| 13 | extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; | 14 | extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; |
| 14 | extern char __start___phys_stack_reg_patchlist[], __end___phys_stack_reg_patchlist[]; | 15 | extern char __start___phys_stack_reg_patchlist[], __end___phys_stack_reg_patchlist[]; |
| 15 | extern char __start_gate_section[]; | 16 | extern char __start_gate_section[]; |
diff --git a/include/asm-mn10300/ipcbuf.h b/include/asm-mn10300/ipcbuf.h index efbbef8d1c69..f6f63d448272 100644 --- a/include/asm-mn10300/ipcbuf.h +++ b/include/asm-mn10300/ipcbuf.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | #ifndef _ASM_IPCBUF_H_ | 1 | #ifndef _ASM_IPCBUF_H |
| 2 | #define _ASM_IPCBUF_H | 2 | #define _ASM_IPCBUF_H |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index e0062d73db1c..89189488e286 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
| @@ -100,7 +100,7 @@ static inline type name(const volatile type __iomem *addr) \ | |||
| 100 | { \ | 100 | { \ |
| 101 | type ret; \ | 101 | type ret; \ |
| 102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ | 102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ |
| 103 | : "=r" (ret) : "r" (addr), "m" (*addr)); \ | 103 | : "=r" (ret) : "r" (addr), "m" (*addr) : "memory"); \ |
| 104 | return ret; \ | 104 | return ret; \ |
| 105 | } | 105 | } |
| 106 | 106 | ||
| @@ -108,8 +108,8 @@ static inline type name(const volatile type __iomem *addr) \ | |||
| 108 | static inline void name(volatile type __iomem *addr, type val) \ | 108 | static inline void name(volatile type __iomem *addr, type val) \ |
| 109 | { \ | 109 | { \ |
| 110 | __asm__ __volatile__("sync;" insn \ | 110 | __asm__ __volatile__("sync;" insn \ |
| 111 | : "=m" (*addr) : "r" (val), "r" (addr)); \ | 111 | : "=m" (*addr) : "r" (val), "r" (addr) : "memory"); \ |
| 112 | IO_SET_SYNC_FLAG(); \ | 112 | IO_SET_SYNC_FLAG(); \ |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | 115 | ||
| @@ -333,7 +333,8 @@ static inline unsigned int name(unsigned int port) \ | |||
| 333 | " .long 3b,5b\n" \ | 333 | " .long 3b,5b\n" \ |
| 334 | ".previous" \ | 334 | ".previous" \ |
| 335 | : "=&r" (x) \ | 335 | : "=&r" (x) \ |
| 336 | : "r" (port + _IO_BASE)); \ | 336 | : "r" (port + _IO_BASE) \ |
| 337 | : "memory"); \ | ||
| 337 | return x; \ | 338 | return x; \ |
| 338 | } | 339 | } |
| 339 | 340 | ||
| @@ -350,7 +351,8 @@ static inline void name(unsigned int val, unsigned int port) \ | |||
| 350 | " .long 0b,2b\n" \ | 351 | " .long 0b,2b\n" \ |
| 351 | " .long 1b,2b\n" \ | 352 | " .long 1b,2b\n" \ |
| 352 | ".previous" \ | 353 | ".previous" \ |
| 353 | : : "r" (val), "r" (port + _IO_BASE)); \ | 354 | : : "r" (val), "r" (port + _IO_BASE) \ |
| 355 | : "memory"); \ | ||
| 354 | } | 356 | } |
| 355 | 357 | ||
| 356 | __do_in_asm(_rec_inb, "lbzx") | 358 | __do_in_asm(_rec_inb, "lbzx") |
diff --git a/include/asm-s390/types.h b/include/asm-s390/types.h index 0e959e20e9a3..41c547656130 100644 --- a/include/asm-s390/types.h +++ b/include/asm-s390/types.h | |||
| @@ -40,7 +40,13 @@ typedef __signed__ long saddr_t; | |||
| 40 | 40 | ||
| 41 | #ifndef __ASSEMBLY__ | 41 | #ifndef __ASSEMBLY__ |
| 42 | 42 | ||
| 43 | typedef u64 dma64_addr_t; | ||
| 44 | #ifdef __s390x__ | ||
| 45 | /* DMA addresses come in 32-bit and 64-bit flavours. */ | ||
| 46 | typedef u64 dma_addr_t; | ||
| 47 | #else | ||
| 43 | typedef u32 dma_addr_t; | 48 | typedef u32 dma_addr_t; |
| 49 | #endif | ||
| 44 | 50 | ||
| 45 | #ifndef __s390x__ | 51 | #ifndef __s390x__ |
| 46 | typedef union { | 52 | typedef union { |
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h index d8a56cddf7f2..b163da79bb6d 100644 --- a/include/asm-sparc64/ptrace.h +++ b/include/asm-sparc64/ptrace.h | |||
| @@ -126,6 +126,8 @@ struct sparc_trapf { | |||
| 126 | #define TRACEREG32_SZ sizeof(struct pt_regs32) | 126 | #define TRACEREG32_SZ sizeof(struct pt_regs32) |
| 127 | #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) | 127 | #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) |
| 128 | 128 | ||
| 129 | #ifdef __KERNEL__ | ||
| 130 | |||
| 129 | struct global_reg_snapshot { | 131 | struct global_reg_snapshot { |
| 130 | unsigned long tstate; | 132 | unsigned long tstate; |
| 131 | unsigned long tpc; | 133 | unsigned long tpc; |
| @@ -137,8 +139,6 @@ struct global_reg_snapshot { | |||
| 137 | unsigned long pad2; | 139 | unsigned long pad2; |
| 138 | }; | 140 | }; |
| 139 | 141 | ||
| 140 | #ifdef __KERNEL__ | ||
| 141 | |||
| 142 | #define __ARCH_WANT_COMPAT_SYS_PTRACE | 142 | #define __ARCH_WANT_COMPAT_SYS_PTRACE |
| 143 | 143 | ||
| 144 | #define force_successful_syscall_return() \ | 144 | #define force_successful_syscall_return() \ |
| @@ -306,6 +306,8 @@ extern void __show_regs(struct pt_regs *); | |||
| 306 | #define SF_XARG5 0x58 | 306 | #define SF_XARG5 0x58 |
| 307 | #define SF_XXARG 0x5c | 307 | #define SF_XXARG 0x5c |
| 308 | 308 | ||
| 309 | #ifdef __KERNEL__ | ||
| 310 | |||
| 309 | /* global_reg_snapshot offsets */ | 311 | /* global_reg_snapshot offsets */ |
| 310 | #define GR_SNAP_TSTATE 0x00 | 312 | #define GR_SNAP_TSTATE 0x00 |
| 311 | #define GR_SNAP_TPC 0x08 | 313 | #define GR_SNAP_TPC 0x08 |
| @@ -316,6 +318,8 @@ extern void __show_regs(struct pt_regs *); | |||
| 316 | #define GR_SNAP_PAD1 0x30 | 318 | #define GR_SNAP_PAD1 0x30 |
| 317 | #define GR_SNAP_PAD2 0x38 | 319 | #define GR_SNAP_PAD2 0x38 |
| 318 | 320 | ||
| 321 | #endif /* __KERNEL__ */ | ||
| 322 | |||
| 319 | /* Stuff for the ptrace system call */ | 323 | /* Stuff for the ptrace system call */ |
| 320 | #define PTRACE_SPARC_DETACH 11 | 324 | #define PTRACE_SPARC_DETACH 11 |
| 321 | #define PTRACE_GETREGS 12 | 325 | #define PTRACE_GETREGS 12 |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index cfc3147e5cf9..e3ef903aae88 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -55,6 +55,7 @@ enum blktrace_act { | |||
| 55 | enum blktrace_notify { | 55 | enum blktrace_notify { |
| 56 | __BLK_TN_PROCESS = 0, /* establish pid/name mapping */ | 56 | __BLK_TN_PROCESS = 0, /* establish pid/name mapping */ |
| 57 | __BLK_TN_TIMESTAMP, /* include system clock */ | 57 | __BLK_TN_TIMESTAMP, /* include system clock */ |
| 58 | __BLK_TN_MESSAGE, /* Character string message */ | ||
| 58 | }; | 59 | }; |
| 59 | 60 | ||
| 60 | 61 | ||
| @@ -79,6 +80,7 @@ enum blktrace_notify { | |||
| 79 | 80 | ||
| 80 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) | 81 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) |
| 81 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) | 82 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) |
| 83 | #define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY)) | ||
| 82 | 84 | ||
| 83 | #define BLK_IO_TRACE_MAGIC 0x65617400 | 85 | #define BLK_IO_TRACE_MAGIC 0x65617400 |
| 84 | #define BLK_IO_TRACE_VERSION 0x07 | 86 | #define BLK_IO_TRACE_VERSION 0x07 |
| @@ -119,6 +121,7 @@ struct blk_trace { | |||
| 119 | int trace_state; | 121 | int trace_state; |
| 120 | struct rchan *rchan; | 122 | struct rchan *rchan; |
| 121 | unsigned long *sequence; | 123 | unsigned long *sequence; |
| 124 | unsigned char *msg_data; | ||
| 122 | u16 act_mask; | 125 | u16 act_mask; |
| 123 | u64 start_lba; | 126 | u64 start_lba; |
| 124 | u64 end_lba; | 127 | u64 end_lba; |
| @@ -149,7 +152,28 @@ extern void blk_trace_shutdown(struct request_queue *); | |||
| 149 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); | 152 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); |
| 150 | extern int do_blk_trace_setup(struct request_queue *q, | 153 | extern int do_blk_trace_setup(struct request_queue *q, |
| 151 | char *name, dev_t dev, struct blk_user_trace_setup *buts); | 154 | char *name, dev_t dev, struct blk_user_trace_setup *buts); |
| 155 | extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); | ||
| 152 | 156 | ||
| 157 | /** | ||
| 158 | * blk_add_trace_msg - Add a (simple) message to the blktrace stream | ||
| 159 | * @q: queue the io is for | ||
| 160 | * @fmt: format to print message in | ||
| 161 | * args... Variable argument list for format | ||
| 162 | * | ||
| 163 | * Description: | ||
| 164 | * Records a (simple) message onto the blktrace stream. | ||
| 165 | * | ||
| 166 | * NOTE: BLK_TN_MAX_MSG characters are output at most. | ||
| 167 | * NOTE: Can not use 'static inline' due to presence of var args... | ||
| 168 | * | ||
| 169 | **/ | ||
| 170 | #define blk_add_trace_msg(q, fmt, ...) \ | ||
| 171 | do { \ | ||
| 172 | struct blk_trace *bt = (q)->blk_trace; \ | ||
| 173 | if (unlikely(bt)) \ | ||
| 174 | __trace_note_message(bt, fmt, ##__VA_ARGS__); \ | ||
| 175 | } while (0) | ||
| 176 | #define BLK_TN_MAX_MSG 128 | ||
| 153 | 177 | ||
| 154 | /** | 178 | /** |
| 155 | * blk_add_trace_rq - Add a trace for a request oriented action | 179 | * blk_add_trace_rq - Add a trace for a request oriented action |
| @@ -299,6 +323,8 @@ extern int blk_trace_remove(struct request_queue *q); | |||
| 299 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) | 323 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) |
| 300 | #define blk_trace_startstop(q, start) (-ENOTTY) | 324 | #define blk_trace_startstop(q, start) (-ENOTTY) |
| 301 | #define blk_trace_remove(q) (-ENOTTY) | 325 | #define blk_trace_remove(q) (-ENOTTY) |
| 326 | #define blk_add_trace_msg(q, fmt, ...) do { } while (0) | ||
| 327 | |||
| 302 | #endif /* CONFIG_BLK_DEV_IO_TRACE */ | 328 | #endif /* CONFIG_BLK_DEV_IO_TRACE */ |
| 303 | #endif /* __KERNEL__ */ | 329 | #endif /* __KERNEL__ */ |
| 304 | #endif | 330 | #endif |
diff --git a/include/linux/device.h b/include/linux/device.h index 14616e80213c..6a2d04c011bc 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -385,6 +385,9 @@ static inline const char *dev_name(struct device *dev) | |||
| 385 | return dev->bus_id; | 385 | return dev->bus_id; |
| 386 | } | 386 | } |
| 387 | 387 | ||
| 388 | extern int dev_set_name(struct device *dev, const char *name, ...) | ||
| 389 | __attribute__((format(printf, 2, 3))); | ||
| 390 | |||
| 388 | #ifdef CONFIG_NUMA | 391 | #ifdef CONFIG_NUMA |
| 389 | static inline int dev_to_node(struct device *dev) | 392 | static inline int dev_to_node(struct device *dev) |
| 390 | { | 393 | { |
diff --git a/include/linux/input.h b/include/linux/input.h index 28a094fcfe20..e075c4b762fb 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -637,7 +637,9 @@ struct input_absinfo { | |||
| 637 | #define SW_LID 0x00 /* set = lid shut */ | 637 | #define SW_LID 0x00 /* set = lid shut */ |
| 638 | #define SW_TABLET_MODE 0x01 /* set = tablet mode */ | 638 | #define SW_TABLET_MODE 0x01 /* set = tablet mode */ |
| 639 | #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ | 639 | #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ |
| 640 | #define SW_RADIO 0x03 /* set = radio enabled */ | 640 | #define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any" |
| 641 | set = radio enabled */ | ||
| 642 | #define SW_RADIO SW_RFKILL_ALL /* deprecated */ | ||
| 641 | #define SW_MAX 0x0f | 643 | #define SW_MAX 0x0f |
| 642 | #define SW_CNT (SW_MAX+1) | 644 | #define SW_CNT (SW_MAX+1) |
| 643 | 645 | ||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index d73eceaa7afb..69b2342d5ebb 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -375,7 +375,8 @@ struct virtio_device_id { | |||
| 375 | 375 | ||
| 376 | struct i2c_device_id { | 376 | struct i2c_device_id { |
| 377 | char name[I2C_NAME_SIZE]; | 377 | char name[I2C_NAME_SIZE]; |
| 378 | kernel_ulong_t driver_data; /* Data private to the driver */ | 378 | kernel_ulong_t driver_data /* Data private to the driver */ |
| 379 | __attribute__((aligned(sizeof(kernel_ulong_t)))); | ||
| 379 | }; | 380 | }; |
| 380 | 381 | ||
| 381 | 382 | ||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 2b0266484c84..f27fd2009334 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -514,12 +514,10 @@ struct net_device | |||
| 514 | #define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ | 514 | #define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ |
| 515 | #define NETIF_F_MULTI_QUEUE 16384 /* Has multiple TX/RX queues */ | 515 | #define NETIF_F_MULTI_QUEUE 16384 /* Has multiple TX/RX queues */ |
| 516 | #define NETIF_F_LRO 32768 /* large receive offload */ | 516 | #define NETIF_F_LRO 32768 /* large receive offload */ |
| 517 | #define NETIF_F_VLAN_TSO 65536 /* Supports TSO for VLANs */ | ||
| 518 | #define NETIF_F_VLAN_CSUM 131072 /* Supports TX checksumming for VLANs */ | ||
| 519 | 517 | ||
| 520 | /* Segmentation offload features */ | 518 | /* Segmentation offload features */ |
| 521 | #define NETIF_F_GSO_SHIFT 20 | 519 | #define NETIF_F_GSO_SHIFT 16 |
| 522 | #define NETIF_F_GSO_MASK 0xfff00000 | 520 | #define NETIF_F_GSO_MASK 0xffff0000 |
| 523 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) | 521 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) |
| 524 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) | 522 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) |
| 525 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) | 523 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) |
| @@ -747,6 +745,9 @@ struct net_device | |||
| 747 | /* rtnetlink link ops */ | 745 | /* rtnetlink link ops */ |
| 748 | const struct rtnl_link_ops *rtnl_link_ops; | 746 | const struct rtnl_link_ops *rtnl_link_ops; |
| 749 | 747 | ||
| 748 | /* VLAN feature mask */ | ||
| 749 | unsigned long vlan_features; | ||
| 750 | |||
| 750 | /* for setting kernel sock attribute on TCP connection setup */ | 751 | /* for setting kernel sock attribute on TCP connection setup */ |
| 751 | #define GSO_MAX_SIZE 65536 | 752 | #define GSO_MAX_SIZE 65536 |
| 752 | unsigned int gso_max_size; | 753 | unsigned int gso_max_size; |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 5395a6176f4b..ae0be3c62375 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -766,7 +766,6 @@ struct sched_domain { | |||
| 766 | struct sched_domain *child; /* bottom domain must be null terminated */ | 766 | struct sched_domain *child; /* bottom domain must be null terminated */ |
| 767 | struct sched_group *groups; /* the balancing groups of the domain */ | 767 | struct sched_group *groups; /* the balancing groups of the domain */ |
| 768 | cpumask_t span; /* span of all CPUs in this domain */ | 768 | cpumask_t span; /* span of all CPUs in this domain */ |
| 769 | int first_cpu; /* cache of the first cpu in this domain */ | ||
| 770 | unsigned long min_interval; /* Minimum balance interval ms */ | 769 | unsigned long min_interval; /* Minimum balance interval ms */ |
| 771 | unsigned long max_interval; /* Maximum balance interval ms */ | 770 | unsigned long max_interval; /* Maximum balance interval ms */ |
| 772 | unsigned int busy_factor; /* less balancing by factor if busy */ | 771 | unsigned int busy_factor; /* less balancing by factor if busy */ |
| @@ -1848,7 +1847,9 @@ extern void exit_thread(void); | |||
| 1848 | extern void exit_files(struct task_struct *); | 1847 | extern void exit_files(struct task_struct *); |
| 1849 | extern void __cleanup_signal(struct signal_struct *); | 1848 | extern void __cleanup_signal(struct signal_struct *); |
| 1850 | extern void __cleanup_sighand(struct sighand_struct *); | 1849 | extern void __cleanup_sighand(struct sighand_struct *); |
| 1850 | |||
| 1851 | extern void exit_itimers(struct signal_struct *); | 1851 | extern void exit_itimers(struct signal_struct *); |
| 1852 | extern void flush_itimer_signals(void); | ||
| 1852 | 1853 | ||
| 1853 | extern NORET_TYPE void do_group_exit(int); | 1854 | extern NORET_TYPE void do_group_exit(int); |
| 1854 | 1855 | ||
diff --git a/include/linux/topology.h b/include/linux/topology.h index 4bb7074a2c3a..24f3d2282e11 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -166,7 +166,9 @@ void arch_update_cpu_topology(void); | |||
| 166 | .busy_idx = 3, \ | 166 | .busy_idx = 3, \ |
| 167 | .idle_idx = 3, \ | 167 | .idle_idx = 3, \ |
| 168 | .flags = SD_LOAD_BALANCE \ | 168 | .flags = SD_LOAD_BALANCE \ |
| 169 | | SD_SERIALIZE, \ | 169 | | SD_BALANCE_NEWIDLE \ |
| 170 | | SD_WAKE_AFFINE \ | ||
| 171 | | SD_SERIALIZE, \ | ||
| 170 | .last_balance = jiffies, \ | 172 | .last_balance = jiffies, \ |
| 171 | .balance_interval = 64, \ | 173 | .balance_interval = 64, \ |
| 172 | } | 174 | } |
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h index d4695a3356d0..5f79a5f9de79 100644 --- a/include/linux/virtio_blk.h +++ b/include/linux/virtio_blk.h | |||
| @@ -10,18 +10,19 @@ | |||
| 10 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ | 10 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ |
| 11 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ | 11 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ |
| 12 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ | 12 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ |
| 13 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ | ||
| 13 | 14 | ||
| 14 | struct virtio_blk_config | 15 | struct virtio_blk_config |
| 15 | { | 16 | { |
| 16 | /* The capacity (in 512-byte sectors). */ | 17 | /* The capacity (in 512-byte sectors). */ |
| 17 | __le64 capacity; | 18 | __u64 capacity; |
| 18 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ | 19 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ |
| 19 | __le32 size_max; | 20 | __u32 size_max; |
| 20 | /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ | 21 | /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ |
| 21 | __le32 seg_max; | 22 | __u32 seg_max; |
| 22 | /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ | 23 | /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ |
| 23 | struct virtio_blk_geometry { | 24 | struct virtio_blk_geometry { |
| 24 | __le16 cylinders; | 25 | __u16 cylinders; |
| 25 | __u8 heads; | 26 | __u8 heads; |
| 26 | __u8 sectors; | 27 | __u8 sectors; |
| 27 | } geometry; | 28 | } geometry; |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 50db245c81ad..f364bbf63c34 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -15,6 +15,10 @@ | |||
| 15 | /* We've given up on this device. */ | 15 | /* We've given up on this device. */ |
| 16 | #define VIRTIO_CONFIG_S_FAILED 0x80 | 16 | #define VIRTIO_CONFIG_S_FAILED 0x80 |
| 17 | 17 | ||
| 18 | /* Do we get callbacks when the ring is completely used, even if we've | ||
| 19 | * suppressed them? */ | ||
| 20 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 | ||
| 21 | |||
| 18 | #ifdef __KERNEL__ | 22 | #ifdef __KERNEL__ |
| 19 | #include <linux/virtio.h> | 23 | #include <linux/virtio.h> |
| 20 | 24 | ||
| @@ -99,7 +103,7 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev, | |||
| 99 | * The return value is -ENOENT if the feature doesn't exist. Otherwise | 103 | * The return value is -ENOENT if the feature doesn't exist. Otherwise |
| 100 | * the config value is copied into whatever is pointed to by v. */ | 104 | * the config value is copied into whatever is pointed to by v. */ |
| 101 | #define virtio_config_val(vdev, fbit, offset, v) \ | 105 | #define virtio_config_val(vdev, fbit, offset, v) \ |
| 102 | virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(v)) | 106 | virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(*v)) |
| 103 | 107 | ||
| 104 | static inline int virtio_config_buf(struct virtio_device *vdev, | 108 | static inline int virtio_config_buf(struct virtio_device *vdev, |
| 105 | unsigned int fbit, | 109 | unsigned int fbit, |
diff --git a/include/linux/virtio_rng.h b/include/linux/virtio_rng.h new file mode 100644 index 000000000000..331afb6c9f62 --- /dev/null +++ b/include/linux/virtio_rng.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef _LINUX_VIRTIO_RNG_H | ||
| 2 | #define _LINUX_VIRTIO_RNG_H | ||
| 3 | #include <linux/virtio_config.h> | ||
| 4 | |||
| 5 | /* The ID for virtio_rng */ | ||
| 6 | #define VIRTIO_ID_RNG 4 | ||
| 7 | |||
| 8 | #endif /* _LINUX_VIRTIO_RNG_H */ | ||
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h index 4d13732e9cf0..6f69968eab24 100644 --- a/include/linux/wm97xx.h +++ b/include/linux/wm97xx.h | |||
| @@ -100,6 +100,7 @@ | |||
| 100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ | 100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ |
| 101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ | 101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ |
| 102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ | 102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ |
| 103 | #define WM9713_45W 0x1000 /* set for 5 wire panel */ | ||
| 103 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ | 104 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ |
| 104 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ | 105 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ |
| 105 | #define WM9713_WAIT 0x0200 /* coordinate wait */ | 106 | #define WM9713_WAIT 0x0200 /* coordinate wait */ |
diff --git a/include/net/netlink.h b/include/net/netlink.h index a5506c42f03c..112dcdf7e34e 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
| @@ -772,12 +772,13 @@ static inline int __nla_parse_nested_compat(struct nlattr *tb[], int maxtype, | |||
| 772 | const struct nla_policy *policy, | 772 | const struct nla_policy *policy, |
| 773 | int len) | 773 | int len) |
| 774 | { | 774 | { |
| 775 | if (nla_len(nla) < len) | 775 | int nested_len = nla_len(nla) - NLA_ALIGN(len); |
| 776 | |||
| 777 | if (nested_len < 0) | ||
| 776 | return -1; | 778 | return -1; |
| 777 | if (nla_len(nla) >= NLA_ALIGN(len) + sizeof(struct nlattr)) | 779 | if (nested_len >= nla_attr_size(0)) |
| 778 | return nla_parse_nested(tb, maxtype, | 780 | return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len), |
| 779 | nla_data(nla) + NLA_ALIGN(len), | 781 | nested_len, policy); |
| 780 | policy); | ||
| 781 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); | 782 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); |
| 782 | return 0; | 783 | return 0; |
| 783 | } | 784 | } |
diff --git a/kernel/relay.c b/kernel/relay.c index bc24dcdc570f..7de644cdec43 100644 --- a/kernel/relay.c +++ b/kernel/relay.c | |||
| @@ -1191,7 +1191,7 @@ static ssize_t relay_file_splice_read(struct file *in, | |||
| 1191 | ret = 0; | 1191 | ret = 0; |
| 1192 | spliced = 0; | 1192 | spliced = 0; |
| 1193 | 1193 | ||
| 1194 | while (len) { | 1194 | while (len && !spliced) { |
| 1195 | ret = subbuf_splice_actor(in, ppos, pipe, len, flags, &nonpad_ret); | 1195 | ret = subbuf_splice_actor(in, ppos, pipe, len, flags, &nonpad_ret); |
| 1196 | if (ret < 0) | 1196 | if (ret < 0) |
| 1197 | break; | 1197 | break; |
diff --git a/kernel/sched.c b/kernel/sched.c index cfa222a91539..bfb8ad8ed171 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -136,7 +136,7 @@ static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val) | |||
| 136 | 136 | ||
| 137 | static inline int rt_policy(int policy) | 137 | static inline int rt_policy(int policy) |
| 138 | { | 138 | { |
| 139 | if (unlikely(policy == SCHED_FIFO) || unlikely(policy == SCHED_RR)) | 139 | if (unlikely(policy == SCHED_FIFO || policy == SCHED_RR)) |
| 140 | return 1; | 140 | return 1; |
| 141 | return 0; | 141 | return 0; |
| 142 | } | 142 | } |
| @@ -398,43 +398,6 @@ struct cfs_rq { | |||
| 398 | */ | 398 | */ |
| 399 | struct list_head leaf_cfs_rq_list; | 399 | struct list_head leaf_cfs_rq_list; |
| 400 | struct task_group *tg; /* group that "owns" this runqueue */ | 400 | struct task_group *tg; /* group that "owns" this runqueue */ |
| 401 | |||
| 402 | #ifdef CONFIG_SMP | ||
| 403 | unsigned long task_weight; | ||
| 404 | unsigned long shares; | ||
| 405 | /* | ||
| 406 | * We need space to build a sched_domain wide view of the full task | ||
| 407 | * group tree, in order to avoid depending on dynamic memory allocation | ||
| 408 | * during the load balancing we place this in the per cpu task group | ||
| 409 | * hierarchy. This limits the load balancing to one instance per cpu, | ||
| 410 | * but more should not be needed anyway. | ||
| 411 | */ | ||
| 412 | struct aggregate_struct { | ||
| 413 | /* | ||
| 414 | * load = weight(cpus) * f(tg) | ||
| 415 | * | ||
| 416 | * Where f(tg) is the recursive weight fraction assigned to | ||
| 417 | * this group. | ||
| 418 | */ | ||
| 419 | unsigned long load; | ||
| 420 | |||
| 421 | /* | ||
| 422 | * part of the group weight distributed to this span. | ||
| 423 | */ | ||
| 424 | unsigned long shares; | ||
| 425 | |||
| 426 | /* | ||
| 427 | * The sum of all runqueue weights within this span. | ||
| 428 | */ | ||
| 429 | unsigned long rq_weight; | ||
| 430 | |||
| 431 | /* | ||
| 432 | * Weight contributed by tasks; this is the part we can | ||
| 433 | * influence by moving tasks around. | ||
| 434 | */ | ||
| 435 | unsigned long task_weight; | ||
| 436 | } aggregate; | ||
| 437 | #endif | ||
| 438 | #endif | 401 | #endif |
| 439 | }; | 402 | }; |
| 440 | 403 | ||
| @@ -1368,9 +1331,6 @@ static void __resched_task(struct task_struct *p, int tif_bit) | |||
| 1368 | */ | 1331 | */ |
| 1369 | #define SRR(x, y) (((x) + (1UL << ((y) - 1))) >> (y)) | 1332 | #define SRR(x, y) (((x) + (1UL << ((y) - 1))) >> (y)) |
| 1370 | 1333 | ||
| 1371 | /* | ||
| 1372 | * delta *= weight / lw | ||
| 1373 | */ | ||
| 1374 | static unsigned long | 1334 | static unsigned long |
| 1375 | calc_delta_mine(unsigned long delta_exec, unsigned long weight, | 1335 | calc_delta_mine(unsigned long delta_exec, unsigned long weight, |
| 1376 | struct load_weight *lw) | 1336 | struct load_weight *lw) |
| @@ -1393,6 +1353,12 @@ calc_delta_mine(unsigned long delta_exec, unsigned long weight, | |||
| 1393 | return (unsigned long)min(tmp, (u64)(unsigned long)LONG_MAX); | 1353 | return (unsigned long)min(tmp, (u64)(unsigned long)LONG_MAX); |
| 1394 | } | 1354 | } |
| 1395 | 1355 | ||
| 1356 | static inline unsigned long | ||
| 1357 | calc_delta_fair(unsigned long delta_exec, struct load_weight *lw) | ||
| 1358 | { | ||
| 1359 | return calc_delta_mine(delta_exec, NICE_0_LOAD, lw); | ||
| 1360 | } | ||
| 1361 | |||
| 1396 | static inline void update_load_add(struct load_weight *lw, unsigned long inc) | 1362 | static inline void update_load_add(struct load_weight *lw, unsigned long inc) |
| 1397 | { | 1363 | { |
| 1398 | lw->weight += inc; | 1364 | lw->weight += inc; |
| @@ -1505,326 +1471,6 @@ static unsigned long source_load(int cpu, int type); | |||
| 1505 | static unsigned long target_load(int cpu, int type); | 1471 | static unsigned long target_load(int cpu, int type); |
| 1506 | static unsigned long cpu_avg_load_per_task(int cpu); | 1472 | static unsigned long cpu_avg_load_per_task(int cpu); |
| 1507 | static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); | 1473 | static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); |
| 1508 | |||
| 1509 | #ifdef CONFIG_FAIR_GROUP_SCHED | ||
| 1510 | |||
| 1511 | /* | ||
| 1512 | * Group load balancing. | ||
| 1513 | * | ||
| 1514 | * We calculate a few balance domain wide aggregate numbers; load and weight. | ||
| 1515 | * Given the pictures below, and assuming each item has equal weight: | ||
| 1516 | * | ||
| 1517 | * root 1 - thread | ||
| 1518 | * / | \ A - group | ||
| 1519 | * A 1 B | ||
| 1520 | * /|\ / \ | ||
| 1521 | * C 2 D 3 4 | ||
| 1522 | * | | | ||
| 1523 | * 5 6 | ||
| 1524 | * | ||
| 1525 | * load: | ||
| 1526 | * A and B get 1/3-rd of the total load. C and D get 1/3-rd of A's 1/3-rd, | ||
| 1527 | * which equals 1/9-th of the total load. | ||
| 1528 | * | ||
| 1529 | * shares: | ||
| 1530 | * The weight of this group on the selected cpus. | ||
| 1531 | * | ||
| 1532 | * rq_weight: | ||
| 1533 | * Direct sum of all the cpu's their rq weight, e.g. A would get 3 while | ||
| 1534 | * B would get 2. | ||
| 1535 | * | ||
| 1536 | * task_weight: | ||
| 1537 | * Part of the rq_weight contributed by tasks; all groups except B would | ||
| 1538 | * get 1, B gets 2. | ||
| 1539 | */ | ||
| 1540 | |||
| 1541 | static inline struct aggregate_struct * | ||
| 1542 | aggregate(struct task_group *tg, struct sched_domain *sd) | ||
| 1543 | { | ||
| 1544 | return &tg->cfs_rq[sd->first_cpu]->aggregate; | ||
| 1545 | } | ||
| 1546 | |||
| 1547 | typedef void (*aggregate_func)(struct task_group *, struct sched_domain *); | ||
| 1548 | |||
| 1549 | /* | ||
| 1550 | * Iterate the full tree, calling @down when first entering a node and @up when | ||
| 1551 | * leaving it for the final time. | ||
| 1552 | */ | ||
| 1553 | static | ||
| 1554 | void aggregate_walk_tree(aggregate_func down, aggregate_func up, | ||
| 1555 | struct sched_domain *sd) | ||
| 1556 | { | ||
| 1557 | struct task_group *parent, *child; | ||
| 1558 | |||
| 1559 | rcu_read_lock(); | ||
| 1560 | parent = &root_task_group; | ||
| 1561 | down: | ||
| 1562 | (*down)(parent, sd); | ||
| 1563 | list_for_each_entry_rcu(child, &parent->children, siblings) { | ||
| 1564 | parent = child; | ||
| 1565 | goto down; | ||
| 1566 | |||
| 1567 | up: | ||
| 1568 | continue; | ||
| 1569 | } | ||
| 1570 | (*up)(parent, sd); | ||
| 1571 | |||
| 1572 | child = parent; | ||
| 1573 | parent = parent->parent; | ||
| 1574 | if (parent) | ||
| 1575 | goto up; | ||
| 1576 | rcu_read_unlock(); | ||
| 1577 | } | ||
| 1578 | |||
| 1579 | /* | ||
| 1580 | * Calculate the aggregate runqueue weight. | ||
| 1581 | */ | ||
| 1582 | static | ||
| 1583 | void aggregate_group_weight(struct task_group *tg, struct sched_domain *sd) | ||
| 1584 | { | ||
| 1585 | unsigned long rq_weight = 0; | ||
| 1586 | unsigned long task_weight = 0; | ||
| 1587 | int i; | ||
| 1588 | |||
| 1589 | for_each_cpu_mask(i, sd->span) { | ||
| 1590 | rq_weight += tg->cfs_rq[i]->load.weight; | ||
| 1591 | task_weight += tg->cfs_rq[i]->task_weight; | ||
| 1592 | } | ||
| 1593 | |||
| 1594 | aggregate(tg, sd)->rq_weight = rq_weight; | ||
| 1595 | aggregate(tg, sd)->task_weight = task_weight; | ||
| 1596 | } | ||
| 1597 | |||
| 1598 | /* | ||
| 1599 | * Compute the weight of this group on the given cpus. | ||
| 1600 | */ | ||
| 1601 | static | ||
| 1602 | void aggregate_group_shares(struct task_group *tg, struct sched_domain *sd) | ||
| 1603 | { | ||
| 1604 | unsigned long shares = 0; | ||
| 1605 | int i; | ||
| 1606 | |||
| 1607 | for_each_cpu_mask(i, sd->span) | ||
| 1608 | shares += tg->cfs_rq[i]->shares; | ||
| 1609 | |||
| 1610 | if ((!shares && aggregate(tg, sd)->rq_weight) || shares > tg->shares) | ||
| 1611 | shares = tg->shares; | ||
| 1612 | |||
| 1613 | aggregate(tg, sd)->shares = shares; | ||
| 1614 | } | ||
| 1615 | |||
| 1616 | /* | ||
| 1617 | * Compute the load fraction assigned to this group, relies on the aggregate | ||
| 1618 | * weight and this group's parent's load, i.e. top-down. | ||
| 1619 | */ | ||
| 1620 | static | ||
| 1621 | void aggregate_group_load(struct task_group *tg, struct sched_domain *sd) | ||
| 1622 | { | ||
| 1623 | unsigned long load; | ||
| 1624 | |||
| 1625 | if (!tg->parent) { | ||
| 1626 | int i; | ||
| 1627 | |||
| 1628 | load = 0; | ||
| 1629 | for_each_cpu_mask(i, sd->span) | ||
| 1630 | load += cpu_rq(i)->load.weight; | ||
| 1631 | |||
| 1632 | } else { | ||
| 1633 | load = aggregate(tg->parent, sd)->load; | ||
| 1634 | |||
| 1635 | /* | ||
| 1636 | * shares is our weight in the parent's rq so | ||
| 1637 | * shares/parent->rq_weight gives our fraction of the load | ||
| 1638 | */ | ||
| 1639 | load *= aggregate(tg, sd)->shares; | ||
| 1640 | load /= aggregate(tg->parent, sd)->rq_weight + 1; | ||
| 1641 | } | ||
| 1642 | |||
| 1643 | aggregate(tg, sd)->load = load; | ||
| 1644 | } | ||
| 1645 | |||
| 1646 | static void __set_se_shares(struct sched_entity *se, unsigned long shares); | ||
| 1647 | |||
| 1648 | /* | ||
| 1649 | * Calculate and set the cpu's group shares. | ||
| 1650 | */ | ||
| 1651 | static void | ||
| 1652 | __update_group_shares_cpu(struct task_group *tg, struct sched_domain *sd, | ||
| 1653 | int tcpu) | ||
| 1654 | { | ||
| 1655 | int boost = 0; | ||
| 1656 | unsigned long shares; | ||
| 1657 | unsigned long rq_weight; | ||
| 1658 | |||
| 1659 | if (!tg->se[tcpu]) | ||
| 1660 | return; | ||
| 1661 | |||
| 1662 | rq_weight = tg->cfs_rq[tcpu]->load.weight; | ||
| 1663 | |||
| 1664 | /* | ||
| 1665 | * If there are currently no tasks on the cpu pretend there is one of | ||
| 1666 | * average load so that when a new task gets to run here it will not | ||
| 1667 | * get delayed by group starvation. | ||
| 1668 | */ | ||
| 1669 | if (!rq_weight) { | ||
| 1670 | boost = 1; | ||
| 1671 | rq_weight = NICE_0_LOAD; | ||
| 1672 | } | ||
| 1673 | |||
| 1674 | /* | ||
| 1675 | * \Sum shares * rq_weight | ||
| 1676 | * shares = ----------------------- | ||
| 1677 | * \Sum rq_weight | ||
| 1678 | * | ||
| 1679 | */ | ||
| 1680 | shares = aggregate(tg, sd)->shares * rq_weight; | ||
| 1681 | shares /= aggregate(tg, sd)->rq_weight + 1; | ||
| 1682 | |||
| 1683 | /* | ||
| 1684 | * record the actual number of shares, not the boosted amount. | ||
| 1685 | */ | ||
| 1686 | tg->cfs_rq[tcpu]->shares = boost ? 0 : shares; | ||
| 1687 | |||
| 1688 | if (shares < MIN_SHARES) | ||
| 1689 | shares = MIN_SHARES; | ||
| 1690 | else if (shares > MAX_SHARES) | ||
| 1691 | shares = MAX_SHARES; | ||
| 1692 | |||
| 1693 | __set_se_shares(tg->se[tcpu], shares); | ||
| 1694 | } | ||
| 1695 | |||
| 1696 | /* | ||
| 1697 | * Re-adjust the weights on the cpu the task came from and on the cpu the | ||
| 1698 | * task went to. | ||
| 1699 | */ | ||
| 1700 | static void | ||
| 1701 | __move_group_shares(struct task_group *tg, struct sched_domain *sd, | ||
| 1702 | int scpu, int dcpu) | ||
| 1703 | { | ||
| 1704 | unsigned long shares; | ||
| 1705 | |||
| 1706 | shares = tg->cfs_rq[scpu]->shares + tg->cfs_rq[dcpu]->shares; | ||
| 1707 | |||
| 1708 | __update_group_shares_cpu(tg, sd, scpu); | ||
| 1709 | __update_group_shares_cpu(tg, sd, dcpu); | ||
| 1710 | |||
| 1711 | /* | ||
| 1712 | * ensure we never loose shares due to rounding errors in the | ||
| 1713 | * above redistribution. | ||
| 1714 | */ | ||
| 1715 | shares -= tg->cfs_rq[scpu]->shares + tg->cfs_rq[dcpu]->shares; | ||
| 1716 | if (shares) | ||
| 1717 | tg->cfs_rq[dcpu]->shares += shares; | ||
| 1718 | } | ||
| 1719 | |||
| 1720 | /* | ||
| 1721 | * Because changing a group's shares changes the weight of the super-group | ||
| 1722 | * we need to walk up the tree and change all shares until we hit the root. | ||
| 1723 | */ | ||
| 1724 | static void | ||
| 1725 | move_group_shares(struct task_group *tg, struct sched_domain *sd, | ||
| 1726 | int scpu, int dcpu) | ||
| 1727 | { | ||
| 1728 | while (tg) { | ||
| 1729 | __move_group_shares(tg, sd, scpu, dcpu); | ||
| 1730 | tg = tg->parent; | ||
| 1731 | } | ||
| 1732 | } | ||
| 1733 | |||
| 1734 | static | ||
| 1735 | void aggregate_group_set_shares(struct task_group *tg, struct sched_domain *sd) | ||
| 1736 | { | ||
| 1737 | unsigned long shares = aggregate(tg, sd)->shares; | ||
| 1738 | int i; | ||
| 1739 | |||
| 1740 | for_each_cpu_mask(i, sd->span) { | ||
| 1741 | struct rq *rq = cpu_rq(i); | ||
| 1742 | unsigned long flags; | ||
| 1743 | |||
| 1744 | spin_lock_irqsave(&rq->lock, flags); | ||
| 1745 | __update_group_shares_cpu(tg, sd, i); | ||
| 1746 | spin_unlock_irqrestore(&rq->lock, flags); | ||
| 1747 | } | ||
| 1748 | |||
| 1749 | aggregate_group_shares(tg, sd); | ||
| 1750 | |||
| 1751 | /* | ||
| 1752 | * ensure we never loose shares due to rounding errors in the | ||
| 1753 | * above redistribution. | ||
| 1754 | */ | ||
| 1755 | shares -= aggregate(tg, sd)->shares; | ||
| 1756 | if (shares) { | ||
| 1757 | tg->cfs_rq[sd->first_cpu]->shares += shares; | ||
| 1758 | aggregate(tg, sd)->shares += shares; | ||
| 1759 | } | ||
| 1760 | } | ||
| 1761 | |||
| 1762 | /* | ||
| 1763 | * Calculate the accumulative weight and recursive load of each task group | ||
| 1764 | * while walking down the tree. | ||
| 1765 | */ | ||
| 1766 | static | ||
| 1767 | void aggregate_get_down(struct task_group *tg, struct sched_domain *sd) | ||
| 1768 | { | ||
| 1769 | aggregate_group_weight(tg, sd); | ||
| 1770 | aggregate_group_shares(tg, sd); | ||
| 1771 | aggregate_group_load(tg, sd); | ||
| 1772 | } | ||
| 1773 | |||
| 1774 | /* | ||
| 1775 | * Rebalance the cpu shares while walking back up the tree. | ||
| 1776 | */ | ||
| 1777 | static | ||
| 1778 | void aggregate_get_up(struct task_group *tg, struct sched_domain *sd) | ||
| 1779 | { | ||
| 1780 | aggregate_group_set_shares(tg, sd); | ||
| 1781 | } | ||
| 1782 | |||
| 1783 | static DEFINE_PER_CPU(spinlock_t, aggregate_lock); | ||
| 1784 | |||
| 1785 | static void __init init_aggregate(void) | ||
| 1786 | { | ||
| 1787 | int i; | ||
| 1788 | |||
| 1789 | for_each_possible_cpu(i) | ||
| 1790 | spin_lock_init(&per_cpu(aggregate_lock, i)); | ||
| 1791 | } | ||
| 1792 | |||
| 1793 | static int get_aggregate(struct sched_domain *sd) | ||
| 1794 | { | ||
| 1795 | if (!spin_trylock(&per_cpu(aggregate_lock, sd->first_cpu))) | ||
| 1796 | return 0; | ||
| 1797 | |||
| 1798 | aggregate_walk_tree(aggregate_get_down, aggregate_get_up, sd); | ||
| 1799 | return 1; | ||
| 1800 | } | ||
| 1801 | |||
| 1802 | static void put_aggregate(struct sched_domain *sd) | ||
| 1803 | { | ||
| 1804 | spin_unlock(&per_cpu(aggregate_lock, sd->first_cpu)); | ||
| 1805 | } | ||
| 1806 | |||
| 1807 | static void cfs_rq_set_shares(struct cfs_rq *cfs_rq, unsigned long shares) | ||
| 1808 | { | ||
| 1809 | cfs_rq->shares = shares; | ||
| 1810 | } | ||
| 1811 | |||
| 1812 | #else | ||
| 1813 | |||
| 1814 | static inline void init_aggregate(void) | ||
| 1815 | { | ||
| 1816 | } | ||
| 1817 | |||
| 1818 | static inline int get_aggregate(struct sched_domain *sd) | ||
| 1819 | { | ||
| 1820 | return 0; | ||
| 1821 | } | ||
| 1822 | |||
| 1823 | static inline void put_aggregate(struct sched_domain *sd) | ||
| 1824 | { | ||
| 1825 | } | ||
| 1826 | #endif | ||
| 1827 | |||
| 1828 | #else /* CONFIG_SMP */ | 1474 | #else /* CONFIG_SMP */ |
| 1829 | 1475 | ||
| 1830 | #ifdef CONFIG_FAIR_GROUP_SCHED | 1476 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| @@ -1845,14 +1491,26 @@ static void cfs_rq_set_shares(struct cfs_rq *cfs_rq, unsigned long shares) | |||
| 1845 | 1491 | ||
| 1846 | #define sched_class_highest (&rt_sched_class) | 1492 | #define sched_class_highest (&rt_sched_class) |
| 1847 | 1493 | ||
| 1848 | static void inc_nr_running(struct rq *rq) | 1494 | static inline void inc_load(struct rq *rq, const struct task_struct *p) |
| 1495 | { | ||
| 1496 | update_load_add(&rq->load, p->se.load.weight); | ||
| 1497 | } | ||
| 1498 | |||
| 1499 | static inline void dec_load(struct rq *rq, const struct task_struct *p) | ||
| 1500 | { | ||
| 1501 | update_load_sub(&rq->load, p->se.load.weight); | ||
| 1502 | } | ||
| 1503 | |||
| 1504 | static void inc_nr_running(struct task_struct *p, struct rq *rq) | ||
| 1849 | { | 1505 | { |
| 1850 | rq->nr_running++; | 1506 | rq->nr_running++; |
| 1507 | inc_load(rq, p); | ||
| 1851 | } | 1508 | } |
| 1852 | 1509 | ||
| 1853 | static void dec_nr_running(struct rq *rq) | 1510 | static void dec_nr_running(struct task_struct *p, struct rq *rq) |
| 1854 | { | 1511 | { |
| 1855 | rq->nr_running--; | 1512 | rq->nr_running--; |
| 1513 | dec_load(rq, p); | ||
| 1856 | } | 1514 | } |
| 1857 | 1515 | ||
| 1858 | static void set_load_weight(struct task_struct *p) | 1516 | static void set_load_weight(struct task_struct *p) |
| @@ -1944,7 +1602,7 @@ static void activate_task(struct rq *rq, struct task_struct *p, int wakeup) | |||
| 1944 | rq->nr_uninterruptible--; | 1602 | rq->nr_uninterruptible--; |
| 1945 | 1603 | ||
| 1946 | enqueue_task(rq, p, wakeup); | 1604 | enqueue_task(rq, p, wakeup); |
| 1947 | inc_nr_running(rq); | 1605 | inc_nr_running(p, rq); |
| 1948 | } | 1606 | } |
| 1949 | 1607 | ||
| 1950 | /* | 1608 | /* |
| @@ -1956,7 +1614,7 @@ static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep) | |||
| 1956 | rq->nr_uninterruptible++; | 1614 | rq->nr_uninterruptible++; |
| 1957 | 1615 | ||
| 1958 | dequeue_task(rq, p, sleep); | 1616 | dequeue_task(rq, p, sleep); |
| 1959 | dec_nr_running(rq); | 1617 | dec_nr_running(p, rq); |
| 1960 | } | 1618 | } |
| 1961 | 1619 | ||
| 1962 | /** | 1620 | /** |
| @@ -2609,7 +2267,7 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags) | |||
| 2609 | * management (if any): | 2267 | * management (if any): |
| 2610 | */ | 2268 | */ |
| 2611 | p->sched_class->task_new(rq, p); | 2269 | p->sched_class->task_new(rq, p); |
| 2612 | inc_nr_running(rq); | 2270 | inc_nr_running(p, rq); |
| 2613 | } | 2271 | } |
| 2614 | check_preempt_curr(rq, p); | 2272 | check_preempt_curr(rq, p); |
| 2615 | #ifdef CONFIG_SMP | 2273 | #ifdef CONFIG_SMP |
| @@ -3600,12 +3258,9 @@ static int load_balance(int this_cpu, struct rq *this_rq, | |||
| 3600 | unsigned long imbalance; | 3258 | unsigned long imbalance; |
| 3601 | struct rq *busiest; | 3259 | struct rq *busiest; |
| 3602 | unsigned long flags; | 3260 | unsigned long flags; |
| 3603 | int unlock_aggregate; | ||
| 3604 | 3261 | ||
| 3605 | cpus_setall(*cpus); | 3262 | cpus_setall(*cpus); |
| 3606 | 3263 | ||
| 3607 | unlock_aggregate = get_aggregate(sd); | ||
| 3608 | |||
| 3609 | /* | 3264 | /* |
| 3610 | * When power savings policy is enabled for the parent domain, idle | 3265 | * When power savings policy is enabled for the parent domain, idle |
| 3611 | * sibling can pick up load irrespective of busy siblings. In this case, | 3266 | * sibling can pick up load irrespective of busy siblings. In this case, |
| @@ -3721,9 +3376,8 @@ redo: | |||
| 3721 | 3376 | ||
| 3722 | if (!ld_moved && !sd_idle && sd->flags & SD_SHARE_CPUPOWER && | 3377 | if (!ld_moved && !sd_idle && sd->flags & SD_SHARE_CPUPOWER && |
| 3723 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) | 3378 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) |
| 3724 | ld_moved = -1; | 3379 | return -1; |
| 3725 | 3380 | return ld_moved; | |
| 3726 | goto out; | ||
| 3727 | 3381 | ||
| 3728 | out_balanced: | 3382 | out_balanced: |
| 3729 | schedstat_inc(sd, lb_balanced[idle]); | 3383 | schedstat_inc(sd, lb_balanced[idle]); |
| @@ -3738,13 +3392,8 @@ out_one_pinned: | |||
| 3738 | 3392 | ||
| 3739 | if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER && | 3393 | if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER && |
| 3740 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) | 3394 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) |
| 3741 | ld_moved = -1; | 3395 | return -1; |
| 3742 | else | 3396 | return 0; |
| 3743 | ld_moved = 0; | ||
| 3744 | out: | ||
| 3745 | if (unlock_aggregate) | ||
| 3746 | put_aggregate(sd); | ||
| 3747 | return ld_moved; | ||
| 3748 | } | 3397 | } |
| 3749 | 3398 | ||
| 3750 | /* | 3399 | /* |
| @@ -4430,7 +4079,7 @@ static inline void schedule_debug(struct task_struct *prev) | |||
| 4430 | * schedule() atomically, we ignore that path for now. | 4079 | * schedule() atomically, we ignore that path for now. |
| 4431 | * Otherwise, whine if we are scheduling when we should not be. | 4080 | * Otherwise, whine if we are scheduling when we should not be. |
| 4432 | */ | 4081 | */ |
| 4433 | if (unlikely(in_atomic_preempt_off()) && unlikely(!prev->exit_state)) | 4082 | if (unlikely(in_atomic_preempt_off() && !prev->exit_state)) |
| 4434 | __schedule_bug(prev); | 4083 | __schedule_bug(prev); |
| 4435 | 4084 | ||
| 4436 | profile_hit(SCHED_PROFILING, __builtin_return_address(0)); | 4085 | profile_hit(SCHED_PROFILING, __builtin_return_address(0)); |
| @@ -4931,8 +4580,10 @@ void set_user_nice(struct task_struct *p, long nice) | |||
| 4931 | goto out_unlock; | 4580 | goto out_unlock; |
| 4932 | } | 4581 | } |
| 4933 | on_rq = p->se.on_rq; | 4582 | on_rq = p->se.on_rq; |
| 4934 | if (on_rq) | 4583 | if (on_rq) { |
| 4935 | dequeue_task(rq, p, 0); | 4584 | dequeue_task(rq, p, 0); |
| 4585 | dec_load(rq, p); | ||
| 4586 | } | ||
| 4936 | 4587 | ||
| 4937 | p->static_prio = NICE_TO_PRIO(nice); | 4588 | p->static_prio = NICE_TO_PRIO(nice); |
| 4938 | set_load_weight(p); | 4589 | set_load_weight(p); |
| @@ -4942,6 +4593,7 @@ void set_user_nice(struct task_struct *p, long nice) | |||
| 4942 | 4593 | ||
| 4943 | if (on_rq) { | 4594 | if (on_rq) { |
| 4944 | enqueue_task(rq, p, 0); | 4595 | enqueue_task(rq, p, 0); |
| 4596 | inc_load(rq, p); | ||
| 4945 | /* | 4597 | /* |
| 4946 | * If the task increased its priority or is running and | 4598 | * If the task increased its priority or is running and |
| 4947 | * lowered its priority, then reschedule its CPU: | 4599 | * lowered its priority, then reschedule its CPU: |
| @@ -7316,7 +6968,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7316 | SD_INIT(sd, ALLNODES); | 6968 | SD_INIT(sd, ALLNODES); |
| 7317 | set_domain_attribute(sd, attr); | 6969 | set_domain_attribute(sd, attr); |
| 7318 | sd->span = *cpu_map; | 6970 | sd->span = *cpu_map; |
| 7319 | sd->first_cpu = first_cpu(sd->span); | ||
| 7320 | cpu_to_allnodes_group(i, cpu_map, &sd->groups, tmpmask); | 6971 | cpu_to_allnodes_group(i, cpu_map, &sd->groups, tmpmask); |
| 7321 | p = sd; | 6972 | p = sd; |
| 7322 | sd_allnodes = 1; | 6973 | sd_allnodes = 1; |
| @@ -7327,7 +6978,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7327 | SD_INIT(sd, NODE); | 6978 | SD_INIT(sd, NODE); |
| 7328 | set_domain_attribute(sd, attr); | 6979 | set_domain_attribute(sd, attr); |
| 7329 | sched_domain_node_span(cpu_to_node(i), &sd->span); | 6980 | sched_domain_node_span(cpu_to_node(i), &sd->span); |
| 7330 | sd->first_cpu = first_cpu(sd->span); | ||
| 7331 | sd->parent = p; | 6981 | sd->parent = p; |
| 7332 | if (p) | 6982 | if (p) |
| 7333 | p->child = sd; | 6983 | p->child = sd; |
| @@ -7339,7 +6989,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7339 | SD_INIT(sd, CPU); | 6989 | SD_INIT(sd, CPU); |
| 7340 | set_domain_attribute(sd, attr); | 6990 | set_domain_attribute(sd, attr); |
| 7341 | sd->span = *nodemask; | 6991 | sd->span = *nodemask; |
| 7342 | sd->first_cpu = first_cpu(sd->span); | ||
| 7343 | sd->parent = p; | 6992 | sd->parent = p; |
| 7344 | if (p) | 6993 | if (p) |
| 7345 | p->child = sd; | 6994 | p->child = sd; |
| @@ -7351,7 +7000,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7351 | SD_INIT(sd, MC); | 7000 | SD_INIT(sd, MC); |
| 7352 | set_domain_attribute(sd, attr); | 7001 | set_domain_attribute(sd, attr); |
| 7353 | sd->span = cpu_coregroup_map(i); | 7002 | sd->span = cpu_coregroup_map(i); |
| 7354 | sd->first_cpu = first_cpu(sd->span); | ||
| 7355 | cpus_and(sd->span, sd->span, *cpu_map); | 7003 | cpus_and(sd->span, sd->span, *cpu_map); |
| 7356 | sd->parent = p; | 7004 | sd->parent = p; |
| 7357 | p->child = sd; | 7005 | p->child = sd; |
| @@ -7364,7 +7012,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7364 | SD_INIT(sd, SIBLING); | 7012 | SD_INIT(sd, SIBLING); |
| 7365 | set_domain_attribute(sd, attr); | 7013 | set_domain_attribute(sd, attr); |
| 7366 | sd->span = per_cpu(cpu_sibling_map, i); | 7014 | sd->span = per_cpu(cpu_sibling_map, i); |
| 7367 | sd->first_cpu = first_cpu(sd->span); | ||
| 7368 | cpus_and(sd->span, sd->span, *cpu_map); | 7015 | cpus_and(sd->span, sd->span, *cpu_map); |
| 7369 | sd->parent = p; | 7016 | sd->parent = p; |
| 7370 | p->child = sd; | 7017 | p->child = sd; |
| @@ -7568,8 +7215,8 @@ static int build_sched_domains(const cpumask_t *cpu_map) | |||
| 7568 | 7215 | ||
| 7569 | static cpumask_t *doms_cur; /* current sched domains */ | 7216 | static cpumask_t *doms_cur; /* current sched domains */ |
| 7570 | static int ndoms_cur; /* number of sched domains in 'doms_cur' */ | 7217 | static int ndoms_cur; /* number of sched domains in 'doms_cur' */ |
| 7571 | static struct sched_domain_attr *dattr_cur; /* attribues of custom domains | 7218 | static struct sched_domain_attr *dattr_cur; |
| 7572 | in 'doms_cur' */ | 7219 | /* attribues of custom domains in 'doms_cur' */ |
| 7573 | 7220 | ||
| 7574 | /* | 7221 | /* |
| 7575 | * Special case: If a kmalloc of a doms_cur partition (array of | 7222 | * Special case: If a kmalloc of a doms_cur partition (array of |
| @@ -8034,7 +7681,6 @@ void __init sched_init(void) | |||
| 8034 | } | 7681 | } |
| 8035 | 7682 | ||
| 8036 | #ifdef CONFIG_SMP | 7683 | #ifdef CONFIG_SMP |
| 8037 | init_aggregate(); | ||
| 8038 | init_defrootdomain(); | 7684 | init_defrootdomain(); |
| 8039 | #endif | 7685 | #endif |
| 8040 | 7686 | ||
| @@ -8599,11 +8245,14 @@ void sched_move_task(struct task_struct *tsk) | |||
| 8599 | #endif | 8245 | #endif |
| 8600 | 8246 | ||
| 8601 | #ifdef CONFIG_FAIR_GROUP_SCHED | 8247 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 8602 | static void __set_se_shares(struct sched_entity *se, unsigned long shares) | 8248 | static void set_se_shares(struct sched_entity *se, unsigned long shares) |
| 8603 | { | 8249 | { |
| 8604 | struct cfs_rq *cfs_rq = se->cfs_rq; | 8250 | struct cfs_rq *cfs_rq = se->cfs_rq; |
| 8251 | struct rq *rq = cfs_rq->rq; | ||
| 8605 | int on_rq; | 8252 | int on_rq; |
| 8606 | 8253 | ||
| 8254 | spin_lock_irq(&rq->lock); | ||
| 8255 | |||
| 8607 | on_rq = se->on_rq; | 8256 | on_rq = se->on_rq; |
| 8608 | if (on_rq) | 8257 | if (on_rq) |
| 8609 | dequeue_entity(cfs_rq, se, 0); | 8258 | dequeue_entity(cfs_rq, se, 0); |
| @@ -8613,17 +8262,8 @@ static void __set_se_shares(struct sched_entity *se, unsigned long shares) | |||
| 8613 | 8262 | ||
| 8614 | if (on_rq) | 8263 | if (on_rq) |
| 8615 | enqueue_entity(cfs_rq, se, 0); | 8264 | enqueue_entity(cfs_rq, se, 0); |
| 8616 | } | ||
| 8617 | 8265 | ||
| 8618 | static void set_se_shares(struct sched_entity *se, unsigned long shares) | 8266 | spin_unlock_irq(&rq->lock); |
| 8619 | { | ||
| 8620 | struct cfs_rq *cfs_rq = se->cfs_rq; | ||
| 8621 | struct rq *rq = cfs_rq->rq; | ||
| 8622 | unsigned long flags; | ||
| 8623 | |||
| 8624 | spin_lock_irqsave(&rq->lock, flags); | ||
| 8625 | __set_se_shares(se, shares); | ||
| 8626 | spin_unlock_irqrestore(&rq->lock, flags); | ||
| 8627 | } | 8267 | } |
| 8628 | 8268 | ||
| 8629 | static DEFINE_MUTEX(shares_mutex); | 8269 | static DEFINE_MUTEX(shares_mutex); |
| @@ -8662,13 +8302,8 @@ int sched_group_set_shares(struct task_group *tg, unsigned long shares) | |||
| 8662 | * w/o tripping rebalance_share or load_balance_fair. | 8302 | * w/o tripping rebalance_share or load_balance_fair. |
| 8663 | */ | 8303 | */ |
| 8664 | tg->shares = shares; | 8304 | tg->shares = shares; |
| 8665 | for_each_possible_cpu(i) { | 8305 | for_each_possible_cpu(i) |
| 8666 | /* | ||
| 8667 | * force a rebalance | ||
| 8668 | */ | ||
| 8669 | cfs_rq_set_shares(tg->cfs_rq[i], 0); | ||
| 8670 | set_se_shares(tg->se[i], shares); | 8306 | set_se_shares(tg->se[i], shares); |
| 8671 | } | ||
| 8672 | 8307 | ||
| 8673 | /* | 8308 | /* |
| 8674 | * Enable load balance activity on this group, by inserting it back on | 8309 | * Enable load balance activity on this group, by inserting it back on |
diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c index 9c597e37f7de..ce05271219ab 100644 --- a/kernel/sched_clock.c +++ b/kernel/sched_clock.c | |||
| @@ -59,22 +59,26 @@ static inline struct sched_clock_data *cpu_sdc(int cpu) | |||
| 59 | return &per_cpu(sched_clock_data, cpu); | 59 | return &per_cpu(sched_clock_data, cpu); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | static __read_mostly int sched_clock_running; | ||
| 63 | |||
| 62 | void sched_clock_init(void) | 64 | void sched_clock_init(void) |
| 63 | { | 65 | { |
| 64 | u64 ktime_now = ktime_to_ns(ktime_get()); | 66 | u64 ktime_now = ktime_to_ns(ktime_get()); |
| 65 | u64 now = 0; | 67 | unsigned long now_jiffies = jiffies; |
| 66 | int cpu; | 68 | int cpu; |
| 67 | 69 | ||
| 68 | for_each_possible_cpu(cpu) { | 70 | for_each_possible_cpu(cpu) { |
| 69 | struct sched_clock_data *scd = cpu_sdc(cpu); | 71 | struct sched_clock_data *scd = cpu_sdc(cpu); |
| 70 | 72 | ||
| 71 | scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; | 73 | scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; |
| 72 | scd->prev_jiffies = jiffies; | 74 | scd->prev_jiffies = now_jiffies; |
| 73 | scd->prev_raw = now; | 75 | scd->prev_raw = 0; |
| 74 | scd->tick_raw = now; | 76 | scd->tick_raw = 0; |
| 75 | scd->tick_gtod = ktime_now; | 77 | scd->tick_gtod = ktime_now; |
| 76 | scd->clock = ktime_now; | 78 | scd->clock = ktime_now; |
| 77 | } | 79 | } |
| 80 | |||
| 81 | sched_clock_running = 1; | ||
| 78 | } | 82 | } |
| 79 | 83 | ||
| 80 | /* | 84 | /* |
| @@ -136,6 +140,9 @@ u64 sched_clock_cpu(int cpu) | |||
| 136 | struct sched_clock_data *scd = cpu_sdc(cpu); | 140 | struct sched_clock_data *scd = cpu_sdc(cpu); |
| 137 | u64 now, clock; | 141 | u64 now, clock; |
| 138 | 142 | ||
| 143 | if (unlikely(!sched_clock_running)) | ||
| 144 | return 0ull; | ||
| 145 | |||
| 139 | WARN_ON_ONCE(!irqs_disabled()); | 146 | WARN_ON_ONCE(!irqs_disabled()); |
| 140 | now = sched_clock(); | 147 | now = sched_clock(); |
| 141 | 148 | ||
| @@ -174,6 +181,9 @@ void sched_clock_tick(void) | |||
| 174 | struct sched_clock_data *scd = this_scd(); | 181 | struct sched_clock_data *scd = this_scd(); |
| 175 | u64 now, now_gtod; | 182 | u64 now, now_gtod; |
| 176 | 183 | ||
| 184 | if (unlikely(!sched_clock_running)) | ||
| 185 | return; | ||
| 186 | |||
| 177 | WARN_ON_ONCE(!irqs_disabled()); | 187 | WARN_ON_ONCE(!irqs_disabled()); |
| 178 | 188 | ||
| 179 | now = sched_clock(); | 189 | now = sched_clock(); |
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c index 5f06118fbc31..8bb713040ac9 100644 --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c | |||
| @@ -167,11 +167,6 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) | |||
| 167 | #endif | 167 | #endif |
| 168 | SEQ_printf(m, " .%-30s: %ld\n", "nr_spread_over", | 168 | SEQ_printf(m, " .%-30s: %ld\n", "nr_spread_over", |
| 169 | cfs_rq->nr_spread_over); | 169 | cfs_rq->nr_spread_over); |
| 170 | #ifdef CONFIG_FAIR_GROUP_SCHED | ||
| 171 | #ifdef CONFIG_SMP | ||
| 172 | SEQ_printf(m, " .%-30s: %lu\n", "shares", cfs_rq->shares); | ||
| 173 | #endif | ||
| 174 | #endif | ||
| 175 | } | 170 | } |
| 176 | 171 | ||
| 177 | static void print_cpu(struct seq_file *m, int cpu) | 172 | static void print_cpu(struct seq_file *m, int cpu) |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index e24ecd39c4b8..08ae848b71d4 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
| @@ -334,34 +334,6 @@ int sched_nr_latency_handler(struct ctl_table *table, int write, | |||
| 334 | #endif | 334 | #endif |
| 335 | 335 | ||
| 336 | /* | 336 | /* |
| 337 | * delta *= w / rw | ||
| 338 | */ | ||
| 339 | static inline unsigned long | ||
| 340 | calc_delta_weight(unsigned long delta, struct sched_entity *se) | ||
| 341 | { | ||
| 342 | for_each_sched_entity(se) { | ||
| 343 | delta = calc_delta_mine(delta, | ||
| 344 | se->load.weight, &cfs_rq_of(se)->load); | ||
| 345 | } | ||
| 346 | |||
| 347 | return delta; | ||
| 348 | } | ||
| 349 | |||
| 350 | /* | ||
| 351 | * delta *= rw / w | ||
| 352 | */ | ||
| 353 | static inline unsigned long | ||
| 354 | calc_delta_fair(unsigned long delta, struct sched_entity *se) | ||
| 355 | { | ||
| 356 | for_each_sched_entity(se) { | ||
| 357 | delta = calc_delta_mine(delta, | ||
| 358 | cfs_rq_of(se)->load.weight, &se->load); | ||
| 359 | } | ||
| 360 | |||
| 361 | return delta; | ||
| 362 | } | ||
| 363 | |||
| 364 | /* | ||
| 365 | * The idea is to set a period in which each task runs once. | 337 | * The idea is to set a period in which each task runs once. |
| 366 | * | 338 | * |
| 367 | * When there are too many tasks (sysctl_sched_nr_latency) we have to stretch | 339 | * When there are too many tasks (sysctl_sched_nr_latency) we have to stretch |
| @@ -390,54 +362,47 @@ static u64 __sched_period(unsigned long nr_running) | |||
| 390 | */ | 362 | */ |
| 391 | static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) | 363 | static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 392 | { | 364 | { |
| 393 | return calc_delta_weight(__sched_period(cfs_rq->nr_running), se); | 365 | u64 slice = __sched_period(cfs_rq->nr_running); |
| 366 | |||
| 367 | for_each_sched_entity(se) { | ||
| 368 | cfs_rq = cfs_rq_of(se); | ||
| 369 | |||
| 370 | slice *= se->load.weight; | ||
| 371 | do_div(slice, cfs_rq->load.weight); | ||
| 372 | } | ||
| 373 | |||
| 374 | |||
| 375 | return slice; | ||
| 394 | } | 376 | } |
| 395 | 377 | ||
| 396 | /* | 378 | /* |
| 397 | * We calculate the vruntime slice of a to be inserted task | 379 | * We calculate the vruntime slice of a to be inserted task |
| 398 | * | 380 | * |
| 399 | * vs = s*rw/w = p | 381 | * vs = s/w = p/rw |
| 400 | */ | 382 | */ |
| 401 | static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se) | 383 | static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 402 | { | 384 | { |
| 403 | unsigned long nr_running = cfs_rq->nr_running; | 385 | unsigned long nr_running = cfs_rq->nr_running; |
| 386 | unsigned long weight; | ||
| 387 | u64 vslice; | ||
| 404 | 388 | ||
| 405 | if (!se->on_rq) | 389 | if (!se->on_rq) |
| 406 | nr_running++; | 390 | nr_running++; |
| 407 | 391 | ||
| 408 | return __sched_period(nr_running); | 392 | vslice = __sched_period(nr_running); |
| 409 | } | ||
| 410 | |||
| 411 | /* | ||
| 412 | * The goal of calc_delta_asym() is to be asymmetrically around NICE_0_LOAD, in | ||
| 413 | * that it favours >=0 over <0. | ||
| 414 | * | ||
| 415 | * -20 | | ||
| 416 | * | | ||
| 417 | * 0 --------+------- | ||
| 418 | * .' | ||
| 419 | * 19 .' | ||
| 420 | * | ||
| 421 | */ | ||
| 422 | static unsigned long | ||
| 423 | calc_delta_asym(unsigned long delta, struct sched_entity *se) | ||
| 424 | { | ||
| 425 | struct load_weight lw = { | ||
| 426 | .weight = NICE_0_LOAD, | ||
| 427 | .inv_weight = 1UL << (WMULT_SHIFT-NICE_0_SHIFT) | ||
| 428 | }; | ||
| 429 | 393 | ||
| 430 | for_each_sched_entity(se) { | 394 | for_each_sched_entity(se) { |
| 431 | struct load_weight *se_lw = &se->load; | 395 | cfs_rq = cfs_rq_of(se); |
| 432 | 396 | ||
| 433 | if (se->load.weight < NICE_0_LOAD) | 397 | weight = cfs_rq->load.weight; |
| 434 | se_lw = &lw; | 398 | if (!se->on_rq) |
| 399 | weight += se->load.weight; | ||
| 435 | 400 | ||
| 436 | delta = calc_delta_mine(delta, | 401 | vslice *= NICE_0_LOAD; |
| 437 | cfs_rq_of(se)->load.weight, se_lw); | 402 | do_div(vslice, weight); |
| 438 | } | 403 | } |
| 439 | 404 | ||
| 440 | return delta; | 405 | return vslice; |
| 441 | } | 406 | } |
| 442 | 407 | ||
| 443 | /* | 408 | /* |
| @@ -454,7 +419,11 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr, | |||
| 454 | 419 | ||
| 455 | curr->sum_exec_runtime += delta_exec; | 420 | curr->sum_exec_runtime += delta_exec; |
| 456 | schedstat_add(cfs_rq, exec_clock, delta_exec); | 421 | schedstat_add(cfs_rq, exec_clock, delta_exec); |
| 457 | delta_exec_weighted = calc_delta_fair(delta_exec, curr); | 422 | delta_exec_weighted = delta_exec; |
| 423 | if (unlikely(curr->load.weight != NICE_0_LOAD)) { | ||
| 424 | delta_exec_weighted = calc_delta_fair(delta_exec_weighted, | ||
| 425 | &curr->load); | ||
| 426 | } | ||
| 458 | curr->vruntime += delta_exec_weighted; | 427 | curr->vruntime += delta_exec_weighted; |
| 459 | } | 428 | } |
| 460 | 429 | ||
| @@ -541,27 +510,10 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se) | |||
| 541 | * Scheduling class queueing methods: | 510 | * Scheduling class queueing methods: |
| 542 | */ | 511 | */ |
| 543 | 512 | ||
| 544 | #if defined CONFIG_SMP && defined CONFIG_FAIR_GROUP_SCHED | ||
| 545 | static void | ||
| 546 | add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight) | ||
| 547 | { | ||
| 548 | cfs_rq->task_weight += weight; | ||
| 549 | } | ||
| 550 | #else | ||
| 551 | static inline void | ||
| 552 | add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight) | ||
| 553 | { | ||
| 554 | } | ||
| 555 | #endif | ||
| 556 | |||
| 557 | static void | 513 | static void |
| 558 | account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se) | 514 | account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 559 | { | 515 | { |
| 560 | update_load_add(&cfs_rq->load, se->load.weight); | 516 | update_load_add(&cfs_rq->load, se->load.weight); |
| 561 | if (!parent_entity(se)) | ||
| 562 | inc_cpu_load(rq_of(cfs_rq), se->load.weight); | ||
| 563 | if (entity_is_task(se)) | ||
| 564 | add_cfs_task_weight(cfs_rq, se->load.weight); | ||
| 565 | cfs_rq->nr_running++; | 517 | cfs_rq->nr_running++; |
| 566 | se->on_rq = 1; | 518 | se->on_rq = 1; |
| 567 | list_add(&se->group_node, &cfs_rq->tasks); | 519 | list_add(&se->group_node, &cfs_rq->tasks); |
| @@ -571,10 +523,6 @@ static void | |||
| 571 | account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se) | 523 | account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 572 | { | 524 | { |
| 573 | update_load_sub(&cfs_rq->load, se->load.weight); | 525 | update_load_sub(&cfs_rq->load, se->load.weight); |
| 574 | if (!parent_entity(se)) | ||
| 575 | dec_cpu_load(rq_of(cfs_rq), se->load.weight); | ||
| 576 | if (entity_is_task(se)) | ||
| 577 | add_cfs_task_weight(cfs_rq, -se->load.weight); | ||
| 578 | cfs_rq->nr_running--; | 526 | cfs_rq->nr_running--; |
| 579 | se->on_rq = 0; | 527 | se->on_rq = 0; |
| 580 | list_del_init(&se->group_node); | 528 | list_del_init(&se->group_node); |
| @@ -661,17 +609,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) | |||
| 661 | 609 | ||
| 662 | if (!initial) { | 610 | if (!initial) { |
| 663 | /* sleeps upto a single latency don't count. */ | 611 | /* sleeps upto a single latency don't count. */ |
| 664 | if (sched_feat(NEW_FAIR_SLEEPERS)) { | 612 | if (sched_feat(NEW_FAIR_SLEEPERS)) |
| 665 | unsigned long thresh = sysctl_sched_latency; | 613 | vruntime -= sysctl_sched_latency; |
| 666 | |||
| 667 | /* | ||
| 668 | * convert the sleeper threshold into virtual time | ||
| 669 | */ | ||
| 670 | if (sched_feat(NORMALIZED_SLEEPER)) | ||
| 671 | thresh = calc_delta_fair(thresh, se); | ||
| 672 | |||
| 673 | vruntime -= thresh; | ||
| 674 | } | ||
| 675 | 614 | ||
| 676 | /* ensure we never gain time by being placed backwards. */ | 615 | /* ensure we never gain time by being placed backwards. */ |
| 677 | vruntime = max_vruntime(se->vruntime, vruntime); | 616 | vruntime = max_vruntime(se->vruntime, vruntime); |
| @@ -1057,16 +996,27 @@ wake_affine(struct rq *rq, struct sched_domain *this_sd, struct rq *this_rq, | |||
| 1057 | struct task_struct *curr = this_rq->curr; | 996 | struct task_struct *curr = this_rq->curr; |
| 1058 | unsigned long tl = this_load; | 997 | unsigned long tl = this_load; |
| 1059 | unsigned long tl_per_task; | 998 | unsigned long tl_per_task; |
| 999 | int balanced; | ||
| 1060 | 1000 | ||
| 1061 | if (!(this_sd->flags & SD_WAKE_AFFINE)) | 1001 | if (!(this_sd->flags & SD_WAKE_AFFINE) || !sched_feat(AFFINE_WAKEUPS)) |
| 1062 | return 0; | 1002 | return 0; |
| 1063 | 1003 | ||
| 1064 | /* | 1004 | /* |
| 1005 | * If sync wakeup then subtract the (maximum possible) | ||
| 1006 | * effect of the currently running task from the load | ||
| 1007 | * of the current CPU: | ||
| 1008 | */ | ||
| 1009 | if (sync) | ||
| 1010 | tl -= current->se.load.weight; | ||
| 1011 | |||
| 1012 | balanced = 100*(tl + p->se.load.weight) <= imbalance*load; | ||
| 1013 | |||
| 1014 | /* | ||
| 1065 | * If the currently running task will sleep within | 1015 | * If the currently running task will sleep within |
| 1066 | * a reasonable amount of time then attract this newly | 1016 | * a reasonable amount of time then attract this newly |
| 1067 | * woken task: | 1017 | * woken task: |
| 1068 | */ | 1018 | */ |
| 1069 | if (sync && curr->sched_class == &fair_sched_class) { | 1019 | if (sync && balanced && curr->sched_class == &fair_sched_class) { |
| 1070 | if (curr->se.avg_overlap < sysctl_sched_migration_cost && | 1020 | if (curr->se.avg_overlap < sysctl_sched_migration_cost && |
| 1071 | p->se.avg_overlap < sysctl_sched_migration_cost) | 1021 | p->se.avg_overlap < sysctl_sched_migration_cost) |
| 1072 | return 1; | 1022 | return 1; |
| @@ -1075,16 +1025,8 @@ wake_affine(struct rq *rq, struct sched_domain *this_sd, struct rq *this_rq, | |||
| 1075 | schedstat_inc(p, se.nr_wakeups_affine_attempts); | 1025 | schedstat_inc(p, se.nr_wakeups_affine_attempts); |
| 1076 | tl_per_task = cpu_avg_load_per_task(this_cpu); | 1026 | tl_per_task = cpu_avg_load_per_task(this_cpu); |
| 1077 | 1027 | ||
| 1078 | /* | ||
| 1079 | * If sync wakeup then subtract the (maximum possible) | ||
| 1080 | * effect of the currently running task from the load | ||
| 1081 | * of the current CPU: | ||
| 1082 | */ | ||
| 1083 | if (sync) | ||
| 1084 | tl -= current->se.load.weight; | ||
| 1085 | |||
| 1086 | if ((tl <= load && tl + target_load(prev_cpu, idx) <= tl_per_task) || | 1028 | if ((tl <= load && tl + target_load(prev_cpu, idx) <= tl_per_task) || |
| 1087 | 100*(tl + p->se.load.weight) <= imbalance*load) { | 1029 | balanced) { |
| 1088 | /* | 1030 | /* |
| 1089 | * This domain has SD_WAKE_AFFINE and | 1031 | * This domain has SD_WAKE_AFFINE and |
| 1090 | * p is cache cold in this domain, and | 1032 | * p is cache cold in this domain, and |
| @@ -1169,10 +1111,11 @@ static unsigned long wakeup_gran(struct sched_entity *se) | |||
| 1169 | unsigned long gran = sysctl_sched_wakeup_granularity; | 1111 | unsigned long gran = sysctl_sched_wakeup_granularity; |
| 1170 | 1112 | ||
| 1171 | /* | 1113 | /* |
| 1172 | * More easily preempt - nice tasks, while not making it harder for | 1114 | * More easily preempt - nice tasks, while not making |
| 1173 | * + nice tasks. | 1115 | * it harder for + nice tasks. |
| 1174 | */ | 1116 | */ |
| 1175 | gran = calc_delta_asym(sysctl_sched_wakeup_granularity, se); | 1117 | if (unlikely(se->load.weight > NICE_0_LOAD)) |
| 1118 | gran = calc_delta_fair(gran, &se->load); | ||
| 1176 | 1119 | ||
| 1177 | return gran; | 1120 | return gran; |
| 1178 | } | 1121 | } |
| @@ -1366,90 +1309,75 @@ static struct task_struct *load_balance_next_fair(void *arg) | |||
| 1366 | return __load_balance_iterator(cfs_rq, cfs_rq->balance_iterator); | 1309 | return __load_balance_iterator(cfs_rq, cfs_rq->balance_iterator); |
| 1367 | } | 1310 | } |
| 1368 | 1311 | ||
| 1369 | static unsigned long | 1312 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 1370 | __load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | 1313 | static int cfs_rq_best_prio(struct cfs_rq *cfs_rq) |
| 1371 | unsigned long max_load_move, struct sched_domain *sd, | ||
| 1372 | enum cpu_idle_type idle, int *all_pinned, int *this_best_prio, | ||
| 1373 | struct cfs_rq *cfs_rq) | ||
| 1374 | { | 1314 | { |
| 1375 | struct rq_iterator cfs_rq_iterator; | 1315 | struct sched_entity *curr; |
| 1316 | struct task_struct *p; | ||
| 1376 | 1317 | ||
| 1377 | cfs_rq_iterator.start = load_balance_start_fair; | 1318 | if (!cfs_rq->nr_running || !first_fair(cfs_rq)) |
| 1378 | cfs_rq_iterator.next = load_balance_next_fair; | 1319 | return MAX_PRIO; |
| 1379 | cfs_rq_iterator.arg = cfs_rq; | 1320 | |
| 1321 | curr = cfs_rq->curr; | ||
| 1322 | if (!curr) | ||
| 1323 | curr = __pick_next_entity(cfs_rq); | ||
| 1324 | |||
| 1325 | p = task_of(curr); | ||
| 1380 | 1326 | ||
| 1381 | return balance_tasks(this_rq, this_cpu, busiest, | 1327 | return p->prio; |
| 1382 | max_load_move, sd, idle, all_pinned, | ||
| 1383 | this_best_prio, &cfs_rq_iterator); | ||
| 1384 | } | 1328 | } |
| 1329 | #endif | ||
| 1385 | 1330 | ||
| 1386 | #ifdef CONFIG_FAIR_GROUP_SCHED | ||
| 1387 | static unsigned long | 1331 | static unsigned long |
| 1388 | load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | 1332 | load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, |
| 1389 | unsigned long max_load_move, | 1333 | unsigned long max_load_move, |
| 1390 | struct sched_domain *sd, enum cpu_idle_type idle, | 1334 | struct sched_domain *sd, enum cpu_idle_type idle, |
| 1391 | int *all_pinned, int *this_best_prio) | 1335 | int *all_pinned, int *this_best_prio) |
| 1392 | { | 1336 | { |
| 1337 | struct cfs_rq *busy_cfs_rq; | ||
| 1393 | long rem_load_move = max_load_move; | 1338 | long rem_load_move = max_load_move; |
| 1394 | int busiest_cpu = cpu_of(busiest); | 1339 | struct rq_iterator cfs_rq_iterator; |
| 1395 | struct task_group *tg; | ||
| 1396 | |||
| 1397 | rcu_read_lock(); | ||
| 1398 | list_for_each_entry(tg, &task_groups, list) { | ||
| 1399 | long imbalance; | ||
| 1400 | unsigned long this_weight, busiest_weight; | ||
| 1401 | long rem_load, max_load, moved_load; | ||
| 1402 | |||
| 1403 | /* | ||
| 1404 | * empty group | ||
| 1405 | */ | ||
| 1406 | if (!aggregate(tg, sd)->task_weight) | ||
| 1407 | continue; | ||
| 1408 | |||
| 1409 | rem_load = rem_load_move * aggregate(tg, sd)->rq_weight; | ||
| 1410 | rem_load /= aggregate(tg, sd)->load + 1; | ||
| 1411 | |||
| 1412 | this_weight = tg->cfs_rq[this_cpu]->task_weight; | ||
| 1413 | busiest_weight = tg->cfs_rq[busiest_cpu]->task_weight; | ||
| 1414 | 1340 | ||
| 1415 | imbalance = (busiest_weight - this_weight) / 2; | 1341 | cfs_rq_iterator.start = load_balance_start_fair; |
| 1342 | cfs_rq_iterator.next = load_balance_next_fair; | ||
| 1416 | 1343 | ||
| 1417 | if (imbalance < 0) | 1344 | for_each_leaf_cfs_rq(busiest, busy_cfs_rq) { |
| 1418 | imbalance = busiest_weight; | 1345 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 1346 | struct cfs_rq *this_cfs_rq; | ||
| 1347 | long imbalance; | ||
| 1348 | unsigned long maxload; | ||
| 1419 | 1349 | ||
| 1420 | max_load = max(rem_load, imbalance); | 1350 | this_cfs_rq = cpu_cfs_rq(busy_cfs_rq, this_cpu); |
| 1421 | moved_load = __load_balance_fair(this_rq, this_cpu, busiest, | ||
| 1422 | max_load, sd, idle, all_pinned, this_best_prio, | ||
| 1423 | tg->cfs_rq[busiest_cpu]); | ||
| 1424 | 1351 | ||
| 1425 | if (!moved_load) | 1352 | imbalance = busy_cfs_rq->load.weight - this_cfs_rq->load.weight; |
| 1353 | /* Don't pull if this_cfs_rq has more load than busy_cfs_rq */ | ||
| 1354 | if (imbalance <= 0) | ||
| 1426 | continue; | 1355 | continue; |
| 1427 | 1356 | ||
| 1428 | move_group_shares(tg, sd, busiest_cpu, this_cpu); | 1357 | /* Don't pull more than imbalance/2 */ |
| 1358 | imbalance /= 2; | ||
| 1359 | maxload = min(rem_load_move, imbalance); | ||
| 1429 | 1360 | ||
| 1430 | moved_load *= aggregate(tg, sd)->load; | 1361 | *this_best_prio = cfs_rq_best_prio(this_cfs_rq); |
| 1431 | moved_load /= aggregate(tg, sd)->rq_weight + 1; | 1362 | #else |
| 1363 | # define maxload rem_load_move | ||
| 1364 | #endif | ||
| 1365 | /* | ||
| 1366 | * pass busy_cfs_rq argument into | ||
| 1367 | * load_balance_[start|next]_fair iterators | ||
| 1368 | */ | ||
| 1369 | cfs_rq_iterator.arg = busy_cfs_rq; | ||
| 1370 | rem_load_move -= balance_tasks(this_rq, this_cpu, busiest, | ||
| 1371 | maxload, sd, idle, all_pinned, | ||
| 1372 | this_best_prio, | ||
| 1373 | &cfs_rq_iterator); | ||
| 1432 | 1374 | ||
| 1433 | rem_load_move -= moved_load; | 1375 | if (rem_load_move <= 0) |
| 1434 | if (rem_load_move < 0) | ||
| 1435 | break; | 1376 | break; |
| 1436 | } | 1377 | } |
| 1437 | rcu_read_unlock(); | ||
| 1438 | 1378 | ||
| 1439 | return max_load_move - rem_load_move; | 1379 | return max_load_move - rem_load_move; |
| 1440 | } | 1380 | } |
| 1441 | #else | ||
| 1442 | static unsigned long | ||
| 1443 | load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | ||
| 1444 | unsigned long max_load_move, | ||
| 1445 | struct sched_domain *sd, enum cpu_idle_type idle, | ||
| 1446 | int *all_pinned, int *this_best_prio) | ||
| 1447 | { | ||
| 1448 | return __load_balance_fair(this_rq, this_cpu, busiest, | ||
| 1449 | max_load_move, sd, idle, all_pinned, | ||
| 1450 | this_best_prio, &busiest->cfs); | ||
| 1451 | } | ||
| 1452 | #endif | ||
| 1453 | 1381 | ||
| 1454 | static int | 1382 | static int |
| 1455 | move_one_task_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | 1383 | move_one_task_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, |
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 060e87b0cb1c..3432d573205d 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
| @@ -513,8 +513,6 @@ static void enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup) | |||
| 513 | */ | 513 | */ |
| 514 | for_each_sched_rt_entity(rt_se) | 514 | for_each_sched_rt_entity(rt_se) |
| 515 | enqueue_rt_entity(rt_se); | 515 | enqueue_rt_entity(rt_se); |
| 516 | |||
| 517 | inc_cpu_load(rq, p->se.load.weight); | ||
| 518 | } | 516 | } |
| 519 | 517 | ||
| 520 | static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) | 518 | static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) |
| @@ -534,8 +532,6 @@ static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) | |||
| 534 | if (rt_rq && rt_rq->rt_nr_running) | 532 | if (rt_rq && rt_rq->rt_nr_running) |
| 535 | enqueue_rt_entity(rt_se); | 533 | enqueue_rt_entity(rt_se); |
| 536 | } | 534 | } |
| 537 | |||
| 538 | dec_cpu_load(rq, p->se.load.weight); | ||
| 539 | } | 535 | } |
| 540 | 536 | ||
| 541 | /* | 537 | /* |
diff --git a/kernel/sched_stats.h b/kernel/sched_stats.h index 5bae2e0c3ff2..a38878e0e49d 100644 --- a/kernel/sched_stats.h +++ b/kernel/sched_stats.h | |||
| @@ -67,6 +67,7 @@ static int show_schedstat(struct seq_file *seq, void *v) | |||
| 67 | preempt_enable(); | 67 | preempt_enable(); |
| 68 | #endif | 68 | #endif |
| 69 | } | 69 | } |
| 70 | kfree(mask_str); | ||
| 70 | return 0; | 71 | return 0; |
| 71 | } | 72 | } |
| 72 | 73 | ||
diff --git a/kernel/signal.c b/kernel/signal.c index 12ffea7c201d..6c0958e52ea7 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -231,6 +231,40 @@ void flush_signals(struct task_struct *t) | |||
| 231 | spin_unlock_irqrestore(&t->sighand->siglock, flags); | 231 | spin_unlock_irqrestore(&t->sighand->siglock, flags); |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | static void __flush_itimer_signals(struct sigpending *pending) | ||
| 235 | { | ||
| 236 | sigset_t signal, retain; | ||
| 237 | struct sigqueue *q, *n; | ||
| 238 | |||
| 239 | signal = pending->signal; | ||
| 240 | sigemptyset(&retain); | ||
| 241 | |||
| 242 | list_for_each_entry_safe(q, n, &pending->list, list) { | ||
| 243 | int sig = q->info.si_signo; | ||
| 244 | |||
| 245 | if (likely(q->info.si_code != SI_TIMER)) { | ||
| 246 | sigaddset(&retain, sig); | ||
| 247 | } else { | ||
| 248 | sigdelset(&signal, sig); | ||
| 249 | list_del_init(&q->list); | ||
| 250 | __sigqueue_free(q); | ||
| 251 | } | ||
| 252 | } | ||
| 253 | |||
| 254 | sigorsets(&pending->signal, &signal, &retain); | ||
| 255 | } | ||
| 256 | |||
| 257 | void flush_itimer_signals(void) | ||
| 258 | { | ||
| 259 | struct task_struct *tsk = current; | ||
| 260 | unsigned long flags; | ||
| 261 | |||
| 262 | spin_lock_irqsave(&tsk->sighand->siglock, flags); | ||
| 263 | __flush_itimer_signals(&tsk->pending); | ||
| 264 | __flush_itimer_signals(&tsk->signal->shared_pending); | ||
| 265 | spin_unlock_irqrestore(&tsk->sighand->siglock, flags); | ||
| 266 | } | ||
| 267 | |||
| 234 | void ignore_signals(struct task_struct *t) | 268 | void ignore_signals(struct task_struct *t) |
| 235 | { | 269 | { |
| 236 | int i; | 270 | int i; |
| @@ -1240,18 +1274,22 @@ void sigqueue_free(struct sigqueue *q) | |||
| 1240 | 1274 | ||
| 1241 | BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); | 1275 | BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); |
| 1242 | /* | 1276 | /* |
| 1243 | * If the signal is still pending remove it from the | 1277 | * We must hold ->siglock while testing q->list |
| 1244 | * pending queue. We must hold ->siglock while testing | 1278 | * to serialize with collect_signal() or with |
| 1245 | * q->list to serialize with collect_signal() or with | ||
| 1246 | * __exit_signal()->flush_sigqueue(). | 1279 | * __exit_signal()->flush_sigqueue(). |
| 1247 | */ | 1280 | */ |
| 1248 | spin_lock_irqsave(lock, flags); | 1281 | spin_lock_irqsave(lock, flags); |
| 1282 | q->flags &= ~SIGQUEUE_PREALLOC; | ||
| 1283 | /* | ||
| 1284 | * If it is queued it will be freed when dequeued, | ||
| 1285 | * like the "regular" sigqueue. | ||
| 1286 | */ | ||
| 1249 | if (!list_empty(&q->list)) | 1287 | if (!list_empty(&q->list)) |
| 1250 | list_del_init(&q->list); | 1288 | q = NULL; |
| 1251 | spin_unlock_irqrestore(lock, flags); | 1289 | spin_unlock_irqrestore(lock, flags); |
| 1252 | 1290 | ||
| 1253 | q->flags &= ~SIGQUEUE_PREALLOC; | 1291 | if (q) |
| 1254 | __sigqueue_free(q); | 1292 | __sigqueue_free(q); |
| 1255 | } | 1293 | } |
| 1256 | 1294 | ||
| 1257 | int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group) | 1295 | int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group) |
| @@ -469,8 +469,9 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node) | |||
| 469 | return ZERO_SIZE_PTR; | 469 | return ZERO_SIZE_PTR; |
| 470 | 470 | ||
| 471 | m = slob_alloc(size + align, gfp, align, node); | 471 | m = slob_alloc(size + align, gfp, align, node); |
| 472 | if (m) | 472 | if (!m) |
| 473 | *m = size; | 473 | return NULL; |
| 474 | *m = size; | ||
| 474 | return (void *)m + align; | 475 | return (void *)m + align; |
| 475 | } else { | 476 | } else { |
| 476 | void *ret; | 477 | void *ret; |
| @@ -2726,9 +2726,10 @@ size_t ksize(const void *object) | |||
| 2726 | 2726 | ||
| 2727 | page = virt_to_head_page(object); | 2727 | page = virt_to_head_page(object); |
| 2728 | 2728 | ||
| 2729 | if (unlikely(!PageSlab(page))) | 2729 | if (unlikely(!PageSlab(page))) { |
| 2730 | WARN_ON(!PageCompound(page)); | ||
| 2730 | return PAGE_SIZE << compound_order(page); | 2731 | return PAGE_SIZE << compound_order(page); |
| 2731 | 2732 | } | |
| 2732 | s = page->slab; | 2733 | s = page->slab; |
| 2733 | 2734 | ||
| 2734 | #ifdef CONFIG_SLUB_DEBUG | 2735 | #ifdef CONFIG_SLUB_DEBUG |
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 51961300b586..ab2225da0ee2 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
| @@ -387,14 +387,8 @@ static void vlan_transfer_features(struct net_device *dev, | |||
| 387 | { | 387 | { |
| 388 | unsigned long old_features = vlandev->features; | 388 | unsigned long old_features = vlandev->features; |
| 389 | 389 | ||
| 390 | if (dev->features & NETIF_F_VLAN_TSO) { | 390 | vlandev->features &= ~dev->vlan_features; |
| 391 | vlandev->features &= ~VLAN_TSO_FEATURES; | 391 | vlandev->features |= dev->features & dev->vlan_features; |
| 392 | vlandev->features |= dev->features & VLAN_TSO_FEATURES; | ||
| 393 | } | ||
| 394 | if (dev->features & NETIF_F_VLAN_CSUM) { | ||
| 395 | vlandev->features &= ~NETIF_F_ALL_CSUM; | ||
| 396 | vlandev->features |= dev->features & NETIF_F_ALL_CSUM; | ||
| 397 | } | ||
| 398 | 392 | ||
| 399 | if (old_features != vlandev->features) | 393 | if (old_features != vlandev->features) |
| 400 | netdev_features_change(vlandev); | 394 | netdev_features_change(vlandev); |
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 79625696e86a..5229a72c7ea1 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h | |||
| @@ -7,8 +7,6 @@ | |||
| 7 | #define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT) | 7 | #define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT) |
| 8 | #define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1) | 8 | #define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1) |
| 9 | 9 | ||
| 10 | #define VLAN_TSO_FEATURES (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG) | ||
| 11 | |||
| 12 | /* Find a VLAN device by the MAC address of its Ethernet device, and | 10 | /* Find a VLAN device by the MAC address of its Ethernet device, and |
| 13 | * it's VLAN ID. The default configuration is to have VLAN's scope | 11 | * it's VLAN ID. The default configuration is to have VLAN's scope |
| 14 | * to be box-wide, so the MAC will be ignored. The mac will only be | 12 | * to be box-wide, so the MAC will be ignored. The mac will only be |
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index b1cfbaa88db2..5d055c242ed8 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
| @@ -663,10 +663,7 @@ static int vlan_dev_init(struct net_device *dev) | |||
| 663 | (1<<__LINK_STATE_DORMANT))) | | 663 | (1<<__LINK_STATE_DORMANT))) | |
| 664 | (1<<__LINK_STATE_PRESENT); | 664 | (1<<__LINK_STATE_PRESENT); |
| 665 | 665 | ||
| 666 | if (real_dev->features & NETIF_F_VLAN_TSO) | 666 | dev->features |= real_dev->features & real_dev->vlan_features; |
| 667 | dev->features |= real_dev->features & VLAN_TSO_FEATURES; | ||
| 668 | if (real_dev->features & NETIF_F_VLAN_CSUM) | ||
| 669 | dev->features |= real_dev->features & NETIF_F_ALL_CSUM; | ||
| 670 | 667 | ||
| 671 | /* ipv6 shared card related stuff */ | 668 | /* ipv6 shared card related stuff */ |
| 672 | dev->dev_id = real_dev->dev_id; | 669 | dev->dev_id = real_dev->dev_id; |
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index eb62558e9b09..0c2c93735e93 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
| @@ -423,8 +423,8 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) | |||
| 423 | 423 | ||
| 424 | rfcomm_dlc_lock(d); | 424 | rfcomm_dlc_lock(d); |
| 425 | d->state = BT_CLOSED; | 425 | d->state = BT_CLOSED; |
| 426 | rfcomm_dlc_unlock(d); | ||
| 427 | d->state_change(d, err); | 426 | d->state_change(d, err); |
| 427 | rfcomm_dlc_unlock(d); | ||
| 428 | 428 | ||
| 429 | skb_queue_purge(&d->tx_queue); | 429 | skb_queue_purge(&d->tx_queue); |
| 430 | rfcomm_dlc_unlink(d); | 430 | rfcomm_dlc_unlink(d); |
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index cd61dea2eea1..f813077234b7 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
| @@ -193,22 +193,17 @@ static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) | |||
| 193 | 193 | ||
| 194 | /* | 194 | /* |
| 195 | * Update Window Counter using the algorithm from [RFC 4342, 8.1]. | 195 | * Update Window Counter using the algorithm from [RFC 4342, 8.1]. |
| 196 | * The algorithm is not applicable if RTT < 4 microseconds. | 196 | * As elsewhere, RTT > 0 is assumed by using dccp_sample_rtt(). |
| 197 | */ | 197 | */ |
| 198 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, | 198 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, |
| 199 | ktime_t now) | 199 | ktime_t now) |
| 200 | { | 200 | { |
| 201 | u32 quarter_rtts; | 201 | u32 delta = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count), |
| 202 | 202 | quarter_rtts = (4 * delta) / hctx->ccid3hctx_rtt; | |
| 203 | if (unlikely(hctx->ccid3hctx_rtt < 4)) /* avoid divide-by-zero */ | ||
| 204 | return; | ||
| 205 | |||
| 206 | quarter_rtts = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count); | ||
| 207 | quarter_rtts /= hctx->ccid3hctx_rtt / 4; | ||
| 208 | 203 | ||
| 209 | if (quarter_rtts > 0) { | 204 | if (quarter_rtts > 0) { |
| 210 | hctx->ccid3hctx_t_last_win_count = now; | 205 | hctx->ccid3hctx_t_last_win_count = now; |
| 211 | hctx->ccid3hctx_last_win_count += min_t(u32, quarter_rtts, 5); | 206 | hctx->ccid3hctx_last_win_count += min(quarter_rtts, 5U); |
| 212 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ | 207 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ |
| 213 | } | 208 | } |
| 214 | } | 209 | } |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index b348dd70c685..c22a3780c14e 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -739,8 +739,8 @@ int dccp_invalid_packet(struct sk_buff *skb) | |||
| 739 | * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet | 739 | * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet |
| 740 | * has short sequence numbers), drop packet and return | 740 | * has short sequence numbers), drop packet and return |
| 741 | */ | 741 | */ |
| 742 | if (dh->dccph_type >= DCCP_PKT_DATA && | 742 | if ((dh->dccph_type < DCCP_PKT_DATA || |
| 743 | dh->dccph_type <= DCCP_PKT_DATAACK && dh->dccph_x == 0) { | 743 | dh->dccph_type > DCCP_PKT_DATAACK) && dh->dccph_x == 0) { |
| 744 | DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", | 744 | DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", |
| 745 | dccp_packet_name(dh->dccph_type)); | 745 | dccp_packet_name(dh->dccph_type)); |
| 746 | return 1; | 746 | return 1; |
diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index e2ddde755019..008de1fc42ca 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c | |||
| @@ -286,12 +286,14 @@ void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, | |||
| 286 | * | 286 | * |
| 287 | * Sends received pdus to the sap state machine. | 287 | * Sends received pdus to the sap state machine. |
| 288 | */ | 288 | */ |
| 289 | static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb) | 289 | static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb, |
| 290 | struct sock *sk) | ||
| 290 | { | 291 | { |
| 291 | struct llc_sap_state_ev *ev = llc_sap_ev(skb); | 292 | struct llc_sap_state_ev *ev = llc_sap_ev(skb); |
| 292 | 293 | ||
| 293 | ev->type = LLC_SAP_EV_TYPE_PDU; | 294 | ev->type = LLC_SAP_EV_TYPE_PDU; |
| 294 | ev->reason = 0; | 295 | ev->reason = 0; |
| 296 | skb->sk = sk; | ||
| 295 | llc_sap_state_process(sap, skb); | 297 | llc_sap_state_process(sap, skb); |
| 296 | } | 298 | } |
| 297 | 299 | ||
| @@ -360,8 +362,7 @@ static void llc_sap_mcast(struct llc_sap *sap, | |||
| 360 | break; | 362 | break; |
| 361 | 363 | ||
| 362 | sock_hold(sk); | 364 | sock_hold(sk); |
| 363 | skb_set_owner_r(skb1, sk); | 365 | llc_sap_rcv(sap, skb1, sk); |
| 364 | llc_sap_rcv(sap, skb1); | ||
| 365 | sock_put(sk); | 366 | sock_put(sk); |
| 366 | } | 367 | } |
| 367 | read_unlock_bh(&sap->sk_list.lock); | 368 | read_unlock_bh(&sap->sk_list.lock); |
| @@ -381,8 +382,7 @@ void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb) | |||
| 381 | } else { | 382 | } else { |
| 382 | struct sock *sk = llc_lookup_dgram(sap, &laddr); | 383 | struct sock *sk = llc_lookup_dgram(sap, &laddr); |
| 383 | if (sk) { | 384 | if (sk) { |
| 384 | skb_set_owner_r(skb, sk); | 385 | llc_sap_rcv(sap, skb, sk); |
| 385 | llc_sap_rcv(sap, skb); | ||
| 386 | sock_put(sk); | 386 | sock_put(sk); |
| 387 | } else | 387 | } else |
| 388 | kfree_skb(skb); | 388 | kfree_skb(skb); |
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 699d97b8de5e..a9fce4afdf21 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
| @@ -672,7 +672,7 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev, | |||
| 672 | if (params->vlan) { | 672 | if (params->vlan) { |
| 673 | sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); | 673 | sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); |
| 674 | 674 | ||
| 675 | if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN || | 675 | if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN && |
| 676 | sdata->vif.type != IEEE80211_IF_TYPE_AP) | 676 | sdata->vif.type != IEEE80211_IF_TYPE_AP) |
| 677 | return -EINVAL; | 677 | return -EINVAL; |
| 678 | } else | 678 | } else |
| @@ -760,7 +760,7 @@ static int ieee80211_change_station(struct wiphy *wiphy, | |||
| 760 | if (params->vlan && params->vlan != sta->sdata->dev) { | 760 | if (params->vlan && params->vlan != sta->sdata->dev) { |
| 761 | vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); | 761 | vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); |
| 762 | 762 | ||
| 763 | if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN || | 763 | if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN && |
| 764 | vlansdata->vif.type != IEEE80211_IF_TYPE_AP) { | 764 | vlansdata->vif.type != IEEE80211_IF_TYPE_AP) { |
| 765 | rcu_read_unlock(); | 765 | rcu_read_unlock(); |
| 766 | return -EINVAL; | 766 | return -EINVAL; |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 915afadb0602..5c876450b14c 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
| @@ -1313,7 +1313,7 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local, | |||
| 1313 | /* | 1313 | /* |
| 1314 | * Clear the TX filter mask for this STA when sending the next | 1314 | * Clear the TX filter mask for this STA when sending the next |
| 1315 | * packet. If the STA went to power save mode, this will happen | 1315 | * packet. If the STA went to power save mode, this will happen |
| 1316 | * happen when it wakes up for the next time. | 1316 | * when it wakes up for the next time. |
| 1317 | */ | 1317 | */ |
| 1318 | sta->flags |= WLAN_STA_CLEAR_PS_FILT; | 1318 | sta->flags |= WLAN_STA_CLEAR_PS_FILT; |
| 1319 | 1319 | ||
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 7cfd12e0d1e2..841278f1df8e 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -1325,7 +1325,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev, | |||
| 1325 | 1325 | ||
| 1326 | /* prepare reordering buffer */ | 1326 | /* prepare reordering buffer */ |
| 1327 | tid_agg_rx->reorder_buf = | 1327 | tid_agg_rx->reorder_buf = |
| 1328 | kmalloc(buf_size * sizeof(struct sk_buf *), GFP_ATOMIC); | 1328 | kmalloc(buf_size * sizeof(struct sk_buff *), GFP_ATOMIC); |
| 1329 | if (!tid_agg_rx->reorder_buf) { | 1329 | if (!tid_agg_rx->reorder_buf) { |
| 1330 | if (net_ratelimit()) | 1330 | if (net_ratelimit()) |
| 1331 | printk(KERN_ERR "can not allocate reordering buffer " | 1331 | printk(KERN_ERR "can not allocate reordering buffer " |
| @@ -1334,7 +1334,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev, | |||
| 1334 | goto end; | 1334 | goto end; |
| 1335 | } | 1335 | } |
| 1336 | memset(tid_agg_rx->reorder_buf, 0, | 1336 | memset(tid_agg_rx->reorder_buf, 0, |
| 1337 | buf_size * sizeof(struct sk_buf *)); | 1337 | buf_size * sizeof(struct sk_buff *)); |
| 1338 | 1338 | ||
| 1339 | if (local->ops->ampdu_action) | 1339 | if (local->ops->ampdu_action) |
| 1340 | ret = local->ops->ampdu_action(hw, IEEE80211_AMPDU_RX_START, | 1340 | ret = local->ops->ampdu_action(hw, IEEE80211_AMPDU_RX_START, |
| @@ -1614,7 +1614,7 @@ void sta_addba_resp_timer_expired(unsigned long data) | |||
| 1614 | * only one argument, and both sta_info and TID are needed, so init | 1614 | * only one argument, and both sta_info and TID are needed, so init |
| 1615 | * flow in sta_info_create gives the TID as data, while the timer_to_id | 1615 | * flow in sta_info_create gives the TID as data, while the timer_to_id |
| 1616 | * array gives the sta through container_of */ | 1616 | * array gives the sta through container_of */ |
| 1617 | u16 tid = *(int *)data; | 1617 | u16 tid = *(u8 *)data; |
| 1618 | struct sta_info *temp_sta = container_of((void *)data, | 1618 | struct sta_info *temp_sta = container_of((void *)data, |
| 1619 | struct sta_info, timer_to_tid[tid]); | 1619 | struct sta_info, timer_to_tid[tid]); |
| 1620 | 1620 | ||
| @@ -1662,7 +1662,7 @@ timer_expired_exit: | |||
| 1662 | void sta_rx_agg_session_timer_expired(unsigned long data) | 1662 | void sta_rx_agg_session_timer_expired(unsigned long data) |
| 1663 | { | 1663 | { |
| 1664 | /* not an elegant detour, but there is no choice as the timer passes | 1664 | /* not an elegant detour, but there is no choice as the timer passes |
| 1665 | * only one argument, and verious sta_info are needed here, so init | 1665 | * only one argument, and various sta_info are needed here, so init |
| 1666 | * flow in sta_info_create gives the TID as data, while the timer_to_id | 1666 | * flow in sta_info_create gives the TID as data, while the timer_to_id |
| 1667 | * array gives the sta through container_of */ | 1667 | * array gives the sta through container_of */ |
| 1668 | u8 *ptid = (u8 *)data; | 1668 | u8 *ptid = (u8 *)data; |
| @@ -2479,8 +2479,6 @@ static int ieee80211_sta_join_ibss(struct net_device *dev, | |||
| 2479 | ifsta->state = IEEE80211_IBSS_JOINED; | 2479 | ifsta->state = IEEE80211_IBSS_JOINED; |
| 2480 | mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL); | 2480 | mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL); |
| 2481 | 2481 | ||
| 2482 | ieee80211_rx_bss_put(dev, bss); | ||
| 2483 | |||
| 2484 | return res; | 2482 | return res; |
| 2485 | } | 2483 | } |
| 2486 | 2484 | ||
| @@ -3523,6 +3521,7 @@ static int ieee80211_sta_create_ibss(struct net_device *dev, | |||
| 3523 | struct ieee80211_supported_band *sband; | 3521 | struct ieee80211_supported_band *sband; |
| 3524 | u8 bssid[ETH_ALEN], *pos; | 3522 | u8 bssid[ETH_ALEN], *pos; |
| 3525 | int i; | 3523 | int i; |
| 3524 | int ret; | ||
| 3526 | DECLARE_MAC_BUF(mac); | 3525 | DECLARE_MAC_BUF(mac); |
| 3527 | 3526 | ||
| 3528 | #if 0 | 3527 | #if 0 |
| @@ -3567,7 +3566,9 @@ static int ieee80211_sta_create_ibss(struct net_device *dev, | |||
| 3567 | *pos++ = (u8) (rate / 5); | 3566 | *pos++ = (u8) (rate / 5); |
| 3568 | } | 3567 | } |
| 3569 | 3568 | ||
| 3570 | return ieee80211_sta_join_ibss(dev, ifsta, bss); | 3569 | ret = ieee80211_sta_join_ibss(dev, ifsta, bss); |
| 3570 | ieee80211_rx_bss_put(dev, bss); | ||
| 3571 | return ret; | ||
| 3571 | } | 3572 | } |
| 3572 | 3573 | ||
| 3573 | 3574 | ||
| @@ -3615,10 +3616,13 @@ static int ieee80211_sta_find_ibss(struct net_device *dev, | |||
| 3615 | (bss = ieee80211_rx_bss_get(dev, bssid, | 3616 | (bss = ieee80211_rx_bss_get(dev, bssid, |
| 3616 | local->hw.conf.channel->center_freq, | 3617 | local->hw.conf.channel->center_freq, |
| 3617 | ifsta->ssid, ifsta->ssid_len))) { | 3618 | ifsta->ssid, ifsta->ssid_len))) { |
| 3619 | int ret; | ||
| 3618 | printk(KERN_DEBUG "%s: Selected IBSS BSSID %s" | 3620 | printk(KERN_DEBUG "%s: Selected IBSS BSSID %s" |
| 3619 | " based on configured SSID\n", | 3621 | " based on configured SSID\n", |
| 3620 | dev->name, print_mac(mac, bssid)); | 3622 | dev->name, print_mac(mac, bssid)); |
| 3621 | return ieee80211_sta_join_ibss(dev, ifsta, bss); | 3623 | ret = ieee80211_sta_join_ibss(dev, ifsta, bss); |
| 3624 | ieee80211_rx_bss_put(dev, bss); | ||
| 3625 | return ret; | ||
| 3622 | } | 3626 | } |
| 3623 | #ifdef CONFIG_MAC80211_IBSS_DEBUG | 3627 | #ifdef CONFIG_MAC80211_IBSS_DEBUG |
| 3624 | printk(KERN_DEBUG " did not try to join ibss\n"); | 3628 | printk(KERN_DEBUG " did not try to join ibss\n"); |
| @@ -4095,18 +4099,17 @@ ieee80211_sta_scan_result(struct net_device *dev, | |||
| 4095 | 4099 | ||
| 4096 | memset(&iwe, 0, sizeof(iwe)); | 4100 | memset(&iwe, 0, sizeof(iwe)); |
| 4097 | iwe.cmd = SIOCGIWFREQ; | 4101 | iwe.cmd = SIOCGIWFREQ; |
| 4098 | iwe.u.freq.m = bss->freq; | 4102 | iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); |
| 4099 | iwe.u.freq.e = 6; | 4103 | iwe.u.freq.e = 0; |
| 4100 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, | 4104 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, |
| 4101 | IW_EV_FREQ_LEN); | 4105 | IW_EV_FREQ_LEN); |
| 4102 | 4106 | ||
| 4103 | memset(&iwe, 0, sizeof(iwe)); | 4107 | memset(&iwe, 0, sizeof(iwe)); |
| 4104 | iwe.cmd = SIOCGIWFREQ; | 4108 | iwe.cmd = SIOCGIWFREQ; |
| 4105 | iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); | 4109 | iwe.u.freq.m = bss->freq; |
| 4106 | iwe.u.freq.e = 0; | 4110 | iwe.u.freq.e = 6; |
| 4107 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, | 4111 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, |
| 4108 | IW_EV_FREQ_LEN); | 4112 | IW_EV_FREQ_LEN); |
| 4109 | |||
| 4110 | memset(&iwe, 0, sizeof(iwe)); | 4113 | memset(&iwe, 0, sizeof(iwe)); |
| 4111 | iwe.cmd = IWEVQUAL; | 4114 | iwe.cmd = IWEVQUAL; |
| 4112 | iwe.u.qual.qual = bss->signal; | 4115 | iwe.u.qual.qual = bss->signal; |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 1958bfb361c6..0941e5d6a522 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
| @@ -1091,7 +1091,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx) | |||
| 1091 | u16 fc, hdrlen, ethertype; | 1091 | u16 fc, hdrlen, ethertype; |
| 1092 | u8 *payload; | 1092 | u8 *payload; |
| 1093 | u8 dst[ETH_ALEN]; | 1093 | u8 dst[ETH_ALEN]; |
| 1094 | u8 src[ETH_ALEN]; | 1094 | u8 src[ETH_ALEN] __aligned(2); |
| 1095 | struct sk_buff *skb = rx->skb; | 1095 | struct sk_buff *skb = rx->skb; |
| 1096 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 1096 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| 1097 | DECLARE_MAC_BUF(mac); | 1097 | DECLARE_MAC_BUF(mac); |
| @@ -1234,7 +1234,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx) | |||
| 1234 | */ | 1234 | */ |
| 1235 | static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx) | 1235 | static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx) |
| 1236 | { | 1236 | { |
| 1237 | static const u8 pae_group_addr[ETH_ALEN] | 1237 | static const u8 pae_group_addr[ETH_ALEN] __aligned(2) |
| 1238 | = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 }; | 1238 | = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 }; |
| 1239 | struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; | 1239 | struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; |
| 1240 | 1240 | ||
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 131e9e6c8a32..4e97b266f907 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
| @@ -34,11 +34,11 @@ void *mac80211_wiphy_privid = &mac80211_wiphy_privid; | |||
| 34 | 34 | ||
| 35 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ | 35 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ |
| 36 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ | 36 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ |
| 37 | const unsigned char rfc1042_header[] = | 37 | const unsigned char rfc1042_header[] __aligned(2) = |
| 38 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; | 38 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; |
| 39 | 39 | ||
| 40 | /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ | 40 | /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ |
| 41 | const unsigned char bridge_tunnel_header[] = | 41 | const unsigned char bridge_tunnel_header[] __aligned(2) = |
| 42 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; | 42 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; |
| 43 | 43 | ||
| 44 | 44 | ||
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index 457ebf9e85ae..8311bb24f9f3 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
| @@ -489,9 +489,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev, | |||
| 489 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 489 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| 490 | if (sdata->vif.type == IEEE80211_IF_TYPE_STA || | 490 | if (sdata->vif.type == IEEE80211_IF_TYPE_STA || |
| 491 | sdata->vif.type == IEEE80211_IF_TYPE_IBSS) { | 491 | sdata->vif.type == IEEE80211_IF_TYPE_IBSS) { |
| 492 | ap_addr->sa_family = ARPHRD_ETHER; | 492 | if (sdata->u.sta.state == IEEE80211_ASSOCIATED) { |
| 493 | memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN); | 493 | ap_addr->sa_family = ARPHRD_ETHER; |
| 494 | return 0; | 494 | memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN); |
| 495 | return 0; | ||
| 496 | } else { | ||
| 497 | memset(&ap_addr->sa_data, 0, ETH_ALEN); | ||
| 498 | return 0; | ||
| 499 | } | ||
| 495 | } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) { | 500 | } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) { |
| 496 | ap_addr->sa_family = ARPHRD_ETHER; | 501 | ap_addr->sa_family = ARPHRD_ETHER; |
| 497 | memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN); | 502 | memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN); |
diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c index e31beeb33b2b..e8f0dead267f 100644 --- a/net/netfilter/nf_conntrack_expect.c +++ b/net/netfilter/nf_conntrack_expect.c | |||
| @@ -587,10 +587,10 @@ int __init nf_conntrack_expect_init(void) | |||
| 587 | return 0; | 587 | return 0; |
| 588 | 588 | ||
| 589 | err3: | 589 | err3: |
| 590 | kmem_cache_destroy(nf_ct_expect_cachep); | ||
| 591 | err2: | ||
| 590 | nf_ct_free_hashtable(nf_ct_expect_hash, nf_ct_expect_vmalloc, | 592 | nf_ct_free_hashtable(nf_ct_expect_hash, nf_ct_expect_vmalloc, |
| 591 | nf_ct_expect_hsize); | 593 | nf_ct_expect_hsize); |
| 592 | err2: | ||
| 593 | kmem_cache_destroy(nf_ct_expect_cachep); | ||
| 594 | err1: | 594 | err1: |
| 595 | return err; | 595 | return err; |
| 596 | } | 596 | } |
diff --git a/scripts/decodecode b/scripts/decodecode index 235d3938529d..235d3938529d 100644..100755 --- a/scripts/decodecode +++ b/scripts/decodecode | |||
diff --git a/sound/drivers/pcsp/pcsp.h b/sound/drivers/pcsp/pcsp.h index f07cc1ee1fe7..1d661f795e8c 100644 --- a/sound/drivers/pcsp/pcsp.h +++ b/sound/drivers/pcsp/pcsp.h | |||
| @@ -24,7 +24,8 @@ static DEFINE_SPINLOCK(i8253_lock); | |||
| 24 | /* default timer freq for PC-Speaker: 18643 Hz */ | 24 | /* default timer freq for PC-Speaker: 18643 Hz */ |
| 25 | #define DIV_18KHZ 64 | 25 | #define DIV_18KHZ 64 |
| 26 | #define MAX_DIV DIV_18KHZ | 26 | #define MAX_DIV DIV_18KHZ |
| 27 | #define CUR_DIV() (MAX_DIV >> chip->treble) | 27 | #define CALC_DIV(d) (MAX_DIV >> (d)) |
| 28 | #define CUR_DIV() CALC_DIV(chip->treble) | ||
| 28 | #define PCSP_MAX_TREBLE 1 | 29 | #define PCSP_MAX_TREBLE 1 |
| 29 | 30 | ||
| 30 | /* unfortunately, with hrtimers 37KHz does not work very well :( */ | 31 | /* unfortunately, with hrtimers 37KHz does not work very well :( */ |
| @@ -36,7 +37,8 @@ static DEFINE_SPINLOCK(i8253_lock); | |||
| 36 | #define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1) | 37 | #define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1) |
| 37 | #define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV) | 38 | #define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV) |
| 38 | #define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble)) | 39 | #define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble)) |
| 39 | #define PCSP_RATE() (PIT_TICK_RATE / CUR_DIV()) | 40 | #define PCSP_CALC_RATE(i) (PIT_TICK_RATE / CALC_DIV(i)) |
| 41 | #define PCSP_RATE() PCSP_CALC_RATE(chip->treble) | ||
| 40 | #define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE | 42 | #define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE |
| 41 | #define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE | 43 | #define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE |
| 42 | #define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1) | 44 | #define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1) |
diff --git a/sound/drivers/pcsp/pcsp_mixer.c b/sound/drivers/pcsp/pcsp_mixer.c index 64a695fef74e..caeb0f57fcca 100644 --- a/sound/drivers/pcsp/pcsp_mixer.c +++ b/sound/drivers/pcsp/pcsp_mixer.c | |||
| @@ -50,7 +50,8 @@ static int pcsp_treble_info(struct snd_kcontrol *kcontrol, | |||
| 50 | uinfo->value.enumerated.items = chip->max_treble + 1; | 50 | uinfo->value.enumerated.items = chip->max_treble + 1; |
| 51 | if (uinfo->value.enumerated.item > chip->max_treble) | 51 | if (uinfo->value.enumerated.item > chip->max_treble) |
| 52 | uinfo->value.enumerated.item = chip->max_treble; | 52 | uinfo->value.enumerated.item = chip->max_treble; |
| 53 | sprintf(uinfo->value.enumerated.name, "%d", PCSP_RATE()); | 53 | sprintf(uinfo->value.enumerated.name, "%d", |
| 54 | PCSP_CALC_RATE(uinfo->value.enumerated.item)); | ||
| 54 | return 0; | 55 | return 0; |
| 55 | } | 56 | } |
| 56 | 57 | ||
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index e0a605adde42..ff1b922c610b 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
| @@ -2858,6 +2858,7 @@ static const char *ad1988_models[AD1988_MODEL_LAST] = { | |||
| 2858 | static struct snd_pci_quirk ad1988_cfg_tbl[] = { | 2858 | static struct snd_pci_quirk ad1988_cfg_tbl[] = { |
| 2859 | SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG), | 2859 | SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG), |
| 2860 | SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG), | 2860 | SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG), |
| 2861 | SND_PCI_QUIRK(0x1043, 0x8277, "Asus P5K-E/WIFI-AP", AD1988_6STACK_DIG), | ||
| 2861 | {} | 2862 | {} |
| 2862 | }; | 2863 | }; |
| 2863 | 2864 | ||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 864b2f598c38..8f31247c52bd 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -853,6 +853,7 @@ do_sku: | |||
| 853 | case 0x10ec0269: | 853 | case 0x10ec0269: |
| 854 | case 0x10ec0862: | 854 | case 0x10ec0862: |
| 855 | case 0x10ec0662: | 855 | case 0x10ec0662: |
| 856 | case 0x10ec0889: | ||
| 856 | snd_hda_codec_write(codec, 0x14, 0, | 857 | snd_hda_codec_write(codec, 0x14, 0, |
| 857 | AC_VERB_SET_EAPD_BTLENABLE, 2); | 858 | AC_VERB_SET_EAPD_BTLENABLE, 2); |
| 858 | snd_hda_codec_write(codec, 0x15, 0, | 859 | snd_hda_codec_write(codec, 0x15, 0, |
| @@ -877,6 +878,7 @@ do_sku: | |||
| 877 | case 0x10ec0883: | 878 | case 0x10ec0883: |
| 878 | case 0x10ec0885: | 879 | case 0x10ec0885: |
| 879 | case 0x10ec0888: | 880 | case 0x10ec0888: |
| 881 | case 0x10ec0889: | ||
| 880 | snd_hda_codec_write(codec, 0x20, 0, | 882 | snd_hda_codec_write(codec, 0x20, 0, |
| 881 | AC_VERB_SET_COEF_INDEX, 7); | 883 | AC_VERB_SET_COEF_INDEX, 7); |
| 882 | tmp = snd_hda_codec_read(codec, 0x20, 0, | 884 | tmp = snd_hda_codec_read(codec, 0x20, 0, |
| @@ -7743,6 +7745,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = { | |||
| 7743 | SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), | 7745 | SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), |
| 7744 | SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), | 7746 | SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), |
| 7745 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), | 7747 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), |
| 7748 | SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), | ||
| 7746 | SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG), | 7749 | SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG), |
| 7747 | SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC), | 7750 | SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC), |
| 7748 | SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD), | 7751 | SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD), |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 393f7fd2b1be..a4f44a00bae8 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -840,7 +840,7 @@ static struct snd_kcontrol_new stac92hd71bxx_mixer[] = { | |||
| 840 | static struct snd_kcontrol_new stac925x_mixer[] = { | 840 | static struct snd_kcontrol_new stac925x_mixer[] = { |
| 841 | STAC_INPUT_SOURCE(1), | 841 | STAC_INPUT_SOURCE(1), |
| 842 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_OUTPUT), | 842 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_OUTPUT), |
| 843 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0, HDA_OUTPUT), | 843 | HDA_CODEC_MUTE("Capture Switch", 0x14, 0, HDA_OUTPUT), |
| 844 | HDA_CODEC_VOLUME("Capture Mux Volume", 0x0f, 0, HDA_OUTPUT), | 844 | HDA_CODEC_VOLUME("Capture Mux Volume", 0x0f, 0, HDA_OUTPUT), |
| 845 | { } /* end */ | 845 | { } /* end */ |
| 846 | }; | 846 | }; |
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index 52b1d81a26f7..e7e43524f8c7 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c | |||
| @@ -447,6 +447,23 @@ static struct hda_pcm_stream vt1708_pcm_analog_playback = { | |||
| 447 | }, | 447 | }, |
| 448 | }; | 448 | }; |
| 449 | 449 | ||
| 450 | static struct hda_pcm_stream vt1708_pcm_analog_s16_playback = { | ||
| 451 | .substreams = 1, | ||
| 452 | .channels_min = 2, | ||
| 453 | .channels_max = 8, | ||
| 454 | .nid = 0x10, /* NID to query formats and rates */ | ||
| 455 | /* We got noisy outputs on the right channel on VT1708 when | ||
| 456 | * 24bit samples are used. Until any workaround is found, | ||
| 457 | * disable the 24bit format, so far. | ||
| 458 | */ | ||
| 459 | .formats = SNDRV_PCM_FMTBIT_S16_LE, | ||
| 460 | .ops = { | ||
| 461 | .open = via_playback_pcm_open, | ||
| 462 | .prepare = via_playback_pcm_prepare, | ||
| 463 | .cleanup = via_playback_pcm_cleanup | ||
| 464 | }, | ||
| 465 | }; | ||
| 466 | |||
| 450 | static struct hda_pcm_stream vt1708_pcm_analog_capture = { | 467 | static struct hda_pcm_stream vt1708_pcm_analog_capture = { |
| 451 | .substreams = 2, | 468 | .substreams = 2, |
| 452 | .channels_min = 2, | 469 | .channels_min = 2, |
| @@ -899,6 +916,9 @@ static int patch_vt1708(struct hda_codec *codec) | |||
| 899 | 916 | ||
| 900 | spec->stream_name_analog = "VT1708 Analog"; | 917 | spec->stream_name_analog = "VT1708 Analog"; |
| 901 | spec->stream_analog_playback = &vt1708_pcm_analog_playback; | 918 | spec->stream_analog_playback = &vt1708_pcm_analog_playback; |
| 919 | /* disable 32bit format on VT1708 */ | ||
| 920 | if (codec->vendor_id == 0x11061708) | ||
| 921 | spec->stream_analog_playback = &vt1708_pcm_analog_s16_playback; | ||
| 902 | spec->stream_analog_capture = &vt1708_pcm_analog_capture; | 922 | spec->stream_analog_capture = &vt1708_pcm_analog_capture; |
| 903 | 923 | ||
| 904 | spec->stream_name_digital = "VT1708 Digital"; | 924 | spec->stream_name_digital = "VT1708 Digital"; |
