1 /**************************************************************************
 
   3  * Copyright (c) 2000-2002 Alacritech, Inc.  All rights reserved.
 
   6  * Redistribution and use in source and binary forms, with or without
 
   7  * modification, are permitted provided that the following conditions
 
  10  * 1. Redistributions of source code must retain the above copyright
 
  11  *    notice, this list of conditions and the following disclaimer.
 
  12  * 2. Redistributions in binary form must reproduce the above
 
  13  *    copyright notice, this list of conditions and the following
 
  14  *    disclaimer in the documentation and/or other materials provided
 
  15  *    with the distribution.
 
  17  * THIS SOFTWARE IS PROVIDED BY ALACRITECH, INC. ``AS IS'' AND ANY
 
  18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
  19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 
  20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ALACRITECH, INC. OR
 
  21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
  22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
  23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 
  24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 
  25  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 
  26  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 
  27  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
  30  * The views and conclusions contained in the software and documentation
 
  31  * are those of the authors and should not be interpreted as representing
 
  32  * official policies, either expressed or implied, of Alacritech, Inc.
 
  34  **************************************************************************/
 
  39  * This header file contains definitions that are common to our hardware.
 
  44 #define PCI_VENDOR_ID_ALACRITECH    0x139A
 
  45 #define SLIC_1GB_DEVICE_ID          0x0005
 
  46 #define SLIC_2GB_DEVICE_ID          0x0007  /*Oasis Device ID */
 
  48 #define SLIC_1GB_CICADA_SUBSYS_ID   0x0008
 
  50 #define SLIC_NBR_MACS      4
 
  52 #define SLIC_RCVBUF_SIZE        2048
 
  53 #define SLIC_RCVBUF_HEADSIZE    34
 
  54 #define SLIC_RCVBUF_TAILSIZE    0
 
  55 #define SLIC_RCVBUF_DATASIZE    (SLIC_RCVBUF_SIZE - (SLIC_RCVBUF_HEADSIZE +\
 
  56                                         SLIC_RCVBUF_TAILSIZE))
 
  58 #define VGBSTAT_XPERR           0x40000000
 
  59 #define VGBSTAT_XERRSHFT        25
 
  60 #define VGBSTAT_XCSERR          0x23
 
  61 #define VGBSTAT_XUFLOW          0x22
 
  62 #define VGBSTAT_XHLEN           0x20
 
  63 #define VGBSTAT_NETERR          0x01000000
 
  64 #define VGBSTAT_NERRSHFT        16
 
  65 #define VGBSTAT_NERRMSK         0x1ff
 
  66 #define VGBSTAT_NCSERR          0x103
 
  67 #define VGBSTAT_NUFLOW          0x102
 
  68 #define VGBSTAT_NHLEN           0x100
 
  69 #define VGBSTAT_LNKERR          0x00000080
 
  70 #define VGBSTAT_LERRMSK         0xff
 
  71 #define VGBSTAT_LDEARLY         0x86
 
  72 #define VGBSTAT_LBOFLO          0x85
 
  73 #define VGBSTAT_LCODERR         0x84
 
  74 #define VGBSTAT_LDBLNBL         0x83
 
  75 #define VGBSTAT_LCRCERR         0x82
 
  76 #define VGBSTAT_LOFLO           0x81
 
  77 #define VGBSTAT_LUFLO           0x80
 
  78 #define IRHDDR_FLEN_MSK         0x0000ffff
 
  79 #define IRHDDR_SVALID           0x80000000
 
  80 #define IRHDDR_ERR              0x10000000
 
  81 #define VRHSTAT_802OE           0x80000000
 
  82 #define VRHSTAT_TPOFLO          0x10000000
 
  83 #define VRHSTATB_802UE          0x80000000
 
  84 #define VRHSTATB_RCVE           0x40000000
 
  85 #define VRHSTATB_BUFF           0x20000000
 
  86 #define VRHSTATB_CARRE          0x08000000
 
  87 #define VRHSTATB_LONGE          0x02000000
 
  88 #define VRHSTATB_PREA           0x01000000
 
  89 #define VRHSTATB_CRC            0x00800000
 
  90 #define VRHSTATB_DRBL           0x00400000
 
  91 #define VRHSTATB_CODE           0x00200000
 
  92 #define VRHSTATB_TPCSUM         0x00100000
 
  93 #define VRHSTATB_TPHLEN         0x00080000
 
  94 #define VRHSTATB_IPCSUM         0x00040000
 
  95 #define VRHSTATB_IPLERR         0x00020000
 
  96 #define VRHSTATB_IPHERR         0x00010000
 
  97 #define SLIC_MAX64_BCNT         23
 
  98 #define SLIC_MAX32_BCNT         26
 
  99 #define IHCMD_XMT_REQ           0x01
 
 100 #define IHFLG_IFSHFT            2
 
 101 #define SLIC_RSPBUF_SIZE        32
 
 103 #define SLIC_RESET_MAGIC        0xDEAD
 
 104 #define ICR_INT_OFF             0
 
 106 #define ICR_INT_MASK            2
 
 108 #define ISR_ERR                 0x80000000
 
 109 #define ISR_RCV                 0x40000000
 
 110 #define ISR_CMD                 0x20000000
 
 111 #define ISR_IO                  0x60000000
 
 112 #define ISR_UPC                 0x10000000
 
 113 #define ISR_LEVENT              0x08000000
 
 114 #define ISR_RMISS               0x02000000
 
 115 #define ISR_UPCERR              0x01000000
 
 116 #define ISR_XDROP               0x00800000
 
 117 #define ISR_UPCBSY              0x00020000
 
 118 #define ISR_EVMSK               0xffff0000
 
 119 #define ISR_PINGMASK            0x00700000
 
 120 #define ISR_PINGDSMASK          0x00710000
 
 121 #define ISR_UPCMASK             0x11000000
 
 122 #define SLIC_WCS_START          0x80000000
 
 123 #define SLIC_WCS_COMPARE        0x40000000
 
 124 #define SLIC_RCVWCS_BEGIN       0x40000000
 
 125 #define SLIC_RCVWCS_FINISH      0x80000000
 
 126 #define SLIC_PM_MAXPATTERNS     6
 
 127 #define SLIC_PM_PATTERNSIZE     128
 
 128 #define SLIC_PMCAPS_WAKEONLAN   0x00000001
 
 129 #define MIICR_REG_PCR           0x00000000
 
 130 #define MIICR_REG_4             0x00040000
 
 131 #define MIICR_REG_9             0x00090000
 
 132 #define MIICR_REG_16            0x00100000
 
 133 #define PCR_RESET               0x8000
 
 134 #define PCR_POWERDOWN           0x0800
 
 135 #define PCR_SPEED_100           0x2000
 
 136 #define PCR_SPEED_1000          0x0040
 
 137 #define PCR_AUTONEG             0x1000
 
 138 #define PCR_AUTONEG_RST         0x0200
 
 139 #define PCR_DUPLEX_FULL         0x0100
 
 140 #define PSR_LINKUP              0x0004
 
 142 #define PAR_ADV100FD            0x0100
 
 143 #define PAR_ADV100HD            0x0080
 
 144 #define PAR_ADV10FD             0x0040
 
 145 #define PAR_ADV10HD             0x0020
 
 146 #define PAR_ASYMPAUSE           0x0C00
 
 147 #define PAR_802_3               0x0001
 
 149 #define PAR_ADV1000XFD          0x0020
 
 150 #define PAR_ADV1000XHD          0x0040
 
 151 #define PAR_ASYMPAUSE_FIBER     0x0180
 
 153 #define PGC_ADV1000FD           0x0200
 
 154 #define PGC_ADV1000HD           0x0100
 
 155 #define SEEQ_LINKFAIL           0x4000
 
 156 #define SEEQ_SPEED              0x0080
 
 157 #define SEEQ_DUPLEX             0x0040
 
 158 #define TDK_DUPLEX              0x0800
 
 159 #define TDK_SPEED               0x0400
 
 160 #define MRV_REG16_XOVERON       0x0068
 
 161 #define MRV_REG16_XOVEROFF      0x0008
 
 162 #define MRV_SPEED_1000          0x8000
 
 163 #define MRV_SPEED_100           0x4000
 
 164 #define MRV_SPEED_10            0x0000
 
 165 #define MRV_FULLDUPLEX          0x2000
 
 166 #define MRV_LINKUP              0x0400
 
 168 #define GIG_LINKUP              0x0001
 
 169 #define GIG_FULLDUPLEX          0x0002
 
 170 #define GIG_SPEED_MASK          0x000C
 
 171 #define GIG_SPEED_1000          0x0008
 
 172 #define GIG_SPEED_100           0x0004
 
 173 #define GIG_SPEED_10            0x0000
 
 175 #define MCR_RESET               0x80000000
 
 176 #define MCR_CRCEN               0x40000000
 
 177 #define MCR_FULLD               0x10000000
 
 178 #define MCR_PAD                 0x02000000
 
 179 #define MCR_RETRYLATE           0x01000000
 
 180 #define MCR_BOL_SHIFT           21
 
 181 #define MCR_IPG1_SHIFT          14
 
 182 #define MCR_IPG2_SHIFT          7
 
 183 #define MCR_IPG3_SHIFT          0
 
 184 #define GMCR_RESET              0x80000000
 
 185 #define GMCR_GBIT               0x20000000
 
 186 #define GMCR_FULLD              0x10000000
 
 187 #define GMCR_GAPBB_SHIFT        14
 
 188 #define GMCR_GAPR1_SHIFT        7
 
 189 #define GMCR_GAPR2_SHIFT        0
 
 190 #define GMCR_GAPBB_1000         0x60
 
 191 #define GMCR_GAPR1_1000         0x2C
 
 192 #define GMCR_GAPR2_1000         0x40
 
 193 #define GMCR_GAPBB_100          0x70
 
 194 #define GMCR_GAPR1_100          0x2C
 
 195 #define GMCR_GAPR2_100          0x40
 
 196 #define XCR_RESET               0x80000000
 
 197 #define XCR_XMTEN               0x40000000
 
 198 #define XCR_PAUSEEN             0x20000000
 
 199 #define XCR_LOADRNG             0x10000000
 
 200 #define RCR_RESET               0x80000000
 
 201 #define RCR_RCVEN               0x40000000
 
 202 #define RCR_RCVALL              0x20000000
 
 203 #define RCR_RCVBAD              0x10000000
 
 204 #define RCR_CTLEN               0x08000000
 
 205 #define RCR_ADDRAEN             0x02000000
 
 206 #define GXCR_RESET              0x80000000
 
 207 #define GXCR_XMTEN              0x40000000
 
 208 #define GXCR_PAUSEEN            0x20000000
 
 209 #define GRCR_RESET              0x80000000
 
 210 #define GRCR_RCVEN              0x40000000
 
 211 #define GRCR_RCVALL             0x20000000
 
 212 #define GRCR_RCVBAD             0x10000000
 
 213 #define GRCR_CTLEN              0x08000000
 
 214 #define GRCR_ADDRAEN            0x02000000
 
 215 #define GRCR_HASHSIZE_SHIFT     17
 
 216 #define GRCR_HASHSIZE           14
 
 218 #define SLIC_EEPROM_ID        0xA5A5
 
 219 #define SLIC_SRAM_SIZE2GB     (64 * 1024)
 
 220 #define SLIC_SRAM_SIZE1GB     (32 * 1024)
 
 221 #define SLIC_HOSTID_DEFAULT   0xFFFF      /* uninitialized hostid */
 
 222 #define SLIC_NBR_MACS         4
 
 239     unsigned char     pad1[6];
 
 248     unsigned char     data[SLIC_RCVBUF_DATASIZE];
 
 251  struct slic_hddr_wds {
 
 270 #define frame_status14        u0.hdrs_14port.frame_status
 
 271 #define frame_status_b14      u0.hdrs_14port.frame_status_b
 
 272 #define frame_statusGB        u0.hdrs_gbit.frame_status
 
 274 struct slic_host64sg {
 
 280 struct slic_host64_cmd {
 
 283     unsigned char         command;
 
 292                 struct slic_host64sg    bufs[SLIC_MAX64_BCNT];
 
 307         u32     slic_reset;             /* Reset Register */
 
 310         u32     slic_icr;               /* Interrupt Control Register */
 
 312 #define SLIC_ICR                0x0008
 
 314         u32     slic_isp;               /* Interrupt status pointer */
 
 316 #define SLIC_ISP                0x0010
 
 318     u32 slic_isr;               /* Interrupt status */
 
 320 #define SLIC_ISR                0x0018
 
 322     u32 slic_hbar;              /* Header buffer address reg */
 
 324         /* 31-8 - phy addr of set of contiguous hdr buffers
 
 325             7-0 - number of buffers passed
 
 326            Buffers are 256 bytes long on 256-byte boundaries. */
 
 327 #define SLIC_HBAR               0x0020
 
 328 #define SLIC_HBAR_CNT_MSK       0x000000FF
 
 330     u32 slic_dbar;      /* Data buffer handle & address reg */
 
 333         /* 4 sets of registers; Buffers are 2K bytes long 2 per 4K page. */
 
 334 #define SLIC_DBAR               0x0028
 
 335 #define SLIC_DBAR_SIZE          2048
 
 337     u32 slic_cbar;                      /* Xmt Cmd buf addr regs.*/
 
 338         /* 1 per XMT interface
 
 339            31-5 - phy addr of host command buffer
 
 340             4-0 - length of cmd in multiples of 32 bytes
 
 341            Buffers are 32 bytes up to 512 bytes long */
 
 342 #define SLIC_CBAR               0x0030
 
 343 #define SLIC_CBAR_LEN_MSK       0x0000001F
 
 344 #define SLIC_CBAR_ALIGN         0x00000020
 
 346         u32     slic_wcs;               /* write control store*/
 
 347 #define SLIC_WCS                0x0034
 
 348 #define SLIC_WCS_START          0x80000000      /*Start the SLIC (Jump to WCS)*/
 
 349 #define SLIC_WCS_COMPARE        0x40000000      /* Compare with value in WCS*/
 
 351     u32 slic_rbar;              /* Response buffer address reg.*/
 
 353          /*31-8 - phy addr of set of contiguous response buffers
 
 354           7-0 - number of buffers passed
 
 355          Buffers are 32 bytes long on 32-byte boundaries.*/
 
 356 #define SLIC_RBAR               0x0038
 
 357 #define SLIC_RBAR_CNT_MSK       0x000000FF
 
 358 #define SLIC_RBAR_SIZE          32
 
 360         u32     slic_stats;             /* read statistics (UPR) */
 
 362 #define SLIC_RSTAT              0x0040
 
 364         u32     slic_rlsr;                      /* read link status */
 
 366 #define SLIC_LSTAT              0x0048
 
 368         u32     slic_wmcfg;                     /* Write Mac Config */
 
 370 #define SLIC_WMCFG              0x0050
 
 372         u32     slic_wphy;                      /* Write phy register */
 
 374 #define SLIC_WPHY               0x0058
 
 376         u32     slic_rcbar;                     /*Rcv Cmd buf addr reg*/
 
 378 #define SLIC_RCBAR              0x0060
 
 380         u32     slic_rconfig;           /* Read SLIC Config*/
 
 382 #define SLIC_RCONFIG    0x0068
 
 384         u32     slic_intagg;            /* Interrupt aggregation time*/
 
 386 #define SLIC_INTAGG             0x0070
 
 388         u32     slic_wxcfg;             /* Write XMIT config reg*/
 
 390 #define SLIC_WXCFG              0x0078
 
 392         u32     slic_wrcfg;             /* Write RCV config reg*/
 
 394 #define SLIC_WRCFG              0x0080
 
 396         u32     slic_wraddral;          /* Write rcv addr a low*/
 
 398 #define SLIC_WRADDRAL   0x0088
 
 400         u32     slic_wraddrah;          /* Write rcv addr a high*/
 
 402 #define SLIC_WRADDRAH   0x0090
 
 404         u32     slic_wraddrbl;          /* Write rcv addr b low*/
 
 406 #define SLIC_WRADDRBL   0x0098
 
 408         u32     slic_wraddrbh;          /* Write rcv addr b high*/
 
 410 #define SLIC_WRADDRBH   0x00a0
 
 412         u32     slic_mcastlow;          /* Low bits of mcast mask*/
 
 414 #define SLIC_MCASTLOW   0x00a8
 
 416         u32     slic_mcasthigh;         /* High bits of mcast mask*/
 
 418 #define SLIC_MCASTHIGH  0x00b0
 
 420         u32     slic_ping;                      /* Ping the card*/
 
 422 #define SLIC_PING               0x00b8
 
 424         u32     slic_dump_cmd;          /* Dump command */
 
 426 #define SLIC_DUMP_CMD   0x00c0
 
 428         u32     slic_dump_data;         /* Dump data pointer */
 
 430 #define SLIC_DUMP_DATA  0x00c8
 
 432         u32     slic_pcistatus; /* Read card's pci_status register */
 
 434 #define SLIC_PCISTATUS  0x00d0
 
 436         u32     slic_wrhostid;          /* Write hostid field */
 
 438 #define SLIC_WRHOSTID            0x00d8
 
 439 #define SLIC_RDHOSTID_1GB        0x1554
 
 440 #define SLIC_RDHOSTID_2GB        0x1554
 
 442         u32     slic_low_power; /* Put card in a low power state */
 
 444 #define SLIC_LOW_POWER  0x00e0
 
 446         u32     slic_quiesce;   /* force slic into quiescent state
 
 449 #define SLIC_QUIESCE    0x00e8
 
 451         u32     slic_reset_iface;       /* reset interface queues */
 
 453 #define SLIC_RESET_IFACE 0x00f0
 
 455     u32 slic_addr_upper;        /* Bits 63-32 for host i/f addrs */
 
 457 #define SLIC_ADDR_UPPER 0x00f8 /*Register is only written when it has changed*/
 
 459     u32 slic_hbar64;            /* 64 bit Header buffer address reg */
 
 461 #define SLIC_HBAR64             0x0100
 
 463     u32 slic_dbar64;    /* 64 bit Data buffer handle & address reg */
 
 465 #define SLIC_DBAR64             0x0108
 
 467     u32 slic_cbar64;            /* 64 bit Xmt Cmd buf addr regs. */
 
 469 #define SLIC_CBAR64             0x0110
 
 471     u32 slic_rbar64;            /* 64 bit Response buffer address reg.*/
 
 473 #define SLIC_RBAR64             0x0118
 
 475         u32     slic_rcbar64;           /* 64 bit Rcv Cmd buf addr reg*/
 
 477 #define SLIC_RCBAR64    0x0120
 
 479         u32     slic_stats64;           /*read statistics (64 bit UPR)*/
 
 481 #define SLIC_RSTAT64    0x0128
 
 483         u32     slic_rcv_wcs;   /*Download Gigabit RCV sequencer ucode*/
 
 485 #define SLIC_RCV_WCS    0x0130
 
 486 #define SLIC_RCVWCS_BEGIN       0x40000000
 
 487 #define SLIC_RCVWCS_FINISH      0x80000000
 
 489         u32     slic_wrvlanid;          /* Write VlanId field */
 
 491 #define SLIC_WRVLANID   0x0138
 
 493         u32     slic_read_xf_info;  /* Read Transformer info */
 
 495 #define SLIC_READ_XF_INFO       0x0140
 
 497         u32     slic_write_xf_info; /* Write Transformer info */
 
 499 #define SLIC_WRITE_XF_INFO      0x0148
 
 501         u32     RSVD1;              /* TOE Only */
 
 504         u32     RSVD2;              /* TOE Only */
 
 507         u32     RSVD3;              /* TOE Only */
 
 510         u32     RSVD4;              /* TOE Only */
 
 513         u32     slic_ticks_per_sec; /* Write card ticks per second */
 
 515 #define SLIC_TICKS_PER_SEC      0x0170
 
 532 struct inicpm_wakepattern {
 
 534     unsigned char      pattern[SLIC_PM_PATTERNSIZE];
 
 535     unsigned char      mask[SLIC_PM_PATTERNSIZE];
 
 538 struct inicpm_state {
 
 542     u32                 wake_magicpacket;
 
 543     u32                 wake_framepattern;
 
 544     struct inicpm_wakepattern    wakepattern[SLIC_PM_MAXPATTERNS];
 
 547 struct slicpm_packet_pattern {
 
 556 enum slicpm_power_state {
 
 557     slicpm_state_unspecified = 0,
 
 565 struct slicpm_wakeup_capabilities {
 
 566     enum slicpm_power_state  min_magic_packet_wakeup;
 
 567     enum slicpm_power_state  min_pattern_wakeup;
 
 568     enum slicpm_power_state  min_link_change_wakeup;
 
 571 struct slic_pnp_capabilities {
 
 573         struct slicpm_wakeup_capabilities wakeup_capabilities;
 
 582         u32 xmit_other_error;
 
 583         u32 xmit_excess_collisions;
 
 601         u64 xmit_other_error;
 
 602         u64 xmit_excess_collisions;
 
 617                 struct xmt_stats  xmt100;
 
 618                 struct rcv_stats  rcv100;
 
 621                 struct xmt_statsgb     xmtGB;
 
 622                 struct rcv_statsgb     rcvGB;
 
 627 #define xmit_tcp_segs100           u.stats_100.xmt100.xmit_tcp_segs
 
 628 #define xmit_tcp_bytes100          u.stats_100.xmt100.xmit_tcp_bytes
 
 629 #define xmit_bytes100              u.stats_100.xmt100.xmit_bytes
 
 630 #define xmit_collisions100         u.stats_100.xmt100.xmit_collisions
 
 631 #define xmit_unicasts100           u.stats_100.xmt100.xmit_unicasts
 
 632 #define xmit_other_error100        u.stats_100.xmt100.xmit_other_error
 
 633 #define xmit_excess_collisions100  u.stats_100.xmt100.xmit_excess_collisions
 
 634 #define rcv_tcp_segs100            u.stats_100.rcv100.rcv_tcp_segs
 
 635 #define rcv_tcp_bytes100           u.stats_100.rcv100.rcv_tcp_bytes
 
 636 #define rcv_bytes100               u.stats_100.rcv100.rcv_bytes
 
 637 #define rcv_unicasts100            u.stats_100.rcv100.rcv_unicasts
 
 638 #define rcv_other_error100         u.stats_100.rcv100.rcv_other_error
 
 639 #define rcv_drops100               u.stats_100.rcv100.rcv_drops
 
 640 #define xmit_tcp_segs_gb           u.stats_GB.xmtGB.xmit_tcp_segs
 
 641 #define xmit_tcp_bytes_gb          u.stats_GB.xmtGB.xmit_tcp_bytes
 
 642 #define xmit_bytes_gb              u.stats_GB.xmtGB.xmit_bytes
 
 643 #define xmit_collisions_gb         u.stats_GB.xmtGB.xmit_collisions
 
 644 #define xmit_unicasts_gb           u.stats_GB.xmtGB.xmit_unicasts
 
 645 #define xmit_other_error_gb        u.stats_GB.xmtGB.xmit_other_error
 
 646 #define xmit_excess_collisions_gb  u.stats_GB.xmtGB.xmit_excess_collisions
 
 648 #define rcv_tcp_segs_gb            u.stats_GB.rcvGB.rcv_tcp_segs
 
 649 #define rcv_tcp_bytes_gb           u.stats_GB.rcvGB.rcv_tcp_bytes
 
 650 #define rcv_bytes_gb               u.stats_GB.rcvGB.rcv_bytes
 
 651 #define rcv_unicasts_gb            u.stats_GB.rcvGB.rcv_unicasts
 
 652 #define rcv_other_error_gb         u.stats_GB.rcvGB.rcv_other_error
 
 653 #define rcv_drops_gb               u.stats_GB.rcvGB.rcv_drops
 
 655 struct slic_config_mac {
 
 656     unsigned char        macaddrA[6];
 
 659 #define ATK_FRU_FORMAT        0x00
 
 660 #define VENDOR1_FRU_FORMAT    0x01
 
 661 #define VENDOR2_FRU_FORMAT    0x02
 
 662 #define VENDOR3_FRU_FORMAT    0x03
 
 663 #define VENDOR4_FRU_FORMAT    0x04
 
 664 #define NO_FRU_FORMAT         0xFF
 
 667     unsigned char        assembly[6];
 
 668     unsigned char        revision[2];
 
 669     unsigned char        serial[14];
 
 670     unsigned char        pad[3];
 
 674     unsigned char        commodity;
 
 675     unsigned char        assembly[4];
 
 676     unsigned char        revision[2];
 
 677     unsigned char        supplier[2];
 
 678     unsigned char        date[2];
 
 679     unsigned char        sequence[3];
 
 680     unsigned char        pad[13];
 
 684     unsigned char        part[8];
 
 685     unsigned char        supplier[5];
 
 686     unsigned char        date[3];
 
 687     unsigned char        sequence[4];
 
 688     unsigned char        pad[7];
 
 692     unsigned char        assembly[6];
 
 693     unsigned char        revision[2];
 
 694     unsigned char        serial[14];
 
 695     unsigned char        pad[3];
 
 699     unsigned char        number[8];
 
 700     unsigned char        part[8];
 
 701     unsigned char        version[8];
 
 702     unsigned char        pad[3];
 
 706     struct vendor1_fru   vendor1_fru;
 
 707     struct vendor2_fru   vendor2_fru;
 
 708     struct vendor3_fru   vendor3_fru;
 
 709     struct vendor4_fru   vendor4_fru;
 
 713    SLIC EEPROM structure for Mojave
 
 716         ushort          Id;             /* 00 EEPROM/FLASH Magic code 'A5A5'*/
 
 717         ushort          EecodeSize;     /* 01 Size of EEPROM Codes (bytes * 4)*/
 
 718         ushort          FlashSize;      /* 02 Flash size */
 
 719         ushort          EepromSize;     /* 03 EEPROM Size */
 
 720         ushort          VendorId;       /* 04 Vendor ID */
 
 721         ushort          DeviceId;       /* 05 Device ID */
 
 722         unsigned char           RevisionId;     /* 06 Revision ID */
 
 723         unsigned char           ClassCode[3];   /* 07 Class Code */
 
 724         unsigned char           DbgIntPin;      /* 08 Debug Interrupt pin */
 
 725         unsigned char           NetIntPin0;     /*    Network Interrupt Pin */
 
 726         unsigned char           MinGrant;       /* 09 Minimum grant */
 
 727         unsigned char           MaxLat;         /*    Maximum Latency */
 
 728         ushort          PciStatus;      /* 10 PCI Status */
 
 729         ushort          SubSysVId;      /* 11 Subsystem Vendor Id */
 
 730         ushort          SubSysId;       /* 12 Subsystem ID */
 
 731         ushort          DbgDevId;       /* 13 Debug Device Id */
 
 732         ushort          DramRomFn;      /* 14 Dram/Rom function */
 
 733         ushort          DSize2Pci;      /* 15 DRAM size to PCI (bytes * 64K) */
 
 734         ushort  RSize2Pci;      /* 16 ROM extension size to PCI (bytes * 4k) */
 
 735         unsigned char NetIntPin1;/* 17 Network Interface Pin 1
 
 736                                     (simba/leone only) */
 
 737         unsigned char NetIntPin2; /*Network Interface Pin 2 (simba/leone only)*/
 
 739                 unsigned char NetIntPin3;/*18 Network Interface Pin 3
 
 741                 unsigned char FreeTime;/*FreeTime setting (leone/mojave only) */
 
 743         unsigned char   TBIctl; /*    10-bit interface control (Mojave only) */
 
 744         ushort          DramSize;       /* 19 DRAM size (bytes * 64k) */
 
 747                         /* Mac Interface Specific portions */
 
 748                         struct slic_config_mac  MacInfo[SLIC_NBR_MACS];
 
 749                 } mac;                          /* MAC access for all boards */
 
 751                         /* use above struct for MAC access */
 
 752                         struct slic_config_mac  pad[SLIC_NBR_MACS - 1];
 
 753                         ushort          DeviceId2;      /* Device ID for 2nd
 
 755                         unsigned char   IntPin2;        /* Interrupt pin for
 
 757                         unsigned char   ClassCode2[3];  /* Class Code for 2nd
 
 759                 } mojave;       /* 2nd function access for gigabit board */
 
 761         ushort          CfgByte6;       /* Config Byte 6 */
 
 762         ushort          PMECapab;       /* Power Mgment capabilities */
 
 763         ushort          NwClkCtrls;     /* NetworkClockControls */
 
 764         unsigned char   FruFormat;      /* Alacritech FRU format type */
 
 765         struct atk_fru   AtkFru;        /* Alacritech FRU information */
 
 766         unsigned char   OemFruFormat;   /* optional OEM FRU format type */
 
 767         union oemfru    OemFru;         /* optional OEM FRU information */
 
 768         unsigned char   Pad[4]; /* Pad to 128 bytes - includes 2 cksum bytes
 
 769                                  *(if OEM FRU info exists) and two unusable
 
 770                                  * bytes at the end */
 
 773 /* SLIC EEPROM structure for Oasis */
 
 774 struct oslic_eeprom {
 
 775         ushort          Id;             /* 00 EEPROM/FLASH Magic code 'A5A5' */
 
 776         ushort          EecodeSize;     /* 01 Size of EEPROM Codes (bytes * 4)*/
 
 777         ushort          FlashConfig0;   /* 02 Flash Config for SPI device 0 */
 
 778         ushort          FlashConfig1;   /* 03 Flash Config for SPI device 1 */
 
 779         ushort          VendorId;       /* 04 Vendor ID */
 
 780         ushort          DeviceId;       /* 05 Device ID (function 0) */
 
 781         unsigned char   RevisionId;     /* 06 Revision ID */
 
 782         unsigned char   ClassCode[3];   /* 07 Class Code for PCI function 0 */
 
 783         unsigned char   IntPin1;        /* 08 Interrupt pin for PCI function 1*/
 
 784         unsigned char   ClassCode2[3];  /* 09 Class Code for PCI function 1 */
 
 785         unsigned char   IntPin2;        /* 10 Interrupt pin for PCI function 2*/
 
 786         unsigned char   IntPin0;        /*    Interrupt pin for PCI function 0*/
 
 787         unsigned char           MinGrant;       /* 11 Minimum grant */
 
 788         unsigned char           MaxLat;         /*    Maximum Latency */
 
 789         ushort          SubSysVId;      /* 12 Subsystem Vendor Id */
 
 790         ushort          SubSysId;       /* 13 Subsystem ID */
 
 791         ushort          FlashSize;      /* 14 Flash size (bytes / 4K) */
 
 792         ushort          DSize2Pci;      /* 15 DRAM size to PCI (bytes / 64K) */
 
 793         ushort          RSize2Pci;      /* 16 Flash (ROM extension) size to
 
 795         ushort          DeviceId1;      /* 17 Device Id (function 1) */
 
 796         ushort          DeviceId2;      /* 18 Device Id (function 2) */
 
 797         ushort          CfgByte6;       /* 19 Device Status Config Bytes 6-7 */
 
 798         ushort          PMECapab;       /* 20 Power Mgment capabilities */
 
 799         unsigned char           MSICapab;       /* 21 MSI capabilities */
 
 800         unsigned char           ClockDivider;   /*    Clock divider */
 
 801         ushort          PciStatusLow;   /* 22 PCI Status bits 15:0 */
 
 802         ushort          PciStatusHigh;  /* 23 PCI Status bits 31:16 */
 
 803         ushort          DramConfigLow;  /* 24 DRAM Configuration bits 15:0 */
 
 804         ushort          DramConfigHigh; /* 25 DRAM Configuration bits 31:16 */
 
 805         ushort          DramSize;       /* 26 DRAM size (bytes / 64K) */
 
 806         ushort          GpioTbiCtl;/* 27 GPIO/TBI controls for functions 1/0 */
 
 807         ushort          EepromSize;             /* 28 EEPROM Size */
 
 808         struct slic_config_mac MacInfo[2];      /* 29 MAC addresses (2 ports) */
 
 809         unsigned char   FruFormat;      /* 35 Alacritech FRU format type */
 
 810         struct atk_fru  AtkFru; /* Alacritech FRU information */
 
 811         unsigned char   OemFruFormat;   /* optional OEM FRU format type */
 
 812         union oemfru    OemFru;         /* optional OEM FRU information */
 
 813         unsigned char   Pad[4]; /* Pad to 128 bytes - includes 2 checksum bytes
 
 814                                  * (if OEM FRU info exists) and two unusable
 
 819 #define MAX_EECODE_SIZE sizeof(struct slic_eeprom)
 
 820 #define MIN_EECODE_SIZE 0x62    /* code size without optional OEM FRU stuff */
 
 822 /* SLIC CONFIG structure
 
 824  This structure lives in the CARD structure and is valid for all
 
 825  board types.  It is filled in from the appropriate EEPROM structure
 
 826  by SlicGetConfigData().
 
 829         bool EepromValid;       /* Valid EEPROM flag (checksum good?) */
 
 830         ushort          DramSize;       /* DRAM size (bytes / 64K) */
 
 831         struct slic_config_mac MacInfo[SLIC_NBR_MACS]; /* MAC addresses */
 
 832         unsigned char           FruFormat;      /* Alacritech FRU format type */
 
 833         struct atk_fru  AtkFru; /* Alacritech FRU information */
 
 834         unsigned char   OemFruFormat;   /* optional OEM FRU format type */
 
 836                 struct vendor1_fru   vendor1_fru;
 
 837                 struct vendor2_fru   vendor2_fru;
 
 838                 struct vendor3_fru   vendor3_fru;
 
 839                 struct vendor4_fru   vendor4_fru;