74 #define txd sis900_bufs.txd 75 #define rxd sis900_bufs.rxd 76 #define txb sis900_bufs.txb 77 #define rxb sis900_bufs.rxb 80 static struct mac_chip_info {
84 } mac_chip_table[] = {
85 {
"SiS 900 PCI Fast Ethernet", PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900,
87 {
"SiS 7016 PCI Fast Ethernet",PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016,
129 { .
vendor = 0x1039, .device = 0x0008,
130 .name =
"SIS 85C503/5513 PCI to ISA bridge"},
133 PCI_DRIVER( sis_bridge_pci_driver, pci_isa_bridge_list, PCI_NO_CLASS );
135 static struct device_driver sis_bridge_driver = {
136 .name =
"SIS ISA bridge",
138 .bus_driver_info = (
struct bus_driver_info * ) &sis_bridge_pci_driver,
151 static void sis900_mdio_write(
int phy_id,
int location,
int val);
164 unsigned int t,
unsigned int s,
const char *p);
193 for (i = 0; i < 3; i++)
221 printf(
"Alternate function\n");
224 while(waittime < 2000) {
228 for (i = 0; i < 3; i++)
257 struct bus_loc bus_loc;
259 struct bus_dev bus_dev;
264 memset(&bus_loc, 0,
sizeof(bus_loc));
265 if ( ! find_by_driver ( &bus_loc, &
u.bus_dev, &sis_bridge_driver, 0 ) )
273 outb(0x09 + i, 0x70);
310 for (i = 0 ; i < 3 ; i++) {
376 printf (
"sis900_probe: Error MAC address not found\n");
390 for (phy_addr = 0; phy_addr < 32; phy_addr++) {
392 u16 phy_id0, phy_id1;
395 if (mii_status == 0xffff || mii_status == 0x0000)
408 printf(
"sis900_probe: %s transceiver found at address %d.\n",
423 printf(
"sis900_probe: No MII transceivers found!\n");
448 #define eeprom_delay() inl(ee_addr) 476 for (i = 8; i >= 0; i--) {
478 outl(dataval, ee_addr);
487 for (i = 16; i > 0; i--) {
504 #define sis900_mdio_delay() inl(mdio_addr) 525 for (i = 31; i >= 0; i--) {
544 for (i = 15; i >= 0; i--) {
546 outl(dataval, mdio_addr);
548 outl(dataval |
MDC, mdio_addr);
553 for (i = 16; i > 0; i--) {
560 outl(0x00, mdio_addr);
565 static void sis900_mdio_write(
int phy_id,
int location,
int value)
575 for (i = 15; i >= 0; i--) {
577 outb(dataval, mdio_addr);
579 outb(dataval |
MDC, mdio_addr);
585 for (i = 15; i >= 0; i--) {
587 outl(dataval, mdio_addr);
589 outl(dataval |
MDC, mdio_addr);
595 for (i = 2; i > 0; i--) {
601 outl(0x00, mdio_addr);
659 while (
status && (i++ < 1000)) {
691 for (i = 0 ; i < 3 ; i++) {
699 printf(
"sis900_init_rxfilter: Receive Filter Addrss[%d]=%X\n",
728 printf(
"sis900_init_txd: TX descriptor register loaded with: %X\n",
755 printf(
"sis900_init_rxd: rxd[%d]=%p link=%X cmdsts=%X bufptr=%X\n",
764 printf(
"sis900_init_rxd: RX descriptor register loaded with: %X\n",
783 int i, table_entries;
785 u16 mc_filter[16] = {0};
794 for (i = 0; i < table_entries; i++)
795 mc_filter[i] = 0xffff;
798 for (i = 0; i < table_entries; i++) {
826 u32 tx_flags = 0, rx_flags = 0;
873 u16 phy_id0, phy_id1;
891 if((phy_id0 == 0x0000) && ((phy_id1 & 0xFFF0) == 0x8200)){
899 printf(
"sis900_read_mode: Media Link Off\n");
901 printf(
"sis900_read_mode: Media Link On %s %s-duplex \n",
903 "100mbps" :
"10mbps",
925 for (i = 0; i < 2; i++)
930 for (i = 0; i < 2; i++)
942 printf(
"amd79c901_read_mode: Media Link On %s %s-duplex \n",
944 "100mbps" :
"10mbps",
948 printf(
"amd79c901_read_mode: Media Link Off\n");
955 printf(
"amd79c901_read_mode:Media Link On 1mbps half-duplex \n");
957 printf(
"amd79c901_read_mode: Media Link Off\n");
979 for (i = 0; i < 2; i++)
993 printf(
"ics1893_read_mode: Media Link On %s %s-duplex \n",
995 "100mbps" :
"10mbps",
999 printf(
"ics1893_read_mode: Media Link Off\n");
1037 printf(
"rtl8201_read_mode: Media Link On %s %s-duplex \n",
1039 "100mbps" :
"10mbps",
1043 printf(
"rtl8201_read_config_mode: Media Link Off\n");
1081 printf(
"vt6103_read_mode: Media Link On %s %s-duplex \n",
1083 "100mbps" :
"10mbps",
1087 printf(
"vt6103_read_config_mode: Media Link Off\n");
1110 volatile u32 tx_status;
1118 printf(
"sis900_transmit: TX descriptor register loaded with: %X\n",
1131 printf(
"sis900_transmit: sending %d bytes ethtype %hX\n", (
int) s, t);
1145 printf(
"sis900_transmit: Queued Tx packet size %d.\n", (
int) s);
1153 printf(
"sis900_transmit: TX Timeout! Tx status %X.\n",
1154 (
unsigned int) tx_status);
1159 printf(
"sis900_transmit: Transmit error, Tx status %X.\n",
1160 (
unsigned int) tx_status);
1192 (
unsigned int) rx_status);
1194 if (!(rx_status &
OWN))
1198 printf(
"sis900_poll: got a packet: cur_rx:%d, status:%X\n",
1199 cur_rx, (
unsigned int) rx_status);
1201 if ( ! retrieve )
return 1;
1207 printf(
"sis900_poll: Corrupted packet received, buffer status = %X\n",
1208 (
unsigned int) rx_status);
1287 PCI_ROM(0x1039, 0x0900,
"sis900",
"SIS900", 0),
1288 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)
DRIVER("SIS900", nic_driver, pci_driver, sis900_driver, sis900_probe, sis900_disable)
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...
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_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 void sis900_disable(struct nic *nic)
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)
#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)
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.