Home | History | Annotate | Line # | Download | only in pci
      1  1.11   thorpej /* $NetBSD: if_txpreg.h,v 1.11 2020/03/10 00:24:08 thorpej Exp $ */
      2   1.1  drochner 
      3   1.1  drochner /*
      4   1.1  drochner  * Copyright (c) 2001 Aaron Campbell <aaron (at) monkey.org>.
      5   1.1  drochner  * All rights reserved.
      6   1.1  drochner  *
      7   1.1  drochner  * Redistribution and use in source and binary forms, with or without
      8   1.1  drochner  * modification, are permitted provided that the following conditions
      9   1.1  drochner  * are met:
     10   1.1  drochner  * 1. Redistributions of source code must retain the above copyright
     11   1.1  drochner  *    notice, this list of conditions and the following disclaimer.
     12   1.1  drochner  * 2. Redistributions in binary form must reproduce the above copyright
     13   1.1  drochner  *    notice, this list of conditions and the following disclaimer in the
     14   1.1  drochner  *    documentation and/or other materials provided with the distribution.
     15   1.1  drochner  *
     16   1.1  drochner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17   1.1  drochner  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     18   1.1  drochner  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     19   1.1  drochner  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
     20   1.1  drochner  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     21   1.1  drochner  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     22   1.1  drochner  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23   1.1  drochner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     24   1.1  drochner  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     25   1.1  drochner  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     26   1.1  drochner  * THE POSSIBILITY OF SUCH DAMAGE.
     27   1.1  drochner  */
     28   1.1  drochner 
     29  1.11   thorpej #ifndef _DEV_PCI_IF_TXPREG_H_
     30  1.11   thorpej #define	_DEV_PCI_IF_TXPREG_H_
     31  1.11   thorpej 
     32   1.1  drochner #define	TXP_PCI_LOMEM			0x14	/* pci conf, memory map BAR */
     33   1.1  drochner #define	TXP_PCI_LOIO			0x10	/* pci conf, IO map BAR */
     34   1.1  drochner 
     35   1.1  drochner /*
     36   1.1  drochner  * Typhoon registers.
     37   1.1  drochner  */
     38   1.1  drochner #define	TXP_SRR				0x00	/* soft reset register */
     39   1.1  drochner #define	TXP_ISR				0x04	/* interrupt status register */
     40   1.1  drochner #define	TXP_IER				0x08	/* interrupt enable register */
     41   1.1  drochner #define	TXP_IMR				0x0c	/* interrupt mask register */
     42   1.1  drochner #define	TXP_SIR				0x10	/* self interrupt register */
     43   1.1  drochner #define	TXP_H2A_7			0x14	/* host->arm comm 7 */
     44   1.1  drochner #define	TXP_H2A_6			0x18	/* host->arm comm 6 */
     45   1.1  drochner #define	TXP_H2A_5			0x1c	/* host->arm comm 5 */
     46   1.1  drochner #define	TXP_H2A_4			0x20	/* host->arm comm 4 */
     47   1.1  drochner #define	TXP_H2A_3			0x24	/* host->arm comm 3 */
     48   1.1  drochner #define	TXP_H2A_2			0x28	/* host->arm comm 2 */
     49   1.1  drochner #define	TXP_H2A_1			0x2c	/* host->arm comm 1 */
     50   1.1  drochner #define	TXP_H2A_0			0x30	/* host->arm comm 0 */
     51   1.1  drochner #define	TXP_A2H_3			0x34	/* arm->host comm 3 */
     52   1.1  drochner #define	TXP_A2H_2			0x38	/* arm->host comm 2 */
     53   1.1  drochner #define	TXP_A2H_1			0x3c	/* arm->host comm 1 */
     54   1.1  drochner #define	TXP_A2H_0			0x40	/* arm->host comm 0 */
     55   1.1  drochner 
     56   1.1  drochner /*
     57   1.1  drochner  * interrupt bits (IMR, ISR, IER)
     58   1.1  drochner  */
     59   1.1  drochner #define	TXP_INT_RESERVED	0xffff0000
     60   1.1  drochner #define	TXP_INT_A2H_7		0x00008000	/* arm->host comm 7 */
     61   1.1  drochner #define	TXP_INT_A2H_6		0x00004000	/* arm->host comm 6 */
     62   1.1  drochner #define	TXP_INT_A2H_5		0x00002000	/* arm->host comm 5 */
     63   1.1  drochner #define	TXP_INT_A2H_4		0x00001000	/* arm->host comm 4 */
     64   1.1  drochner #define	TXP_INT_SELF		0x00000800	/* self interrupt */
     65   1.1  drochner #define	TXP_INT_PCI_TABORT	0x00000400	/* pci target abort */
     66   1.1  drochner #define	TXP_INT_PCI_MABORT	0x00000200	/* pci master abort */
     67   1.1  drochner #define	TXP_INT_DMA3		0x00000100	/* dma3 done */
     68   1.1  drochner #define	TXP_INT_DMA2		0x00000080	/* dma2 done */
     69   1.1  drochner #define	TXP_INT_DMA1		0x00000040	/* dma1 done */
     70   1.1  drochner #define	TXP_INT_DMA0		0x00000020	/* dma0 done */
     71   1.1  drochner #define	TXP_INT_A2H_3		0x00000010	/* arm->host comm 3 */
     72   1.1  drochner #define	TXP_INT_A2H_2		0x00000008	/* arm->host comm 2 */
     73   1.1  drochner #define	TXP_INT_A2H_1		0x00000004	/* arm->host comm 1 */
     74   1.1  drochner #define	TXP_INT_A2H_0		0x00000002	/* arm->host comm 0 */
     75   1.1  drochner #define	TXP_INT_LATCH		0x00000001	/* interrupt latch */
     76   1.1  drochner 
     77   1.1  drochner /*
     78   1.1  drochner  * soft reset register (SRR)
     79   1.1  drochner  */
     80   1.1  drochner #define	TXP_SRR_ALL		0x0000007f	/* full reset */
     81   1.1  drochner 
     82   1.1  drochner /*
     83   1.1  drochner  * Typhoon boot commands.
     84   1.1  drochner  */
     85   1.1  drochner #define	TXP_BOOTCMD_NULL			0x00
     86   1.1  drochner #define	TXP_BOOTCMD_DOWNLOAD_COMPLETE		0xfb
     87   1.1  drochner #define	TXP_BOOTCMD_SEGMENT_AVAILABLE		0xfc
     88   1.1  drochner #define	TXP_BOOTCMD_RUNTIME_IMAGE		0xfd
     89   1.1  drochner #define	TXP_BOOTCMD_REGISTER_BOOT_RECORD	0xff
     90   1.1  drochner 
     91   1.1  drochner /*
     92   1.1  drochner  * Typhoon runtime commands.
     93   1.1  drochner  */
     94   1.1  drochner #define	TXP_CMD_GLOBAL_RESET			0x00
     95   1.1  drochner #define	TXP_CMD_TX_ENABLE			0x01
     96   1.1  drochner #define	TXP_CMD_TX_DISABLE			0x02
     97   1.1  drochner #define	TXP_CMD_RX_ENABLE			0x03
     98   1.1  drochner #define	TXP_CMD_RX_DISABLE			0x04
     99   1.1  drochner #define	TXP_CMD_RX_FILTER_WRITE			0x05
    100   1.1  drochner #define	TXP_CMD_RX_FILTER_READ			0x06
    101   1.1  drochner #define	TXP_CMD_READ_STATISTICS			0x07
    102   1.1  drochner #define	TXP_CMD_CYCLE_STATISTICS		0x08
    103   1.1  drochner #define	TXP_CMD_CLEAR_STATISTICS		0x09
    104   1.1  drochner #define	TXP_CMD_MEMORY_READ			0x0a
    105   1.1  drochner #define	TXP_CMD_MEMORY_WRITE_SINGLE		0x0b
    106   1.1  drochner #define	TXP_CMD_VARIABLE_SECTION_READ		0x0c
    107   1.1  drochner #define	TXP_CMD_VARIABLE_SECTION_WRITE		0x0d
    108   1.1  drochner #define	TXP_CMD_STATIC_SECTION_READ		0x0e
    109   1.1  drochner #define	TXP_CMD_STATIC_SECTION_WRITE		0x0f
    110   1.1  drochner #define	TXP_CMD_IMAGE_SECTION_PROGRAM		0x10
    111   1.1  drochner #define	TXP_CMD_NVRAM_PAGE_READ			0x11
    112   1.1  drochner #define	TXP_CMD_NVRAM_PAGE_WRITE		0x12
    113   1.1  drochner #define	TXP_CMD_XCVR_SELECT			0x13
    114   1.1  drochner #define	TXP_CMD_TEST_MUX			0x14
    115   1.1  drochner #define	TXP_CMD_PHYLOOPBACK_ENABLE		0x15
    116   1.1  drochner #define	TXP_CMD_PHYLOOPBACK_DISABLE		0x16
    117   1.1  drochner #define	TXP_CMD_MAC_CONTROL_READ		0x17
    118   1.1  drochner #define	TXP_CMD_MAC_CONTROL_WRITE		0x18
    119   1.1  drochner #define	TXP_CMD_MAX_PKT_SIZE_READ		0x19
    120   1.1  drochner #define	TXP_CMD_MAX_PKT_SIZE_WRITE		0x1a
    121   1.1  drochner #define	TXP_CMD_MEDIA_STATUS_READ		0x1b
    122   1.1  drochner #define	TXP_CMD_MEDIA_STATUS_WRITE		0x1c
    123   1.1  drochner #define	TXP_CMD_NETWORK_DIAGS_READ		0x1d
    124   1.1  drochner #define	TXP_CMD_NETWORK_DIAGS_WRITE		0x1e
    125   1.1  drochner #define	TXP_CMD_PHY_MGMT_READ			0x1f
    126   1.1  drochner #define	TXP_CMD_PHY_MGMT_WRITE			0x20
    127   1.1  drochner #define	TXP_CMD_VARIABLE_PARAMETER_READ		0x21
    128   1.1  drochner #define	TXP_CMD_VARIABLE_PARAMETER_WRITE	0x22
    129   1.1  drochner #define	TXP_CMD_GOTO_SLEEP			0x23
    130   1.1  drochner #define	TXP_CMD_FIREWALL_CONTROL		0x24
    131   1.1  drochner #define	TXP_CMD_MCAST_HASH_MASK_WRITE		0x25
    132   1.1  drochner #define	TXP_CMD_STATION_ADDRESS_WRITE		0x26
    133   1.1  drochner #define	TXP_CMD_STATION_ADDRESS_READ		0x27
    134   1.1  drochner #define	TXP_CMD_STATION_MASK_WRITE		0x28
    135   1.1  drochner #define	TXP_CMD_STATION_MASK_READ		0x29
    136   1.1  drochner #define	TXP_CMD_VLAN_ETHER_TYPE_READ		0x2a
    137   1.1  drochner #define	TXP_CMD_VLAN_ETHER_TYPE_WRITE		0x2b
    138   1.1  drochner #define	TXP_CMD_VLAN_MASK_READ			0x2c
    139   1.1  drochner #define	TXP_CMD_VLAN_MASK_WRITE			0x2d
    140   1.1  drochner #define	TXP_CMD_BCAST_THROTTLE_WRITE		0x2e
    141   1.1  drochner #define	TXP_CMD_BCAST_THROTTLE_READ		0x2f
    142   1.1  drochner #define	TXP_CMD_DHCP_PREVENT_WRITE		0x30
    143   1.1  drochner #define	TXP_CMD_DHCP_PREVENT_READ		0x31
    144   1.1  drochner #define	TXP_CMD_RECV_BUFFER_CONTROL		0x32
    145   1.1  drochner #define	TXP_CMD_SOFTWARE_RESET			0x33
    146   1.1  drochner #define	TXP_CMD_CREATE_SA			0x34
    147   1.1  drochner #define	TXP_CMD_DELETE_SA			0x35
    148   1.1  drochner #define	TXP_CMD_ENABLE_RX_IP_OPTION		0x36
    149   1.1  drochner #define	TXP_CMD_RANDOM_NUMBER_CONTROL		0x37
    150   1.1  drochner #define	TXP_CMD_RANDOM_NUMBER_READ		0x38
    151   1.1  drochner #define	TXP_CMD_MATRIX_TABLE_MODE_WRITE		0x39
    152   1.1  drochner #define	TXP_CMD_MATRIX_DETAIL_READ		0x3a
    153   1.1  drochner #define	TXP_CMD_FILTER_ARRAY_READ		0x3b
    154   1.1  drochner #define	TXP_CMD_FILTER_DETAIL_READ		0x3c
    155   1.1  drochner #define	TXP_CMD_FILTER_TABLE_MODE_WRITE		0x3d
    156   1.1  drochner #define	TXP_CMD_FILTER_TCL_WRITE		0x3e
    157   1.1  drochner #define	TXP_CMD_FILTER_TBL_READ			0x3f
    158   1.1  drochner #define	TXP_CMD_VERSIONS_READ			0x43
    159   1.1  drochner #define	TXP_CMD_FILTER_DEFINE			0x45
    160   1.1  drochner #define	TXP_CMD_ADD_WAKEUP_PKT			0x46
    161   1.1  drochner #define	TXP_CMD_ADD_SLEEP_PKT			0x47
    162   1.1  drochner #define	TXP_CMD_ENABLE_SLEEP_EVENTS		0x48
    163   1.1  drochner #define	TXP_CMD_ENABLE_WAKEUP_EVENTS		0x49
    164   1.1  drochner #define	TXP_CMD_GET_IP_ADDRESS			0x4a
    165   1.1  drochner #define	TXP_CMD_READ_PCI_REG			0x4c
    166   1.1  drochner #define	TXP_CMD_WRITE_PCI_REG			0x4d
    167   1.1  drochner #define	TXP_CMD_OFFLOAD_READ			0x4e
    168   1.1  drochner #define	TXP_CMD_OFFLOAD_WRITE			0x4f
    169   1.1  drochner #define	TXP_CMD_HELLO_RESPONSE			0x57
    170   1.1  drochner #define	TXP_CMD_ENABLE_RX_FILTER		0x58
    171   1.1  drochner #define	TXP_CMD_RX_FILTER_CAPABILITY		0x59
    172   1.1  drochner #define	TXP_CMD_HALT				0x5d
    173   1.1  drochner #define	TXP_CMD_READ_IPSEC_INFO			0x54
    174   1.1  drochner #define	TXP_CMD_GET_IPSEC_ENABLE		0x67
    175   1.1  drochner #define	TXP_CMD_INVALID				0xffff
    176   1.1  drochner 
    177   1.1  drochner #define	TXP_FRAGMENT		0x0000
    178   1.1  drochner #define	TXP_TXFRAME		0x0001
    179   1.1  drochner #define	TXP_COMMAND		0x0002
    180   1.1  drochner #define	TXP_OPTION		0x0003
    181   1.1  drochner #define	TXP_RECEIVE		0x0004
    182   1.1  drochner #define	TXP_RESPONSE		0x0005
    183   1.1  drochner 
    184   1.1  drochner #define	TXP_TYPE_IPSEC		0x0000
    185   1.1  drochner #define	TXP_TYPE_TCPSEGMENT	0x0001
    186   1.1  drochner 
    187   1.1  drochner #define	TXP_PFLAG_NOCRC		0x0000
    188   1.1  drochner #define	TXP_PFLAG_IPCKSUM	0x0001
    189   1.1  drochner #define	TXP_PFLAG_TCPCKSUM	0x0002
    190   1.1  drochner #define	TXP_PFLAG_TCPSEGMENT	0x0004
    191   1.1  drochner #define	TXP_PFLAG_INSERTVLAN	0x0008
    192   1.1  drochner #define	TXP_PFLAG_IPSEC		0x0010
    193   1.1  drochner #define	TXP_PFLAG_PRIORITY	0x0020
    194   1.1  drochner #define	TXP_PFLAG_UDPCKSUM	0x0040
    195   1.1  drochner #define	TXP_PFLAG_PADFRAME	0x0080
    196   1.1  drochner 
    197   1.1  drochner #define	TXP_MISC_FIRSTDESC	0x0000
    198   1.1  drochner #define	TXP_MISC_LASTDESC	0x0001
    199   1.1  drochner 
    200   1.1  drochner #define	TXP_ERR_INTERNAL	0x0000
    201   1.1  drochner #define	TXP_ERR_FIFOUNDERRUN	0x0001
    202   1.1  drochner #define	TXP_ERR_BADSSD		0x0002
    203   1.1  drochner #define	TXP_ERR_RUNT		0x0003
    204   1.1  drochner #define	TXP_ERR_CRC		0x0004
    205   1.1  drochner #define	TXP_ERR_OVERSIZE	0x0005
    206   1.1  drochner #define	TXP_ERR_ALIGNMENT	0x0006
    207   1.1  drochner #define	TXP_ERR_DRIBBLEBIT	0x0007
    208   1.1  drochner 
    209   1.1  drochner #define	TXP_PROTO_UNKNOWN	0x0000
    210   1.1  drochner #define	TXP_PROTO_IP		0x0001
    211   1.1  drochner #define	TXP_PROTO_IPX		0x0002
    212   1.1  drochner #define	TXP_PROTO_RESERVED	0x0003
    213   1.1  drochner 
    214   1.1  drochner #define	TXP_STAT_PROTO		0x0001
    215   1.1  drochner #define	TXP_STAT_VLAN		0x0002
    216   1.1  drochner #define	TXP_STAT_IPFRAGMENT	0x0004
    217   1.1  drochner #define	TXP_STAT_IPSEC		0x0008
    218   1.1  drochner #define	TXP_STAT_IPCKSUMBAD	0x0010
    219   1.1  drochner #define	TXP_STAT_TCPCKSUMBAD	0x0020
    220   1.1  drochner #define	TXP_STAT_UDPCKSUMBAD	0x0040
    221   1.1  drochner #define	TXP_STAT_IPCKSUMGOOD	0x0080
    222   1.1  drochner #define	TXP_STAT_TCPCKSUMGOOD	0x0100
    223   1.1  drochner #define	TXP_STAT_UDPCKSUMGOOD	0x0200
    224   1.1  drochner 
    225   1.1  drochner struct txp_tx_desc {
    226   1.1  drochner 	volatile u_int8_t	tx_flags;	/* type/descriptor flags */
    227   1.1  drochner 	volatile u_int8_t	tx_numdesc;	/* number of descriptors */
    228   1.1  drochner 	volatile u_int16_t	tx_totlen;	/* total packet length */
    229   1.1  drochner 	volatile u_int32_t	tx_addrlo;	/* virt addr low word */
    230   1.1  drochner 	volatile u_int32_t	tx_addrhi;	/* virt addr high word */
    231   1.1  drochner 	volatile u_int32_t	tx_pflags;	/* processing flags */
    232   1.1  drochner };
    233   1.1  drochner #define	TX_FLAGS_TYPE_M		0x07		/* type mask */
    234   1.1  drochner #define	TX_FLAGS_TYPE_FRAG	0x00		/* type: fragment */
    235   1.1  drochner #define	TX_FLAGS_TYPE_DATA	0x01		/* type: data frame */
    236   1.1  drochner #define	TX_FLAGS_TYPE_CMD	0x02		/* type: command frame */
    237   1.1  drochner #define	TX_FLAGS_TYPE_OPT	0x03		/* type: options */
    238   1.1  drochner #define	TX_FLAGS_TYPE_RX	0x04		/* type: command */
    239   1.1  drochner #define	TX_FLAGS_TYPE_RESP	0x05		/* type: response */
    240   1.1  drochner #define	TX_FLAGS_RESP		0x40		/* response requested */
    241   1.1  drochner #define	TX_FLAGS_VALID		0x80		/* valid descriptor */
    242   1.1  drochner 
    243   1.1  drochner #define	TX_PFLAGS_DNAC		0x00000001	/* do not add crc */
    244   1.1  drochner #define	TX_PFLAGS_IPCKSUM	0x00000002	/* ip checksum */
    245   1.1  drochner #define	TX_PFLAGS_TCPCKSUM	0x00000004	/* tcp checksum */
    246   1.1  drochner #define	TX_PFLAGS_TCPSEG	0x00000008	/* tcp segmentation */
    247   1.1  drochner #define	TX_PFLAGS_VLAN		0x00000010	/* insert vlan */
    248   1.1  drochner #define	TX_PFLAGS_IPSEC		0x00000020	/* perform ipsec */
    249   1.1  drochner #define	TX_PFLAGS_PRIO		0x00000040	/* priority field valid */
    250   1.1  drochner #define	TX_PFLAGS_UDPCKSUM	0x00000080	/* udp checksum */
    251   1.1  drochner #define	TX_PFLAGS_PADFRAME	0x00000100	/* pad frame */
    252   1.1  drochner #define	TX_PFLAGS_VLANTAG_M	0x0ffff000	/* vlan tag mask */
    253   1.1  drochner #define	TX_PFLAGS_VLANPRI_M	0x00700000	/* vlan priority mask */
    254   1.1  drochner #define	TX_PFLAGS_VLANTAG_S	12		/* amount to shift tag */
    255   1.1  drochner 
    256   1.1  drochner struct txp_rx_desc {
    257   1.1  drochner 	volatile u_int8_t	rx_flags;	/* type/descriptor flags */
    258   1.1  drochner 	volatile u_int8_t	rx_numdesc;	/* number of descriptors */
    259   1.1  drochner 	volatile u_int16_t	rx_len;		/* frame length */
    260   1.1  drochner 	volatile u_int32_t	rx_vaddrlo;	/* virtual address, lo word */
    261   1.1  drochner 	volatile u_int32_t	rx_vaddrhi;	/* virtual address, hi word */
    262   1.1  drochner 	volatile u_int32_t	rx_stat;	/* status */
    263   1.1  drochner 	volatile u_int16_t	rx_filter;	/* filter status */
    264   1.1  drochner 	volatile u_int16_t	rx_hash;	/* hash status */
    265   1.1  drochner 	volatile u_int32_t	rx_vlan;	/* vlan tag/priority */
    266   1.1  drochner };
    267   1.1  drochner 
    268   1.1  drochner /* txp_rx_desc.rx_flags */
    269   1.1  drochner #define	RX_FLAGS_TYPE_M		0x07		/* type mask */
    270   1.1  drochner #define	RX_FLAGS_TYPE_FRAG	0x00		/* type: fragment */
    271   1.1  drochner #define	RX_FLAGS_TYPE_DATA	0x01		/* type: data frame */
    272   1.1  drochner #define	RX_FLAGS_TYPE_CMD	0x02		/* type: command frame */
    273   1.1  drochner #define	RX_FLAGS_TYPE_OPT	0x03		/* type: options */
    274   1.1  drochner #define	RX_FLAGS_TYPE_RX	0x04		/* type: command */
    275   1.1  drochner #define	RX_FLAGS_TYPE_RESP	0x05		/* type: response */
    276   1.1  drochner #define	RX_FLAGS_RCV_TYPE_M	0x18		/* rcvtype mask */
    277   1.1  drochner #define	RX_FLAGS_RCV_TYPE_RX	0x00		/* rcvtype: receive */
    278   1.1  drochner #define	RX_FLAGS_RCV_TYPE_RSP	0x08		/* rcvtype: response */
    279   1.1  drochner #define	RX_FLAGS_ERROR		0x40		/* error in packet */
    280   1.1  drochner 
    281   1.1  drochner /* txp_rx_desc.rx_stat (if rx_flags & RX_FLAGS_ERROR bit set) */
    282   1.1  drochner #define	RX_ERROR_ADAPTER	0x00000000	/* adapter internal error */
    283   1.1  drochner #define	RX_ERROR_FIFO		0x00000001	/* fifo underrun */
    284   1.1  drochner #define	RX_ERROR_BADSSD		0x00000002	/* bad ssd */
    285   1.1  drochner #define	RX_ERROR_RUNT		0x00000003	/* runt packet */
    286   1.1  drochner #define	RX_ERROR_CRC		0x00000004	/* bad crc */
    287   1.1  drochner #define	RX_ERROR_OVERSIZE	0x00000005	/* oversized packet */
    288   1.1  drochner #define	RX_ERROR_ALIGN		0x00000006	/* alignment error */
    289   1.1  drochner #define	RX_ERROR_DRIBBLE	0x00000007	/* dribble bit */
    290   1.1  drochner 
    291   1.1  drochner /* txp_rx_desc.rx_stat (if rx_flags & RX_FLAGS_ERROR not bit set) */
    292   1.1  drochner #define	RX_STAT_PROTO_M		0x00000003	/* protocol mask */
    293   1.1  drochner #define	RX_STAT_PROTO_UK	0x00000000	/* unknown protocol */
    294   1.1  drochner #define	RX_STAT_PROTO_IPX	0x00000001	/* IPX */
    295   1.1  drochner #define	RX_STAT_PROTO_IP	0x00000002	/* IP */
    296   1.1  drochner #define	RX_STAT_PROTO_RSV	0x00000003	/* reserved */
    297   1.1  drochner #define	RX_STAT_VLAN		0x00000004	/* vlan tag (in rxd) */
    298   1.1  drochner #define	RX_STAT_IPFRAG		0x00000008	/* fragment, ipsec not done */
    299   1.1  drochner #define	RX_STAT_IPSEC		0x00000010	/* ipsec decoded packet */
    300   1.1  drochner #define	RX_STAT_IPCKSUMBAD	0x00000020	/* ip checksum failed */
    301   1.1  drochner #define	RX_STAT_UDPCKSUMBAD	0x00000040	/* udp checksum failed */
    302   1.1  drochner #define	RX_STAT_TCPCKSUMBAD	0x00000080	/* tcp checksum failed */
    303   1.1  drochner #define	RX_STAT_IPCKSUMGOOD	0x00000100	/* ip checksum succeeded */
    304   1.1  drochner #define	RX_STAT_UDPCKSUMGOOD	0x00000200	/* udp checksum succeeded */
    305   1.1  drochner #define	RX_STAT_TCPCKSUMGOOD	0x00000400	/* tcp checksum succeeded */
    306   1.1  drochner 
    307   1.1  drochner 
    308   1.1  drochner struct txp_rxbuf_desc {
    309   1.1  drochner 	volatile u_int32_t	rb_paddrlo;
    310   1.1  drochner 	volatile u_int32_t	rb_paddrhi;
    311   1.1  drochner 	volatile u_int32_t	rb_vaddrlo;
    312   1.1  drochner 	volatile u_int32_t	rb_vaddrhi;
    313   1.1  drochner };
    314   1.1  drochner 
    315   1.1  drochner /* Extension descriptor */
    316   1.1  drochner struct txp_ext_desc {
    317   1.1  drochner 	volatile u_int32_t	ext_1;
    318   1.1  drochner 	volatile u_int32_t	ext_2;
    319   1.1  drochner 	volatile u_int32_t	ext_3;
    320   1.1  drochner 	volatile u_int32_t	ext_4;
    321   1.1  drochner };
    322   1.1  drochner 
    323   1.1  drochner struct txp_cmd_desc {
    324   1.1  drochner 	volatile u_int8_t	cmd_flags;
    325   1.1  drochner 	volatile u_int8_t	cmd_numdesc;
    326   1.1  drochner 	volatile u_int16_t	cmd_id;
    327   1.1  drochner 	volatile u_int16_t	cmd_seq;
    328   1.1  drochner 	volatile u_int16_t	cmd_par1;
    329   1.1  drochner 	volatile u_int32_t	cmd_par2;
    330   1.1  drochner 	volatile u_int32_t	cmd_par3;
    331   1.1  drochner };
    332   1.1  drochner #define	CMD_FLAGS_TYPE_M	0x07		/* type mask */
    333   1.1  drochner #define	CMD_FLAGS_TYPE_FRAG	0x00		/* type: fragment */
    334   1.1  drochner #define	CMD_FLAGS_TYPE_DATA	0x01		/* type: data frame */
    335   1.1  drochner #define	CMD_FLAGS_TYPE_CMD	0x02		/* type: command frame */
    336   1.1  drochner #define	CMD_FLAGS_TYPE_OPT	0x03		/* type: options */
    337   1.1  drochner #define	CMD_FLAGS_TYPE_RX	0x04		/* type: command */
    338   1.1  drochner #define	CMD_FLAGS_TYPE_RESP	0x05		/* type: response */
    339   1.1  drochner #define	CMD_FLAGS_RESP		0x40		/* response requested */
    340   1.1  drochner #define	CMD_FLAGS_VALID		0x80		/* valid descriptor */
    341   1.1  drochner 
    342   1.1  drochner struct txp_rsp_desc {
    343   1.1  drochner 	volatile u_int8_t	rsp_flags;
    344   1.1  drochner 	volatile u_int8_t	rsp_numdesc;
    345   1.1  drochner 	volatile u_int16_t	rsp_id;
    346   1.1  drochner 	volatile u_int16_t	rsp_seq;
    347   1.1  drochner 	volatile u_int16_t	rsp_par1;
    348   1.1  drochner 	volatile u_int32_t	rsp_par2;
    349   1.1  drochner 	volatile u_int32_t	rsp_par3;
    350   1.1  drochner };
    351   1.1  drochner #define	RSP_FLAGS_TYPE_M	0x07		/* type mask */
    352   1.1  drochner #define	RSP_FLAGS_TYPE_FRAG	0x00		/* type: fragment */
    353   1.1  drochner #define	RSP_FLAGS_TYPE_DATA	0x01		/* type: data frame */
    354   1.1  drochner #define	RSP_FLAGS_TYPE_CMD	0x02		/* type: command frame */
    355   1.1  drochner #define	RSP_FLAGS_TYPE_OPT	0x03		/* type: options */
    356   1.1  drochner #define	RSP_FLAGS_TYPE_RX	0x04		/* type: command */
    357   1.1  drochner #define	RSP_FLAGS_TYPE_RESP	0x05		/* type: response */
    358   1.1  drochner #define	RSP_FLAGS_ERROR		0x40		/* response error */
    359   1.1  drochner 
    360   1.1  drochner struct txp_frag_desc {
    361   1.1  drochner 	volatile u_int8_t	frag_flags;	/* type/descriptor flags */
    362   1.1  drochner 	volatile u_int8_t	frag_rsvd1;
    363   1.1  drochner 	volatile u_int16_t	frag_len;	/* bytes in this fragment */
    364   1.1  drochner 	volatile u_int32_t	frag_addrlo;	/* phys addr low word */
    365   1.1  drochner 	volatile u_int32_t	frag_addrhi;	/* phys addr high word */
    366   1.1  drochner 	volatile u_int32_t	frag_rsvd2;
    367   1.1  drochner };
    368   1.1  drochner #define	FRAG_FLAGS_TYPE_M	0x07		/* type mask */
    369   1.1  drochner #define	FRAG_FLAGS_TYPE_FRAG	0x00		/* type: fragment */
    370   1.1  drochner #define	FRAG_FLAGS_TYPE_DATA	0x01		/* type: data frame */
    371   1.1  drochner #define	FRAG_FLAGS_TYPE_CMD	0x02		/* type: command frame */
    372   1.1  drochner #define	FRAG_FLAGS_TYPE_OPT	0x03		/* type: options */
    373   1.1  drochner #define	FRAG_FLAGS_TYPE_RX	0x04		/* type: command */
    374   1.1  drochner #define	FRAG_FLAGS_TYPE_RESP	0x05		/* type: response */
    375   1.1  drochner #define	FRAG_FLAGS_VALID	0x80		/* valid descriptor */
    376   1.1  drochner 
    377   1.1  drochner struct txp_opt_desc {
    378   1.1  drochner 	u_int8_t		opt_desctype:3,
    379   1.1  drochner 				opt_rsvd:1,
    380   1.1  drochner 				opt_type:4;
    381   1.1  drochner 
    382   1.1  drochner 	u_int8_t		opt_num;
    383   1.1  drochner 	u_int16_t		opt_dep1;
    384   1.1  drochner 	u_int32_t		opt_dep2;
    385   1.1  drochner 	u_int32_t		opt_dep3;
    386   1.1  drochner 	u_int32_t		opt_dep4;
    387   1.1  drochner };
    388   1.1  drochner 
    389   1.1  drochner struct txp_ipsec_desc {
    390   1.1  drochner 	u_int8_t		ipsec_desctpe:3,
    391   1.1  drochner 				ipsec_rsvd:1,
    392   1.1  drochner 				ipsec_type:4;
    393   1.1  drochner 
    394   1.1  drochner 	u_int8_t		ipsec_num;
    395   1.1  drochner 	u_int16_t		ipsec_flags;
    396   1.1  drochner 	u_int16_t		ipsec_ah1;
    397   1.1  drochner 	u_int16_t		ipsec_esp1;
    398   1.1  drochner 	u_int16_t		ipsec_ah2;
    399   1.1  drochner 	u_int16_t		ipsec_esp2;
    400   1.1  drochner 	u_int32_t		ipsec_rsvd1;
    401   1.1  drochner };
    402   1.1  drochner 
    403   1.1  drochner struct txp_tcpseg_desc {
    404   1.1  drochner 	u_int8_t		tcpseg_desctype:3,
    405   1.1  drochner 				tcpseg_rsvd:1,
    406   1.1  drochner 				tcpseg_type:4;
    407   1.1  drochner 
    408   1.1  drochner 	u_int8_t		tcpseg_num;
    409   1.1  drochner 
    410   1.1  drochner 	u_int16_t		tcpseg_mss:12,
    411   1.1  drochner 				tcpseg_misc:4;
    412   1.1  drochner 
    413   1.1  drochner 	u_int32_t		tcpseg_respaddr;
    414   1.1  drochner 	u_int32_t		tcpseg_txbytes;
    415   1.1  drochner 	u_int32_t		tcpseg_lss;
    416   1.1  drochner };
    417   1.1  drochner 
    418   1.1  drochner /*
    419   1.1  drochner  * Transceiver types
    420   1.1  drochner  */
    421   1.1  drochner #define	TXP_XCVR_10_HDX		0
    422   1.1  drochner #define	TXP_XCVR_10_FDX		1
    423   1.1  drochner #define	TXP_XCVR_100_HDX	2
    424   1.1  drochner #define	TXP_XCVR_100_FDX	3
    425   1.1  drochner #define	TXP_XCVR_AUTO		4
    426   1.1  drochner 
    427   1.1  drochner #define TXP_MEDIA_CRC		0x0004	/* crc strip disable */
    428   1.1  drochner #define	TXP_MEDIA_CD		0x0010	/* collision detection */
    429   1.1  drochner #define	TXP_MEDIA_CS		0x0020	/* carrier sense */
    430   1.1  drochner #define	TXP_MEDIA_POL		0x0400	/* polarity reversed */
    431   1.1  drochner #define	TXP_MEDIA_NOLINK	0x0800	/* 0 = link, 1 = no link */
    432   1.1  drochner 
    433   1.1  drochner /*
    434   1.1  drochner  * receive filter bits (par1 to TXP_CMD_RX_FILTER_{READ|WRITE}
    435   1.1  drochner  */
    436   1.1  drochner #define	TXP_RXFILT_DIRECT	0x0001	/* directed packets */
    437   1.1  drochner #define	TXP_RXFILT_ALLMULTI	0x0002	/* all multicast packets */
    438   1.1  drochner #define	TXP_RXFILT_BROADCAST	0x0004	/* broadcast packets */
    439   1.1  drochner #define	TXP_RXFILT_PROMISC	0x0008	/* promiscuous mode */
    440   1.1  drochner #define	TXP_RXFILT_HASHMULTI	0x0010	/* use multicast filter */
    441   1.1  drochner 
    442   1.1  drochner /* multicast polynomial */
    443   1.1  drochner #define	TXP_POLYNOMIAL		0x04c11db7
    444   1.1  drochner 
    445   1.1  drochner /*
    446   1.1  drochner  * boot record (pointers to rings)
    447   1.1  drochner  */
    448   1.1  drochner struct txp_boot_record {
    449   1.1  drochner 	volatile u_int32_t	br_hostvar_lo;		/* host ring pointer */
    450   1.1  drochner 	volatile u_int32_t	br_hostvar_hi;
    451   1.1  drochner 	volatile u_int32_t	br_txlopri_lo;		/* tx low pri ring */
    452   1.1  drochner 	volatile u_int32_t	br_txlopri_hi;
    453   1.1  drochner 	volatile u_int32_t	br_txlopri_siz;
    454   1.1  drochner 	volatile u_int32_t	br_txhipri_lo;		/* tx high pri ring */
    455   1.1  drochner 	volatile u_int32_t	br_txhipri_hi;
    456   1.1  drochner 	volatile u_int32_t	br_txhipri_siz;
    457   1.1  drochner 	volatile u_int32_t	br_rxlopri_lo;		/* rx low pri ring */
    458   1.1  drochner 	volatile u_int32_t	br_rxlopri_hi;
    459   1.1  drochner 	volatile u_int32_t	br_rxlopri_siz;
    460   1.1  drochner 	volatile u_int32_t	br_rxbuf_lo;		/* rx buffer ring */
    461   1.1  drochner 	volatile u_int32_t	br_rxbuf_hi;
    462   1.1  drochner 	volatile u_int32_t	br_rxbuf_siz;
    463   1.1  drochner 	volatile u_int32_t	br_cmd_lo;		/* command ring */
    464   1.1  drochner 	volatile u_int32_t	br_cmd_hi;
    465   1.1  drochner 	volatile u_int32_t	br_cmd_siz;
    466   1.1  drochner 	volatile u_int32_t	br_resp_lo;		/* response ring */
    467   1.1  drochner 	volatile u_int32_t	br_resp_hi;
    468   1.1  drochner 	volatile u_int32_t	br_resp_siz;
    469   1.1  drochner 	volatile u_int32_t	br_zero_lo;		/* zero word */
    470   1.1  drochner 	volatile u_int32_t	br_zero_hi;
    471   1.1  drochner 	volatile u_int32_t	br_rxhipri_lo;		/* rx high pri ring */
    472   1.1  drochner 	volatile u_int32_t	br_rxhipri_hi;
    473   1.1  drochner 	volatile u_int32_t	br_rxhipri_siz;
    474   1.1  drochner };
    475   1.1  drochner 
    476   1.1  drochner /*
    477   1.1  drochner  * hostvar structure (shared with typhoon)
    478   1.1  drochner  */
    479   1.1  drochner struct txp_hostvar {
    480   1.1  drochner 	volatile u_int32_t	hv_rx_hi_read_idx;	/* host->arm */
    481   1.1  drochner 	volatile u_int32_t	hv_rx_lo_read_idx;	/* host->arm */
    482   1.1  drochner 	volatile u_int32_t	hv_rx_buf_write_idx;	/* host->arm */
    483   1.1  drochner 	volatile u_int32_t	hv_resp_read_idx;	/* host->arm */
    484   1.1  drochner 	volatile u_int32_t	hv_tx_lo_desc_read_idx;	/* arm->host */
    485   1.1  drochner 	volatile u_int32_t	hv_tx_hi_desc_read_idx;	/* arm->host */
    486   1.1  drochner 	volatile u_int32_t	hv_rx_lo_write_idx;	/* arm->host */
    487   1.1  drochner 	volatile u_int32_t	hv_rx_buf_read_idx;	/* arm->host */
    488   1.1  drochner 	volatile u_int32_t	hv_cmd_read_idx;	/* arm->host */
    489   1.1  drochner 	volatile u_int32_t	hv_resp_write_idx;	/* arm->host */
    490   1.1  drochner 	volatile u_int32_t	hv_rx_hi_write_idx;	/* arm->host */
    491   1.1  drochner };
    492   1.1  drochner 
    493   1.1  drochner /*
    494   1.1  drochner  * TYPHOON status register state (in TXP_A2H_0)
    495   1.1  drochner  */
    496   1.1  drochner #define	STAT_ROM_CODE			0x00000001
    497   1.1  drochner #define	STAT_ROM_EEPROM_LOAD		0x00000002
    498   1.1  drochner #define	STAT_WAITING_FOR_BOOT		0x00000007
    499   1.1  drochner #define	STAT_RUNNING			0x00000009
    500   1.1  drochner #define	STAT_WAITING_FOR_HOST_REQUEST	0x0000000d
    501   1.1  drochner #define	STAT_WAITING_FOR_SEGMENT	0x00000010
    502   1.1  drochner #define	STAT_SLEEPING			0x00000011
    503   1.1  drochner #define	STAT_HALTED			0x00000014
    504   1.1  drochner 
    505   1.1  drochner #define	TX_ENTRIES			256
    506   1.1  drochner #define	RX_ENTRIES			128
    507   1.1  drochner #define	RXBUF_ENTRIES			256
    508   1.1  drochner #define	CMD_ENTRIES			32
    509   1.1  drochner #define	RSP_ENTRIES			32
    510   1.1  drochner 
    511   1.1  drochner #define	OFFLOAD_TCPCKSUM		0x00000002	/* tcp checksum */
    512   1.1  drochner #define	OFFLOAD_UDPCKSUM		0x00000004	/* udp checksum */
    513   1.1  drochner #define	OFFLOAD_IPCKSUM			0x00000008	/* ip checksum */
    514   1.1  drochner #define	OFFLOAD_IPSEC			0x00000010	/* ipsec enable */
    515   1.1  drochner #define	OFFLOAD_BCAST			0x00000020	/* broadcast throttle */
    516   1.1  drochner #define	OFFLOAD_DHCP			0x00000040	/* dhcp prevention */
    517   1.1  drochner #define	OFFLOAD_VLAN			0x00000080	/* vlan enable */
    518   1.1  drochner #define	OFFLOAD_FILTER			0x00000100	/* filter enable */
    519   1.1  drochner #define	OFFLOAD_TCPSEG			0x00000200	/* tcp segmentation */
    520   1.1  drochner #define	OFFLOAD_MASK			0xfffffffe	/* mask off low bit */
    521   1.1  drochner 
    522   1.1  drochner /*
    523   1.1  drochner  * Macros for converting array indices to offsets within the descriptor
    524   1.1  drochner  * arrays.  The chip operates on offsets, but it's much easier for us
    525   1.1  drochner  * to operate on indices.  Assumes descriptor entries are 16 bytes.
    526   1.1  drochner  */
    527   1.1  drochner #define	TXP_IDX2OFFSET(idx)	((idx) << 4)
    528   1.1  drochner #define	TXP_OFFSET2IDX(off)	((off) >> 4)
    529   1.1  drochner 
    530   1.1  drochner struct txp_dma_alloc {
    531   1.4  christos 	void *			dma_vaddr;
    532   1.1  drochner 	bus_dmamap_t		dma_map;
    533   1.7   thorpej #define	dma_paddr		dma_map->dm_segs[0].ds_addr
    534   1.1  drochner 	bus_dma_segment_t	dma_seg;
    535   1.1  drochner 	int			dma_nseg;
    536   1.1  drochner };
    537   1.1  drochner 
    538   1.1  drochner struct txp_cmd_ring {
    539   1.1  drochner 	struct txp_cmd_desc	*base;
    540   1.1  drochner 	u_int32_t		lastwrite;
    541   1.1  drochner 	u_int32_t		size;
    542   1.1  drochner };
    543   1.1  drochner 
    544   1.1  drochner struct txp_rsp_ring {
    545   1.1  drochner 	struct txp_rsp_desc	*base;
    546   1.1  drochner 	u_int32_t		lastwrite;
    547   1.1  drochner 	u_int32_t		size;
    548   1.1  drochner };
    549   1.1  drochner 
    550   1.1  drochner struct txp_tx_ring {
    551   1.1  drochner 	struct txp_tx_desc	*r_desc;	/* base address of descs */
    552   1.1  drochner 	u_int32_t		r_reg;		/* register to activate */
    553   1.1  drochner 	u_int32_t		r_prod;		/* producer */
    554   1.1  drochner 	u_int32_t		r_cons;		/* consumer */
    555   1.1  drochner 	u_int32_t		r_cnt;		/* # descs in use */
    556   1.1  drochner 	volatile u_int32_t	*r_off;		/* hostvar index pointer */
    557   1.1  drochner };
    558   1.1  drochner 
    559   1.1  drochner struct txp_swdesc {
    560   1.1  drochner 	struct mbuf *		sd_mbuf;
    561   1.1  drochner 	bus_dmamap_t		sd_map;
    562   1.1  drochner };
    563   1.1  drochner 
    564   1.1  drochner struct txp_rx_ring {
    565   1.1  drochner 	struct txp_rx_desc	*r_desc;	/* base address of descs */
    566   1.1  drochner 	volatile u_int32_t	*r_roff;	/* hv read offset ptr */
    567   1.1  drochner 	volatile u_int32_t	*r_woff;	/* hv write offset ptr */
    568   1.1  drochner };
    569   1.1  drochner 
    570   1.1  drochner struct txp_softc {
    571   1.6       chs 	device_t		sc_dev;		/* base device */
    572   1.1  drochner 	struct ethercom		sc_arpcom;	/* ethernet common */
    573   1.1  drochner 	struct txp_hostvar	*sc_hostvar;
    574   1.1  drochner 	struct txp_boot_record	*sc_boot;
    575   1.1  drochner 	bus_space_handle_t	sc_bh;		/* bus handle (regs) */
    576   1.1  drochner 	bus_space_tag_t		sc_bt;		/* bus tag (regs) */
    577   1.1  drochner 	bus_dma_tag_t		sc_dmat;	/* dma tag */
    578   1.1  drochner 	struct txp_cmd_ring	sc_cmdring;
    579   1.1  drochner 	struct txp_rsp_ring	sc_rspring;
    580   1.1  drochner 	struct txp_swdesc	sc_txd[TX_ENTRIES];
    581   1.1  drochner 	void *			sc_ih;
    582   1.1  drochner 	struct callout		sc_tick;
    583   1.1  drochner 	struct ifmedia		sc_ifmedia;
    584   1.1  drochner 	struct txp_tx_ring	sc_txhir, sc_txlor;
    585   1.1  drochner 	struct txp_rxbuf_desc	*sc_rxbufs;
    586   1.1  drochner 	struct txp_rx_ring	sc_rxhir, sc_rxlor;
    587  1.10   thorpej 	struct txp_swdesc	sc_rxd[RXBUF_ENTRIES];
    588  1.10   thorpej 	struct txp_swdesc	*sc_rxd_pool[RXBUF_ENTRIES];
    589  1.10   thorpej 	unsigned int		sc_txd_pool_ptr;
    590   1.1  drochner 	u_int16_t		sc_xcvr;
    591   1.1  drochner 	u_int16_t		sc_seq;
    592   1.1  drochner 	struct txp_dma_alloc	sc_boot_dma, sc_host_dma, sc_zero_dma;
    593   1.1  drochner 	struct txp_dma_alloc	sc_rxhiring_dma, sc_rxloring_dma;
    594   1.1  drochner 	struct txp_dma_alloc	sc_txhiring_dma, sc_txloring_dma;
    595   1.1  drochner 	struct txp_dma_alloc	sc_cmdring_dma, sc_rspring_dma;
    596   1.1  drochner 	struct txp_dma_alloc	sc_rxbufring_dma;
    597   1.1  drochner 	int			sc_cold;
    598   1.1  drochner 	u_int32_t		sc_rx_capability, sc_tx_capability;
    599   1.2  drochner 	int			sc_flags;
    600   1.2  drochner #define TXP_USESUBSYSTEM	0x1 /* use PCI subsys reg for detail info */
    601   1.2  drochner #define TXP_SERVERVERSION	0x2
    602   1.2  drochner #define TXP_FIBER		0x4
    603   1.1  drochner };
    604   1.1  drochner 
    605   1.6       chs #define	TXP_DEVNAME(sc)		((sc)->sc_cold ? "" : device_xname((sc)->sc_dev))
    606   1.1  drochner 
    607   1.1  drochner struct txp_fw_file_header {
    608   1.1  drochner 	u_int8_t	magicid[8];	/* TYPHOON\0 */
    609   1.1  drochner 	u_int32_t	version;
    610   1.1  drochner 	u_int32_t	nsections;
    611   1.1  drochner 	u_int32_t	addr;
    612   1.8   thorpej 	u_int32_t	hmac[5];
    613   1.1  drochner };
    614   1.1  drochner 
    615   1.1  drochner struct txp_fw_section_header {
    616   1.1  drochner 	u_int32_t	nbytes;
    617   1.1  drochner 	u_int16_t	cksum;
    618   1.1  drochner 	u_int16_t	reserved;
    619   1.1  drochner 	u_int32_t	addr;
    620   1.1  drochner };
    621   1.1  drochner 
    622   1.1  drochner #define	TXP_MAX_SEGLEN	0xffff
    623   1.1  drochner #define	TXP_MAX_PKTLEN	0x0800
    624   1.1  drochner 
    625   1.9   thorpej #define	TXP_MAXTXSEGS	16
    626   1.9   thorpej 
    627   1.1  drochner #define	WRITE_REG(sc,reg,val) \
    628   1.1  drochner     bus_space_write_4((sc)->sc_bt, (sc)->sc_bh, reg, val)
    629   1.1  drochner #define	READ_REG(sc,reg) \
    630   1.1  drochner     bus_space_read_4((sc)->sc_bt, (sc)->sc_bh, reg)
    631   1.1  drochner 
    632  1.11   thorpej #endif /* _DEV_PCI_IF_TXPREG_H_ */
    633