diff --git a/src/add-ons/kernel/drivers/network/pcnet/dev/le/Jamfile b/src/add-ons/kernel/drivers/network/pcnet/dev/le/Jamfile index 92973b4478..d973664ee1 100644 --- a/src/add-ons/kernel/drivers/network/pcnet/dev/le/Jamfile +++ b/src/add-ons/kernel/drivers/network/pcnet/dev/le/Jamfile @@ -7,7 +7,7 @@ UsePrivateHeaders kernel net ; UseHeaders [ FDirName $(SUBDIR) .. .. ] : true ; UseHeaders [ FDirName $(HAIKU_TOP) src libs compat freebsd_network compat ] : true ; -SubDirCcFlags [ FDefines _KERNEL=1 ] ; +SubDirCcFlags [ FDefines _KERNEL=1 LEDEBUG=128 ] ; KernelAddon pcnet : am7990.c diff --git a/src/add-ons/kernel/drivers/network/pcnet/dev/le/am79900.c b/src/add-ons/kernel/drivers/network/pcnet/dev/le/am79900.c index 13eca87eab..f87de8a404 100644 --- a/src/add-ons/kernel/drivers/network/pcnet/dev/le/am79900.c +++ b/src/add-ons/kernel/drivers/network/pcnet/dev/le/am79900.c @@ -172,6 +172,8 @@ am79900_config(struct am79900_softc *sc, const char* name, int unit) if (mem > sc->lsc.sc_memsize) panic("%s: memsize", __func__); + sc->lsc.sc_flags |= LE_DEBUG; + lance_attach(&sc->lsc); return (0); @@ -450,10 +452,12 @@ am79900_intr(void *arg) if (sc->sc_flags & LE_DEBUG) if_printf(ifp, "%s: entering with isr=%04x\n", __func__, isr); #endif +#if 0 if ((isr & LE_C0_INTR) == 0) { LE_UNLOCK(sc); return; } +#endif /* * Clear interrupt source flags and turn off interrupts. If we diff --git a/src/libs/compat/freebsd_network/Jamfile b/src/libs/compat/freebsd_network/Jamfile index badd43bf63..8bf6fc7698 100644 --- a/src/libs/compat/freebsd_network/Jamfile +++ b/src/libs/compat/freebsd_network/Jamfile @@ -5,7 +5,7 @@ UsePrivateHeaders kernel net ; UseHeaders [ FDirName $(SUBDIR) ] : true ; UseHeaders [ FDirName $(SUBDIR) compat ] : true ; -SubDirCcFlags [ FDefines _KERNEL=1 ] ; +SubDirCcFlags [ FDefines _KERNEL=1 KTR=1 ] ; Library libfreebsd_network.a : bus.c diff --git a/src/libs/compat/freebsd_network/busdma_machdep.c b/src/libs/compat/freebsd_network/busdma_machdep.c index bc1e08b752..f70015391e 100644 --- a/src/libs/compat/freebsd_network/busdma_machdep.c +++ b/src/libs/compat/freebsd_network/busdma_machdep.c @@ -528,7 +528,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags, printf("bus_dmamem_alloc failed to align memory properly.\n"); } CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", - __func__, dmat, dmat->flags, ENOMEM); + __func__, dmat, dmat->flags, 0); return (0); } diff --git a/src/libs/compat/freebsd_network/compat.c b/src/libs/compat/freebsd_network/compat.c index 9f34604d02..c7674459a6 100644 --- a/src/libs/compat/freebsd_network/compat.c +++ b/src/libs/compat/freebsd_network/compat.c @@ -293,10 +293,13 @@ _kernel_contigmalloc(const char *file, int line, size_t size, int flags, snprintf(name, sizeof(name), "contig:%s:%d", file, line); area = create_area(name, &addr, B_ANY_KERNEL_ADDRESS, size, - B_FULL_LOCK | B_CONTIGUOUS, 0); + B_FULL_LOCK | B_CONTIGUOUS, B_READ_AREA | B_WRITE_AREA); if (area < 0) return NULL; + driver_printf("(%s) addr = %p, area = %d, size = %lu\n", + name, addr, area, size); + return addr; } @@ -308,6 +311,21 @@ _kernel_contigfree(void *addr, size_t size) } +/* Marcus' vtophys */ +unsigned long +vtophys(vm_offset_t vaddr) +{ + physical_entry pe; + status_t status; + + status = get_memory_map((void *)vaddr, 1, &pe, 1); + if (status < 0) + panic("fbsd compat: get_memory_map failed for %p, error %08lx\n", + (void *)vaddr, status); + + return (unsigned long)pe.address; +} + status_t init_compat_layer() { diff --git a/src/libs/compat/freebsd_network/compat/sys/endian.h b/src/libs/compat/freebsd_network/compat/sys/endian.h index 9c1bf59e3d..82aee8f1b8 100644 --- a/src/libs/compat/freebsd_network/compat/sys/endian.h +++ b/src/libs/compat/freebsd_network/compat/sys/endian.h @@ -58,7 +58,7 @@ * Host to big endian, host to little endian, big endian to host, and little * endian to host byte order functions as detailed in byteorder(9). */ -#if _YTE_ORDER == _LITTLE_ENDIAN +#if _BYTE_ORDER == _LITTLE_ENDIAN #define htobe16(x) bswap16((x)) #define htobe32(x) bswap32((x)) #define htobe64(x) bswap64((x)) diff --git a/src/libs/compat/freebsd_network/compat/sys/ktr.h b/src/libs/compat/freebsd_network/compat/sys/ktr.h index 36188e6e46..7270ccdd39 100644 --- a/src/libs/compat/freebsd_network/compat/sys/ktr.h +++ b/src/libs/compat/freebsd_network/compat/sys/ktr.h @@ -128,9 +128,15 @@ extern struct ktr_entry ktr_buf[]; #ifdef KTR +#if 0 void ktr_tracepoint(u_int mask, const char *file, int line, const char *format, u_long arg1, u_long arg2, u_long arg3, u_long arg4, u_long arg5, u_long arg6); +#else +extern void driver_printf(const char *format, ...); +#define ktr_tracepoint(mask, file, line, format, arg1, arg2, arg3, arg4, arg5, arg6) \ + driver_printf("(%s:%i) " format "\n", file, line, arg1, arg2, arg3, arg4, arg5, arg6) +#endif #define CTR6(m, format, p1, p2, p3, p4, p5, p6) do { \ if (KTR_COMPILE & (m)) \ diff --git a/src/libs/compat/freebsd_network/compat/vm/vm.h b/src/libs/compat/freebsd_network/compat/vm/vm.h index a9eeeecea9..e6ab862698 100644 --- a/src/libs/compat/freebsd_network/compat/vm/vm.h +++ b/src/libs/compat/freebsd_network/compat/vm/vm.h @@ -17,19 +17,6 @@ typedef void * pmap_t; #define pmap_kextract(vaddr) vtophys(vaddr) -/* Marcus' vtophys */ -static inline unsigned long -vtophys(vm_offset_t vaddr) -{ - physical_entry pe; - status_t status; - - status = get_memory_map((void *)vaddr, 1, &pe, 1); - if (status < 0) - panic("fbsd compat: get_memory_map failed for %p, error %08lx\n", - (void *)vaddr, status); - - return (unsigned long)pe.address; -} +unsigned long vtophys(vm_offset_t vaddr); #endif diff --git a/src/libs/compat/freebsd_network/device.c b/src/libs/compat/freebsd_network/device.c index 57309b839b..d782d72e48 100644 --- a/src/libs/compat/freebsd_network/device.c +++ b/src/libs/compat/freebsd_network/device.c @@ -14,6 +14,8 @@ #include #include +#include + #include #include @@ -118,6 +120,21 @@ compat_open(const char *name, uint32 flags, void **cookie) driver_printf(" ... status = 0x%ld\n", status); + if (status == 0) { + struct ifnet *ifp = dev->ifp; + struct ifreq ifr; + + ifp->if_flags = 0; + ifp->if_ioctl(ifp, SIOCSIFFLAGS, NULL); + + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_media = IFM_MAKEWORD(IFM_ETHER, IFM_AUTO, 0, 0); + ifp->if_ioctl(ifp, SIOCSIFMEDIA, &ifr); + + ifp->if_flags = IFF_UP; + ifp->if_ioctl(ifp, SIOCSIFFLAGS, NULL); + } + *cookie = dev; return status; diff --git a/src/libs/compat/freebsd_network/if.c b/src/libs/compat/freebsd_network/if.c index c1b5df58db..00fa56c872 100644 --- a/src/libs/compat/freebsd_network/if.c +++ b/src/libs/compat/freebsd_network/if.c @@ -295,7 +295,7 @@ ether_sprintf(const u_char *ap) { static char etherbuf[18]; snprintf(etherbuf, sizeof (etherbuf), - "%02x:%02x:%02x:%02x:%02x:%02x", + "%02lx:%02lx:%02lx:%02lx:%02lx:%02lx", (uint32)ap[0], (uint32)ap[1], (uint32)ap[2], (uint32)ap[3], (uint32)ap[4], (uint32)ap[5]); return (etherbuf); diff --git a/src/libs/compat/freebsd_network/if_media.c b/src/libs/compat/freebsd_network/if_media.c index bb64b2d6fd..07b6fe276f 100644 --- a/src/libs/compat/freebsd_network/if_media.c +++ b/src/libs/compat/freebsd_network/if_media.c @@ -62,11 +62,13 @@ * Useful for debugging newly-ported drivers. */ +#define IFMEDIA_DEBUG + static struct ifmedia_entry *ifmedia_match(struct ifmedia *ifm, int flags, int mask); #ifdef IFMEDIA_DEBUG -int ifmedia_debug = 0; +int ifmedia_debug = 1; static void ifmedia_printword(int); #endif @@ -198,7 +200,6 @@ ifmedia_ioctl(ifp, ifr, ifm, cmd) struct ifmedia *ifm; u_long cmd; { -#if 0 struct ifmedia_entry *match; struct ifmediareq *ifmr = (struct ifmediareq *) ifr; int error = 0, sticky; @@ -330,9 +331,13 @@ ifmedia_ioctl(ifp, ifr, ifm, cmd) */ sticky = error; if ((error == 0 || error == E2BIG) && ifmr->ifm_count != 0) { +#if 0 error = copyout((caddr_t)kptr, (caddr_t)ifmr->ifm_ulist, ifmr->ifm_count * sizeof(int)); +#endif + /* this ioctl() is only called from within the kernel -hugo */ + memcpy(kptr, ifmr->ifm_ulist, ifmr->ifm_count * sizeof(int)); } if (error == 0) @@ -350,8 +355,6 @@ ifmedia_ioctl(ifp, ifr, ifm, cmd) } return (error); -#endif - return ENOTSUP; } /*