Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

atm: remove the coupling to token ring support

The token ring support is going away, so decouple
the atm support from it in advance.

Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>

+8 -138
-7
include/linux/atmlec.h
··· 21 21 /* Maximum number of LEC interfaces (tweakable) */ 22 22 #define MAX_LEC_ITF 48 23 23 24 - /* 25 - * From the total of MAX_LEC_ITF, last NUM_TR_DEVS are reserved for Token Ring. 26 - * E.g. if MAX_LEC_ITF = 48 and NUM_TR_DEVS = 8, then lec0-lec39 are for 27 - * Ethernet ELANs and lec40-lec47 are for Token Ring ELANS. 28 - */ 29 - #define NUM_TR_DEVS 8 30 - 31 24 typedef enum { 32 25 l_set_mac_addr, 33 26 l_del_mac_addr,
+8 -130
net/atm/lec.c
··· 26 26 #include <linux/spinlock.h> 27 27 #include <linux/seq_file.h> 28 28 29 - /* TokenRing if needed */ 30 - #ifdef CONFIG_TR 31 - #include <linux/trdevice.h> 32 - #endif 33 - 34 29 /* And atm device */ 35 30 #include <linux/atmdev.h> 36 31 #include <linux/atmlec.h> ··· 158 163 #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */ 159 164 160 165 /* 161 - * Modelled after tr_type_trans 162 - * All multicast and ARE or STE frames go to BUS. 163 - * Non source routed frames go by destination address. 164 - * Last hop source routed frames go by destination address. 165 - * Not last hop source routed frames go by _next_ route descriptor. 166 - * Returns pointer to destination MAC address or fills in rdesc 167 - * and returns NULL. 168 - */ 169 - #ifdef CONFIG_TR 170 - static unsigned char *get_tr_dst(unsigned char *packet, unsigned char *rdesc) 171 - { 172 - struct trh_hdr *trh; 173 - unsigned int riflen, num_rdsc; 174 - 175 - trh = (struct trh_hdr *)packet; 176 - if (trh->daddr[0] & (uint8_t) 0x80) 177 - return bus_mac; /* multicast */ 178 - 179 - if (trh->saddr[0] & TR_RII) { 180 - riflen = (ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8; 181 - if ((ntohs(trh->rcf) >> 13) != 0) 182 - return bus_mac; /* ARE or STE */ 183 - } else 184 - return trh->daddr; /* not source routed */ 185 - 186 - if (riflen < 6) 187 - return trh->daddr; /* last hop, source routed */ 188 - 189 - /* riflen is 6 or more, packet has more than one route descriptor */ 190 - num_rdsc = (riflen / 2) - 1; 191 - memset(rdesc, 0, ETH_ALEN); 192 - /* offset 4 comes from LAN destination field in LE control frames */ 193 - if (trh->rcf & htons((uint16_t) TR_RCF_DIR_BIT)) 194 - memcpy(&rdesc[4], &trh->rseg[num_rdsc - 2], sizeof(__be16)); 195 - else { 196 - memcpy(&rdesc[4], &trh->rseg[1], sizeof(__be16)); 197 - rdesc[5] = ((ntohs(trh->rseg[0]) & 0x000f) | (rdesc[5] & 0xf0)); 198 - } 199 - 200 - return NULL; 201 - } 202 - #endif /* CONFIG_TR */ 203 - 204 - /* 205 166 * Open/initialize the netdevice. This is called (in the current kernel) 206 167 * sometime after booting when the 'ifconfig' program is run. 207 168 * ··· 208 257 struct lec_arp_table *entry; 209 258 unsigned char *dst; 210 259 int min_frame_size; 211 - #ifdef CONFIG_TR 212 - unsigned char rdesc[ETH_ALEN]; /* Token Ring route descriptor */ 213 - #endif 214 260 int is_rdesc; 215 261 216 262 pr_debug("called\n"); ··· 238 290 } 239 291 skb_push(skb, 2); 240 292 241 - /* Put le header to place, works for TokenRing too */ 293 + /* Put le header to place */ 242 294 lec_h = (struct lecdatahdr_8023 *)skb->data; 243 295 lec_h->le_header = htons(priv->lecid); 244 - 245 - #ifdef CONFIG_TR 246 - /* 247 - * Ugly. Use this to realign Token Ring packets for 248 - * e.g. PCA-200E driver. 249 - */ 250 - if (priv->is_trdev) { 251 - skb2 = skb_realloc_headroom(skb, LEC_HEADER_LEN); 252 - kfree_skb(skb); 253 - if (skb2 == NULL) 254 - return NETDEV_TX_OK; 255 - skb = skb2; 256 - } 257 - #endif 258 296 259 297 #if DUMP_PACKETS >= 2 260 298 #define MAX_DUMP_SKB 99 ··· 255 321 #endif /* DUMP_PACKETS >= 1 */ 256 322 257 323 /* Minimum ethernet-frame size */ 258 - #ifdef CONFIG_TR 259 - if (priv->is_trdev) 260 - min_frame_size = LEC_MINIMUM_8025_SIZE; 261 - else 262 - #endif 263 - min_frame_size = LEC_MINIMUM_8023_SIZE; 324 + min_frame_size = LEC_MINIMUM_8023_SIZE; 264 325 if (skb->len < min_frame_size) { 265 326 if ((skb->len + skb_tailroom(skb)) < min_frame_size) { 266 327 skb2 = skb_copy_expand(skb, 0, ··· 274 345 /* Send to right vcc */ 275 346 is_rdesc = 0; 276 347 dst = lec_h->h_dest; 277 - #ifdef CONFIG_TR 278 - if (priv->is_trdev) { 279 - dst = get_tr_dst(skb->data + 2, rdesc); 280 - if (dst == NULL) { 281 - dst = rdesc; 282 - is_rdesc = 1; 283 - } 284 - } 285 - #endif 286 348 entry = NULL; 287 349 vcc = lec_arp_resolve(priv, dst, is_rdesc, &entry); 288 350 pr_debug("%s:vcc:%p vcc_flags:%lx, entry:%p\n", ··· 630 710 dev_kfree_skb(skb); 631 711 return; 632 712 } 633 - #ifdef CONFIG_TR 634 - if (priv->is_trdev) 635 - dst = ((struct lecdatahdr_8025 *)skb->data)->h_dest; 636 - else 637 - #endif 638 - dst = ((struct lecdatahdr_8023 *)skb->data)->h_dest; 713 + dst = ((struct lecdatahdr_8023 *)skb->data)->h_dest; 639 714 640 715 /* 641 716 * If this is a Data Direct VCC, and the VCC does not match ··· 638 723 */ 639 724 spin_lock_irqsave(&priv->lec_arp_lock, flags); 640 725 if (lec_is_data_direct(vcc)) { 641 - #ifdef CONFIG_TR 642 - if (priv->is_trdev) 643 - src = 644 - ((struct lecdatahdr_8025 *)skb->data)-> 645 - h_source; 646 - else 647 - #endif 648 - src = 649 - ((struct lecdatahdr_8023 *)skb->data)-> 650 - h_source; 726 + src = ((struct lecdatahdr_8023 *)skb->data)->h_source; 651 727 entry = lec_arp_find(priv, src); 652 728 if (entry && entry->vcc != vcc) { 653 729 lec_arp_remove(priv, entry); ··· 656 750 if (!hlist_empty(&priv->lec_arp_empty_ones)) 657 751 lec_arp_check_empties(priv, vcc, skb); 658 752 skb_pull(skb, 2); /* skip lec_id */ 659 - #ifdef CONFIG_TR 660 - if (priv->is_trdev) 661 - skb->protocol = tr_type_trans(skb, dev); 662 - else 663 - #endif 664 - skb->protocol = eth_type_trans(skb, dev); 753 + skb->protocol = eth_type_trans(skb, dev); 665 754 dev->stats.rx_packets++; 666 755 dev->stats.rx_bytes += skb->len; 667 756 memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data)); ··· 728 827 i = 0; 729 828 else 730 829 i = arg; 731 - #ifdef CONFIG_TR 732 830 if (arg >= MAX_LEC_ITF) 733 831 return -EINVAL; 734 - #else /* Reserve the top NUM_TR_DEVS for TR */ 735 - if (arg >= (MAX_LEC_ITF - NUM_TR_DEVS)) 736 - return -EINVAL; 737 - #endif 738 832 if (!dev_lec[i]) { 739 - int is_trdev, size; 740 - 741 - is_trdev = 0; 742 - if (i >= (MAX_LEC_ITF - NUM_TR_DEVS)) 743 - is_trdev = 1; 833 + int size; 744 834 745 835 size = sizeof(struct lec_priv); 746 - #ifdef CONFIG_TR 747 - if (is_trdev) 748 - dev_lec[i] = alloc_trdev(size); 749 - else 750 - #endif 751 - dev_lec[i] = alloc_etherdev(size); 836 + dev_lec[i] = alloc_etherdev(size); 752 837 if (!dev_lec[i]) 753 838 return -ENOMEM; 754 839 dev_lec[i]->netdev_ops = &lec_netdev_ops; ··· 745 858 } 746 859 747 860 priv = netdev_priv(dev_lec[i]); 748 - priv->is_trdev = is_trdev; 749 861 } else { 750 862 priv = netdev_priv(dev_lec[i]); 751 863 if (priv->lecd) ··· 2258 2372 struct hlist_node *node, *next; 2259 2373 struct lec_arp_table *entry, *tmp; 2260 2374 struct lecdatahdr_8023 *hdr = (struct lecdatahdr_8023 *)skb->data; 2261 - unsigned char *src; 2262 - #ifdef CONFIG_TR 2263 - struct lecdatahdr_8025 *tr_hdr = (struct lecdatahdr_8025 *)skb->data; 2264 - 2265 - if (priv->is_trdev) 2266 - src = tr_hdr->h_source; 2267 - else 2268 - #endif 2269 - src = hdr->h_source; 2375 + unsigned char *src = hdr->h_source; 2270 2376 2271 2377 spin_lock_irqsave(&priv->lec_arp_lock, flags); 2272 2378 hlist_for_each_entry_safe(entry, node, next,
-1
net/atm/lec.h
··· 142 142 int itfnum; /* e.g. 2 for lec2, 5 for lec5 */ 143 143 struct lane2_ops *lane2_ops; /* can be NULL for LANE v1 */ 144 144 int is_proxy; /* bridge between ATM and Ethernet */ 145 - int is_trdev; /* Device type, 0 = Ethernet, 1 = TokenRing */ 146 145 }; 147 146 148 147 struct lec_vcc_priv {