1#include "hisax_if.h"
2#include "hisax_isac.h"
3#include <linux/pci.h>
4
5#define HSCX_BUFMAX	4096
6
7enum {
8	AVM_FRITZ_PCI,
9	AVM_FRITZ_PNP,
10	AVM_FRITZ_PCIV2,
11};
12
13struct hdlc_stat_reg {
14#ifdef __BIG_ENDIAN
15	u_char fill __attribute__((packed));
16	u_char mode __attribute__((packed));
17	u_char xml  __attribute__((packed));
18	u_char cmd  __attribute__((packed));
19#else
20	u_char cmd  __attribute__((packed));
21	u_char xml  __attribute__((packed));
22	u_char mode __attribute__((packed));
23	u_char fill __attribute__((packed));
24#endif
25};
26
27struct fritz_bcs {
28	struct hisax_b_if b_if;
29	struct fritz_adapter *adapter;
30	int mode;
31	int channel;
32
33	union {
34		u_int ctrl;
35		struct hdlc_stat_reg sr;
36	} ctrl;
37	u_int stat;
38	int rcvidx;
39	u_char rcvbuf[HSCX_BUFMAX]; /* B-Channel receive Buffer */
40
41	int tx_cnt;		    /* B-Channel transmit counter */
42	struct sk_buff *tx_skb;     /* B-Channel transmit Buffer */
43};
44
45struct fritz_adapter {
46	int type;
47	spinlock_t hw_lock;
48	unsigned int io;
49	unsigned int irq;
50	struct isac isac;
51
52	struct fritz_bcs bcs[2];
53
54	u32  (*read_hdlc_status) (struct fritz_adapter *adapter, int nr);
55	void (*write_ctrl) (struct fritz_bcs *bcs, int which);
56};
57
58