if_re freebsd driver, adapted for the build by Francesco Piccinini. It

supports many Realtek based NIC which our own driver doesn't support 
(for example the RTL8101E). Thanks! Not added to the image yet, since it 
causes some problems on my laptop (but could well be caused by the 
freebsd compat layer, or by the scheduler)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27843 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini
2008-10-03 05:57:35 +00:00
parent 8443ac689e
commit bf732017df
6 changed files with 4306 additions and 0 deletions
@@ -21,6 +21,7 @@ SubInclude HAIKU_TOP src add-ons kernel drivers network nforce ;
SubInclude HAIKU_TOP src add-ons kernel drivers network pcnet ;
SubInclude HAIKU_TOP src add-ons kernel drivers network syskonnect ;
SubInclude HAIKU_TOP src add-ons kernel drivers network attansic_l2 ;
SubInclude HAIKU_TOP src add-ons kernel drivers network re ;
SubIncludeGPL HAIKU_TOP src add-ons kernel drivers network bcm440x ;
SubIncludeGPL HAIKU_TOP src add-ons kernel drivers network bcm570x ;
@@ -0,0 +1,3 @@
SubDir HAIKU_TOP src add-ons kernel drivers network re ;
SubInclude HAIKU_TOP src add-ons kernel drivers network re pci ;
@@ -0,0 +1,16 @@
SubDir HAIKU_TOP src add-ons kernel drivers network re pci ;
UsePrivateHeaders kernel net ;
UseHeaders [ FDirName $(SUBDIR) .. ] : true ;
UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ;
UseHeaders [ FDirName $(HAIKU_TOP) src add-ons kernel drivers network rtl8139 ] : true ;
SubDirCcFlags [ FDefines _KERNEL=1 FBSD_DRIVER=1 ] ;
KernelAddon re :
if_re.c
glue.c
: libfreebsd_network.a rtl8139_mii.a
;
@@ -0,0 +1,37 @@
#include <sys/bus.h>
#include <pci/if_rlreg.h>
HAIKU_FBSD_DRIVER_GLUE(re, re, pci);
HAIKU_FBSD_MII_DRIVER(rlphy);
HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_FAST_TASKQUEUE);
int
HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev)
{
struct rl_softc *sc = device_get_softc(dev);
uint16_t status;
status = CSR_READ_2(sc, RL_ISR);
if (status == 0xffff)
return 0;
if (status != 0 && (status & RL_INTRS) == 0) {
CSR_WRITE_2(sc, RL_ISR, status);
return 0;
}
if ((status & RL_INTRS) == 0)
return 0;
CSR_WRITE_2(sc, RL_IMR, 0);
return 1;
}
void
HAIKU_REENABLE_INTERRUPTS(device_t dev)
{
struct rl_softc *sc = device_get_softc(dev);
RL_LOCK(sc);
CSR_WRITE_2(sc, RL_IMR, RL_INTRS);
RL_UNLOCK(sc);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff