59 строки
1.0 KiB
C
59 строки
1.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include "hisax_if.h"
|
|
#include "hisax_isac.h"
|
|
#include <linux/pci.h>
|
|
|
|
#define HSCX_BUFMAX 4096
|
|
|
|
enum {
|
|
AVM_FRITZ_PCI,
|
|
AVM_FRITZ_PNP,
|
|
AVM_FRITZ_PCIV2,
|
|
};
|
|
|
|
struct hdlc_stat_reg {
|
|
#ifdef __BIG_ENDIAN
|
|
u_char fill;
|
|
u_char mode;
|
|
u_char xml;
|
|
u_char cmd;
|
|
#else
|
|
u_char cmd;
|
|
u_char xml;
|
|
u_char mode;
|
|
u_char fill;
|
|
#endif
|
|
} __attribute__((packed));
|
|
|
|
struct fritz_bcs {
|
|
struct hisax_b_if b_if;
|
|
struct fritz_adapter *adapter;
|
|
int mode;
|
|
int channel;
|
|
|
|
union {
|
|
u_int ctrl;
|
|
struct hdlc_stat_reg sr;
|
|
} ctrl;
|
|
u_int stat;
|
|
int rcvidx;
|
|
int fifo_size;
|
|
u_char rcvbuf[HSCX_BUFMAX]; /* B-Channel receive Buffer */
|
|
|
|
int tx_cnt; /* B-Channel transmit counter */
|
|
struct sk_buff *tx_skb; /* B-Channel transmit Buffer */
|
|
};
|
|
|
|
struct fritz_adapter {
|
|
int type;
|
|
spinlock_t hw_lock;
|
|
unsigned int io;
|
|
unsigned int irq;
|
|
struct isac isac;
|
|
|
|
struct fritz_bcs bcs[2];
|
|
|
|
u32 (*read_hdlc_status) (struct fritz_adapter *adapter, int nr);
|
|
void (*write_ctrl) (struct fritz_bcs *bcs, int which);
|
|
};
|