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

ibmveth: Remove use of bitfields

Removes the use of bitfields from the ibmveth driver. This results
in slightly smaller object code.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by

Brian King and committed by
David S. Miller
79ef4a4d 3449a2ab

+68 -78
+45 -45
drivers/net/ibmveth.c
··· 132 132 }; 133 133 134 134 /* simple methods of getting data from the current rxq entry */ 135 + static inline u32 ibmveth_rxq_flags(struct ibmveth_adapter *adapter) 136 + { 137 + return adapter->rx_queue.queue_addr[adapter->rx_queue.index].flags_off; 138 + } 139 + 140 + static inline int ibmveth_rxq_toggle(struct ibmveth_adapter *adapter) 141 + { 142 + return (ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_TOGGLE) >> IBMVETH_RXQ_TOGGLE_SHIFT; 143 + } 144 + 135 145 static inline int ibmveth_rxq_pending_buffer(struct ibmveth_adapter *adapter) 136 146 { 137 - return (adapter->rx_queue.queue_addr[adapter->rx_queue.index].toggle == adapter->rx_queue.toggle); 147 + return (ibmveth_rxq_toggle(adapter) == adapter->rx_queue.toggle); 138 148 } 139 149 140 150 static inline int ibmveth_rxq_buffer_valid(struct ibmveth_adapter *adapter) 141 151 { 142 - return (adapter->rx_queue.queue_addr[adapter->rx_queue.index].valid); 152 + return (ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_VALID); 143 153 } 144 154 145 155 static inline int ibmveth_rxq_frame_offset(struct ibmveth_adapter *adapter) 146 156 { 147 - return (adapter->rx_queue.queue_addr[adapter->rx_queue.index].offset); 157 + return (ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_OFF_MASK); 148 158 } 149 159 150 160 static inline int ibmveth_rxq_frame_length(struct ibmveth_adapter *adapter) ··· 164 154 165 155 static inline int ibmveth_rxq_csum_good(struct ibmveth_adapter *adapter) 166 156 { 167 - return (adapter->rx_queue.queue_addr[adapter->rx_queue.index].csum_good); 157 + return (ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_CSUM_GOOD); 168 158 } 169 159 170 160 /* setup the initial settings for a buffer pool */ ··· 264 254 correlator = ((u64)pool->index << 32) | index; 265 255 *(u64*)skb->data = correlator; 266 256 267 - desc.desc = 0; 268 - desc.fields.valid = 1; 269 - desc.fields.length = pool->buff_size; 257 + desc.fields.flags_len = IBMVETH_BUF_VALID | pool->buff_size; 270 258 desc.fields.address = dma_addr; 271 259 272 260 lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); ··· 405 397 return; 406 398 } 407 399 408 - desc.desc = 0; 409 - desc.fields.valid = 1; 410 - desc.fields.length = adapter->rx_buff_pool[pool].buff_size; 400 + desc.fields.flags_len = IBMVETH_BUF_VALID | 401 + adapter->rx_buff_pool[pool].buff_size; 411 402 desc.fields.address = adapter->rx_buff_pool[pool].dma_addr[index]; 412 403 413 404 lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address, desc.desc); ··· 562 555 memcpy(&mac_address, netdev->dev_addr, netdev->addr_len); 563 556 mac_address = mac_address >> 16; 564 557 565 - rxq_desc.desc = 0; 566 - rxq_desc.fields.valid = 1; 567 - rxq_desc.fields.length = adapter->rx_queue.queue_len; 558 + rxq_desc.fields.flags_len = IBMVETH_BUF_VALID | adapter->rx_queue.queue_len; 568 559 rxq_desc.fields.address = adapter->rx_queue.queue_dma; 569 560 570 561 ibmveth_debug_printk("buffer list @ 0x%p\n", adapter->buffer_list_addr); ··· 709 704 void (*done) (struct net_device *, u32)) 710 705 { 711 706 struct ibmveth_adapter *adapter = dev->priv; 712 - union ibmveth_illan_attributes set_attr, clr_attr, ret_attr; 707 + u64 set_attr, clr_attr, ret_attr; 713 708 long ret; 714 709 int rc1 = 0, rc2 = 0; 715 710 int restart = 0; ··· 721 716 adapter->pool_config = 0; 722 717 } 723 718 724 - set_attr.desc = 0; 725 - clr_attr.desc = 0; 719 + set_attr = 0; 720 + clr_attr = 0; 726 721 727 722 if (data) 728 - set_attr.fields.tcp_csum_offload_ipv4 = 1; 723 + set_attr = IBMVETH_ILLAN_IPV4_TCP_CSUM; 729 724 else 730 - clr_attr.fields.tcp_csum_offload_ipv4 = 1; 725 + clr_attr = IBMVETH_ILLAN_IPV4_TCP_CSUM; 731 726 732 - ret = h_illan_attributes(adapter->vdev->unit_address, 0, 0, &ret_attr.desc); 727 + ret = h_illan_attributes(adapter->vdev->unit_address, 0, 0, &ret_attr); 733 728 734 - if (ret == H_SUCCESS && !ret_attr.fields.active_trunk && 735 - !ret_attr.fields.trunk_priority && 736 - ret_attr.fields.csum_offload_padded_pkt_support) { 737 - ret = h_illan_attributes(adapter->vdev->unit_address, clr_attr.desc, 738 - set_attr.desc, &ret_attr.desc); 729 + if (ret == H_SUCCESS && !(ret_attr & IBMVETH_ILLAN_ACTIVE_TRUNK) && 730 + !(ret_attr & IBMVETH_ILLAN_TRUNK_PRI_MASK) && 731 + (ret_attr & IBMVETH_ILLAN_PADDED_PKT_CSUM)) { 732 + ret = h_illan_attributes(adapter->vdev->unit_address, clr_attr, 733 + set_attr, &ret_attr); 739 734 740 735 if (ret != H_SUCCESS) { 741 736 rc1 = -EIO; ··· 743 738 " %d rc=%ld\n", data, ret); 744 739 745 740 ret = h_illan_attributes(adapter->vdev->unit_address, 746 - set_attr.desc, clr_attr.desc, &ret_attr.desc); 741 + set_attr, clr_attr, &ret_attr); 747 742 } else 748 743 done(dev, data); 749 744 } else { 750 745 rc1 = -EIO; 751 746 ibmveth_error_printk("unable to change checksum offload settings." 752 - " %d rc=%ld ret_attr=%lx\n", data, ret, ret_attr.desc); 747 + " %d rc=%ld ret_attr=%lx\n", data, ret, ret_attr); 753 748 } 754 749 755 750 if (restart) ··· 855 850 unsigned int tx_send_failed = 0; 856 851 unsigned int tx_map_failed = 0; 857 852 858 - desc.desc = 0; 859 - desc.fields.length = skb->len; 853 + desc.fields.flags_len = IBMVETH_BUF_VALID | skb->len; 860 854 desc.fields.address = dma_map_single(&adapter->vdev->dev, skb->data, 861 - desc.fields.length, DMA_TO_DEVICE); 862 - desc.fields.valid = 1; 855 + skb->len, DMA_TO_DEVICE); 863 856 864 857 if (skb->ip_summed == CHECKSUM_PARTIAL && 865 858 ip_hdr(skb)->protocol != IPPROTO_TCP && skb_checksum_help(skb)) { ··· 869 866 if (skb->ip_summed == CHECKSUM_PARTIAL) { 870 867 unsigned char *buf = skb_transport_header(skb) + skb->csum_offset; 871 868 872 - desc.fields.no_csum = 1; 873 - desc.fields.csum_good = 1; 869 + desc.fields.flags_len |= (IBMVETH_BUF_NO_CSUM | IBMVETH_BUF_CSUM_GOOD); 874 870 875 871 /* Need to zero out the checksum */ 876 872 buf[0] = 0; ··· 895 893 if(lpar_rc != H_SUCCESS && lpar_rc != H_DROPPED) { 896 894 ibmveth_error_printk("tx: h_send_logical_lan failed with rc=%ld\n", lpar_rc); 897 895 ibmveth_error_printk("tx: valid=%d, len=%d, address=0x%08x\n", 898 - desc.fields.valid, desc.fields.length, desc.fields.address); 896 + (desc.fields.flags_len & IBMVETH_BUF_VALID) ? 1 : 0, 897 + skb->len, desc.fields.address); 899 898 tx_send_failed++; 900 899 tx_dropped++; 901 900 } else { ··· 906 903 } 907 904 908 905 dma_unmap_single(&adapter->vdev->dev, desc.fields.address, 909 - desc.fields.length, DMA_TO_DEVICE); 906 + skb->len, DMA_TO_DEVICE); 910 907 911 908 out: spin_lock_irqsave(&adapter->stats_lock, flags); 912 909 adapter->stats.tx_dropped += tx_dropped; ··· 1111 1108 long ret; 1112 1109 struct net_device *netdev; 1113 1110 struct ibmveth_adapter *adapter; 1114 - union ibmveth_illan_attributes set_attr, ret_attr; 1111 + u64 set_attr, ret_attr; 1115 1112 1116 1113 unsigned char *mac_addr_p; 1117 1114 unsigned int *mcastFilterSize_p; ··· 1205 1202 1206 1203 ibmveth_debug_printk("registering netdev...\n"); 1207 1204 1208 - ret = h_illan_attributes(dev->unit_address, 0, 0, &ret_attr.desc); 1205 + ret = h_illan_attributes(dev->unit_address, 0, 0, &ret_attr); 1209 1206 1210 - if (ret == H_SUCCESS && !ret_attr.fields.active_trunk && 1211 - !ret_attr.fields.trunk_priority && 1212 - ret_attr.fields.csum_offload_padded_pkt_support) { 1213 - set_attr.desc = 0; 1214 - set_attr.fields.tcp_csum_offload_ipv4 = 1; 1207 + if (ret == H_SUCCESS && !(ret_attr & IBMVETH_ILLAN_ACTIVE_TRUNK) && 1208 + !(ret_attr & IBMVETH_ILLAN_TRUNK_PRI_MASK) && 1209 + (ret_attr & IBMVETH_ILLAN_PADDED_PKT_CSUM)) { 1210 + set_attr = IBMVETH_ILLAN_IPV4_TCP_CSUM; 1215 1211 1216 - ret = h_illan_attributes(dev->unit_address, 0, set_attr.desc, 1217 - &ret_attr.desc); 1212 + ret = h_illan_attributes(dev->unit_address, 0, set_attr, &ret_attr); 1218 1213 1219 1214 if (ret == H_SUCCESS) { 1220 1215 adapter->rx_csum = 1; 1221 1216 netdev->features |= NETIF_F_IP_CSUM; 1222 1217 } else 1223 - ret = h_illan_attributes(dev->unit_address, set_attr.desc, 1224 - 0, &ret_attr.desc); 1218 + ret = h_illan_attributes(dev->unit_address, set_attr, 0, &ret_attr); 1225 1219 } 1226 1220 1227 1221 rc = register_netdev(netdev);
+23 -33
drivers/net/ibmveth.h
··· 39 39 #define IbmVethMcastRemoveFilter 0x2UL 40 40 #define IbmVethMcastClearFilterTable 0x3UL 41 41 42 + #define IBMVETH_ILLAN_PADDED_PKT_CSUM 0x0000000000002000ULL 43 + #define IBMVETH_ILLAN_TRUNK_PRI_MASK 0x0000000000000F00ULL 44 + #define IBMVETH_ILLAN_IPV6_TCP_CSUM 0x0000000000000004ULL 45 + #define IBMVETH_ILLAN_IPV4_TCP_CSUM 0x0000000000000002ULL 46 + #define IBMVETH_ILLAN_ACTIVE_TRUNK 0x0000000000000001ULL 47 + 42 48 /* hcall macros */ 43 49 #define h_register_logical_lan(ua, buflst, rxq, fltlst, mac) \ 44 50 plpar_hcall_norets(H_REGISTER_LOGICAL_LAN, ua, buflst, rxq, fltlst, mac) ··· 157 151 }; 158 152 159 153 struct ibmveth_buf_desc_fields { 160 - u32 valid : 1; 161 - u32 toggle : 1; 162 - u32 reserved : 4; 163 - u32 no_csum : 1; 164 - u32 csum_good : 1; 165 - u32 length : 24; 166 - u32 address; 154 + u32 flags_len; 155 + #define IBMVETH_BUF_VALID 0x80000000 156 + #define IBMVETH_BUF_TOGGLE 0x40000000 157 + #define IBMVETH_BUF_NO_CSUM 0x02000000 158 + #define IBMVETH_BUF_CSUM_GOOD 0x01000000 159 + #define IBMVETH_BUF_LEN_MASK 0x00FFFFFF 160 + u32 address; 167 161 }; 168 162 169 163 union ibmveth_buf_desc { ··· 171 165 struct ibmveth_buf_desc_fields fields; 172 166 }; 173 167 174 - struct ibmveth_illan_attributes_fields { 175 - u32 reserved; 176 - u32 reserved2 : 18; 177 - u32 csum_offload_padded_pkt_support : 1; 178 - u32 reserved3 : 1; 179 - u32 trunk_priority : 4; 180 - u32 reserved4 : 5; 181 - u32 tcp_csum_offload_ipv6 : 1; 182 - u32 tcp_csum_offload_ipv4 : 1; 183 - u32 active_trunk : 1; 184 - }; 185 - 186 - union ibmveth_illan_attributes { 187 - u64 desc; 188 - struct ibmveth_illan_attributes_fields fields; 189 - }; 190 - 191 168 struct ibmveth_rx_q_entry { 192 - u16 toggle : 1; 193 - u16 valid : 1; 194 - u16 reserved : 4; 195 - u16 no_csum : 1; 196 - u16 csum_good : 1; 197 - u16 reserved2 : 8; 198 - u16 offset; 199 - u32 length; 200 - u64 correlator; 169 + u32 flags_off; 170 + #define IBMVETH_RXQ_TOGGLE 0x80000000 171 + #define IBMVETH_RXQ_TOGGLE_SHIFT 31 172 + #define IBMVETH_RXQ_VALID 0x40000000 173 + #define IBMVETH_RXQ_NO_CSUM 0x02000000 174 + #define IBMVETH_RXQ_CSUM_GOOD 0x01000000 175 + #define IBMVETH_RXQ_OFF_MASK 0x0000FFFF 176 + 177 + u32 length; 178 + u64 correlator; 201 179 }; 202 180 203 181 #endif /* _IBMVETH_H */