1 /* 2 * eth1394.h -- Ethernet driver for Linux IEEE-1394 Subsystem 3 * 4 * Copyright (C) 2000 Bonin Franck <boninf@free.fr> 5 * (C) 2001 Ben Collins <bcollins@debian.org> 6 * 7 * Mainly based on work by Emanuel Pirker and Andreas E. Bombe 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software Foundation, 21 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 22 */ 23 24 #ifndef __ETH1394_H 25 #define __ETH1394_H 26 27 #include "ieee1394.h" 28 29 /* Register for incoming packets. This is 4096 bytes, which supports up to 30 * S3200 (per Table 16-3 of IEEE 1394b-2002). */ 31 #define ETHER1394_REGION_ADDR_LEN 4096 32 #define ETHER1394_REGION_ADDR 0xfffff0200000ULL 33 #define ETHER1394_REGION_ADDR_END (ETHER1394_REGION_ADDR + ETHER1394_REGION_ADDR_LEN) 34 35 /* GASP identifier numbers for IPv4 over IEEE 1394 */ 36 #define ETHER1394_GASP_SPECIFIER_ID 0x00005E 37 #define ETHER1394_GASP_SPECIFIER_ID_HI ((ETHER1394_GASP_SPECIFIER_ID >> 8) & 0xffff) 38 #define ETHER1394_GASP_SPECIFIER_ID_LO (ETHER1394_GASP_SPECIFIER_ID & 0xff) 39 #define ETHER1394_GASP_VERSION 1 40 41 #define ETHER1394_GASP_OVERHEAD (2 * sizeof(quadlet_t)) /* GASP header overhead */ 42 43 /* Node set == 64 */ 44 #define NODE_SET (ALL_NODES + 1) 45 46 enum eth1394_bc_states { ETHER1394_BC_CLOSED, ETHER1394_BC_OPENED, 47 ETHER1394_BC_CHECK }; 48 49 struct pdg_list { 50 struct list_head list; /* partial datagram list per node */ 51 unsigned int sz; /* partial datagram list size per node */ 52 spinlock_t lock; /* partial datagram lock */ 53 }; 54 55 /* Private structure for our ethernet driver */ 56 struct eth1394_priv { 57 struct net_device_stats stats; /* Device stats */ 58 struct hpsb_host *host; /* The card for this dev */ 59 u16 maxpayload[NODE_SET]; /* Max payload per node */ 60 unsigned char sspd[NODE_SET]; /* Max speed per node */ 61 u64 fifo[ALL_NODES]; /* FIFO offset per node */ 62 u64 eui[ALL_NODES]; /* EUI-64 per node */ 63 spinlock_t lock; /* Private lock */ 64 int broadcast_channel; /* Async stream Broadcast Channel */ 65 enum eth1394_bc_states bc_state; /* broadcast channel state */ 66 struct hpsb_iso *iso; /* Async stream recv handle */ 67 struct pdg_list pdg[ALL_NODES]; /* partial RX datagram lists */ 68 int dgl[NODE_SET]; /* Outgoing datagram label per node */ 69 }; 70 71 struct host_info { 72 struct hpsb_host *host; 73 struct net_device *dev; 74 }; 75 76 77 /* Define a fake hardware header format for the networking core. Note that 78 * header size cannot exceed 16 bytes as that is the size of the header cache. 79 * Also, we do not need the source address in the header so we omit it and 80 * keep the header to under 16 bytes */ 81 #define ETH1394_ALEN (8) 82 #define ETH1394_HLEN (10) 83 84 struct eth1394hdr { 85 unsigned char h_dest[ETH1394_ALEN]; /* destination eth1394 addr */ 86 unsigned short h_proto; /* packet type ID field */ 87 } __attribute__((packed)); 88 89 90 91 typedef enum {ETH1394_GASP, ETH1394_WRREQ} eth1394_tx_type; 92 93 /* IP1394 headers */ 94 #include <asm/byteorder.h> 95 96 /* Unfragmented */ 97 #if defined __BIG_ENDIAN_BITFIELD 98 struct eth1394_uf_hdr { 99 u16 lf:2; 100 u16 res:14; 101 u16 ether_type; /* Ethernet packet type */ 102 } __attribute__((packed)); 103 #elif defined __LITTLE_ENDIAN_BITFIELD 104 struct eth1394_uf_hdr { 105 u16 res:14; 106 u16 lf:2; 107 u16 ether_type; 108 } __attribute__((packed)); 109 #else 110 #error Unknown bit field type 111 #endif 112 113 /* First fragment */ 114 #if defined __BIG_ENDIAN_BITFIELD 115 struct eth1394_ff_hdr { 116 u16 lf:2; 117 u16 res1:2; 118 u16 dg_size:12; /* Datagram size */ 119 u16 ether_type; /* Ethernet packet type */ 120 u16 dgl; /* Datagram label */ 121 u16 res2; 122 } __attribute__((packed)); 123 #elif defined __LITTLE_ENDIAN_BITFIELD 124 struct eth1394_ff_hdr { 125 u16 dg_size:12; 126 u16 res1:2; 127 u16 lf:2; 128 u16 ether_type; 129 u16 dgl; 130 u16 res2; 131 } __attribute__((packed)); 132 #else 133 #error Unknown bit field type 134 #endif 135 136 /* XXX: Subsequent fragments, including last */ 137 #if defined __BIG_ENDIAN_BITFIELD 138 struct eth1394_sf_hdr { 139 u16 lf:2; 140 u16 res1:2; 141 u16 dg_size:12; /* Datagram size */ 142 u16 res2:4; 143 u16 fg_off:12; /* Fragment offset */ 144 u16 dgl; /* Datagram label */ 145 u16 res3; 146 } __attribute__((packed)); 147 #elif defined __LITTLE_ENDIAN_BITFIELD 148 struct eth1394_sf_hdr { 149 u16 dg_size:12; 150 u16 res1:2; 151 u16 lf:2; 152 u16 fg_off:12; 153 u16 res2:4; 154 u16 dgl; 155 u16 res3; 156 } __attribute__((packed)); 157 #else 158 #error Unknown bit field type 159 #endif 160 161 #if defined __BIG_ENDIAN_BITFIELD 162 struct eth1394_common_hdr { 163 u16 lf:2; 164 u16 pad1:14; 165 } __attribute__((packed)); 166 #elif defined __LITTLE_ENDIAN_BITFIELD 167 struct eth1394_common_hdr { 168 u16 pad1:14; 169 u16 lf:2; 170 } __attribute__((packed)); 171 #else 172 #error Unknown bit field type 173 #endif 174 175 struct eth1394_hdr_words { 176 u16 word1; 177 u16 word2; 178 u16 word3; 179 u16 word4; 180 }; 181 182 union eth1394_hdr { 183 struct eth1394_common_hdr common; 184 struct eth1394_uf_hdr uf; 185 struct eth1394_ff_hdr ff; 186 struct eth1394_sf_hdr sf; 187 struct eth1394_hdr_words words; 188 }; 189 190 /* End of IP1394 headers */ 191 192 /* Fragment types */ 193 #define ETH1394_HDR_LF_UF 0 /* unfragmented */ 194 #define ETH1394_HDR_LF_FF 1 /* first fragment */ 195 #define ETH1394_HDR_LF_LF 2 /* last fragment */ 196 #define ETH1394_HDR_LF_IF 3 /* interior fragment */ 197 198 #define IP1394_HW_ADDR_LEN 16 /* As per RFC */ 199 200 /* Our arp packet (ARPHRD_IEEE1394) */ 201 struct eth1394_arp { 202 u16 hw_type; /* 0x0018 */ 203 u16 proto_type; /* 0x0806 */ 204 u8 hw_addr_len; /* 16 */ 205 u8 ip_addr_len; /* 4 */ 206 u16 opcode; /* ARP Opcode */ 207 /* Above is exactly the same format as struct arphdr */ 208 209 u64 s_uniq_id; /* Sender's 64bit EUI */ 210 u8 max_rec; /* Sender's max packet size */ 211 u8 sspd; /* Sender's max speed */ 212 u16 fifo_hi; /* hi 16bits of sender's FIFO addr */ 213 u32 fifo_lo; /* lo 32bits of sender's FIFO addr */ 214 u32 sip; /* Sender's IP Address */ 215 u32 tip; /* IP Address of requested hw addr */ 216 }; 217 218 /* Network timeout */ 219 #define ETHER1394_TIMEOUT 100000 220 221 /* This is our task struct. It's used for the packet complete callback. */ 222 struct packet_task { 223 struct sk_buff *skb; 224 int outstanding_pkts; 225 eth1394_tx_type tx_type; 226 int max_payload; 227 struct hpsb_packet *packet; 228 struct eth1394_priv *priv; 229 union eth1394_hdr hdr; 230 u64 addr; 231 u16 dest_node; 232 }; 233 234 #endif /* __ETH1394_H */ 235