iPXE
Data Structures | Macros | Enumerations | Functions | Variables
sis190.h File Reference
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <byteswap.h>
#include <errno.h>
#include <mii.h>
#include <ipxe/ethernet.h>
#include <ipxe/if_ether.h>
#include <ipxe/io.h>
#include <ipxe/iobuf.h>
#include <ipxe/malloc.h>
#include <ipxe/netdevice.h>
#include <ipxe/pci.h>
#include <ipxe/timer.h>

Go to the source code of this file.

Data Structures

struct  TxDesc
 
struct  RxDesc
 
struct  sis190_private
 
struct  sis190_phy
 
struct  mii_chip_info
 

Macros

#define PCI_VENDOR_ID_SI   0x1039
 
#define PHY_MAX_ADDR   32
 
#define PHY_ID_ANY   0x1f
 
#define MII_REG_ANY   0x1f
 
#define DRV_VERSION   "1.3"
 
#define DRV_NAME   "sis190"
 
#define SIS190_DRIVER_NAME   DRV_NAME " Gigabit Ethernet driver " DRV_VERSION
 
#define PFX   DRV_NAME ": "
 
#define sis190_rx_quota(count, quota)   count
 
#define NUM_TX_DESC   8 /* [8..1024] */
 
#define NUM_RX_DESC   8 /* [8..8192] */
 
#define TX_RING_BYTES   (NUM_TX_DESC * sizeof(struct TxDesc))
 
#define RX_RING_BYTES   (NUM_RX_DESC * sizeof(struct RxDesc))
 
#define RX_BUF_SIZE   1536
 
#define RX_BUF_MASK   0xfff8
 
#define RING_ALIGNMENT   256
 
#define SIS190_REGS_SIZE   0x80
 
#define EhnMIIread   0x0000
 
#define EhnMIIwrite   0x0020
 
#define EhnMIIdataShift   16
 
#define EhnMIIpmdShift   6 /* 7016 only */
 
#define EhnMIIregShift   11
 
#define EhnMIIreq   0x0010
 
#define EhnMIInotDone   0x0010
 
#define SIS_W8(reg, val)   writeb ((val), ioaddr + (reg))
 
#define SIS_W16(reg, val)   writew ((val), ioaddr + (reg))
 
#define SIS_W32(reg, val)   writel ((val), ioaddr + (reg))
 
#define SIS_R8(reg)   readb (ioaddr + (reg))
 
#define SIS_R16(reg)   readw (ioaddr + (reg))
 
#define SIS_R32(reg)   readl (ioaddr + (reg))
 
#define SIS_PCI_COMMIT()   SIS_R32(IntrControl)
 

Enumerations

enum  sis190_registers {
  TxControl = 0x00, TxDescStartAddr = 0x04, rsv0 = 0x08, TxSts = 0x0c,
  RxControl = 0x10, RxDescStartAddr = 0x14, rsv1 = 0x18, RxSts = 0x1c,
  IntrStatus = 0x20, IntrMask = 0x24, IntrControl = 0x28, IntrTimer = 0x2c,
  PMControl = 0x30, rsv2 = 0x34, ROMControl = 0x38, ROMInterface = 0x3c,
  StationControl = 0x40, GMIIControl = 0x44, GIoCR = 0x48, GIoCtrl = 0x4c,
  TxMacControl = 0x50, TxLimit = 0x54, RGDelay = 0x58, rsv3 = 0x5c,
  RxMacControl = 0x60, RxMacAddr = 0x62, RxHashTable = 0x68, RxWolCtrl = 0x70,
  RxWolData = 0x74, RxMPSControl = 0x78, rsv4 = 0x7c
}
 
enum  sis190_register_content {
  SoftInt = 0x40000000, Timeup = 0x20000000, PauseFrame = 0x00080000, MagicPacket = 0x00040000,
  WakeupFrame = 0x00020000, LinkChange = 0x00010000, RxQEmpty = 0x00000080, RxQInt = 0x00000040,
  TxQ1Empty = 0x00000020, TxQ1Int = 0x00000010, TxQ0Empty = 0x00000008, TxQ0Int = 0x00000004,
  RxHalt = 0x00000002, TxHalt = 0x00000001, CmdReset = 0x10, CmdRxEnb = 0x08,
  CmdTxEnb = 0x01, RxBufEmpty = 0x01, Cfg9346_Lock = 0x00, Cfg9346_Unlock = 0xc0,
  AcceptErr = 0x20, AcceptRunt = 0x10, AcceptBroadcast = 0x0800, AcceptMulticast = 0x0400,
  AcceptMyPhys = 0x0200, AcceptAllPhys = 0x0100, RxCfgFIFOShift = 13, RxCfgDMAShift = 8,
  TxInterFrameGapShift = 24, TxDMAShift = 8, LinkStatus = 0x02, FullDup = 0x01,
  TBILinkOK = 0x02000000
}
 
enum  _DescStatusBit {
  OWNbit = 0x80000000, INTbit = 0x40000000, CRCbit = 0x00020000, PADbit = 0x00010000,
  RingEnd = 0x80000000, LSEN = 0x08000000, IPCS = 0x04000000, TCPCS = 0x02000000,
  UDPCS = 0x01000000, BSTEN = 0x00800000, EXTEN = 0x00400000, DEFEN = 0x00200000,
  BKFEN = 0x00100000, CRSEN = 0x00080000, COLEN = 0x00040000, THOL3 = 0x30000000,
  THOL2 = 0x20000000, THOL1 = 0x10000000, THOL0 = 0x00000000, WND = 0x00080000,
  TABRT = 0x00040000, FIFO = 0x00020000, LINK = 0x00010000, ColCountMask = 0x0000ffff,
  IPON = 0x20000000, TCPON = 0x10000000, UDPON = 0x08000000, Wakup = 0x00400000,
  Magic = 0x00200000, Pause = 0x00100000, DEFbit = 0x00200000, BCAST = 0x000c0000,
  MCAST = 0x00080000, UCAST = 0x00040000, TAGON = 0x80000000, RxDescCountMask = 0x7f000000,
  ABORT = 0x00800000, SHORT = 0x00400000, LIMIT = 0x00200000, MIIER = 0x00100000,
  OVRUN = 0x00080000, NIBON = 0x00040000, COLON = 0x00020000, CRCOK = 0x00010000,
  RxSizeMask = 0x0000ffff
}
 
enum  sis190_eeprom_access_register_bits {
  EECS = 0x00000001, EECLK = 0x00000002, EEDO = 0x00000008, EEDI = 0x00000004,
  EEREQ = 0x00000080, EEROP = 0x00000200, EEWOP = 0x00000100
}
 
enum  sis190_eeprom_address { EEPROMSignature = 0x00, EEPROMCLK = 0x01, EEPROMInfo = 0x02, EEPROMMACAddr = 0x03 }
 
enum  sis190_feature { F_HAS_RGMII = 1, F_PHY_88E1111 = 2, F_PHY_BCM5461 = 4 }
 
enum  sis190_phy_type { UNKNOWN = 0x00, HOME = 0x01, LAN = 0x02, MIX = 0x03 }
 

Functions

 FILE_LICENCE (GPL_ANY)
 
static void sis190_phy_task (struct sis190_private *tp)
 
static void sis190_free (struct net_device *dev)
 
static void sis190_init_rxfilter (struct net_device *dev)
 

Variables

static struct mii_chip_info mii_chip_table []
 

Macro Definition Documentation

◆ PCI_VENDOR_ID_SI

#define PCI_VENDOR_ID_SI   0x1039

Definition at line 25 of file sis190.h.

◆ PHY_MAX_ADDR

#define PHY_MAX_ADDR   32

Definition at line 27 of file sis190.h.

◆ PHY_ID_ANY

#define PHY_ID_ANY   0x1f

Definition at line 28 of file sis190.h.

◆ MII_REG_ANY

#define MII_REG_ANY   0x1f

Definition at line 29 of file sis190.h.

◆ DRV_VERSION

#define DRV_VERSION   "1.3"

Definition at line 31 of file sis190.h.

◆ DRV_NAME

#define DRV_NAME   "sis190"

Definition at line 32 of file sis190.h.

◆ SIS190_DRIVER_NAME

#define SIS190_DRIVER_NAME   DRV_NAME " Gigabit Ethernet driver " DRV_VERSION

Definition at line 33 of file sis190.h.

◆ PFX

#define PFX   DRV_NAME ": "

Definition at line 34 of file sis190.h.

◆ sis190_rx_quota

#define sis190_rx_quota (   count,
  quota 
)    count

Definition at line 36 of file sis190.h.

◆ NUM_TX_DESC

#define NUM_TX_DESC   8 /* [8..1024] */

Definition at line 38 of file sis190.h.

◆ NUM_RX_DESC

#define NUM_RX_DESC   8 /* [8..8192] */

Definition at line 39 of file sis190.h.

◆ TX_RING_BYTES

#define TX_RING_BYTES   (NUM_TX_DESC * sizeof(struct TxDesc))

Definition at line 40 of file sis190.h.

◆ RX_RING_BYTES

#define RX_RING_BYTES   (NUM_RX_DESC * sizeof(struct RxDesc))

Definition at line 41 of file sis190.h.

◆ RX_BUF_SIZE

#define RX_BUF_SIZE   1536

Definition at line 42 of file sis190.h.

◆ RX_BUF_MASK

#define RX_BUF_MASK   0xfff8

Definition at line 43 of file sis190.h.

◆ RING_ALIGNMENT

#define RING_ALIGNMENT   256

Definition at line 45 of file sis190.h.

◆ SIS190_REGS_SIZE

#define SIS190_REGS_SIZE   0x80

Definition at line 47 of file sis190.h.

◆ EhnMIIread

#define EhnMIIread   0x0000

Definition at line 50 of file sis190.h.

◆ EhnMIIwrite

#define EhnMIIwrite   0x0020

Definition at line 51 of file sis190.h.

◆ EhnMIIdataShift

#define EhnMIIdataShift   16

Definition at line 52 of file sis190.h.

◆ EhnMIIpmdShift

#define EhnMIIpmdShift   6 /* 7016 only */

Definition at line 53 of file sis190.h.

◆ EhnMIIregShift

#define EhnMIIregShift   11

Definition at line 54 of file sis190.h.

◆ EhnMIIreq

#define EhnMIIreq   0x0010

Definition at line 55 of file sis190.h.

◆ EhnMIInotDone

#define EhnMIInotDone   0x0010

Definition at line 56 of file sis190.h.

◆ SIS_W8

#define SIS_W8 (   reg,
  val 
)    writeb ((val), ioaddr + (reg))

Definition at line 59 of file sis190.h.

◆ SIS_W16

#define SIS_W16 (   reg,
  val 
)    writew ((val), ioaddr + (reg))

Definition at line 60 of file sis190.h.

◆ SIS_W32

#define SIS_W32 (   reg,
  val 
)    writel ((val), ioaddr + (reg))

Definition at line 61 of file sis190.h.

◆ SIS_R8

#define SIS_R8 (   reg)    readb (ioaddr + (reg))

Definition at line 62 of file sis190.h.

◆ SIS_R16

#define SIS_R16 (   reg)    readw (ioaddr + (reg))

Definition at line 63 of file sis190.h.

◆ SIS_R32

#define SIS_R32 (   reg)    readl (ioaddr + (reg))

Definition at line 64 of file sis190.h.

◆ SIS_PCI_COMMIT

#define SIS_PCI_COMMIT ( )    SIS_R32(IntrControl)

Definition at line 66 of file sis190.h.

Enumeration Type Documentation

◆ sis190_registers

Enumerator
TxControl 
TxDescStartAddr 
rsv0 
TxSts 
RxControl 
RxDescStartAddr 
rsv1 
RxSts 
IntrStatus 
IntrMask 
IntrControl 
IntrTimer 
PMControl 
rsv2 
ROMControl 
ROMInterface 
StationControl 
GMIIControl 
GIoCR 
GIoCtrl 
TxMacControl 
TxLimit 
RGDelay 
rsv3 
RxMacControl 
RxMacAddr 
RxHashTable 
RxWolCtrl 
RxWolData 
RxMPSControl 
rsv4 

Definition at line 68 of file sis190.h.

68  {
69  TxControl = 0x00,
70  TxDescStartAddr = 0x04,
71  rsv0 = 0x08, // reserved
72  TxSts = 0x0c, // unused (Control/Status)
73  RxControl = 0x10,
74  RxDescStartAddr = 0x14,
75  rsv1 = 0x18, // reserved
76  RxSts = 0x1c, // unused
77  IntrStatus = 0x20,
78  IntrMask = 0x24,
79  IntrControl = 0x28,
80  IntrTimer = 0x2c, // unused (Interrupt Timer)
81  PMControl = 0x30, // unused (Power Mgmt Control/Status)
82  rsv2 = 0x34, // reserved
83  ROMControl = 0x38,
84  ROMInterface = 0x3c,
85  StationControl = 0x40,
86  GMIIControl = 0x44,
87  GIoCR = 0x48, // unused (GMAC IO Compensation)
88  GIoCtrl = 0x4c, // unused (GMAC IO Control)
89  TxMacControl = 0x50,
90  TxLimit = 0x54, // unused (Tx MAC Timer/TryLimit)
91  RGDelay = 0x58, // unused (RGMII Tx Internal Delay)
92  rsv3 = 0x5c, // reserved
93  RxMacControl = 0x60,
94  RxMacAddr = 0x62,
95  RxHashTable = 0x68,
96  // Undocumented = 0x6c,
97  RxWolCtrl = 0x70,
98  RxWolData = 0x74, // unused (Rx WOL Data Access)
99  RxMPSControl = 0x78, // unused (Rx MPS Control)
100  rsv4 = 0x7c, // reserved
101 };
Definition: sis190.h:87
Definition: sis190.h:82
Definition: sis190.h:90
Definition: sis190.h:100
Definition: sis190.h:76
Definition: sis190.h:91
Definition: sis190.h:75
Definition: sis190.h:88
Definition: sis190.h:92
Definition: sis190.h:71
Definition: sis190.h:72

◆ sis190_register_content

Enumerator
SoftInt 
Timeup 
PauseFrame 
MagicPacket 
WakeupFrame 
LinkChange 
RxQEmpty 
RxQInt 
TxQ1Empty 
TxQ1Int 
TxQ0Empty 
TxQ0Int 
RxHalt 
TxHalt 
CmdReset 
CmdRxEnb 
CmdTxEnb 
RxBufEmpty 
Cfg9346_Lock 
Cfg9346_Unlock 
AcceptErr 
AcceptRunt 
AcceptBroadcast 
AcceptMulticast 
AcceptMyPhys 
AcceptAllPhys 
RxCfgFIFOShift 
RxCfgDMAShift 
TxInterFrameGapShift 
TxDMAShift 
LinkStatus 
FullDup 
TBILinkOK 

Definition at line 103 of file sis190.h.

103  {
104  /* IntrStatus */
105  SoftInt = 0x40000000, // unused
106  Timeup = 0x20000000, // unused
107  PauseFrame = 0x00080000, // unused
108  MagicPacket = 0x00040000, // unused
109  WakeupFrame = 0x00020000, // unused
110  LinkChange = 0x00010000,
111  RxQEmpty = 0x00000080,
112  RxQInt = 0x00000040,
113  TxQ1Empty = 0x00000020, // unused
114  TxQ1Int = 0x00000010,
115  TxQ0Empty = 0x00000008, // unused
116  TxQ0Int = 0x00000004,
117  RxHalt = 0x00000002,
118  TxHalt = 0x00000001,
119 
120  /* {Rx/Tx}CmdBits */
121  CmdReset = 0x10,
122  CmdRxEnb = 0x08, // unused
123  CmdTxEnb = 0x01,
124  RxBufEmpty = 0x01, // unused
125 
126  /* Cfg9346Bits */
127  Cfg9346_Lock = 0x00, // unused
128  Cfg9346_Unlock = 0xc0, // unused
129 
130  /* RxMacControl */
131  AcceptErr = 0x20, // unused
132  AcceptRunt = 0x10, // unused
133  AcceptBroadcast = 0x0800,
134  AcceptMulticast = 0x0400,
135  AcceptMyPhys = 0x0200,
136  AcceptAllPhys = 0x0100,
137 
138  /* RxConfigBits */
139  RxCfgFIFOShift = 13,
140  RxCfgDMAShift = 8, // 0x1a in RxControl ?
141 
142  /* TxConfigBits */
144  TxDMAShift = 8, /* DMA burst value (0-7) is shift this many bits */
145 
146  LinkStatus = 0x02, // unused
147  FullDup = 0x01, // unused
148 
149  /* TBICSRBit */
150  TBILinkOK = 0x02000000, // unused
151 };
Definition: sis190.h:112
Definition: sis190.h:118
Definition: sis190.h:106
Definition: sis190.h:117

◆ _DescStatusBit

Enumerator
OWNbit 
INTbit 
CRCbit 
PADbit 
RingEnd 
LSEN 
IPCS 
TCPCS 
UDPCS 
BSTEN 
EXTEN 
DEFEN 
BKFEN 
CRSEN 
COLEN 
THOL3 
THOL2 
THOL1 
THOL0 
WND 
TABRT 
FIFO 
LINK 
ColCountMask 
IPON 
TCPON 
UDPON 
Wakup 
Magic 
Pause 
DEFbit 
BCAST 
MCAST 
UCAST 
TAGON 
RxDescCountMask 
ABORT 
SHORT 
LIMIT 
MIIER 
OVRUN 
NIBON 
COLON 
CRCOK 
RxSizeMask 

Definition at line 167 of file sis190.h.

167  {
168  /* _Desc.status */
169  OWNbit = 0x80000000, // RXOWN/TXOWN
170  INTbit = 0x40000000, // RXINT/TXINT
171  CRCbit = 0x00020000, // CRCOFF/CRCEN
172  PADbit = 0x00010000, // PREADD/PADEN
173  /* _Desc.size */
174  RingEnd = 0x80000000,
175  /* TxDesc.status */
176  LSEN = 0x08000000, // TSO ? -- FR
177  IPCS = 0x04000000,
178  TCPCS = 0x02000000,
179  UDPCS = 0x01000000,
180  BSTEN = 0x00800000,
181  EXTEN = 0x00400000,
182  DEFEN = 0x00200000,
183  BKFEN = 0x00100000,
184  CRSEN = 0x00080000,
185  COLEN = 0x00040000,
186  THOL3 = 0x30000000,
187  THOL2 = 0x20000000,
188  THOL1 = 0x10000000,
189  THOL0 = 0x00000000,
190 
191  WND = 0x00080000,
192  TABRT = 0x00040000,
193  FIFO = 0x00020000,
194  LINK = 0x00010000,
195  ColCountMask = 0x0000ffff,
196  /* RxDesc.status */
197  IPON = 0x20000000,
198  TCPON = 0x10000000,
199  UDPON = 0x08000000,
200  Wakup = 0x00400000,
201  Magic = 0x00200000,
202  Pause = 0x00100000,
203  DEFbit = 0x00200000,
204  BCAST = 0x000c0000,
205  MCAST = 0x00080000,
206  UCAST = 0x00040000,
207  /* RxDesc.PSize */
208  TAGON = 0x80000000,
209  RxDescCountMask = 0x7f000000, // multi-desc pkt when > 1 ? -- FR
210  ABORT = 0x00800000,
211  SHORT = 0x00400000,
212  LIMIT = 0x00200000,
213  MIIER = 0x00100000,
214  OVRUN = 0x00080000,
215  NIBON = 0x00040000,
216  COLON = 0x00020000,
217  CRCOK = 0x00010000,
218  RxSizeMask = 0x0000ffff
219  /*
220  * The asic could apparently do vlan, TSO, jumbo (sis191 only) and
221  * provide two (unused with Linux) Tx queues. No publicly
222  * available documentation alas.
223  */
224 };
Definition: sis190.h:212
Definition: sis190.h:179
Definition: sis190.h:191
Definition: sis190.h:211
Definition: sis190.h:210
Definition: sis190.h:193
Definition: sis190.h:169
Definition: sis190.h:205
Definition: sis190.h:214
Definition: sis190.h:181
Definition: sis190.h:170
Definition: sis190.h:185
Definition: sis190.h:187
Definition: sis190.h:182
Definition: sis190.h:204
Definition: sis190.h:206
Definition: sis190.h:208
Definition: sis190.h:199
Definition: sis190.h:200
Definition: sis190.h:178
Definition: sis190.h:216
Definition: sis190.h:186
Definition: sis190.h:198
Definition: sis190.h:188
Definition: sis190.h:213
Definition: sis190.h:189
Definition: sis190.h:197
Definition: sis190.h:194
Definition: sis190.h:201
Definition: sis190.h:171
Definition: sis190.h:172
Definition: sis190.h:192
Definition: sis190.h:184
Definition: sis190.h:177
Definition: sis190.h:217
Definition: sis190.h:203
Definition: sis190.h:183
Definition: sis190.h:215
Definition: sis190.h:180
Definition: sis190.h:202
Definition: sis190.h:176

◆ sis190_eeprom_access_register_bits

Enumerator
EECS 
EECLK 
EEDO 
EEDI 
EEREQ 
EEROP 
EEWOP 

Definition at line 226 of file sis190.h.

226  {
227  EECS = 0x00000001, // unused
228  EECLK = 0x00000002, // unused
229  EEDO = 0x00000008, // unused
230  EEDI = 0x00000004, // unused
231  EEREQ = 0x00000080,
232  EEROP = 0x00000200,
233  EEWOP = 0x00000100 // unused
234 };
Definition: sis190.h:233
Definition: sis190.h:232
Definition: sis190.h:229
Definition: sis190.h:230
Definition: sis190.h:227
Definition: sis190.h:231
Definition: sis190.h:228

◆ sis190_eeprom_address

Enumerator
EEPROMSignature 
EEPROMCLK 
EEPROMInfo 
EEPROMMACAddr 

Definition at line 237 of file sis190.h.

237  {
238  EEPROMSignature = 0x00,
239  EEPROMCLK = 0x01, // unused
240  EEPROMInfo = 0x02,
241  EEPROMMACAddr = 0x03
242 };

◆ sis190_feature

Enumerator
F_HAS_RGMII 
F_PHY_88E1111 
F_PHY_BCM5461 

Definition at line 244 of file sis190.h.

244  {
245  F_HAS_RGMII = 1,
246  F_PHY_88E1111 = 2,
247  F_PHY_BCM5461 = 4
248 };

◆ sis190_phy_type

Enumerator
UNKNOWN 
HOME 
LAN 
MIX 

Definition at line 277 of file sis190.h.

277  {
278  UNKNOWN = 0x00,
279  HOME = 0x01,
280  LAN = 0x02,
281  MIX = 0x03
282 };
Definition: sis190.h:279
Definition: sis190.h:280
Definition: sis190.h:281

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL_ANY  )

◆ sis190_phy_task()

static void sis190_phy_task ( struct sis190_private tp)
static

◆ sis190_free()

static void sis190_free ( struct net_device dev)
static

◆ sis190_init_rxfilter()

static void sis190_init_rxfilter ( struct net_device dev)
inlinestatic

Variable Documentation

◆ mii_chip_table

struct mii_chip_info mii_chip_table[]
static
Initial value:
= {
{ "Atheros PHY", { 0x004d, 0xd010 }, LAN, 0 },
{ "Atheros PHY AR8012", { 0x004d, 0xd020 }, LAN, 0 },
{ "Broadcom PHY BCM5461", { 0x0020, 0x60c0 }, LAN, F_PHY_BCM5461 },
{ "Broadcom PHY AC131", { 0x0143, 0xbc70 }, LAN, 0 },
{ "Agere PHY ET1101B", { 0x0282, 0xf010 }, LAN, 0 },
{ "Marvell PHY 88E1111", { 0x0141, 0x0cc0 }, LAN, F_PHY_88E1111 },
{ "Realtek PHY RTL8201", { 0x0000, 0x8200 }, LAN, 0 },
{ NULL, { 0x00, 0x00 }, 0, 0 }
}
Definition: sis190.h:280
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362

Referenced by sis190_init_phy().