Annotation of sys/dev/ic/dp8390reg.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: dp8390reg.h,v 1.9 2003/10/21 18:58:49 jmc Exp $ */
! 2: /* $NetBSD: dp8390reg.h,v 1.3 1997/04/29 04:32:08 scottr Exp $ */
! 3:
! 4: /*
! 5: * National Semiconductor DS8390 NIC register definitions.
! 6: *
! 7: * Copyright (C) 1993, David Greenman. This software may be used, modified,
! 8: * copied, distributed, and sold, in both source and binary form provided that
! 9: * the above copyright and these terms are retained. Under no circumstances is
! 10: * the author responsible for the proper functioning of this software, nor does
! 11: * the author assume any responsibility for damages incurred with its use.
! 12: */
! 13:
! 14: /*
! 15: * Page 0 register offsets
! 16: */
! 17: #define ED_P0_CR 0x00 /* Command Register */
! 18:
! 19: #define ED_P0_CLDA0 0x01 /* Current Local DMA Addr low (read) */
! 20: #define ED_P0_PSTART 0x01 /* Page Start register (write) */
! 21:
! 22: #define ED_P0_CLDA1 0x02 /* Current Local DMA Addr high (read) */
! 23: #define ED_P0_PSTOP 0x02 /* Page Stop register (write) */
! 24:
! 25: #define ED_P0_BNRY 0x03 /* Boundary Pointer */
! 26:
! 27: #define ED_P0_TSR 0x04 /* Transmit Status Register (read) */
! 28: #define ED_P0_TPSR 0x04 /* Transmit Page Start (write) */
! 29:
! 30: #define ED_P0_NCR 0x05 /* Number of Collisions Reg (read) */
! 31: #define ED_P0_TBCR0 0x05 /* Transmit Byte count, low (write) */
! 32:
! 33: #define ED_P0_FIFO 0x06 /* FIFO register (read) */
! 34: #define ED_P0_TBCR1 0x06 /* Transmit Byte count, high (write) */
! 35:
! 36: #define ED_P0_ISR 0x07 /* Interrupt Status Register */
! 37:
! 38: #define ED_P0_CRDA0 0x08 /* Current Remote DMA Addr low (read) */
! 39: #define ED_P0_RSAR0 0x08 /* Remote Start Address low (write) */
! 40:
! 41: #define ED_P0_CRDA1 0x09 /* Current Remote DMA Addr high (read) */
! 42: #define ED_P0_RSAR1 0x09 /* Remote Start Address high (write) */
! 43:
! 44: #define ED_P0_RBCR0 0x0a /* Remote Byte Count low (write) */
! 45:
! 46: #define ED_P0_RBCR1 0x0b /* Remote Byte Count high (write) */
! 47:
! 48: #define ED_P0_RSR 0x0c /* Receive Status (read) */
! 49: #define ED_P0_RCR 0x0c /* Receive Configuration Reg (write) */
! 50:
! 51: #define ED_P0_CNTR0 0x0d /* frame alignment error counter (read) */
! 52: #define ED_P0_TCR 0x0d /* Transmit Configuration Reg (write) */
! 53:
! 54: #define ED_P0_CNTR1 0x0e /* CRC error counter (read) */
! 55: #define ED_P0_DCR 0x0e /* Data Configuration Reg (write) */
! 56:
! 57: #define ED_P0_CNTR2 0x0f /* missed packet counter (read) */
! 58: #define ED_P0_IMR 0x0f /* Interrupt Mask Register (write) */
! 59:
! 60: /*
! 61: * Page 1 register offsets
! 62: */
! 63: #define ED_P1_CR 0x00 /* Command Register */
! 64: #define ED_P1_PAR0 0x01 /* Physical Address Register 0 */
! 65: #define ED_P1_PAR1 0x02 /* Physical Address Register 1 */
! 66: #define ED_P1_PAR2 0x03 /* Physical Address Register 2 */
! 67: #define ED_P1_PAR3 0x04 /* Physical Address Register 3 */
! 68: #define ED_P1_PAR4 0x05 /* Physical Address Register 4 */
! 69: #define ED_P1_PAR5 0x06 /* Physical Address Register 5 */
! 70: #define ED_P1_CURR 0x07 /* Current RX ring-buffer page */
! 71: #define ED_P1_MAR0 0x08 /* Multicast Address Register 0 */
! 72: #define ED_P1_MAR1 0x09 /* Multicast Address Register 1 */
! 73: #define ED_P1_MAR2 0x0a /* Multicast Address Register 2 */
! 74: #define ED_P1_MAR3 0x0b /* Multicast Address Register 3 */
! 75: #define ED_P1_MAR4 0x0c /* Multicast Address Register 4 */
! 76: #define ED_P1_MAR5 0x0d /* Multicast Address Register 5 */
! 77: #define ED_P1_MAR6 0x0e /* Multicast Address Register 6 */
! 78: #define ED_P1_MAR7 0x0f /* Multicast Address Register 7 */
! 79:
! 80: /*
! 81: * Page 2 register offsets
! 82: */
! 83: #define ED_P2_CR 0x00 /* Command Register */
! 84: #define ED_P2_PSTART 0x01 /* Page Start (read) */
! 85: #define ED_P2_CLDA0 0x01 /* Current Local DMA Addr 0 (write) */
! 86: #define ED_P2_PSTOP 0x02 /* Page Stop (read) */
! 87: #define ED_P2_CLDA1 0x02 /* Current Local DMA Addr 1 (write) */
! 88: #define ED_P2_RNPP 0x03 /* Remote Next Packet Pointer */
! 89: #define ED_P2_TPSR 0x04 /* Transmit Page Start (read) */
! 90: #define ED_P2_LNPP 0x05 /* Local Next Packet Pointer */
! 91: #define ED_P2_ACU 0x06 /* Address Counter Upper */
! 92: #define ED_P2_ACL 0x07 /* Address Counter Lower */
! 93: #define ED_P2_RCR 0x0c /* Receive Configuration Register (read) */
! 94: #define ED_P2_TCR 0x0d /* Transmit Configuration Register (read) */
! 95: #define ED_P2_DCR 0x0e /* Data Configuration Register (read) */
! 96: #define ED_P2_IMR 0x0f /* Interrupt Mask Register (read) */
! 97:
! 98: /*
! 99: * Command Register (CR) definitions
! 100: */
! 101:
! 102: /*
! 103: * STP: SToP. Software reset command. Takes the controller offline. No
! 104: * packets will be received or transmitted. Any reception or transmission in
! 105: * progress will continue to completion before entering reset state. To exit
! 106: * this state, the STP bit must reset and the STA bit must be set. The
! 107: * software reset has executed only when indicated by the RST bit in the ISR
! 108: * being set.
! 109: */
! 110: #define ED_CR_STP 0x01
! 111:
! 112: /*
! 113: * STA: STArt. This bit is used to activate the NIC after either power-up, or
! 114: * when the NIC has been put in reset mode by software command or error.
! 115: */
! 116: #define ED_CR_STA 0x02
! 117:
! 118: /*
! 119: * TXP: Transmit Packet. This bit must be set to indicate transmission of a
! 120: * packet. TXP is internally reset either after the transmission is completed
! 121: * or aborted. This bit should be set only after the Transmit Byte Count and
! 122: * Transmit Page Start register have been programmed.
! 123: */
! 124: #define ED_CR_TXP 0x04
! 125:
! 126: /*
! 127: * RD0, RD1, RD2: Remote DMA Command. These three bits control the operation
! 128: * of the remote DMA channel. RD2 can be set to abort any remote DMA command
! 129: * in progress. The Remote Byte Count registers should be cleared when a
! 130: * remote DMA has been aborted. The Remote Start Addresses are not restored
! 131: * to the starting address if the remote DMA is aborted.
! 132: *
! 133: * RD2 RD1 RD0 function
! 134: * 0 0 0 not allowed
! 135: * 0 0 1 remote read
! 136: * 0 1 0 remote write
! 137: * 0 1 1 send packet
! 138: * 1 X X abort
! 139: */
! 140: #define ED_CR_RD0 0x08
! 141: #define ED_CR_RD1 0x10
! 142: #define ED_CR_RD2 0x20
! 143:
! 144: /*
! 145: * PS0, PS1: Page Select. The two bits select which register set or 'page' to
! 146: * access.
! 147: *
! 148: * PS1 PS0 page
! 149: * 0 0 0
! 150: * 0 1 1
! 151: * 1 0 2
! 152: * 1 1 3 (only on chips which have extensions to the dp8390)
! 153: */
! 154: #define ED_CR_PS0 0x40
! 155: #define ED_CR_PS1 0x80
! 156: /* bit encoded aliases */
! 157: #define ED_CR_PAGE_0 0x00 /* (for consistency) */
! 158: #define ED_CR_PAGE_1 (ED_CR_PS0)
! 159: #define ED_CR_PAGE_2 (ED_CR_PS1)
! 160: #define ED_CR_PAGE_3 (ED_CR_PS1|ED_CR_PS0)
! 161:
! 162: /*
! 163: * Interrupt Status Register (ISR) definitions
! 164: */
! 165:
! 166: /*
! 167: * PRX: Packet Received. Indicates packet received with no errors.
! 168: */
! 169: #define ED_ISR_PRX 0x01
! 170:
! 171: /*
! 172: * PTX: Packet Transmitted. Indicates packet transmitted with no errors.
! 173: */
! 174: #define ED_ISR_PTX 0x02
! 175:
! 176: /*
! 177: * RXE: Receive Error. Indicates that a packet was received with one or more
! 178: * the following errors: CRC error, frame alignment error, FIFO overrun,
! 179: * missed packet.
! 180: */
! 181: #define ED_ISR_RXE 0x04
! 182:
! 183: /*
! 184: * TXE: Transmission Error. Indicates that an attempt to transmit a packet
! 185: * resulted in one or more of the following errors: excessive collisions, FIFO
! 186: * underrun.
! 187: */
! 188: #define ED_ISR_TXE 0x08
! 189:
! 190: /*
! 191: * OVW: OverWrite. Indicates a receive ring-buffer overrun. Incoming network
! 192: * would exceed (has exceeded?) the boundary pointer, resulting in data that
! 193: * was previously received and not yet read from the buffer to be overwritten.
! 194: */
! 195: #define ED_ISR_OVW 0x10
! 196:
! 197: /*
! 198: * CNT: Counter Overflow. Set when the MSB of one or more of the Network Tally
! 199: * Counters has been set.
! 200: */
! 201: #define ED_ISR_CNT 0x20
! 202:
! 203: /*
! 204: * RDC: Remote Data Complete. Indicates that a Remote DMA operation has
! 205: * completed.
! 206: */
! 207: #define ED_ISR_RDC 0x40
! 208:
! 209: /*
! 210: * RST: Reset status. Set when the NIC enters the reset state and cleared when
! 211: * a Start Command is issued to the CR. This bit is also set when a receive
! 212: * ring-buffer overrun (OverWrite) occurs and is cleared when one or more
! 213: * packets have been removed from the ring. This is a read-only bit.
! 214: */
! 215: #define ED_ISR_RST 0x80
! 216:
! 217: /*
! 218: * Interrupt Mask Register (IMR) definitions
! 219: */
! 220:
! 221: /*
! 222: * PRXE: Packet Received interrupt Enable. If set, a received packet will
! 223: * cause an interrupt.
! 224: */
! 225: #define ED_IMR_PRXE 0x01
! 226:
! 227: /*
! 228: * PTXE: Packet Transmit interrupt Enable. If set, an interrupt is generated
! 229: * when a packet transmission completes.
! 230: */
! 231: #define ED_IMR_PTXE 0x02
! 232:
! 233: /*
! 234: * RXEE: Receive Error interrupt Enable. If set, an interrupt will occur
! 235: * whenever a packet is received with an error.
! 236: */
! 237: #define ED_IMR_RXEE 0x04
! 238:
! 239: /*
! 240: * TXEE: Transmit Error interrupt Enable. If set, an interrupt will occur
! 241: * whenever a transmission results in an error.
! 242: */
! 243: #define ED_IMR_TXEE 0x08
! 244:
! 245: /*
! 246: * OVWE: OverWrite error interrupt Enable. If set, an interrupt is generated
! 247: * whenever the receive ring-buffer is overrun. i.e. when the boundary pointer
! 248: * is exceeded.
! 249: */
! 250: #define ED_IMR_OVWE 0x10
! 251:
! 252: /*
! 253: * CNTE: Counter overflow interrupt Enable. If set, an interrupt is generated
! 254: * whenever the MSB of one or more of the Network Statistics counters has been
! 255: * set.
! 256: */
! 257: #define ED_IMR_CNTE 0x20
! 258:
! 259: /*
! 260: * RDCE: Remote DMA Complete interrupt Enable. If set, an interrupt is
! 261: * generated when a remote DMA transfer has completed.
! 262: */
! 263: #define ED_IMR_RDCE 0x40
! 264:
! 265: /*
! 266: * Bit 7 is unused/reserved.
! 267: */
! 268:
! 269: /*
! 270: * Data Configuration Register (DCR) definitions
! 271: */
! 272:
! 273: /*
! 274: * WTS: Word Transfer Select. WTS establishes byte or word transfers for both
! 275: * remote and local DMA transfers
! 276: */
! 277: #define ED_DCR_WTS 0x01
! 278:
! 279: /*
! 280: * BOS: Byte Order Select. BOS sets the byte order for the host. Should be 0
! 281: * for 80x86, and 1 for 68000 series processors
! 282: */
! 283: #define ED_DCR_BOS 0x02
! 284:
! 285: /*
! 286: * LAS: Long Address Select. When LAS is 1, the contents of the remote DMA
! 287: * registers RSAR0 and RSAR1 are used to provide A16-A31.
! 288: */
! 289: #define ED_DCR_LAS 0x04
! 290:
! 291: /*
! 292: * LS: Loopback Select. When 0, loopback mode is selected. Bits D1 and D2 of
! 293: * the TCR must also be programmed for loopback operation. When 1, normal
! 294: * operation is selected.
! 295: */
! 296: #define ED_DCR_LS 0x08
! 297:
! 298: /*
! 299: * AR: Auto-initialize Remote. When 0, data must be removed from ring-buffer
! 300: * under program control. When 1, remote DMA is automatically initiated and
! 301: * the boundary pointer is automatically updated.
! 302: */
! 303: #define ED_DCR_AR 0x10
! 304:
! 305: /*
! 306: * FT0, FT1: Fifo Threshold select.
! 307: *
! 308: * FT1 FT0 Word-width Byte-width
! 309: * 0 0 1 word 2 bytes
! 310: * 0 1 2 words 4 bytes
! 311: * 1 0 4 words 8 bytes
! 312: * 1 1 8 words 12 bytes
! 313: *
! 314: * During transmission, the FIFO threshold indicates the number of bytes or
! 315: * words that the FIFO has filled from the local DMA before BREQ is asserted.
! 316: * The transmission threshold is 16 bytes minus the receiver threshold.
! 317: */
! 318: #define ED_DCR_FT0 0x20
! 319: #define ED_DCR_FT1 0x40
! 320:
! 321: /*
! 322: * bit 7 (0x80) is unused/reserved
! 323: */
! 324:
! 325: /*
! 326: * Transmit Configuration Register (TCR) definitions
! 327: */
! 328:
! 329: /*
! 330: * CRC: Inhibit CRC. If 0, CRC will be appended by the transmitter, if 0, CRC
! 331: * is not appended by the transmitter.
! 332: */
! 333: #define ED_TCR_CRC 0x01
! 334:
! 335: /*
! 336: * LB0, LB1: Loopback control. These two bits set the type of loopback that is
! 337: * to be performed.
! 338: *
! 339: * LB1 LB0 mode
! 340: * 0 0 0 - normal operation (DCR_LS = 0)
! 341: * 0 1 1 - internal loopback (DCR_LS = 0)
! 342: * 1 0 2 - external loopback (DCR_LS = 1)
! 343: * 1 1 3 - external loopback (DCR_LS = 0)
! 344: */
! 345: #define ED_TCR_LB0 0x02
! 346: #define ED_TCR_LB1 0x04
! 347:
! 348: /*
! 349: * ATD: Auto Transmit Disable. Clear for normal operation. When set, allows
! 350: * another station to disable the NIC's transmitter by transmitting to a
! 351: * multicast address hashing to bit 62. Reception of a multicast address
! 352: * hashing to bit 63 enables the transmitter.
! 353: */
! 354: #define ED_TCR_ATD 0x08
! 355:
! 356: /*
! 357: * OFST: Collision Offset enable. This bit when set modifies the backoff
! 358: * algorithm to allow prioritization of nodes.
! 359: */
! 360: #define ED_TCR_OFST 0x10
! 361:
! 362: /*
! 363: * bits 5, 6, and 7 are unused/reserved
! 364: */
! 365:
! 366: /*
! 367: * Transmit Status Register (TSR) definitions
! 368: */
! 369:
! 370: /*
! 371: * PTX: Packet Transmitted. Indicates successful transmission of packet.
! 372: */
! 373: #define ED_TSR_PTX 0x01
! 374:
! 375: /*
! 376: * bit 1 (0x02) is unused/reserved
! 377: */
! 378:
! 379: /*
! 380: * COL: Transmit Collided. Indicates that the transmission collided at least
! 381: * once with another station on the network.
! 382: */
! 383: #define ED_TSR_COL 0x04
! 384:
! 385: /*
! 386: * ABT: Transmit aborted. Indicates that the transmission was aborted due to
! 387: * excessive collisions.
! 388: */
! 389: #define ED_TSR_ABT 0x08
! 390:
! 391: /*
! 392: * CRS: Carrier Sense Lost. Indicates that carrier was lost during the
! 393: * transmission of the packet. (Transmission is not aborted because of a loss
! 394: * of carrier).
! 395: */
! 396: #define ED_TSR_CRS 0x10
! 397:
! 398: /*
! 399: * FU: FIFO Underrun. Indicates that the NIC wasn't able to access bus/
! 400: * transmission memory before the FIFO emptied. Transmission of the packet was
! 401: * aborted.
! 402: */
! 403: #define ED_TSR_FU 0x20
! 404:
! 405: /*
! 406: * CDH: CD Heartbeat. Indicates that the collision detection circuitry isn't
! 407: * working correctly during a collision heartbeat test.
! 408: */
! 409: #define ED_TSR_CDH 0x40
! 410:
! 411: /*
! 412: * OWC: Out of Window Collision: Indicates that a collision occurred after a
! 413: * slot time (51.2us). The transmission is rescheduled just as in normal
! 414: * collisions.
! 415: */
! 416: #define ED_TSR_OWC 0x80
! 417:
! 418: /*
! 419: * Receiver Configuration Register (RCR) definitions
! 420: */
! 421:
! 422: /*
! 423: * SEP: Save Errored Packets. If 0, error packets are discarded. If set to 1,
! 424: * packets with CRC and frame errors are not discarded.
! 425: */
! 426: #define ED_RCR_SEP 0x01
! 427:
! 428: /*
! 429: * AR: Accept Runt packet. If 0, packet with less than 64 byte are discarded.
! 430: * If set to 1, packets with less than 64 byte are not discarded.
! 431: */
! 432: #define ED_RCR_AR 0x02
! 433:
! 434: /*
! 435: * AB: Accept Broadcast. If set, packets sent to the broadcast address will be
! 436: * accepted.
! 437: */
! 438: #define ED_RCR_AB 0x04
! 439:
! 440: /*
! 441: * AM: Accept Multicast. If set, packets sent to a multicast address are
! 442: * checked for a match in the hashing array. If clear, multicast packets are
! 443: * ignored.
! 444: */
! 445: #define ED_RCR_AM 0x08
! 446:
! 447: /*
! 448: * PRO: Promiscuous Physical. If set, all packets with a physical addresses
! 449: * are accepted. If clear, a physical destination address must match this
! 450: * station's address. Note: for full promiscuous mode, RCR_AB and RCR_AM must
! 451: * also be set. In addition, the multicast hashing array must be set to all
! 452: * 1's so that all multicast addresses are accepted.
! 453: */
! 454: #define ED_RCR_PRO 0x10
! 455:
! 456: /*
! 457: * MON: Monitor Mode. If set, packets will be checked for good CRC and
! 458: * framing, but are not stored in the ring-buffer. If clear, packets are
! 459: * stored (normal operation).
! 460: */
! 461: #define ED_RCR_MON 0x20
! 462:
! 463: /*
! 464: * INTT: Interrupt Trigger Mode. Must be set if AX88190.
! 465: */
! 466: #define ED_RCR_INTT 0x40
! 467:
! 468: /*
! 469: * Bit 7 is unused/reserved.
! 470: */
! 471:
! 472: /*
! 473: * Receiver Status Register (RSR) definitions
! 474: */
! 475:
! 476: /*
! 477: * PRX: Packet Received without error.
! 478: */
! 479: #define ED_RSR_PRX 0x01
! 480:
! 481: /*
! 482: * CRC: CRC error. Indicates that a packet has a CRC error. Also set for
! 483: * frame alignment errors.
! 484: */
! 485: #define ED_RSR_CRC 0x02
! 486:
! 487: /*
! 488: * FAE: Frame Alignment Error. Indicates that the incoming packet did not end
! 489: * on a byte boundary and the CRC did not match at the last byte boundary.
! 490: */
! 491: #define ED_RSR_FAE 0x04
! 492:
! 493: /*
! 494: * FO: FIFO Overrun. Indicates that the FIFO was not serviced (during local
! 495: * DMA) causing it to overrun. Reception of the packet is aborted.
! 496: */
! 497: #define ED_RSR_FO 0x08
! 498:
! 499: /*
! 500: * MPA: Missed Packet. Indicates that the received packet couldn't be stored
! 501: * in the ring-buffer because of insufficient buffer space (exceeding the
! 502: * boundary pointer), or because the transfer to the ring-buffer was inhibited
! 503: * by RCR_MON - monitor mode.
! 504: */
! 505: #define ED_RSR_MPA 0x10
! 506:
! 507: /*
! 508: * PHY: Physical address. If 0, the packet received was sent to a physical
! 509: * address. If 1, the packet was accepted because of a multicast/broadcast
! 510: * address match.
! 511: */
! 512: #define ED_RSR_PHY 0x20
! 513:
! 514: /*
! 515: * DIS: Receiver Disabled. Set to indicate that the receiver has entered
! 516: * monitor mode. Cleared when the receiver exits monitor mode.
! 517: */
! 518: #define ED_RSR_DIS 0x40
! 519:
! 520: /*
! 521: * DFR: Deferring. Set to indicate a 'jabber' condition. The CRS and COL
! 522: * inputs are active, and the transceiver has set the CD line as a result of
! 523: * the jabber.
! 524: */
! 525: #define ED_RSR_DFR 0x80
! 526:
! 527: /*
! 528: * receive ring descriptor
! 529: *
! 530: * The National Semiconductor DS8390 Network interface controller uses the
! 531: * following receive ring headers. The way this works is that the memory on
! 532: * the interface card is chopped up into 256 bytes blocks. A contiguous
! 533: * portion of those blocks are marked for receive packets by setting start and
! 534: * end block #'s in the NIC. For each packet that is put into the receive
! 535: * ring, one of these headers (4 bytes each) is tacked onto the front. The
! 536: * first byte is a copy of the receiver status register at the time the packet
! 537: * was received.
! 538: */
! 539: struct dp8390_ring {
! 540: u_int8_t rsr; /* receiver status */
! 541: u_int8_t next_packet; /* pointer to next packet */
! 542: u_int16_t count; /* bytes in packet (length + 4) */
! 543: };
! 544:
! 545: /* Some drivers prefer to use byte-constants to get at this structure. */
! 546: #define ED_RING_RSR 0 /* receiver status */
! 547: #define ED_RING_NEXT_PACKET 1 /* pointer to next packet */
! 548: #define ED_RING_COUNT 2 /* bytes in packet (length + 4) */
! 549: #define ED_RING_HDRSZ 4 /* Header size */
! 550:
! 551: /*
! 552: * Common constants
! 553: */
! 554: #define ED_PAGE_SIZE 256 /* Size of RAM pages in bytes */
! 555: #define ED_PAGE_MASK 255
! 556: #define ED_PAGE_SHIFT 8
! 557:
! 558: #define ED_TXBUF_SIZE 6 /* Size of TX buffer in pages */
CVSweb