The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ic/rrunnerreg.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: rrunnerreg.h,v 1.9 2008/04/28 20:23:51 martin Exp $    */
    2 
    3 /*
    4  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code contributed to The NetBSD Foundation by Kevin M. Lahey
    8  * of the Numerical Aerospace Simulation Facility, NASA Ames Research
    9  * Center.
   10  *
   11  * Partially based on a HIPPI driver written by Essential Communications
   12  * Corporation.  Thanks to Jason Thorpe, Matt Jacob, and Fred Templin
   13  * for invaluable advice and encouragement!
   14  *
   15  * Redistribution and use in source and binary forms, with or without
   16  * modification, are permitted provided that the following conditions
   17  * are met:
   18  * 1. Redistributions of source code must retain the above copyright
   19  *    notice, this list of conditions and the following disclaimer.
   20  * 2. Redistributions in binary form must reproduce the above copyright
   21  *    notice, this list of conditions and the following disclaimer in the
   22  *    documentation and/or other materials provided with the distribution.
   23  *
   24  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   25  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   26  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   27  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   28  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   30  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   31  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   32  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   34  * POSSIBILITY OF SUCH DAMAGE.
   35  */
   36 
   37 /*
   38  * Description of RoadRunner registers and hardware constructs.
   39  *
   40  * We're trying to support version 1 AND version 2 of the RunCode.
   41  * The fields that changed for version 2 are prefixed with RR2_ instead
   42  * of RR_.  If version 1 disappears (it is currently deprecated),
   43  * we can remove compatibility, but it seems a shame to lose functionality
   44  * for no good reason.
   45  */
   46 
   47 /* PCI registers */
   48 
   49 #define RR_PCI_BIST     0x0c    /* Built-In Self Test */
   50 
   51 /* General control registers */
   52 
   53 #define RR_MISC_HOST_CTL  0x40  /* Misc. Host Control */
   54 #define RR_MISC_LOCAL_CTL 0x44  /* Misc. Local Control */
   55 #define RR_PROC_PC        0x48  /* i960 program counter */
   56 #define RR_PROC_BREAKPT   0x4c  /* set breakpoint on i960 */
   57 #define RR_TIMER          0x54  /* clock */
   58 #define RR_TIMER_REF      0x58  /* When this matches the TIMER, interrupt */
   59 #define RR_PCI_STATE      0x5c  /* misc configuration */
   60 #define RR_MAIN_EVENT     0x60  /* main event register for i960 & RoadRunner */
   61 #define RR_WINDOW_BASE    0x68  /* pointer to internal memory*/
   62 #define RR_WINDOW_DATA    0x6c  /* value of mem at WINDOW_BASE */
   63 #define RR_RX_STATE       0x70  /* HIPPI receiver state */
   64 #define RR_TX_STATE       0x74  /* HIPPI transmitter state */
   65 #define RR_EXT_SER_DATA   0x7c  /* controls hardware besides RR on board */
   66 
   67 /* Host DMA registers */
   68 
   69 #define RR_WRITE_HOST           0x80    /* 64-bit pointer to data on host */
   70 #define RR_READ_HOST            0x90
   71 #define RR_WRITE_LENGTH         0x9c    /* length of data to be moved */
   72 #define RR_READ_LENGTH          0xac
   73 #define RR_DMA_WRITE_STATE      0xa0    /* controls DMA */
   74 #define RR_DMA_READ_STATE       0xb0
   75 #define RR_WRITE_DST            0xa4    /* Internal destination of DMA */
   76 #define RR_READ_DST             0xb4
   77 
   78 /* RunCode registers */
   79 
   80 #define RR_EVENT_CONSUMER       0x200   /* index of consumer in event ring */
   81 #define RR_SEND_PRODUCER        0x218   /* index of producer in sender ring */
   82 #define RR_SNAP_RECV_PRODUCER   0x21c   /* index of producer in SNAP ring */
   83 #define RR_RECVS_PRODUCER       0x220   /* index of producer in recv rings */
   84 #define RR_COMMAND_RING         0x240   /* set of 16 command ring elements */
   85 
   86 #define RR_ULA                  0x280   /* Universal LAN Address */
   87 #define RR_RECV_RING_PTR        0x288   /* receive ring address */
   88 #define RR_GEN_INFO_PTR         0x290   /* general info block address */
   89 #define RR_MODE_AND_STATUS      0x298   /* operating mode and status */
   90 #define RR_CONN_RETRY_COUNT     0x29c   /* when no campon, try count */
   91 #define RR_CONN_RETRY_TIMER     0x2a0   /* clock ticks to delay retry */
   92 #define RR_CONN_TIMEOUT         0x2a4   /* campon delay timeout */
   93 #define RR_STATS_TIMER          0x2a8   /* clock ticks between stats copy */
   94 #define RR_MAX_RECV_RINGS       0x2ac   /* max receive rings (RO) */
   95 #define RR_INTERRUPT_TIMER      0x2b0   /* clock ticks between interrupts */
   96 #define RR_TX_TIMEOUT           0x2b4   /* transmit data not moving timer */
   97 #define RR_RX_TIMEOUT           0x2b8   /* receive data not moving timer */
   98 #define RR_EVENT_PRODUCER       0x2bc   /* index of producer in event ring */
   99 #define RR_TRACE_INDEX          0x2c0   /* RunCode trace pointer */
  100 #define RR_RUNCODE_FAIL1        0x2c4   /* failure codes */
  101 #define RR_RUNCODE_FAIL2        0x2c8
  102 #define RR_FILTER_LA            0x2d0   /* internal debug, filtering */
  103 #define RR_RUNCODE_VERSION      0x2d4   /* RunCode version data */
  104 
  105 #define RR_RUNCODE_RECV_CONS    0x300   /* Runcode receive ring consumption */
  106 #define RR_DRIVER_RECV_CONS     0x320   /* Driver receive ring consumption */
  107 
  108 #define RR_MEMORY_WINDOW        0x800   /* Memory window */
  109 
  110 
  111 /*
  112  * Event codes
  113  */
  114 
  115 /* General events */
  116 
  117 #define RR_EC_RUNCODE_UP        0x01
  118 #define RR_EC_WATCHDOG          0x02
  119 #define RR_EC_TRACE             0x03
  120 #define RR_EC_STATS_RETRIEVED   0x04
  121 #define RR_EC_INVALID_CMD       0x05
  122 #define RR_EC_SET_CMD_CONSUMER  0x06
  123 #define RR_EC_LINK_ON           0x07
  124 #define RR_EC_LINK_OFF          0x08
  125 #define RR2_EC_INTERNAL_ERROR   0x09
  126 #define RR_EC_INTERNAL_ERROR    0x0a
  127 #define RR2_EC_SOFTWARE_ERROR   0x0a
  128 #define RR_EC_STATS_UPDATE      0x0b
  129 #define RR_EC_REJECTING         0x0c
  130 
  131 /* Send events */
  132 
  133 #define RR_EC_SET_SND_CONSUMER  0x10
  134 #define RR_EC_PACKET_SENT       0x11
  135 #define RR_EC_SEND_RING_LOW     0x12
  136 #define RR_EC_CONN_REJECT       0x13
  137 #define RR_EC_CAMPON_TIMEOUT    0x14
  138 #define RR_EC_CONN_TIMEOUT      0x15
  139 #define RR_EC_DISCONN_ERR       0x16
  140 #define RR_EC_INTERNAL_PARITY   0x17
  141 #define RR_EC_TX_IDLE           0x18
  142 #define RR_EC_SEND_LINK_OFF     0x19
  143 #define RR_EC_BAD_SEND_RING     0x1a
  144 #define RR_EC_BAD_SEND_BUF      0x1b
  145 #define RR_EC_BAD_SEND_DESC     0x1c
  146 
  147 /* Receive events */
  148 
  149 #define RR_EC_RING_ENABLED      0x20
  150 #define RR_EC_RING_ENABLE_ERR   0x21
  151 #define RR_EC_RING_DISABLED     0x22
  152 #define RR_EC_RECV_RING_LOW     0x23
  153 #define RR_EC_RECV_RING_OUT     0x24
  154 #define RR_EC_PACKET_DISCARDED  0x25
  155 #define RR_EC_RECV_RING_FLUSH   0x26
  156 #define RR_EC_RECV_ERROR_INFO   0x27
  157 #define RR_EC_SET_RECV_CONSUMER 0x29
  158 #define RR_EC_PACKET_RECVED     0x2a
  159 #define RR_EC_PARITY_ERR        0x2b
  160 #define RR_EC_LLRC_ERR          0x2c
  161 #define RR_EC_IP_HDR_CKSUM_ERR  0x2d
  162 #define RR_EC_DATA_CKSUM_ERR    0x2e
  163 #define RR_EC_SHORT_BURST_ERR   0x2f
  164 #define RR_EC_RECV_LINK_OFF     0x30
  165 #define RR_EC_FLAG_SYNC_ERR     0x31
  166 #define RR_EC_FRAME_ERR         0x32
  167 #define RR_EC_RECV_IDLE         0x33
  168 #define RR_EC_PKT_LENGTH_ERR    0x34
  169 #define RR_EC_STATE_TRANS_ERR   0x35
  170 #define RR_EC_NO_READY_PULSE    0x3c
  171 #define RR_EC_BAD_RECV_BUF      0x36
  172 #define RR_EC_BAD_RECV_DESC     0x37
  173 #define RR_EC_BAD_RECV_RING     0x38
  174 #define RR_EC_NO_RING_FOR_ULP   0x3a
  175 #define RR_EC_OUT_OF_BUF        0x3b
  176 #define RR_EC_UNIMPLEMENTED     0x40
  177 
  178 
  179 /*
  180  * Command codes
  181  */
  182 
  183 #define RR_CC_START_RUNCODE     0x01
  184 #define RR_CC_UPDATE_STATS      0x02
  185 #define RR_CC_DISCONN_SRC       0x03
  186 #define RR_CC_DISCONN_DST       0x04
  187 #define RR_CC_WATCHDOG          0x05
  188 #define RR_CC_TRACE             0x06
  189 #define RR_CC_SET_SEND_PRODUCER 0x07
  190 #define RR_CC_SET_RECV_PRODUCER 0x08
  191 #define RR_CC_DISABLE_RING      0x09
  192 #define RR_CC_ENABLE_RING       0x0a
  193 #define RR_CC_DISCARD_PKT       0x0b
  194 #define RR_CC_FLUSH_RECV_RING   0x0c  /* unimplemented */
  195 #define RR_CC_CONN_MGT          0x0d
  196 
  197 
  198 /*
  199  * Masks for registers
  200  */
  201 
  202 /* Misc Host Control */
  203 
  204 #define RR_MH_INTERRUPT 0x001   /* interrupt state */
  205 #define RR_MH_CLEAR_INT 0x002   /* clear interrupt */
  206 #define RR_MH_NO_SWAP   0x004   /* disable normal endian swap to host */
  207 #define RR_MH_HALT_PROC 0x010   /* set to halt processor, clear to start */
  208 #define RR_MH_STEP      0x020   /* set to single step processor */
  209 #define RR_MH_PROC_HALT 0x100   /* indicates processor has been halted */
  210 #define RR_MH_BAD_INSTR 0x200   /* indicates invalid instruction executed */
  211 
  212 #define RR_MH_REVISION_MASK     0xf0000000 /* mask to retrieve revision code */
  213 
  214 /* Misc Local Control */
  215 
  216 #define RR_LC_CLEAR_INT  0x0002 /* clear interrupt */
  217 #define RR_LC_FAST_PROM  0x0008 /* use fast EEPROM access */
  218 #define RR_LC_ADD_SRAM   0x0100 /* > 1MB SRAM present */
  219 #define RR_LC_ADD_HIPPI  0x0200 /* double number of HIPPI descriptors */
  220 #define RR_LC_PARITY_ON  0x0400 /* enable local parity checking */
  221 #define RR_LC_WRITE_PROM 0x1000 /* EEPROM write enable */
  222 
  223 /* PCI State */
  224 
  225 #define RR_PS_READ_MASK       0x1c
  226 #define RR_PS_READ_SHIFT      2
  227 #define RR_PS_READ_DISABLE    (0 << RR_PS_READ_SHIFT)
  228 #define RR_PS_READ_4          (1 << RR_PS_READ_SHIFT)
  229 #define RR_PS_READ_16         (2 << RR_PS_READ_SHIFT)
  230 #define RR_PS_READ_32         (3 << RR_PS_READ_SHIFT)
  231 #define RR_PS_READ_64         (4 << RR_PS_READ_SHIFT)
  232 #define RR_PS_READ_128        (5 << RR_PS_READ_SHIFT)
  233 #define RR_PS_READ_256        (6 << RR_PS_READ_SHIFT)
  234 #define RR_PS_READ_1024       (7 << RR_PS_READ_SHIFT)
  235 
  236 #define RR_PS_WRITE_MASK      0xe0
  237 #define RR_PS_WRITE_SHIFT     5
  238 #define RR_PS_WRITE_DISABLE   (0 << RR_PS_WRITE_SHIFT)
  239 #define RR_PS_WRITE_4         (1 << RR_PS_WRITE_SHIFT)
  240 #define RR_PS_WRITE_16        (2 << RR_PS_WRITE_SHIFT)
  241 #define RR_PS_WRITE_32        (3 << RR_PS_WRITE_SHIFT)
  242 #define RR_PS_WRITE_64        (4 << RR_PS_WRITE_SHIFT)
  243 #define RR_PS_WRITE_128       (5 << RR_PS_WRITE_SHIFT)
  244 #define RR_PS_WRITE_256       (6 << RR_PS_WRITE_SHIFT)
  245 #define RR_PS_WRITE_1024      (7 << RR_PS_WRITE_SHIFT)
  246 #define RR_PS_MIN_DMA_MASK    0xff00
  247 #define RR_PS_MIN_DMA_SHIFT   8
  248 
  249 /* HIPPI Receive State */
  250 
  251 #define RR_RS_ENABLE      0x01  /* enable new connections */
  252 #define RR_RS_RESET       0x02  /* reset receive interface */
  253 #define RR_RS_REJECT_NONE 0x00  /* don't ever reject connections */
  254 #define RR_RS_REJECT_2K   0x20  /* reject if only 2KB free */
  255 #define RR_RS_REJECT_4K   0x30  /* reject if only 4KB free */
  256 #define RR_RS_REJECT_8K   0x40  /* reject if only 8KB free */
  257 #define RR_RS_REJECT_16K  0x50  /* reject if only 16KB free */
  258 #define RR_RS_REJECT_32K  0x60  /* reject if only 32KB free */
  259 #define RR_RS_REJECT_64K  0x70  /* reject if only 64KB free */
  260 
  261 /* HIPPI Transmit State */
  262 
  263 #define RR_TS_ENABLE    0x01    /* enable transmit state machine */
  264 #define RR_TS_PERMANENT 0x02    /* this connection permanent while set */
  265 
  266 /* External Serial Data */
  267 
  268 /*
  269  * This controls hardware that is external to the RoadRunner.
  270  * Bits 0-15 are set on write, 16-31 are read on read.
  271  */
  272 
  273 #define RR_ES_TDAV      0x004   /* transmit data available */
  274 #define RR_ES_LED1      0x008   /* LED1 control */
  275 #define RR_ES_LED2      0x010   /* LED2 control */
  276 #define RR_ES_RX_PERM   0x020   /* set permanent receive connection */
  277 #define RR_ES_LEDAUTO   0x040   /* clear to let LED1 and LED2 control LEDs */
  278 #define RR_ES_LLB_ENA   0x080   /* local loopback enable */
  279 #define RR_ES_TP_START  0x100   /* test points (bits 8-13) */
  280 
  281 #define RR_ES_REGINT    0x10000 /* interrupt from SEEQ-8100 (Gig-E) */
  282 #define RR_ES_MISC      0x20000 /* misc input */
  283 #define RR_ES_RXSIGDET  0x40000 /* fiber optic RXSIGDET output */
  284 
  285 /* DMA Read State */
  286 
  287 #define RR_DR_RESET             0x001   /* set to reset read DMA */
  288 #define RR_DR_ACTIVE            0x008   /* set to start DMA */
  289 #define RR_DR_THRESHOLD_MASK    0x1f0   /* mask off threshold values */
  290 #define RR_DR_THRESHOLD_SHIFT   4       /* shift to set threshold values */
  291 #define RR_DR_THRESHOLD_MAX     16
  292 
  293 /* DMA Write State */
  294 
  295 #define RR_DW_RESET             0x001 /* set to reset write DMA */
  296 #define RR_DW_CKSUM             0x004 /* set to enable checksum calc on DMA */
  297 #define RR_DW_ACTIVE            0x008 /* set to start DMA */
  298 #define RR_DW_THRESHOLD_MASK    0x1f0 /* mask off threshold values */
  299 #define RR_DW_THRESHOLD_SHIFT   4     /* shift to set threshold values */
  300 #define RR_DW_THRESHOLD_MAX     18
  301 
  302 
  303 /* Operating Mode and Status */
  304 
  305 #define RR_MS_LOOPBACK    0x0001  /* loopback through the GLink hardware */
  306 #define RR_MS_PH_MODE     0x0002  /* set for PH, clear for FP */
  307 #define RR_MS_LONG_PTRS   0x0004  /* set indicates 64-bit pointers */
  308 #define RR_MS_WORD_SWAP   0x0008  /* set to swap words in 64-bit pointers */
  309 #define RR_MS_WARNINGS    0x0010  /* set to enable warning events */
  310 #define RR_MS_ERR_TERM    0x0020  /* set to terminate connection on error */
  311 #define RR_MS_DIRECT      0x0040  /* debug flag.  enable filterLA checks */
  312 #define RR_MS_NO_WATCHDOG 0x0080  /* set to disable watchdog */
  313 #define RR_MS_SWAP_DATA   0x0100  /* set to byte swap data */
  314 #define RR_MS_SWAP_CNTRL  0x0200  /* set to byte swap control structures */
  315 #define RR_MS_ERR_HALT    0x0400  /* set to halt NIC on RunCode error */
  316 #define RR_MS_NO_RESTART  0x0800  /* set to prevent NIC restart after error */
  317 #define RR_MS_TX_HALFDUP  0x1000  /* NIC does half-duplex transmit */
  318 #define RR_MS_RX_HALFDUP  0x2000  /* NIC does half-duplex receive */
  319 #define RR_MS_GIG_E       0x4000  /* NIC does Gig-E instead of HIPPI */
  320 
  321 #define RR_MS_FATAL_ERR   0x4000000  /* fatal error on NIC */
  322 #define RR_MS_EVENT_OVER  0x8000000  /* event ring overflow */
  323 
  324 /* Options field (top half of high word of ULA in RunCode) */
  325 
  326 #define RR_OP_GIGE      0x01    /* Support for Gig-E NIC */
  327 #define RR_OP_TRACED    0x02    /* Runcode generates debug traces */
  328 #define RR_OP_1MEG      0x04    /* Support for 1MB of SRAM */
  329 #define RR_OP_CDI       0x08    /* Support for Character Device Interace */
  330 #define RR_OP_MSDOS     0x10    /* For testing RunCode under MS-DOS!? */
  331 #define RR_OP_COMEV     0x20    /* New v2 Command/Event interface */
  332 #define RR_OP_LONG_TX   0x40    /* Long transmit descr */
  333 #define RR_OP_LONG_RX   0x80    /* Long receive descr (set when not CDI) */
  334 
  335 /*
  336  * EEPROM locations
  337  *
  338  * The EEPROM layout is a little weird.  There is a valid byte every
  339  * eight bytes.  Words are then smeared out over 32 bytes.
  340  * All addresses listed here are the actual starting addresses.
  341  * The programmer is responsible for assembling a word from each of the
  342  * bytes available.
  343  *
  344  * NB:  This is incomplete.  I just ran out of patience for entering values.
  345  */
  346 
  347 #define RR_EE_OFFSET    0x80000000      /* offset to the start of EEPROM mem */
  348 #define RR_EE_WORD_LEN  0x20            /* jump between words in the EEPROM */
  349 #define RR_EE_BYTE_LEN  0x08            /* jump between bytes in the EEPROM */
  350 #define RR_EE_MAX_LEN   8192            /* maximum number of words in EEPROM */
  351 #define RR_EE_SEG_SIZE   512            /* maximum size of a segment */
  352 
  353 #define RR_EE_PROM_INIT 0x801ff00       /* jump here to start RunCode loader */
  354 
  355 #define RR_EE_HEADER_FORMAT_MAGIC       1     /* version number we can handle*/
  356 
  357 #define RR_EE_SRAM_SIZE         0x0040  /* SRAM size */
  358 #define RR_EE_PHASE1_START      0x0060  /* target byte address in SRAM */
  359 #define RR_EE_PHASE1_LEN        0x0080  /* length in words of phase 1 */
  360 #define RR_EE_PHASE1_EE_START   0x00a0  /* address of phase 1 in EEPROM */
  361 
  362 #define RR_EE_PCI_DEV_VEND      0x0100  /* PCI device/vendor */
  363 #define RR_EE_PCI_REV_CLASS     0x0120  /* PCI revision/class */
  364 #define RR_EE_PCI_LATENCY       0x0140  /* PCI latency timer */
  365 #define RR_EE_PCI_BAR0          0x0160  /* PCI bar0 address */
  366 #define RR_EE_PCI_COMM_STAT     0x0180  /* PCI command/status */
  367 #define RR_EE_PCI_LAT_GNT       0x01a0  /* PCI max latency/ minimum grant */
  368 #define RR_EE_PCI_CHECKSUM      0x01f0  /* PCI area checksum */
  369 
  370 #define RR_EE_HEADER_FORMAT     0x0200  /* revision of header format
  371                                            (should be 1) */
  372 #define RR_EE_ULA_HI            0x0500  /* Universal LAN Address (ULA) */
  373 #define RR_EE_ULA_LO            0x0520
  374 
  375 #define RR_EE_RUNCODE_START     0x0a00  /* runcode start PC */
  376 #define RR_EE_RUNCODE_VERSION   0x0a20  /* runcode revision number */
  377 #define RR_EE_RUNCODE_DATE      0x0a40  /* runcode revision date */
  378 #define RR_EE_RUNCODE_SEGMENTS  0x0a80  /* address of count of segments */
  379 
  380 #define RR_EE_MODE_AND_STATUS   0x0e00  /* mode and status saved value */
  381 #define RR_EE_CONN_RETRY_COUNT  0x0e20  /* connection retry count */
  382 #define RR_EE_CONN_RETRY_TIMER  0x0e40  /* clock ticks to delay retry */
  383 #define RR_EE_CONN_TIMEOUT      0x0e60  /* campon delay timeout */
  384 #define RR_EE_STATS_TIMER       0x0e80  /* clock ticks between stats copy */
  385 #define RR_EE_INTERRUPT_TIMER   0x0ea0  /* clock ticks between interrupts */
  386 #define RR_EE_TX_TIMEOUT        0x0ec0  /* transmit data not moving timer */
  387 #define RR_EE_RX_TIMEOUT        0x0ee0  /* receive data not moving timer */
  388 
  389 #define RR_EE_PCI_STATE         0x0f00  /* misc PCI DMA config */
  390 #define RR_EE_DMA_WRITE_STATE   0x0f20  /* dma write config */
  391 #define RR_EE_DMA_READ_STATE    0x0f40  /* dma read config */
  392 #define RR_EE_DRIVER_PARAM      0x0f60  /* driver-specific params (unused) */
  393 
  394 #define RR_EE_HEADER_CHECKSUM   0x0fe0  /* checksum for manufacturing header
  395                                            (0x200 - 0xfc0) */
  396 
  397 #define RR_EE_PHASE2_START      0x1040  /* phase 2 start in SRAM */
  398 #define RR_EE_PHASE2_LENGTH     0x1060  /* phase 2 length in words */
  399 #define RR_EE_PHASE2_EE_START   0x1080  /* phase 2 EEPROM start */
  400 
  401 /*
  402  * Event descriptor
  403  */
  404 
  405 struct rr_event {
  406         u_int16_t       re_index;       /* merge?  Different event types? */
  407         u_int8_t        re_ring;
  408         u_int8_t        re_code;
  409         u_int32_t       re_timestamp;
  410 };
  411 
  412 /*
  413  * Command descriptor
  414  */
  415 
  416 union rr_cmd {
  417         struct {
  418                 u_int16_t       rc_index;
  419                 u_int8_t        rc_ring;
  420                 u_int8_t        rc_code;
  421         } b;
  422         u_int32_t l;
  423 };
  424 
  425 /*
  426  * Scatter/gather descriptor -- points to buffers to be DMA'ed in and
  427  * out of host space.
  428  */
  429 
  430 struct rr_descr {
  431         u_int32_t       rd_reserved1;
  432         u_int32_t       rd_buffer_addr;
  433         u_int32_t       rd_reserved2;
  434         u_int16_t       rd_length;
  435         u_int8_t        rd_ring;
  436         u_int8_t        rd_control;
  437 #define RR_CT_TX_IPCKSUM   0x04
  438 #define RR_CT_PACKET_END   0x08
  439 #define RR_CT_PACKET_START 0x10
  440 #define RR_CT_INTERRUPT    0x20
  441 #define RR_CT_SHORT_BURST  0x40
  442 #define RR_CT_SAME_IFIELD  0x80
  443 };
  444 
  445 /*
  446  * Long scatter/gather descriptor -- similar to above descriptor,
  447  * but closer to RR's Assist register layout, so that it can just
  448  * be DMA'ed into the NIC, and let loose.  Required by Runcode v. 2
  449  * and greater.
  450  */
  451 
  452 struct rr2_descr {
  453         u_int32_t       rd_reserved1;
  454         u_int32_t       rd_buffer_addr;
  455         u_int32_t       rd_reserved2;
  456         u_int16_t       rd_length;
  457         u_int8_t        rd_reserved3;
  458         u_int8_t        rd_control;
  459         u_int32_t       rd_dma_state;
  460 #define RR_DM_TX        0x00606   /* swap code for dma_state on tx */
  461 #define RR_DM_RX        0x20606   /* swap code for dma_state on rx */
  462         u_int32_t       rd_reserved4;
  463         u_int32_t       rd_pkt_length;
  464         u_int32_t       rd_reserved5;
  465 #define RR2_CT_INTERRUPT    0x02
  466 #define RR2_CT_TX_IPCKSUM   0x04
  467 #define RR2_CT_PACKET_END   0x08
  468 #define RR2_CT_PACKET_START 0x10
  469 #define RR2_CT_RING_OUT     0x20
  470 #define RR2_CT_SHORT_BURST  0x40
  471 #define RR2_CT_SAME_IFIELD  0x80
  472 };
  473 
  474 /*
  475  * Ring control structure -- points to array of buffer descriptors
  476  */
  477 
  478 struct rr_ring_ctl {
  479         u_int32_t       rr_reserved1;
  480         u_int32_t       rr_ring_addr;   /* pointer to array of s/g descrs */
  481         u_int16_t       rr_entries;
  482         u_int8_t        rr_free_bufs;
  483 #define RR_RR_DONT_COMPLAIN     0xff    /* disable free_bufs warning */
  484         u_int8_t        rr_entry_size;
  485         u_int16_t       rr_prod_index;
  486         u_int16_t       rr_mode;
  487         /* XXX:  Picture in docs is right, description is wrong */
  488 #define RR_RR_CHARACTER 0x01    /* character mode interface */
  489 #define RR_RR_SEPARATE  0x02    /* separate headers from data */
  490 #define RR_RR_CHECKSUM  0x04    /* doing IP checksums (requires IP on) */
  491 #define RR_RR_IP        0x08    /* receiving IP packets to this ring */
  492 };
  493 
  494 /* Statistics block, for now, undifferentiated. */
  495 
  496 struct rr_stats {
  497         u_int32_t       rs_stats[128];
  498 };
  499 
  500 /*
  501  * General information block
  502  */
  503 
  504 struct rr_gen_info {
  505         struct rr_stats         ri_stats;
  506         struct rr_ring_ctl      ri_event_ring_ctl;
  507         struct rr_ring_ctl      ri_cmd_ring_ctl;
  508         struct rr_ring_ctl      ri_send_ring_ctl;
  509         u_int8_t                ri_reserved1[464];
  510         u_int8_t                ri_nic_trace[3072];
  511 };
  512 
  513 /*
  514  * A few constants:
  515  */
  516 
  517 #define RR_DMA_BOUNDARY (64 * 1024)     /* can't cross 64K boundaries on DMA */
  518 #define RR_DMA_MAX      65535           /* maximum that can be transferred in
  519                                            one DMA operation */
  520 #define RR_ULP_COUNT    256             /* number of possible ULPs */
  521 #define RR_INIT_CMD     15              /* initial command index */
  522 
  523 /* NB:  All of the ring sizes have to be powers of two */
  524 
  525 #define RR_MAX_RECV_RING        32      /* maximum number of receive rings */
  526 #define RR_MAX_DESCR            256     /* maximum number of possible
  527                                            descriptors.  XXX:  increase
  528                                            with caution, as this allocates
  529                                            static space! */
  530 #define RR_EVENT_RING_SIZE      128     /* why not go for it? */
  531 #define RR_SEND_RING_SIZE       32      /* firmware restriction! */
  532 
  533 #define RR_SNAP_RECV_RING_SIZE  32      /* seems to work */
  534 #define RR_FP_RECV_RING_SIZE    32      /* seems to work */
  535 
  536 #define RR2_SEND_RING_SIZE      16      /* firmware restriction! */
  537 #define RR2_SNAP_RECV_RING_SIZE 16      /* firmware restriction! */
  538 
  539 #define RR_MAX_SEND_RING_SIZE   max(RR_SEND_RING_SIZE, RR2_SEND_RING_SIZE)
  540 #define RR_MAX_SNAP_RECV_RING_SIZE      \
  541                 max(RR_SNAP_RECV_RING_SIZE, RR_SNAP_RECV_RING_SIZE)

Cache object: 57ec06c1893b8d63c00d99cb7016ee47


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.