From 44ec2ebd200f18741d00fb8a76ddfb85485541cd Mon Sep 17 00:00:00 2001 From: Karsten Heimrich Date: Wed, 18 Feb 2009 22:34:52 +0000 Subject: [PATCH] * update freebsd compat with stubbed eventhandler * get e1000 to compile * remove dev/em from the build (might be removed later on) * tested on VirtualBox (gcc2,gcc4), VMware(gcc4) and natively on ThinkPad T500 (gcc4) * courtesy of Michael Weirauch (emwe) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29247 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/network/ipro1000/dev/Jamfile | 2 +- .../network/ipro1000/dev/e1000/Jamfile | 30 ++++++++++++++ .../network/ipro1000/dev/e1000/e1000_osdep.h | 6 +-- .../drivers/network/ipro1000/dev/e1000/glue.c | 13 ++++++ .../network/ipro1000/dev/e1000/if_em.c | 26 +++++++----- src/libs/compat/freebsd_network/Jamfile | 1 + .../compat/freebsd_network/compat/net/if.h | 1 + .../freebsd_network/compat/net/if_var.h | 2 +- .../compat/freebsd_network/eventhandler.c | 40 +++++++++++++++++++ 9 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile create mode 100644 src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/glue.c create mode 100644 src/libs/compat/freebsd_network/eventhandler.c diff --git a/src/add-ons/kernel/drivers/network/ipro1000/dev/Jamfile b/src/add-ons/kernel/drivers/network/ipro1000/dev/Jamfile index 392240adf7..cdf4eea919 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/dev/Jamfile +++ b/src/add-ons/kernel/drivers/network/ipro1000/dev/Jamfile @@ -1,3 +1,3 @@ SubDir HAIKU_TOP src add-ons kernel drivers network ipro1000 dev ; -SubInclude HAIKU_TOP src add-ons kernel drivers network ipro1000 dev em ; +SubInclude HAIKU_TOP src add-ons kernel drivers network ipro1000 dev e1000 ; diff --git a/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile new file mode 100644 index 0000000000..bffd8e30c8 --- /dev/null +++ b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/Jamfile @@ -0,0 +1,30 @@ +SubDir HAIKU_TOP src add-ons kernel drivers network ipro1000 dev e1000 ; + +UsePrivateHeaders kernel net ; + +UseHeaders [ FDirName $(SUBDIR) .. .. ] : true ; +UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ; + +SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 EM_FAST_INTR=1 ] ; + +KernelAddon ipro1000 : + e1000_80003es2lan.c + e1000_82540.c + e1000_82541.c + e1000_82542.c + e1000_82543.c + e1000_82571.c + e1000_82575.c + e1000_api.c + e1000_ich8lan.c + e1000_mac.c + e1000_manage.c + e1000_nvm.c + e1000_osdep.c + e1000_phy.c + if_em.c + + glue.c + : libfreebsd_network.a + ; + diff --git a/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_osdep.h b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_osdep.h index c1df8ffdfb..e4a84dc0f2 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_osdep.h +++ b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/e1000_osdep.h @@ -73,9 +73,9 @@ #define STATIC static #define FALSE 0 -#define false FALSE /* shared code stupidity */ +//#define false FALSE /* shared code stupidity */ #define TRUE 1 -#define true TRUE +//#define true TRUE #define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */ #define PCI_COMMAND_REGISTER PCIR_COMMAND @@ -91,7 +91,7 @@ typedef int64_t s64; typedef int32_t s32; typedef int16_t s16; typedef int8_t s8; -typedef boolean_t bool; +//typedef boolean_t bool; #define __le16 u16 #define __le32 u32 diff --git a/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/glue.c b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/glue.c new file mode 100644 index 0000000000..bff06809e9 --- /dev/null +++ b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/glue.c @@ -0,0 +1,13 @@ +#include + +HAIKU_FBSD_DRIVER_GLUE(ipro1000, em, pci) + +NO_HAIKU_CHECK_DISABLE_INTERRUPTS(); +NO_HAIKU_REENABLE_INTERRUPTS(); +NO_HAIKU_FBSD_MII_DRIVER(); + +#ifdef EM_FAST_INTR + HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_FAST_TASKQUEUE); +#else + HAIKU_DRIVER_REQUIREMENTS(0); +#endif diff --git a/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_em.c b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_em.c index 8e2e9efff3..9c93ebe6f5 100644 --- a/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_em.c +++ b/src/add-ons/kernel/drivers/network/ipro1000/dev/e1000/if_em.c @@ -2703,7 +2703,7 @@ static int em_allocate_pci_resources(struct adapter *adapter) { device_t dev = adapter->dev; - int val, rid, error = E1000_SUCCESS; + int i, val, rid, error = E1000_SUCCESS; rid = PCIR_BAR(0); adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY, @@ -2755,7 +2755,7 @@ em_allocate_pci_resources(struct adapter *adapter) ** Init the resource arrays ** used by MSIX setup */ - for (int i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) { adapter->rid[i] = i + 1; /* MSI/X RID starts at 1 */ adapter->tag[i] = NULL; adapter->res[i] = NULL; @@ -2853,13 +2853,13 @@ int em_allocate_msix(struct adapter *adapter) { device_t dev = adapter->dev; - int error; + int error, i; /* Make sure all interrupts are disabled */ E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); /* First get the resources */ - for (int i = 0; i < adapter->msi; i++) { + for (i = 0; i < adapter->msi; i++) { adapter->res[i] = bus_alloc_resource_any(dev, SYS_RES_IRQ, &adapter->rid[i], RF_ACTIVE); if (adapter->res[i] == NULL) { @@ -2928,6 +2928,7 @@ static void em_free_pci_resources(struct adapter *adapter) { device_t dev = adapter->dev; + int i; /* Make sure the for loop below runs once */ if (adapter->msi == 0) @@ -2939,7 +2940,7 @@ em_free_pci_resources(struct adapter *adapter) * in an array we can do the same logic * whether its MSIX or just legacy. */ - for (int i = 0; i < adapter->msi; i++) { + for (i = 0; i < adapter->msi; i++) { if (adapter->tag[i] != NULL) { bus_teardown_intr(dev, adapter->res[i], adapter->tag[i]); @@ -3357,7 +3358,7 @@ em_allocate_transmit_structures(struct adapter *adapter) { device_t dev = adapter->dev; struct em_buffer *tx_buffer; - int error; + int error, i; /* * Create DMA tags for tx descriptors @@ -3391,7 +3392,7 @@ em_allocate_transmit_structures(struct adapter *adapter) } /* Create the descriptor buffer dma maps */ - for (int i = 0; i < adapter->num_tx_desc; i++) { + for (i = 0; i < adapter->num_tx_desc; i++) { tx_buffer = &adapter->tx_buffer_area[i]; error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map); if (error != 0) { @@ -3416,13 +3417,14 @@ static void em_setup_transmit_structures(struct adapter *adapter) { struct em_buffer *tx_buffer; + int i; /* Clear the old ring contents */ bzero(adapter->tx_desc_base, (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc); /* Free any existing TX buffers */ - for (int i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) { + for (i = 0; i < adapter->num_tx_desc; i++, tx_buffer++) { tx_buffer = &adapter->tx_buffer_area[i]; bus_dmamap_sync(adapter->txtag, tx_buffer->map, BUS_DMASYNC_POSTWRITE); @@ -3542,11 +3544,12 @@ static void em_free_transmit_structures(struct adapter *adapter) { struct em_buffer *tx_buffer; + int i; INIT_DEBUGOUT("free_transmit_structures: begin"); if (adapter->tx_buffer_area != NULL) { - for (int i = 0; i < adapter->num_tx_desc; i++) { + for (i = 0; i < adapter->num_tx_desc; i++) { tx_buffer = &adapter->tx_buffer_area[i]; if (tx_buffer->m_head != NULL) { bus_dmamap_sync(adapter->txtag, tx_buffer->map, @@ -4199,6 +4202,7 @@ em_initialize_receive_unit(struct adapter *adapter) struct ifnet *ifp = adapter->ifp; u64 bus_addr; u32 rctl, rxcsum; + int i; INIT_DEBUGOUT("em_initialize_receive_unit: begin"); @@ -4224,7 +4228,7 @@ em_initialize_receive_unit(struct adapter *adapter) ** using the EITR register (82574 only) */ if (adapter->msix) - for (int i = 0; i < 4; i++) + for (i = 0; i < 4; i++) E1000_WRITE_REG(&adapter->hw, E1000_EITR_82574(i), DEFAULT_ITR); @@ -4375,7 +4379,7 @@ em_free_receive_structures(struct adapter *adapter) static int em_rxeof(struct adapter *adapter, int count) { - struct ifnet *ifp = adapter->ifp;; + struct ifnet *ifp = adapter->ifp; struct mbuf *mp; u8 status, accept_frame = 0, eop = 0; u16 len, desc_len, prev_len_adj; diff --git a/src/libs/compat/freebsd_network/Jamfile b/src/libs/compat/freebsd_network/Jamfile index e567690395..53fb8ad4e1 100644 --- a/src/libs/compat/freebsd_network/Jamfile +++ b/src/libs/compat/freebsd_network/Jamfile @@ -15,6 +15,7 @@ KernelStaticLibrary libfreebsd_network.a : compat.c device.c driver.c + eventhandler.c fbsd_busdma_x86.c fbsd_ether.c fbsd_if_media.c diff --git a/src/libs/compat/freebsd_network/compat/net/if.h b/src/libs/compat/freebsd_network/compat/net/if.h index 1a7362d034..1b473098a4 100644 --- a/src/libs/compat/freebsd_network/compat/net/if.h +++ b/src/libs/compat/freebsd_network/compat/net/if.h @@ -26,6 +26,7 @@ #define IFCAP_POLLING 0x0040 /* driver supports polling */ #define IFCAP_VLAN_HWCSUM 0x0080 #define IFCAP_TSO4 0x0100 /* supports TCP segmentation offload */ +#define IFCAP_VLAN_HWFILTER 0x10000 /* interface hw can filter vlan tag */ #define IFCAP_HWCSUM (IFCAP_RXCSUM | IFCAP_TXCSUM) diff --git a/src/libs/compat/freebsd_network/compat/net/if_var.h b/src/libs/compat/freebsd_network/compat/net/if_var.h index 0b773e0fed..eb34267296 100644 --- a/src/libs/compat/freebsd_network/compat/net/if_var.h +++ b/src/libs/compat/freebsd_network/compat/net/if_var.h @@ -137,7 +137,7 @@ struct ifnet { struct bpf_if *if_bpf; /* packet filter structure */ u_short if_index; /* numeric abbreviation for this if */ short if_timer; /* time 'til if_watchdog called */ - u_short if_nvlans; /* number of active vlans */ + struct ifvlantrunk *if_vlantrunk; /* pointer to 802.1q data */ int if_flags; /* up/down, broadcast, etc. */ int if_capabilities; /* interface capabilities */ int if_capenable; /* enabled features */ diff --git a/src/libs/compat/freebsd_network/eventhandler.c b/src/libs/compat/freebsd_network/eventhandler.c new file mode 100644 index 0000000000..5714b1e366 --- /dev/null +++ b/src/libs/compat/freebsd_network/eventhandler.c @@ -0,0 +1,40 @@ +/* + * Copyright 2009, Haiku, Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Michael Weirauch, dev@m-phasis.de + */ + +#include + +#include + +eventhandler_tag +eventhandler_register(struct eventhandler_list *list, + const char *name, void *func, void *arg, int priority) +{ + return NULL; +}; + + +void +eventhandler_deregister(struct eventhandler_list *list, + eventhandler_tag tag) +{ + // +}; + + +struct eventhandler_list * +eventhandler_find_list(const char *name) +{ + return NULL; +}; + + +void +eventhandler_prune_list(struct eventhandler_list *list) +{ + // +};