diff --git a/build/jam/NetBootArchive b/build/jam/NetBootArchive index d6e257a4d0..105d422b98 100644 --- a/build/jam/NetBootArchive +++ b/build/jam/NetBootArchive @@ -19,8 +19,8 @@ BEOS_NETWORK_DATALINK_PROTOCOLS = ethernet_frame arp loopback_frame ipv4_datagram ; BEOS_NETWORK_PROTOCOLS = ipv4 tcp udp icmp ; -BEOS_ADD_ONS_DRIVERS_NET = etherpci ipro1000 rtl8139 rtl8169 sis900 - via-rhine wb840 net_stack vlance +BEOS_ADD_ONS_DRIVERS_NET = 3com etherpci ipro1000 rtl8139 rtl8169 sis900 + via_rhine wb840 net_stack vlance $(GPL_ONLY)bcm440x $(GPL_ONLY)bcm570x ; BEOS_ADD_ONS_BUS_MANAGERS = pci $(X86_ONLY)isa ide scsi diff --git a/src/add-ons/kernel/drivers/network/via-rhine/Jamfile b/src/add-ons/kernel/drivers/network/via-rhine/Jamfile index f212607505..79e5140023 100644 --- a/src/add-ons/kernel/drivers/network/via-rhine/Jamfile +++ b/src/add-ons/kernel/drivers/network/via-rhine/Jamfile @@ -1,47 +1,4 @@ SubDir HAIKU_TOP src add-ons kernel drivers network via-rhine ; -SetSubDirSupportedPlatformsBeOSCompatible ; - -# set some additional flags -SubDirCcFlags -Wall ; - -# For ether_driver.h -UsePrivateHeaders net ; - -KernelAddon via-rhine : - entry.c - hook.c - cmd.c - mdio.c - pci.c - res.c - ring.c - util.c - ; - -# Package haiku-via-rhine-cvs : -# via-rhine : -# boot home config add-ons kernel drivers bin ; -# Package haiku-via-rhine-cvs : -# via-rhine : -# boot home config add-ons kernel drivers dev net ; - -Package haiku-networkingkit-cvs : - via-rhine : - boot home config add-ons kernel drivers bin ; -PackageDriverSymLink haiku-networkingkit-cvs : net via-rhine ; - - -# Installation - -HaikuInstall install-networking : /boot/home/config/add-ons/kernel/drivers/bin : - via-rhine -; - -HaikuInstallRelSymLink install-networking : /boot/home/config/add-ons/kernel/drivers/dev/net : - via-rhine : - installed-symlink -; - SubInclude HAIKU_TOP src add-ons kernel drivers network via-rhine dev ; SubInclude HAIKU_TOP src add-ons kernel drivers network via-rhine pci ; diff --git a/src/add-ons/kernel/drivers/network/via-rhine/cmd.c b/src/add-ons/kernel/drivers/network/via-rhine/cmd.c deleted file mode 100644 index ae5dab30bf..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/cmd.c +++ /dev/null @@ -1,56 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -/* - * VIA Rhine Commands - */ -void cmd_reset(viarhine_private *device) -{ - write16(device->addr + ChipCmd, CmdReset); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("cmd_reset\n"); -#endif -} - -void cmd_getmacaddr(viarhine_private *device) -{ - int i; - - for (i = 0; i < 6; i++) - device->macaddr.ebyte[i] = read8(device->addr + StationAddr + i); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("cmd_getmacaddr (%02x:%02x:%02x:%02x:%02x:%02x)\n", - (unsigned char)device->macaddr.ebyte[0], - (unsigned char)device->macaddr.ebyte[1], - (unsigned char)device->macaddr.ebyte[2], - (unsigned char)device->macaddr.ebyte[3], - (unsigned char)device->macaddr.ebyte[4], - (unsigned char)device->macaddr.ebyte[5]); -#endif -} diff --git a/src/add-ons/kernel/drivers/network/via-rhine/entry.c b/src/add-ons/kernel/drivers/network/via-rhine/entry.c deleted file mode 100644 index 77160c4c27..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/entry.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -/* - * Standard Driver Entry Functions - */ -status_t init_driver (void); -void uninit_driver (void); -const char **publish_devices(void); -device_hooks *find_device (const char *name); - -char *pDevNameList[MAX_CARDS+1]; -pci_info *pDevList [MAX_CARDS+1]; -pci_module_info *pModuleInfo; - -const char **publish_devices(void) -{ -#ifdef __VIARHINE_DEBUG__ - debug_printf("publish_devices\n"); -#endif - return (const char **)pDevNameList; -} - -status_t init_hardware(void ) -{ -#ifdef __VIARHINE_DEBUG__ - debug_printf("init_hardware\n"); -#endif - return B_NO_ERROR; -} - -status_t init_driver() -{ - status_t status; - int32 entries; - char devName[64]; - int32 i; - -#ifdef __VIARHINE_DEBUG__ - debug_printf("init_driver\n"); -#endif - - if ((status = get_module(B_PCI_MODULE_NAME, (module_info **)&pModuleInfo)) != B_OK) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf(DevName ": init_driver: get_module failed! (%s)\n", strerror(status)); -#endif - return status; - } - - // Find VIA Rhine Cards - if ((entries = pci_getlist(pDevList, MAX_CARDS)) == 0) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf(DevName ": init_driver: Device(s) Not Found\n"); -#endif - pci_freelist(pDevList); - put_module (B_PCI_MODULE_NAME); - return B_ERROR; - } - - // Create Device Name List - for (i = 0; i < entries; i++) - { - sprintf(devName, "%s%ld", DevDir, i ); - pDevNameList[i] = (char*)malloc(strlen(devName) + 1); - strcpy(pDevNameList[i], devName); - } - - pDevNameList[i] = NULL; - return B_OK; -} - -void uninit_driver(void) -{ - int32 i; - void *item; - -#ifdef __VIARHINE_DEBUG__ - debug_printf("uninit_driver\n"); -#endif - - // Free Device Name List - for (i = 0; (item = pDevNameList[i]); i++) - free(item); - - // Free Device List - pci_freelist(pDevList); - put_module (B_PCI_MODULE_NAME); -} - -device_hooks *find_device(const char *name) -{ - int32 i; - char *item; - - if (name == NULL) - return NULL; - - // Find Device Name - for (i = 0; (item = pDevNameList[i]); i++) - { - if (strcmp(name, item) == 0) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf("find_device: Device Found (%s)\n", name); -#endif - return &pDeviceHooks; - } - } - -#ifdef __VIARHINE_DEBUG__ - debug_printf("find_device: Device (%s) Not Found\n", name); -#endif - return NULL; -} - -int32 api_version = B_CUR_DRIVER_API_VERSION; diff --git a/src/add-ons/kernel/drivers/network/via-rhine/hook.c b/src/add-ons/kernel/drivers/network/via-rhine/hook.c deleted file mode 100644 index 19e3f5db9e..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/hook.c +++ /dev/null @@ -1,504 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -int32 nOpenMask = 0; - -int32 hook_interrupt(void *_device) -{ - viarhine_private *device = (viarhine_private*)_device; - int32 handled = B_UNHANDLED_INTERRUPT; - int16 worklimit = 20; - uint16 reg; - uint32 i, j; - int wakeup_reader = 0; - int wakeup_writer = 0; - - do - { - reg = read16(device->addr + IntrStatus); - - // Acknowledge All of the Current Interrupt Sources ASAP. - write16(device->addr + IntrStatus, reg & 0xffff); - - if (reg == 0) - break; - - if (reg & IntrRxDone) - { - wakeup_reader++; - //write16(device->addr + ChipCmd, CmdRxDemand | read16(device->addr + ChipCmd)); - handled = B_HANDLED_INTERRUPT; - continue; - } - if (reg & IntrTxDone) - { - wakeup_writer++; - //write16(device->addr + ChipCmd, CmdTxDemand | read16(device->addr + ChipCmd)); - handled = B_HANDLED_INTERRUPT; - continue; - } - - if (reg & (IntrRxErr | IntrRxDropped | IntrRxWakeUp | IntrRxEmpty | IntrRxNoBuf)) - { - write16(device->addr + ChipCmd, CmdRxDemand | read16(device->addr + ChipCmd)); - handled = B_HANDLED_INTERRUPT; - continue; - } - if (reg & IntrTxAbort) - { - /* Just restart Tx. */ - write16(device->addr + ChipCmd, CmdTxDemand | read16(device->addr + ChipCmd)); - handled = B_HANDLED_INTERRUPT; - continue; - } - if (reg & IntrTxUnderrun) - { - if (device->tx_thresh < 0xE0) - write8(device->addr + TxConfig, device->tx_thresh += 0x20); - write16(device->addr + ChipCmd, CmdTxDemand | read16(device->addr + ChipCmd)); - handled = B_HANDLED_INTERRUPT; - continue; - } -/* if (reg & IntrTxDone) - { - if (device->tx > 0) - device->tx--; - - if (device->tx > 0) - write16(device->addr + ChipCmd, CmdTxDemand | read16(device->addr + ChipCmd)); - } -*/ - if (--worklimit < 0) - break; - } while (true); - - if (wakeup_reader) - { - -/* for (i = 0, j = 0; i < RX_BUFFERS; i++) - { - if (!(device->rx_desc[i].rx_status & DescOwn)) - { - j++; - } - } - - device->cur_rx = j; -*/ - input_unwait(device, 1); - } - - if (wakeup_writer) - { - output_unwait(device, 1); - } - - return handled; -} - -status_t hook_open(const char *name, uint32 flags, void **cookie) -{ - char *devName; - int i; - int32 devID; - int32 mask; - area_id cookieID; - status_t status; - uint32 size; - viarhine_private *device; - - (void)flags; /* get rid of compiler warning */ - - // Find Device Name - for (devID = 0; (devName = pDevNameList[devID]); devID++) - { - if (strcmp(name, devName) == 0) - break; - } - - if (!devName) - return EINVAL; - - // Check if the Device is Busy and Set in-use Flag if Not - mask = 1 << devID; - if (atomic_or(&nOpenMask, mask) & mask) - return B_BUSY; - - // Allocate Storage for the Cookie - size = RNDUP(sizeof(viarhine_private), B_PAGE_SIZE); - cookieID = create_area( DevName " cookie", - cookie, - B_ANY_KERNEL_ADDRESS, - size, - B_FULL_LOCK, - B_READ_AREA | B_WRITE_AREA); - - if (cookieID < 0) - { - status = B_NO_MEMORY; - goto Err0; - } - - device = (viarhine_private*)(*cookie); - memset(device, 0, sizeof(viarhine_private)); - - // Setup the Cookie - device->cookieID = cookieID; - device->devID = devID; - device->pciInfo = pDevList[devID]; - device->addr = device->pciInfo->u.h0.base_registers[0]; - - if ((status = res_allocate(device)) != B_OK) - goto Err1; - - cmd_reset(device); - snooze(2000); - cmd_getmacaddr(device); - - // Initialize MII Chip - if (cap_tbl[device->devID].flags & CanHaveMII) - { - int phy, - phy_idx = 0; - - device->mii_phys[0] = 1; // Standard for this chip. - for (phy = 1; (phy < 32) && (phy_idx < 4); phy++) - { - int mii_status = mdio_read(device, phy, 1); - - if ((mii_status != 0xffff) && (mii_status != 0x0000)) - { - device->mii_phys[phy_idx++] = phy; - device->mii_advertising = mdio_read(device, phy, 4); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("mii status=%lx, advertising=%lx\n", mii_status, device->mii_advertising); -#endif - } - } - - device->mii_cnt = phy_idx; - } - - // Allocate and Initialize Frame Buffer Rings & Descriptors - if (ring_init(device) != B_OK) - goto Err2; - - for (i = 0; i < 6; i++) - write8(device->addr + StationAddr + i, device->macaddr.ebyte[i]); - - write32(device->addr + TxRingPtr, mem_virt2phys(&device->tx_desc[0], sizeof(device->tx_desc[0]))); - write32(device->addr + RxRingPtr, mem_virt2phys(&device->rx_desc[0], sizeof(device->rx_desc[0]))); - - // Initialize Other Registers. - write16(device->addr + PCIBusConfig, 0x0006); - - // Configure the FIFO Thresholds. - device->tx_thresh = 0x20; - device->rx_thresh = 0x60; /* Written in device_rx_setmode(). */ - - write8(device->addr + TxConfig, 0x20); - rx_setmode(device); - - // Setup Interrupt Handler - install_io_interrupt_handler(device->pciInfo->u.h0.interrupt_line, hook_interrupt, *cookie, 0); - - // Enable interrupts by setting the interrupt mask. - write16(device->addr + IntrEnable, - IntrRxDone | IntrRxErr | IntrRxEmpty | IntrRxOverflow | - IntrTxDone | IntrTxAbort | IntrTxUnderrun | IntrRxDropped | - IntrPCIErr | IntrStatsMax | IntrLinkChange | IntrMIIChange); - - device->cmd = CmdStart | CmdTxOn | CmdRxOn | /*CmdNoTxPoll |*/ CmdRxDemand; - - if (device->duplex_lock) - device->cmd |= CmdFDuplex; - - write16(device->addr + ChipCmd, device->cmd); - - duplex_check(device); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_open success!\n"); -#endif - return B_NO_ERROR; - -Err2: - ring_free(device); - -Err1: - res_free(device); - delete_area(device->cookieID); - -Err0: - atomic_and(&nOpenMask, ~mask); -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_open failed!\n"); -#endif - return status; -} - -status_t hook_close(void *_data) -{ - viarhine_private *device = (viarhine_private*)_data; - - device->interrupted = 1; - input_unwait(device, 1); - output_unwait(device, 1); - - res_free(device); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_close\n"); -#endif - return B_NO_ERROR; -} - -status_t hook_free(void *_data) -{ - viarhine_private *device = (viarhine_private*)_data; - - // Remove Interrupt Handler - remove_io_interrupt_handler(device->pciInfo->u.h0.interrupt_line, hook_interrupt, _data); - write16(device->addr + ChipCmd, CmdStop); - - ring_free(device); - - // Device is Now Available Again - atomic_and(&nOpenMask, ~(1 << device->devID)); - - delete_area(device->cookieID); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_free\n"); -#endif - return B_NO_ERROR; -} - -status_t hook_ioctl(void *_data, uint32 msg, void *buf, size_t len) -{ - viarhine_private *device = (viarhine_private*)_data; - - (void)len; /* get rid of compiler warning */ - - switch (msg) - { - case ETHER_GETADDR: - if (_data == NULL) - return B_ERROR; - - memcpy(buf, &device->macaddr, 6); -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: getaddr\n"); -#endif - return B_NO_ERROR; - - case ETHER_INIT: -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: init\n"); -#endif - return B_NO_ERROR; - - case ETHER_GETFRAMESIZE: -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: getframesize (%u)\n", MAX_FRAME_SIZE); -#endif - *(uint32*)buf = MAX_FRAME_SIZE; - return B_NO_ERROR; - - case ETHER_SETPROMISC: -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: setpromiscuous\n"); -#endif - break; - - case ETHER_NONBLOCK: -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: nonblock\n"); -#endif - - if (device == NULL) - return B_ERROR; - - memcpy(&device->nonblocking, buf, sizeof(device->nonblocking)); - return B_NO_ERROR; - - case ETHER_ADDMULTI: -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: add multicast\n"); -#endif - break; - - default: -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_control: unknown msg %x\n", msg); -#endif - break; - } - - return B_ERROR; -} - -status_t hook_read(void *_data, off_t pos, void *buf, size_t *len) -{ - viarhine_private *device = (viarhine_private*)_data; - ulong buflen; - unsigned int entry; - char *addr; - uint32 data_size; - uint32 desc_status; - - (void)pos; /* get rid of compiler warning */ - - buflen = *len; - - //write16(device->addr + ChipCmd, CmdRxDemand | read16(device->addr + ChipCmd)); - input_wait(device); - - if (device->interrupted) - { - *len = 0; - return B_INTERRUPTED; - } - - if (device->nonblocking) - { - *len = 0; - return 0; - } - - entry = device->cur_rx; - while (device->rx_desc[entry].rx_status & DescOwn) - { - entry++; - entry %= RX_BUFFERS; - } - - desc_status = device->rx_desc[entry].rx_status; - data_size = (desc_status >> 16) - 4; - - if (buflen < data_size) - { - data_size = buflen; - } - - addr = &device->rx_buf[entry * BUFFER_SIZE]; - -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_read: received (%u)(%u) (%02x:%02x:%02x:%02x:%02x:%02x)\n", - data_size, - entry, - (unsigned char)addr[0], - (unsigned char)addr[1], - (unsigned char)addr[2], - (unsigned char)addr[3], - (unsigned char)addr[4], - (unsigned char)addr[5]); -#endif - - *len = data_size; - memcpy(buf, addr, data_size); - - device->rx_desc[entry].desc_length = MAX_FRAME_SIZE; - device->rx_desc[entry].rx_status = DescOwn; - - entry++; - entry %= RX_BUFFERS; - device->cur_rx = entry; - - return B_OK; -} - -status_t hook_write(void *_data, off_t pos, const void *buf, size_t *len) -{ - viarhine_private *device = (viarhine_private*)_data; - ulong buflen; - status_t status; - unsigned int entry; - void *addr; - - (void)pos; /* get rid of compiler warning */ - - if (device->interrupted) - return B_INTERRUPTED; - - status = output_wait(device, ETHER_TRANSMIT_TIMEOUT); - if (status != B_OK) { -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_write: leave (%s)\n", strerror(status)); -#endif - return status; - } - - entry = device->cur_tx; - while(device->tx_desc[entry].tx_status & DescOwn) - { - entry++; - entry %= RX_BUFFERS; - } - - buflen = *len; - - device->tx_desc[entry].tx_status = DescOwn; - addr = &device->tx_buf[entry * BUFFER_SIZE]; - memcpy(addr, buf, buflen); - - if (buflen < 60) - buflen = 60; - - if (buflen & 3) { - buflen &= (~3); - buflen += 4; - } - - device->tx_desc[entry].desc_length = 0x00E08000 | buflen; - entry++; - entry %= TX_BUFFERS; - device->cur_tx = entry; - //write16(device->addr + ChipCmd, CmdTxDemand | read16(device->addr + ChipCmd)); - -#ifdef __VIARHINE_DEBUG__ - debug_printf("hook_write: sent (%u)(%u)\n", buflen, entry); -#endif - - *len = buflen; - return B_OK; -} - -device_hooks pDeviceHooks = -{ - hook_open, // open entry point - hook_close, // close entry point - hook_free, // free entry point - hook_ioctl, // ioctl entry point - hook_read, // read entry point - hook_write, // write entry point - NULL, // select entry point - NULL, // deselect entry point - NULL, // readv entry point - NULL // writev entry point -}; diff --git a/src/add-ons/kernel/drivers/network/via-rhine/mdio.c b/src/add-ons/kernel/drivers/network/via-rhine/mdio.c deleted file mode 100644 index 62b7d2a62f..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/mdio.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -int mdio_read(viarhine_private *device, int phy_id, int regnum) -{ - int boguscnt = 1024; - - /* Wait for a previous command to complete. */ - while ((read8(device->addr + MIICmd) & 0x60) && --boguscnt > 0) - ; - - write8(device->addr + MIICmd, 0x00); - write8(device->addr + MIIPhyAddr, phy_id); - write8(device->addr + MIIRegAddr, regnum); - write8(device->addr + MIICmd, 0x40); /* Trigger Read */ - - boguscnt = 1024; - while ((read8(device->addr + MIICmd) & 0x40) && --boguscnt > 0) - ; - - return read16(device->addr + MIIData); -} - -void mdio_write(viarhine_private *device, int phy_id, int regnum, int value) -{ - int boguscnt = 1024; - - if ((phy_id == device->mii_phys[0]) && (regnum == 4)) - device->mii_advertising = value; - - /* Wait for a previous command to complete. */ - while ((read8(device->addr + MIICmd) & 0x60) && --boguscnt > 0) - ; - - write8(device->addr + MIICmd, 0x00); - write8(device->addr + MIIPhyAddr, phy_id); - write8(device->addr + MIIRegAddr, regnum); - write8(device->addr + MIIData, value); - write8(device->addr + MIICmd, 0x20); /* Trigger Write. */ -} diff --git a/src/add-ons/kernel/drivers/network/via-rhine/pci.c b/src/add-ons/kernel/drivers/network/via-rhine/pci.c deleted file mode 100644 index 172fc054a3..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/pci.c +++ /dev/null @@ -1,144 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -/* - * PCI Information Table - */ -struct viarhine_pci_id_info pci_tbl[] = -{ - {"VIA VT3042 Rhine", 0x1106, 0x3043, 0xffff, PCI_command_io | PCI_command_master, 128}, - {"VIA VT6102 Rhine-II", 0x1106, 0x3065, 0xffff, PCI_command_io | PCI_command_master, 128}, - {"VIA VT86C100A Rhine-II", 0x1106, 0x6100, 0xffff, PCI_command_io | PCI_command_master, 128}, -// {"VIA VT6105M/LOM Rhine-III", 0x1106, 0x3106, 0xffff, PCI_command_io | PCI_command_master, 128}, -// {"VIA VT6105M Rhine-III Management Adaptor", 0x1106, 0x3053, 0xffff, PCI_command_io | PCI_command_master, 128}, - {0} -}; - -/* - * Chip Information Table - */ -struct viarhine_chip_info cap_tbl[] = -{ - {128, CanHaveMII}, - {128, CanHaveMII}, - {128, CanHaveMII} -}; - -/* - * VIA Rhine PCI Functions - */ -int32 pci_getlist(pci_info *info[], int32 maxEntries) -{ - status_t status; - int32 i, j; - int32 entries; - pci_info *item; - - item = (pci_info*)malloc(sizeof(pci_info)); - - for (i = 0, entries = 0; entries < maxEntries; i++) - { - if ((status = pModuleInfo->get_nth_pci_info(i, item)) != B_OK) - break; - - j = 0; - while (pci_tbl[j].name != NULL) - { - if ((pci_tbl[j].vendor_id == item->vendor_id) && - (pci_tbl[j].device_id == item->device_id)) - { - // Check if the Device Really has an IRQ - if ((item->u.h0.interrupt_line == 0) || - (item->u.h0.interrupt_line == 0xFF)) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf("pci_getlist: Found with Invalid IRQ - Check IRQ Assignement\n"); -#endif - goto next_entry; - } - -#ifdef __VIARHINE_DEBUG__ - debug_printf("pci_getlist: Found at IRQ %u\n", item->u.h0.interrupt_line); -#endif - - pModuleInfo->write_pci_config( - item->bus, - item->device, - item->function, - PCI_command, - 2, - pci_tbl[j].flags | pModuleInfo->read_pci_config( - item->bus, - item->device, - item->function, - PCI_command, - 2)); - - if (pci_tbl[j].flags & PCI_command_master) - { - if (item->latency < MIN_PCI_LATENCY) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf("pci_getlist: latency too slow\n"); -#endif - pModuleInfo->write_pci_config( - item->bus, - item->device, - item->function, - PCI_latency, - 1, - MIN_PCI_LATENCY); - } - } - - info[entries++] = item; - item = (pci_info *)malloc(sizeof(pci_info)); - goto next_entry; - } - - j++; - } -next_entry: - ; // gcc 4 doesn't like labels at the end of a compound statement - } - - info[entries] = NULL; - free(item); - return entries; -} - -status_t pci_freelist(pci_info *info[]) -{ - int32 i; - pci_info *item; - - for (i = 0; (item = info[i]); i++) - free(item); - - return B_OK; -} diff --git a/src/add-ons/kernel/drivers/network/via-rhine/res.c b/src/add-ons/kernel/drivers/network/via-rhine/res.c deleted file mode 100644 index 97e7a355c6..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/res.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -status_t res_allocate(viarhine_private *device) -{ -#ifdef __VIARHINE_DEBUG__ - debug_printf("device_allocate_resources\n"); -#endif - - device->olock = create_sem(TX_BUFFERS, "via-rhine output"); - set_sem_owner(device->olock, B_SYSTEM_TEAM); - device->ilock = create_sem(0, "via-rhine input"); - set_sem_owner(device->ilock, B_SYSTEM_TEAM); - - return B_OK; -} - -void res_free(viarhine_private *device) -{ -#ifdef __VIARHINE_DEBUG__ - debug_printf("device_free_resources\n"); -#endif - - delete_sem(device->olock); - delete_sem(device->ilock); -} diff --git a/src/add-ons/kernel/drivers/network/via-rhine/ring.c b/src/add-ons/kernel/drivers/network/via-rhine/ring.c deleted file mode 100644 index 7a9d804cae..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/ring.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -status_t ring_init(viarhine_private *device) -{ - uint32 size; - uint16 i; - - // Create Transmit Buffer Area - size = RNDUP(BUFFER_SIZE * TX_BUFFERS, B_PAGE_SIZE); - if ((device->tx_buf_area = create_area( DevName " tx buffers", - (void **)&device->tx_buf, - B_ANY_KERNEL_ADDRESS, - size, - B_FULL_LOCK, - B_READ_AREA | B_WRITE_AREA)) < 0) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf(DevName ": Create TX Buffer Area Failed %x\n", device->tx_buf_area); -#endif - return device->tx_buf_area; - } - - // Initialize TX Buffer Descriptors - for ( i = 0; i < TX_BUFFERS; i++) - { - device->tx_desc[i].tx_status = 0; - device->tx_desc[i].desc_length = 0; - device->tx_desc[i].addr = mem_virt2phys(&device->tx_buf[i * BUFFER_SIZE], BUFFER_SIZE); - device->tx_desc[i].next = mem_virt2phys(&device->tx_desc[i + 1], sizeof(device->tx_desc[0])); - } - device->tx_desc[i - 1].next = mem_virt2phys(&device->tx_desc[0], sizeof(device->tx_desc[0])); - - // Create RX Buffer Area - size = RNDUP(BUFFER_SIZE * RX_BUFFERS, B_PAGE_SIZE); - if ((device->rx_buf_area = create_area( DevName " rx buffers", - (void **)&device->rx_buf, - B_ANY_KERNEL_ADDRESS, - size, - B_FULL_LOCK, - B_READ_AREA | B_WRITE_AREA)) < 0) - { -#ifdef __VIARHINE_DEBUG__ - debug_printf(DevName ": Create RX Buffer Area Failed %x\n", device->rx_buf_area); -#endif - delete_area(device->tx_buf_area); - return device->rx_buf_area; - } - - // Initialize RX Buffer Descriptors - for ( i = 0; i < RX_BUFFERS; i++) - { - device->rx_desc[i].rx_status = DescOwn; - device->rx_desc[i].desc_length = MAX_FRAME_SIZE; - device->rx_desc[i].addr = mem_virt2phys(&device->rx_buf[i * BUFFER_SIZE], BUFFER_SIZE); - device->rx_desc[i].next = mem_virt2phys(&device->rx_desc[i + 1], sizeof(device->rx_desc[0])); - } - device->rx_desc[i - 1].next = mem_virt2phys(&device->rx_desc[0], sizeof(device->tx_desc[0])); - - return B_OK; -} - -void ring_free(viarhine_private *device) -{ - delete_area(device->tx_buf_area); - delete_area(device->rx_buf_area); -} diff --git a/src/add-ons/kernel/drivers/network/via-rhine/util.c b/src/add-ons/kernel/drivers/network/via-rhine/util.c deleted file mode 100644 index 5d5b69551b..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/util.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * VIA VT86C100A Rhine-II and VIA VT3043 Rhine Based Card Driver - * for the BeOS Release 5 - */ - -/* - * Standard Libraries - */ -#include -#include -#include -#include -#include - -/* - * Driver-Related Libraries - */ -#include -#include -#include -#include -#include - -/* - * VIA Rhine Libraries - */ -#include "via-rhine.h" - -uint32 mem_virt2phys(void *addr, unsigned int length) -{ - physical_entry tbl; - - get_memory_map(addr, length, &tbl, 1); - return (uint32)tbl.address; -} - -void rx_setmode(viarhine_private *device) -{ - uint8 rx_mode; // Note: 0x02 = Accept Runt, 0x01 = Accept Errors - -#if defined(__VIARHINE_PROMISCUOUS___) - { - rx_mode = 0x1C; - } -#elif defined(__VIARHINE_ALLOW_MULTICAST__) - { - uint32 nMCFilter[2]; /* Multicast Hash Filter */ - int i; - - memset(nMCFilter, 0, sizeof(nMCFilter); - for (i = 0; i < device->nMulti; i++) - { -#error TODO: Code Multicast Filter - } - } - - rx_mode = 0x0C; -#else - - write32(device->addr + MulticastFilter0, 0); - write32(device->addr + MulticastFilter1, 0); - rx_mode = 0xA; // was 0x1A => PRO should not be set -#endif - - write8(device->addr + RxConfig, device->rx_thresh | rx_mode); -} - -void duplex_check(viarhine_private *device) -{ - int mii_reg5; - int negotiated; - int duplex; - - mii_reg5 = mdio_read(device, device->mii_phys[0], 5); - negotiated = mii_reg5 & device->mii_advertising; - - if (device->duplex_lock || mii_reg5 == 0xffff) - return; - - duplex = (negotiated & 0x0100) || (negotiated & 0x01C0) == 0x0040; - if (device->duplex_full != duplex) - { - device->duplex_full = duplex; - - if (duplex) - device->cmd |= CmdFDuplex; - else - device->cmd &= ~CmdFDuplex; - - write16(device->addr + ChipCmd, device->cmd); - } -} - -bool is_mine(viarhine_private *device, char *addr) -{ - static char broadcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - - if (memcmp(&device->macaddr, addr, 6) == 0) - { - return true; - } - - if (memcmp(broadcast, addr, 6) == 0) - { - return true; - } - - return false; -} - -#ifdef __VIARHINE_DEBUG__ -int debug_printf(char *format, ...) -{ - va_list vl; - char c[2048]; - int i; - static int f = 0; - - va_start(vl, format); - i = vsprintf(c, format, vl); - va_end(vl); - - if (f == 0) - f = open("/boot/via-rhine.log", O_WRONLY | O_APPEND | O_TEXT); - - write(f, c, strlen(c)); - return i; -} -#endif diff --git a/src/add-ons/kernel/drivers/network/via-rhine/via-rhine.h b/src/add-ons/kernel/drivers/network/via-rhine/via-rhine.h deleted file mode 100644 index df8ab2cded..0000000000 --- a/src/add-ons/kernel/drivers/network/via-rhine/via-rhine.h +++ /dev/null @@ -1,312 +0,0 @@ - -/* - * I/O Ctls: Belongs in a Public Header File - */ -enum -{ - ETHER_GETADDR = B_DEVICE_OP_CODES_END, /* Get ethernet address */ - ETHER_INIT, /* Set irq and port */ - ETHER_NONBLOCK, /* Set/unset nonblocking mode */ - ETHER_ADDMULTI, /* Add multicast addr */ - ETHER_REMMULTI, /* Rem multicast addr */ - ETHER_SETPROMISC, /* Set promiscuous */ - ETHER_GETFRAMESIZE /* Get frame size */ -}; - -/* - * Driver Informations - */ -#define DevName "via-rhine" -#define DevDir "net/" DevName "/" -#define DEVNAME_LENGTH 64 -#define MAX_CARDS 4 - -#define TX_BUFFERS 8 -#define RX_BUFFERS 16 - -#define BUFFER_SIZE 2048L /* Enough to hold a 1536 Frame */ -#define MAX_FRAME_SIZE 1536 /* 1536 */ -#define MAX_MULTI 32 /* Hardware Related, Do not change */ - -#define TRANSMIT_TIMEOUT ((bigtime_t)10000) /* 1/100 Second */ -#define ETHER_TRANSMIT_TIMEOUT ((bigtime_t)1000000) /* One Second */ - -#define MIN_PCI_LATENCY 64 - -/* - * PCI Communications - */ -#define IO_PORT_PCI_ACCESS true -//#define MEMORY_MAPPED_PCI_ACCESS true - -#if IO_PORT_PCI_ACCESS -#define write8(address, value) (*pModuleInfo->write_io_8)((address), (value)) -#define write16(address, value) (*pModuleInfo->write_io_16)((address), (value)) -#define write32(address, value) (*pModuleInfo->write_io_32)((address), (value)) -#define read8(address) ((*pModuleInfo->read_io_8)(address)) -#define read16(address) ((*pModuleInfo->read_io_16)(address)) -#define read32(address) ((*pModuleInfo->read_io_32)(address)) -#else /* MEMORY_MAPPED_PCI_ACCESS */ -#define read8(address) (*((volatile uint8*)(address))); __eieio() -#define read16(address) (*((volatile uint16*)(address))); __eieio() -#define read32(address) (*((volatile uint32*)(address))); __eieio() -#define write8(address, data) (*((volatile uint8 *)(address)) = data); __eieio() -#define write16(address, data) (*((volatile uint16 *)(address)) = (data)); __eieio() -#define write32(address, data) (*((volatile uint32 *)(address)) = (data)); __eieio() -#endif - -/* - * Registers Offsets - */ -enum viarhine_register_offsets -{ - StationAddr = 0x00, - RxConfig = 0x06, - TxConfig = 0x07, - ChipCmd = 0x08, - IntrStatus = 0x0C, - IntrEnable = 0x0E, - MulticastFilter0 = 0x10, - MulticastFilter1 = 0x14, - RxRingPtr = 0x18, - TxRingPtr = 0x1C, - MIIPhyAddr = 0x6C, - MIIStatus = 0x6D, - PCIBusConfig = 0x6E, - MIICmd = 0x70, - MIIRegAddr = 0x71, - MIIData = 0x72, - Config = 0x78, - RxMissed = 0x7C, - RxCRCErrs = 0x7E, -}; - -/* - * Command Bits - */ -enum viarhine_chip_cmd_bits -{ - CmdInit = 0x0001, - CmdStart = 0x0002, - CmdStop = 0x0004, - CmdRxOn = 0x0008, - CmdTxOn = 0x0010, - CmdTxDemand = 0x0020, - CmdRxDemand = 0x0040, - CmdEarlyRx = 0x0100, - CmdEarlyTx = 0x0200, - CmdFDuplex = 0x0400, - CmdNoTxPoll = 0x0800, - CmdReset = 0x8000 -}; - -/* - * Interrupt Status Bits - */ -enum viarhine_intr_status_bits -{ - IntrRxDone = 0x0001, - IntrRxErr = 0x0004, - IntrRxEmpty = 0x0020, - IntrTxDone = 0x0002, - IntrTxAbort = 0x0008, - IntrTxUnderrun = 0x0010, - IntrPCIErr = 0x0040, - IntrStatsMax = 0x0080, - IntrRxEarly = 0x0100, - IntrMIIChange = 0x0200, - IntrRxOverflow = 0x0400, - IntrRxDropped = 0x0800, - IntrRxNoBuf = 0x1000, - IntrTxAborted = 0x2000, - IntrLinkChange = 0x4000, - IntrRxWakeUp = 0x8000, - IntrNormalSummary = 0x0003, - IntrAbnormalSummary = 0xC260, -}; - -/* - * RX Status Bits - */ -enum viarhine_rx_status_bits -{ - RxOK = 0x8000, - RxWholePkt = 0x0300, - RxErr = 0x008F -}; - -/* - * Desc Status Bits - */ -enum viarhine_desc_status_bits -{ - DescOwn = 0x80000000, - DescEndPacket = 0x4000, - DescIntr = 0x1000 -}; - -/* - * PCI ID Information - */ -struct viarhine_pci_id_info -{ - const char *name; - uint16 vendor_id, - device_id, - device_id_mask, - flags; - int io_size; -}; - -/* - * Chip Compatibility - */ -enum viarhine_chip_capability_flags -{ - CanHaveMII = 1 -}; - -/* - * Chip Information - */ -struct viarhine_chip_info -{ - int io_size; - int flags; -}; - -/* - * RX Descriptor - */ -typedef struct -{ - uint32 rx_status; - uint32 desc_length; - - uint32 addr; - uint32 next; -} viarhine_rx_desc; - -/* - * TX Descriptor - */ -typedef struct -{ - uint32 tx_status; - uint32 desc_length; - - uint32 addr; - uint32 next; -} viarhine_tx_desc; - -typedef struct -{ - unsigned char ebyte[6]; -} ethernet_addr; - -/* - * Private Data - */ -typedef struct -{ - /* - * Rings - */ - viarhine_tx_desc tx_desc[TX_BUFFERS]; /* TX Frame Descriptor */ - viarhine_rx_desc rx_desc[RX_BUFFERS]; /* RX Frame Descriptor */ - area_id tx_buf_area; /* Transmit Descriptor and Buffer Areas */ - area_id rx_buf_area; /* Receive Descriptor and Buffer Areas */ - uchar *tx_buf; /* TX Buffer */ - uchar *rx_buf; /* RX Buffer */ - - area_id cookieID; /* Cookie Area ID */ - int32 devID; /* Device ID */ - uint32 addr; /* Base Address of HostRegs */ - pci_info *pciInfo; /* PCI Informations */ - ethernet_addr macaddr; /* Ethernet Address */ - - uint8 tx_thresh; - uint8 rx_thresh; - uint16 cmd; - uint8 interrupted; - - unsigned char duplex_full; /* Full-Duplex Operation Requested. */ - unsigned char duplex_lock; - - uint8 cur_rx; - uint8 cur_tx; - int nonblocking; - - /* - * Semaphores - */ - sem_id ilock; - sem_id olock; - - /* - * MII Transceiver Section - */ - int mii_cnt; /* MII Device Addresses. */ - uint16 mii_advertising; /* NWay Media Advertisement */ - unsigned char mii_phys[8]; /* MII Device Addresses. */ - -} viarhine_private; - -/* - * Semaphores Macros - */ -/* output_wait wakes up when the card is ready to transmit another packet */ -#define output_wait(data, t) acquire_sem_etc(data->olock, 1, B_TIMEOUT, t) -#define output_unwait(data, c) release_sem_etc(data->olock, c, B_DO_NOT_RESCHEDULE) - -/* input_wait wakes up when the card has at least one packet on it */ -#define input_wait(data) acquire_sem_etc(data->ilock ,1, B_CAN_INTERRUPT, 0) -#define input_unwait(data, c) release_sem_etc(data->ilock, c, B_DO_NOT_RESCHEDULE) - -/* - * Variables - */ -extern char *pDevNameList[MAX_CARDS+1]; -extern pci_info *pDevList [MAX_CARDS+1]; -extern pci_module_info *pModuleInfo; -extern device_hooks pDeviceHooks; -extern int32 nOpenMask; - -extern struct viarhine_pci_id_info pci_tbl[]; -extern struct viarhine_chip_info cap_tbl[]; - -/* - * Functions - */ - -// pci.c -int32 pci_getlist (pci_info *info[], int32 maxEntries); -status_t pci_freelist(pci_info *info[]); - -// res.c -status_t res_allocate(viarhine_private *device); -void res_free (viarhine_private *device); - -// misc.c -uint32 mem_virt2phys(void *addr, unsigned int length); -void rx_setmode (viarhine_private *device); -void duplex_check (viarhine_private *device); -bool is_mine (viarhine_private *device, char *addr); - -// ring.c -status_t ring_init(viarhine_private *device); -void ring_free(viarhine_private *device); - -// cmd.c -void cmd_reset (viarhine_private *device); -void cmd_getmacaddr(viarhine_private *device); - -/* - * Macro - */ -#define RNDUP(x, y) (((x) + (y) - 1) & ~((y) - 1)) -//#define __VIARHINE_DEBUG__ - -#ifdef __VIARHINE_DEBUG__ -int debug_printf(char *format, ...); -#endif