* 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
This commit is contained in:
Karsten Heimrich 2009-02-18 22:34:52 +00:00
parent ab64e1faa3
commit 44ec2ebd20
9 changed files with 105 additions and 16 deletions

View File

@ -1,3 +1,3 @@
SubDir HAIKU_TOP src add-ons kernel drivers network ipro1000 dev ; 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 ;

View File

@ -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
;

View File

@ -73,9 +73,9 @@
#define STATIC static #define STATIC static
#define FALSE 0 #define FALSE 0
#define false FALSE /* shared code stupidity */ //#define false FALSE /* shared code stupidity */
#define TRUE 1 #define TRUE 1
#define true TRUE //#define true TRUE
#define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */ #define CMD_MEM_WRT_INVALIDATE 0x0010 /* BIT_4 */
#define PCI_COMMAND_REGISTER PCIR_COMMAND #define PCI_COMMAND_REGISTER PCIR_COMMAND
@ -91,7 +91,7 @@ typedef int64_t s64;
typedef int32_t s32; typedef int32_t s32;
typedef int16_t s16; typedef int16_t s16;
typedef int8_t s8; typedef int8_t s8;
typedef boolean_t bool; //typedef boolean_t bool;
#define __le16 u16 #define __le16 u16
#define __le32 u32 #define __le32 u32

View File

@ -0,0 +1,13 @@
#include <sys/bus.h>
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

View File

@ -2703,7 +2703,7 @@ static int
em_allocate_pci_resources(struct adapter *adapter) em_allocate_pci_resources(struct adapter *adapter)
{ {
device_t dev = adapter->dev; device_t dev = adapter->dev;
int val, rid, error = E1000_SUCCESS; int i, val, rid, error = E1000_SUCCESS;
rid = PCIR_BAR(0); rid = PCIR_BAR(0);
adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY, 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 ** Init the resource arrays
** used by MSIX setup ** 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->rid[i] = i + 1; /* MSI/X RID starts at 1 */
adapter->tag[i] = NULL; adapter->tag[i] = NULL;
adapter->res[i] = NULL; adapter->res[i] = NULL;
@ -2853,13 +2853,13 @@ int
em_allocate_msix(struct adapter *adapter) em_allocate_msix(struct adapter *adapter)
{ {
device_t dev = adapter->dev; device_t dev = adapter->dev;
int error; int error, i;
/* Make sure all interrupts are disabled */ /* Make sure all interrupts are disabled */
E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff); E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
/* First get the resources */ /* 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, adapter->res[i] = bus_alloc_resource_any(dev,
SYS_RES_IRQ, &adapter->rid[i], RF_ACTIVE); SYS_RES_IRQ, &adapter->rid[i], RF_ACTIVE);
if (adapter->res[i] == NULL) { if (adapter->res[i] == NULL) {
@ -2928,6 +2928,7 @@ static void
em_free_pci_resources(struct adapter *adapter) em_free_pci_resources(struct adapter *adapter)
{ {
device_t dev = adapter->dev; device_t dev = adapter->dev;
int i;
/* Make sure the for loop below runs once */ /* Make sure the for loop below runs once */
if (adapter->msi == 0) if (adapter->msi == 0)
@ -2939,7 +2940,7 @@ em_free_pci_resources(struct adapter *adapter)
* in an array we can do the same logic * in an array we can do the same logic
* whether its MSIX or just legacy. * 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) { if (adapter->tag[i] != NULL) {
bus_teardown_intr(dev, adapter->res[i], bus_teardown_intr(dev, adapter->res[i],
adapter->tag[i]); adapter->tag[i]);
@ -3357,7 +3358,7 @@ em_allocate_transmit_structures(struct adapter *adapter)
{ {
device_t dev = adapter->dev; device_t dev = adapter->dev;
struct em_buffer *tx_buffer; struct em_buffer *tx_buffer;
int error; int error, i;
/* /*
* Create DMA tags for tx descriptors * Create DMA tags for tx descriptors
@ -3391,7 +3392,7 @@ em_allocate_transmit_structures(struct adapter *adapter)
} }
/* Create the descriptor buffer dma maps */ /* 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]; tx_buffer = &adapter->tx_buffer_area[i];
error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map); error = bus_dmamap_create(adapter->txtag, 0, &tx_buffer->map);
if (error != 0) { if (error != 0) {
@ -3416,13 +3417,14 @@ static void
em_setup_transmit_structures(struct adapter *adapter) em_setup_transmit_structures(struct adapter *adapter)
{ {
struct em_buffer *tx_buffer; struct em_buffer *tx_buffer;
int i;
/* Clear the old ring contents */ /* Clear the old ring contents */
bzero(adapter->tx_desc_base, bzero(adapter->tx_desc_base,
(sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc); (sizeof(struct e1000_tx_desc)) * adapter->num_tx_desc);
/* Free any existing TX buffers */ /* 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]; tx_buffer = &adapter->tx_buffer_area[i];
bus_dmamap_sync(adapter->txtag, tx_buffer->map, bus_dmamap_sync(adapter->txtag, tx_buffer->map,
BUS_DMASYNC_POSTWRITE); BUS_DMASYNC_POSTWRITE);
@ -3542,11 +3544,12 @@ static void
em_free_transmit_structures(struct adapter *adapter) em_free_transmit_structures(struct adapter *adapter)
{ {
struct em_buffer *tx_buffer; struct em_buffer *tx_buffer;
int i;
INIT_DEBUGOUT("free_transmit_structures: begin"); INIT_DEBUGOUT("free_transmit_structures: begin");
if (adapter->tx_buffer_area != NULL) { 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]; tx_buffer = &adapter->tx_buffer_area[i];
if (tx_buffer->m_head != NULL) { if (tx_buffer->m_head != NULL) {
bus_dmamap_sync(adapter->txtag, tx_buffer->map, bus_dmamap_sync(adapter->txtag, tx_buffer->map,
@ -4199,6 +4202,7 @@ em_initialize_receive_unit(struct adapter *adapter)
struct ifnet *ifp = adapter->ifp; struct ifnet *ifp = adapter->ifp;
u64 bus_addr; u64 bus_addr;
u32 rctl, rxcsum; u32 rctl, rxcsum;
int i;
INIT_DEBUGOUT("em_initialize_receive_unit: begin"); INIT_DEBUGOUT("em_initialize_receive_unit: begin");
@ -4224,7 +4228,7 @@ em_initialize_receive_unit(struct adapter *adapter)
** using the EITR register (82574 only) ** using the EITR register (82574 only)
*/ */
if (adapter->msix) if (adapter->msix)
for (int i = 0; i < 4; i++) for (i = 0; i < 4; i++)
E1000_WRITE_REG(&adapter->hw, E1000_WRITE_REG(&adapter->hw,
E1000_EITR_82574(i), DEFAULT_ITR); E1000_EITR_82574(i), DEFAULT_ITR);
@ -4375,7 +4379,7 @@ em_free_receive_structures(struct adapter *adapter)
static int static int
em_rxeof(struct adapter *adapter, int count) em_rxeof(struct adapter *adapter, int count)
{ {
struct ifnet *ifp = adapter->ifp;; struct ifnet *ifp = adapter->ifp;
struct mbuf *mp; struct mbuf *mp;
u8 status, accept_frame = 0, eop = 0; u8 status, accept_frame = 0, eop = 0;
u16 len, desc_len, prev_len_adj; u16 len, desc_len, prev_len_adj;

View File

@ -15,6 +15,7 @@ KernelStaticLibrary libfreebsd_network.a :
compat.c compat.c
device.c device.c
driver.c driver.c
eventhandler.c
fbsd_busdma_x86.c fbsd_busdma_x86.c
fbsd_ether.c fbsd_ether.c
fbsd_if_media.c fbsd_if_media.c

View File

@ -26,6 +26,7 @@
#define IFCAP_POLLING 0x0040 /* driver supports polling */ #define IFCAP_POLLING 0x0040 /* driver supports polling */
#define IFCAP_VLAN_HWCSUM 0x0080 #define IFCAP_VLAN_HWCSUM 0x0080
#define IFCAP_TSO4 0x0100 /* supports TCP segmentation offload */ #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) #define IFCAP_HWCSUM (IFCAP_RXCSUM | IFCAP_TXCSUM)

View File

@ -137,7 +137,7 @@ struct ifnet {
struct bpf_if *if_bpf; /* packet filter structure */ struct bpf_if *if_bpf; /* packet filter structure */
u_short if_index; /* numeric abbreviation for this if */ u_short if_index; /* numeric abbreviation for this if */
short if_timer; /* time 'til if_watchdog called */ 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_flags; /* up/down, broadcast, etc. */
int if_capabilities; /* interface capabilities */ int if_capabilities; /* interface capabilities */
int if_capenable; /* enabled features */ int if_capenable; /* enabled features */

View File

@ -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 <compat/sys/types.h>
#include <compat/sys/eventhandler.h>
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)
{
//
};