| /* 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); |
| }; |