patch-2.4.22 linux-2.4.22/drivers/ieee1394/eth1394.h
Next file: linux-2.4.22/drivers/ieee1394/highlevel.c
Previous file: linux-2.4.22/drivers/ieee1394/eth1394.c
Back to the patch index
Back to the overall index
- Lines: 186
- Date:
2003-08-25 04:44:41.000000000 -0700
- Orig file:
linux-2.4.21/drivers/ieee1394/eth1394.h
- Orig date:
2003-06-13 07:51:34.000000000 -0700
diff -urN linux-2.4.21/drivers/ieee1394/eth1394.h linux-2.4.22/drivers/ieee1394/eth1394.h
@@ -24,6 +24,8 @@
#ifndef __ETH1394_H
#define __ETH1394_H
+#include "ieee1394.h"
+
/* Register for incoming packets. This is 8192 bytes, which supports up to
* 1600mbs. We'll need to change this if that ever becomes "small" :) */
#define ETHER1394_REGION_ADDR_LEN 8192
@@ -32,27 +34,38 @@
/* GASP identifier numbers for IPv4 over IEEE 1394 */
#define ETHER1394_GASP_SPECIFIER_ID 0x00005E
+#define ETHER1394_GASP_SPECIFIER_ID_HI ((ETHER1394_GASP_SPECIFIER_ID >> 8) & 0xffff)
+#define ETHER1394_GASP_SPECIFIER_ID_LO (ETHER1394_GASP_SPECIFIER_ID & 0xff)
#define ETHER1394_GASP_VERSION 1
+#define ETHER1394_GASP_OVERHEAD (2 * sizeof(quadlet_t)) /* GASP header overhead */
+
/* Node set == 64 */
#define NODE_SET (ALL_NODES + 1)
enum eth1394_bc_states { ETHER1394_BC_CLOSED, ETHER1394_BC_OPENED,
ETHER1394_BC_CHECK };
+struct pdg_list {
+ struct list_head list; /* partial datagram list per node */
+ unsigned int sz; /* partial datagram list size per node */
+ spinlock_t lock; /* partial datagram lock */
+};
+
/* Private structure for our ethernet driver */
struct eth1394_priv {
struct net_device_stats stats; /* Device stats */
struct hpsb_host *host; /* The card for this dev */
- unsigned char max_rec[NODE_SET];/* Max payload per node */
+ u16 maxpayload[NODE_SET]; /* Max payload per node */
unsigned char sspd[NODE_SET]; /* Max speed per node */
- u16 fifo_hi[ALL_NODES]; /* 16bit hi fifo offset per node */
- u32 fifo_lo[ALL_NODES]; /* 32bit lo fifo offset per node */
+ u64 fifo[ALL_NODES]; /* FIFO offset per node */
u64 eui[ALL_NODES]; /* EUI-64 per node */
spinlock_t lock; /* Private lock */
int broadcast_channel; /* Async stream Broadcast Channel */
enum eth1394_bc_states bc_state; /* broadcast channel state */
struct hpsb_iso *iso; /* Async stream recv handle */
+ struct pdg_list pdg[ALL_NODES]; /* partial RX datagram lists */
+ int dgl[NODE_SET]; /* Outgoing datagram label per node */
};
struct host_info {
@@ -60,16 +73,22 @@
struct net_device *dev;
};
-typedef enum {ETH1394_GASP, ETH1394_WRREQ} eth1394_tx_type;
-/* This is our task struct. It's used for the packet complete callback. */
-struct packet_task {
- struct sk_buff *skb; /* Socket buffer we are sending */
- nodeid_t dest_node; /* Destination of the packet */
- u64 addr; /* Address */
- struct tq_struct tq; /* The task */
- eth1394_tx_type tx_type; /* Send data via GASP or Write Req. */
-};
+/* Define a fake hardware header format for the networking core. Note that
+ * header size cannot exceed 16 bytes as that is the size of the header cache.
+ * Also, we do not need the source address in the header so we omit it and
+ * keep the header to under 16 bytes */
+#define ETH1394_ALEN (8)
+#define ETH1394_HLEN (10)
+
+struct eth1394hdr {
+ unsigned char h_dest[ETH1394_ALEN]; /* destination eth1394 addr */
+ unsigned short h_proto; /* packet type ID field */
+} __attribute__((packed));
+
+
+
+typedef enum {ETH1394_GASP, ETH1394_WRREQ} eth1394_tx_type;
/* IP1394 headers */
#include <asm/byteorder.h>
@@ -77,14 +96,14 @@
/* Unfragmented */
#if defined __BIG_ENDIAN_BITFIELD
struct eth1394_uf_hdr {
- u8 lf:2;
+ u16 lf:2;
u16 res:14;
u16 ether_type; /* Ethernet packet type */
} __attribute__((packed));
#elif defined __LITTLE_ENDIAN_BITFIELD
struct eth1394_uf_hdr {
u16 res:14;
- u8 lf:2;
+ u16 lf:2;
u16 ether_type;
} __attribute__((packed));
#else
@@ -94,8 +113,8 @@
/* First fragment */
#if defined __BIG_ENDIAN_BITFIELD
struct eth1394_ff_hdr {
- u8 lf:2;
- u8 res1:2;
+ u16 lf:2;
+ u16 res1:2;
u16 dg_size:12; /* Datagram size */
u16 ether_type; /* Ethernet packet type */
u16 dgl; /* Datagram label */
@@ -104,8 +123,8 @@
#elif defined __LITTLE_ENDIAN_BITFIELD
struct eth1394_ff_hdr {
u16 dg_size:12;
- u8 res1:2;
- u8 lf:2;
+ u16 res1:2;
+ u16 lf:2;
u16 ether_type;
u16 dgl;
u16 res2;
@@ -117,21 +136,21 @@
/* XXX: Subsequent fragments, including last */
#if defined __BIG_ENDIAN_BITFIELD
struct eth1394_sf_hdr {
- u8 lf:2;
- u8 res1:2;
+ u16 lf:2;
+ u16 res1:2;
u16 dg_size:12; /* Datagram size */
- u8 res2:6;
- u16 fg_off:10; /* Fragment offset */
+ u16 res2:4;
+ u16 fg_off:12; /* Fragment offset */
u16 dgl; /* Datagram label */
u16 res3;
} __attribute__((packed));
#elif defined __LITTLE_ENDIAN_BITFIELD
struct eth1394_sf_hdr {
u16 dg_size:12;
- u8 res1:2;
- u8 lf:2;
- u16 fg_off:10;
- u8 res2:6;
+ u16 res1:2;
+ u16 lf:2;
+ u16 fg_off:12;
+ u16 res2:4;
u16 dgl;
u16 res3;
} __attribute__((packed));
@@ -141,13 +160,13 @@
#if defined __BIG_ENDIAN_BITFIELD
struct eth1394_common_hdr {
- u8 lf:2;
+ u16 lf:2;
u16 pad1:14;
} __attribute__((packed));
#elif defined __LITTLE_ENDIAN_BITFIELD
struct eth1394_common_hdr {
u16 pad1:14;
- u8 lf:2;
+ u16 lf:2;
} __attribute__((packed));
#else
#error Unknown bit field type
@@ -199,4 +218,17 @@
/* Network timeout */
#define ETHER1394_TIMEOUT 100000
+/* This is our task struct. It's used for the packet complete callback. */
+struct packet_task {
+ struct sk_buff *skb;
+ int outstanding_pkts;
+ eth1394_tx_type tx_type;
+ int max_payload;
+ struct hpsb_packet *packet;
+ struct eth1394_priv *priv;
+ union eth1394_hdr hdr;
+ u64 addr;
+ u16 dest_node;
+};
+
#endif /* __ETH1394_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)