74 #define sis900_bufs NIC_FAKE_BSS ( struct sis900_bss ) 75 #define txd sis900_bufs.txd 76 #define rxd sis900_bufs.rxd 77 #define txb sis900_bufs.txb 78 #define rxb sis900_bufs.rxb 81 static struct mac_chip_info {
85 } mac_chip_table[] = {
86 {
"SiS 900 PCI Fast Ethernet", PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900,
88 {
"SiS 7016 PCI Fast Ethernet",PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016,
130 { .
vendor = 0x1039, .device = 0x0008,
131 .name =
"SIS 85C503/5513 PCI to ISA bridge"},
134 PCI_DRIVER( sis_bridge_pci_driver, pci_isa_bridge_list, PCI_NO_CLASS );
136 static struct device_driver sis_bridge_driver = {
137 .name =
"SIS ISA bridge",
139 .bus_driver_info = (
struct bus_driver_info * ) &sis_bridge_pci_driver,
152 static void sis900_mdio_write(
int phy_id,
int location,
int val);
165 unsigned int t,
unsigned int s,
const char *p);
194 for (i = 0; i < 3; i++)
222 printf(
"Alternate function\n");
225 while(waittime < 2000) {
229 for (i = 0; i < 3; i++)
258 struct bus_loc bus_loc;
260 struct bus_dev bus_dev;
265 memset(&bus_loc, 0,
sizeof(bus_loc));
266 if ( ! find_by_driver ( &bus_loc, &
u.bus_dev, &sis_bridge_driver, 0 ) )
274 outb(0x09 + i, 0x70);
311 for (i = 0 ; i < 3 ; i++) {
377 printf (
"sis900_probe: Error MAC address not found\n");
391 for (phy_addr = 0; phy_addr < 32; phy_addr++) {
393 u16 phy_id0, phy_id1;
396 if (mii_status == 0xffff || mii_status == 0x0000)
409 printf(
"sis900_probe: %s transceiver found at address %d.\n",
424 printf(
"sis900_probe: No MII transceivers found!\n");
449 #define eeprom_delay() inl(ee_addr) 477 for (i = 8; i >= 0; i--) {
479 outl(dataval, ee_addr);
488 for (i = 16; i > 0; i--) {
505 #define sis900_mdio_delay() inl(mdio_addr) 526 for (i = 31; i >= 0; i--) {
545 for (i = 15; i >= 0; i--) {
547 outl(dataval, mdio_addr);
549 outl(dataval |
MDC, mdio_addr);
554 for (i = 16; i > 0; i--) {
561 outl(0x00, mdio_addr);
566 static void sis900_mdio_write(
int phy_id,
int location,
int value)
576 for (i = 15; i >= 0; i--) {
578 outb(dataval, mdio_addr);
580 outb(dataval |
MDC, mdio_addr);
586 for (i = 15; i >= 0; i--) {
588 outl(dataval, mdio_addr);
590 outl(dataval |
MDC, mdio_addr);
596 for (i = 2; i > 0; i--) {
602 outl(0x00, mdio_addr);
660 while (
status && (i++ < 1000)) {
692 for (i = 0 ; i < 3 ; i++) {
700 printf(
"sis900_init_rxfilter: Receive Filter Addrss[%d]=%X\n",
729 printf(
"sis900_init_txd: TX descriptor register loaded with: %X\n",
756 printf(
"sis900_init_rxd: rxd[%d]=%p link=%X cmdsts=%X bufptr=%X\n",
765 printf(
"sis900_init_rxd: RX descriptor register loaded with: %X\n",
784 int i, table_entries;
786 u16 mc_filter[16] = {0};
795 for (i = 0; i < table_entries; i++)
796 mc_filter[i] = 0xffff;
799 for (i = 0; i < table_entries; i++) {
827 u32 tx_flags = 0, rx_flags = 0;
874 u16 phy_id0, phy_id1;
892 if((phy_id0 == 0x0000) && ((phy_id1 & 0xFFF0) == 0x8200)){
900 printf(
"sis900_read_mode: Media Link Off\n");
902 printf(
"sis900_read_mode: Media Link On %s %s-duplex \n",
904 "100mbps" :
"10mbps",
926 for (i = 0; i < 2; i++)
931 for (i = 0; i < 2; i++)
943 printf(
"amd79c901_read_mode: Media Link On %s %s-duplex \n",
945 "100mbps" :
"10mbps",
949 printf(
"amd79c901_read_mode: Media Link Off\n");
956 printf(
"amd79c901_read_mode:Media Link On 1mbps half-duplex \n");
958 printf(
"amd79c901_read_mode: Media Link Off\n");
980 for (i = 0; i < 2; i++)
994 printf(
"ics1893_read_mode: Media Link On %s %s-duplex \n",
996 "100mbps" :
"10mbps",
1000 printf(
"ics1893_read_mode: Media Link Off\n");
1038 printf(
"rtl8201_read_mode: Media Link On %s %s-duplex \n",
1040 "100mbps" :
"10mbps",
1044 printf(
"rtl8201_read_config_mode: Media Link Off\n");
1082 printf(
"vt6103_read_mode: Media Link On %s %s-duplex \n",
1084 "100mbps" :
"10mbps",
1088 printf(
"vt6103_read_config_mode: Media Link Off\n");
1111 volatile u32 tx_status;
1119 printf(
"sis900_transmit: TX descriptor register loaded with: %X\n",
1132 printf(
"sis900_transmit: sending %d bytes ethtype %hX\n", (
int) s, t);
1146 printf(
"sis900_transmit: Queued Tx packet size %d.\n", (
int) s);
1154 printf(
"sis900_transmit: TX Timeout! Tx status %X.\n",
1155 (
unsigned int) tx_status);
1160 printf(
"sis900_transmit: Transmit error, Tx status %X.\n",
1161 (
unsigned int) tx_status);
1193 (
unsigned int) rx_status);
1195 if (!(rx_status &
OWN))
1199 printf(
"sis900_poll: got a packet: cur_rx:%d, status:%X\n",
1200 cur_rx, (
unsigned int) rx_status);
1202 if ( ! retrieve )
return 1;
1208 printf(
"sis900_poll: Corrupted packet received, buffer status = %X\n",
1209 (
unsigned int) rx_status);
1288 PCI_ROM(0x1039, 0x0900,
"sis900",
"SIS900", 0),
1289 PCI_ROM(0x1039, 0x7016,
"sis7016",
"SIS7016", 0),
static unsigned int cur_rx
static u16 sis900_mdio_read(int phy_id, int location)
static struct mii_phy mii
int printf(const char *fmt,...)
Write a formatted string to the console.
uint16_t inw(volatile uint16_t *io_addr)
Read 16-bit word from I/O-mapped device.
static unsigned int unsigned int reg
unsigned long ioaddr
I/O address.
static void sis900_reset(struct nic *nic)
#define sis900_mdio_delay()
static int sis900_probe(struct nic *nic, struct pci_device *pci)
unsigned char rxb[NUM_RX_DESC *RX_BUF_SIZE]
static int sis635_get_mac_addr(struct pci_device *pci_dev __unused, struct nic *nic)
sis630e_get_mac_addr: - Get MAC address for SiS630E model @pci_dev: the sis900 pci device @net_dev: t...
static void amd79c901_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex)
static int sis630e_get_mac_addr(struct pci_device *pci_dev __unused, struct nic *nic __unused)
sis630e_get_mac_addr: - Get MAC address for SiS630E model @pci_dev: the sis900 pci device @net_dev: t...
BufferDesc rxd[NUM_RX_DESC]
void adjust_pci_device(struct pci_device *pci)
Enable PCI device.
int dummy_connect(struct nic *nic __unused)
static void ics1893_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex)
#define PCI_COMMAND_MASTER
Bus master.
#define PCI_COMMAND_IO
I/O space.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
PCI_DRIVER(sis900_driver, sis900_nics, PCI_NO_CLASS)
#define FDX_CAPABLE_FULL_SELECTED
static void sis900_init(struct nic *nic)
static __always_inline unsigned long virt_to_bus(volatile const void *addr)
Convert virtual address to a bus address.
uint16_t device
Device ID.
static void sis900_disable(struct nic *nic, void *hwdev)
static void sis900_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex)
static int sis900_poll(struct nic *nic, int retrieve)
pseudo_bit_t value[0x00020]
#define __unused
Declare a variable or data structure as unused.
struct mii_chip_info * chip_info
void udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
static void rtl8201_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex)
u32 link
Link to next descriptor.
static int sis900_get_mac_addr(struct pci_device *pci_dev __unused, struct nic *nic)
sis900_get_mac_addr: - Get MAC address for stand alone SiS900 model @pci_dev: the sis900 pci device @...
static void sis900_init_rxfilter(struct nic *nic)
uint32_t revision
Entry point revision.
int pci_write_config_byte(struct pci_device *pci, unsigned int where, uint8_t value)
Write byte to PCI configuration space.
#define outl(data, io_addr)
static int sis96x_get_mac_addr(struct pci_device *pci_dev __unused, struct nic *nic)
sis96x_get_mac_addr: - Get MAC address for SiS962 or SiS963 model @pci_dev: the sis900 pci device @ne...
static void sis900_init_txd(struct nic *nic)
unsigned char txb[TX_BUF_SIZE]
#define HW_SPEED_100_MBPS
uint8_t inb(volatile uint8_t *io_addr)
Read byte from I/O-mapped device.
static struct nic_operations sis900_operations
A PCI device ID list entry.
static void sis900_set_rx_mode(struct nic *nic)
static unsigned long ioaddr
uint16_t vendor
Vendor ID.
static void sis900_irq(struct nic *nic, irq_action_t action)
static struct mii_chip_info mii_chip_table[]
static void sis900_init_rxd(struct nic *nic)
uint16_t vendor
PCI vendor ID.
unsigned char * node_addr
static unsigned int cur_phy
#define outb(data, io_addr)
DRIVER("SIS900", nic_driver, pci_driver, sis900_driver, sis900_probe, sis900_disable, sis900_bufs)
uint32_t bufptr
Buffer pointer.
static void sis900_mdio_idle(long mdio_addr)
uint32_t inl(volatile uint32_t *io_addr)
Read 32-bit dword from I/O-mapped device.
#define FDX_CAPABLE_HALF_SELECTED
static struct pci_device_id sis900_nics[]
int pci_write_config_dword(struct pci_device *pci, unsigned int where, uint32_t value)
Write 32-bit dword to PCI configuration space.
#define PCI_REVISION
PCI revision.
static unsigned short vendor
static void sis900_check_mode(struct nic *nic)
uint32_t cmdsts
Command / status.
static void sis900_mdio_reset(long mdio_addr)
static u16 sis900_read_eeprom(int location)
unsigned long currticks(void)
Get current system time in ticks.
#define DBG(...)
Print a debugging message.
static unsigned short dev_id
struct nic_operations * nic_op
static void vt6103_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex)
void(* read_mode)(struct nic *nic, int phy_addr, int *speed, int *duplex)
u8 signature
CPU signature.
static struct command_descriptor read_cmd
"read" command descriptor
int(* connect)(struct nic *)
#define NULL
NULL pointer (VOID *)
#define PCI_ROM(_vendor, _device, _name, _description, _data)
static void sis900_transmit(struct nic *nic, const char *d, unsigned int t, unsigned int s, const char *p)
#define SIS900_TOTAL_SIZE
void * memset(void *dest, int character, size_t len) __nonnull
int pci_read_config_byte(struct pci_device *pci, unsigned int where, uint8_t *value)
Read byte from PCI configuration space.