Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 May 2014 13:39:59 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r266882 - head/sys/boot/usb
Message-ID:  <201405301339.s4UDdxAb067664@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri May 30 13:39:58 2014
New Revision: 266882
URL: http://svnweb.freebsd.org/changeset/base/266882

Log:
  USB boot library improvements:
  - Make the USB boot library more configurable.
  - Resolve compile issues when cross building.
  - Allow use of separate malloc.
  - Allow use of separate endian macros.
  
  Sponsored by:	DARPA, AFRL

Modified:
  head/sys/boot/usb/Makefile
  head/sys/boot/usb/bsd_kernel.c
  head/sys/boot/usb/bsd_kernel.h
  head/sys/boot/usb/usb_busdma_loader.c

Modified: head/sys/boot/usb/Makefile
==============================================================================
--- head/sys/boot/usb/Makefile	Fri May 30 13:10:49 2014	(r266881)
+++ head/sys/boot/usb/Makefile	Fri May 30 13:39:58 2014	(r266882)
@@ -30,6 +30,7 @@ S=${.CURDIR}/../..
 
 .PATH: \
 	${.CURDIR} \
+	${.CURDIR}/storage \
 	${S}/dev/usb \
 	${S}/dev/usb/controller \
 	${S}/dev/usb/serial \
@@ -39,7 +40,7 @@ S=${.CURDIR}/../..
 LIB=		usbboot
 INTERNALLIB=
 OBJCOPY?=	objcopy
-SYSCC?=		cc
+SYSCC?=		/usr/bin/cc
 
 CFLAGS+=	-DBOOTPROG=\"usbloader\"
 CFLAGS+=	-DUSB_GLOBAL_INCLUDE_FILE=\"bsd_global.h\"
@@ -49,7 +50,13 @@ CFLAGS+=	-Wformat -Wall
 CFLAGS+=	-I${S}
 CFLAGS+=	-I${T}
 CFLAGS+=	-I${.CURDIR}
+CFLAGS+=	-I${.CURDIR}/../common
 CFLAGS+=	-g
+CFLAGS+=	-DUSB_MSCTEST_BULK_SIZE=65536
+CFLAGS+=	-DUSB_POOL_SIZE=262144
+CFLAGS+=	-fno-pic
+CFLAGS+=	-DHAVE_ENDIAN_DEFS
+CFLAGS+=	-DHAVE_MALLOC
 
 .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
 CFLAGS+=	-march=i386
@@ -58,6 +65,9 @@ CFLAGS.gcc+=	-mpreferred-stack-boundary=
 .if ${MACHINE_CPUARCH} == "amd64"
 CFLAGS+=	-m32
 .endif
+.if ${MACHINE_CPUARCH} == "mips"
+CFLAGS+=	-mno-abicalls
+.endif
 
 #
 # Single threaded BSD kernel
@@ -77,19 +87,66 @@ SRCS+=	usb_busdma_loader.c
 #
 # USB controller drivers
 #
+
+SRCS+=	usb_controller.c
+
+.if defined(HAVE_AT91DCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"at91dci\""
 SRCS+=	at91dci.c
+.endif
+
+.if defined(HAVE_ATMEGADCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"atmegadci\""
 SRCS+=	atmegadci.c
+.endif
+
+.if defined(HAVE_AVR32DCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"avr32dci\""
 SRCS+=	avr32dci.c
-SRCS+=	dwc_otg.c
+.endif
+
+.if defined(HAVE_DWCOTG)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"dwcotg\""
+SRCS+=	dwcotg.c
+.endif
+
+.if defined(HAVE_MUSBOTG)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"musbotg\""
+SRCS+=	musbotg.c
+.endif
+
+.if defined(HAVE_EHCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"ehci\""
 SRCS+=	ehci.c
-SRCS+=	musb_otg.c
+.endif
+
+.if defined(HAVE_OHCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"ohci\""
 SRCS+=	ohci.c
+.endif
+
+.if defined(HAVE_UHCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"uhci\""
 SRCS+=	uhci.c
-SRCS+=	uss820dci.c
+.endif
+
+.if defined(HAVE_XHCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"xhci\""
 SRCS+=	xhci.c
-SRCS+=	usb_controller.c
+.endif
+
+.if defined(HAVE_USS820DCI)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"uss820dci\""
+SRCS+=	uss820dci.c
+.endif
 
-CFLAGS += -DUSB_PROBE_LIST="\"xhci\", \"ehci\", \"uhci\", \"ohci\""
+.if defined(HAVE_SAF1761OTG)
+CFLAGS += -DUSB_PCI_PROBE_LIST="\"saf1761otg\""
+CFLAGS += -DUSB_PCI_MEMORY_ADDRESS=0x900000007f100000ULL
+CFLAGS += -DUSB_PCI_MEMORY_SIZE=0x40000U
+SRCS+=	saf1761_otg.c
+SRCS+=	saf1761_otg_boot.c
+.endif
 
 #
 # USB core and templates
@@ -119,6 +176,15 @@ SRCS+=	usb_template_audio.c
 SRCS+=	sysinit_data.c
 SRCS+=	sysuninit_data.c
 
+#
+# USB mass storage support
+#
+SRCS+=	umass_common.c
+
+.if defined(HAVE_UMASS_LOADER)
+SRCS+=	umass_loader.c
+.endif
+
 CLEANFILES+= sysinit
 CLEANFILES+= sysinit.bin
 CLEANFILES+= sysinit_data.c

Modified: head/sys/boot/usb/bsd_kernel.c
==============================================================================
--- head/sys/boot/usb/bsd_kernel.c	Fri May 30 13:10:49 2014	(r266881)
+++ head/sys/boot/usb/bsd_kernel.c	Fri May 30 13:39:58 2014	(r266882)
@@ -1091,6 +1091,7 @@ usb_proc_mwait(struct usb_process *up, v
  * SYSTEM attach
  *------------------------------------------------------------------------*/
 
+#ifdef USB_PCI_PROBE_LIST
 static device_method_t pci_methods[] = {
 	DEVMETHOD_END
 };
@@ -1105,9 +1106,7 @@ static devclass_t pci_devclass;
 DRIVER_MODULE(pci, pci, pci_driver, pci_devclass, 0, 0);
 
 static const char *usb_pci_devices[] = {
-#ifdef USB_PROBE_LIST
-	USB_PROBE_LIST
-#endif
+	USB_PCI_PROBE_LIST
 };
 
 #define	USB_PCI_USB_MAX	(sizeof(usb_pci_devices) / sizeof(void *))
@@ -1150,11 +1149,13 @@ usb_pci_mod_unload(void *arg)
 		device_delete_child(NULL, usb_pci_root);
 }
 SYSUNINIT(usb_pci_mod_unload, SI_SUB_RUN_SCHEDULER, SI_ORDER_MIDDLE, usb_pci_mod_unload, 0);
+#endif
 
 /*------------------------------------------------------------------------*
  * MALLOC API
  *------------------------------------------------------------------------*/
 
+#ifndef HAVE_MALLOC
 #define	USB_POOL_ALIGN 8
 
 static uint8_t usb_pool[USB_POOL_SIZE] __aligned(USB_POOL_ALIGN);
@@ -1183,7 +1184,7 @@ usb_malloc(unsigned long size)
 	}
 
 	if (hdr) {
-		printf("MALLOC: Entries = %d; Remainder = %d; Size = %d\n",
+		DPRINTF("MALLOC: Entries = %d; Remainder = %d; Size = %d\n",
 		    (int)usb_pool_entries, (int)usb_pool_rem, (int)size);
 
 		TAILQ_REMOVE(&malloc_head, hdr, entry);
@@ -1197,7 +1198,7 @@ usb_malloc(unsigned long size)
 		usb_pool_rem -= size;
 		usb_pool_entries++;
 
-		printf("MALLOC: Entries = %d; Remainder = %d; Size = %d\n",
+		DPRINTF("MALLOC: Entries = %d; Remainder = %d; Size = %d\n",
 		    (int)usb_pool_entries, (int)usb_pool_rem, (int)size);
 
 		memset(hdr + 1, 0, hdr->size - sizeof(*hdr));
@@ -1219,6 +1220,7 @@ usb_free(void *arg)
 
 	TAILQ_INSERT_TAIL(&malloc_head, hdr, entry);
 }
+#endif
 
 char   *
 usb_strdup(const char *str)
@@ -1228,7 +1230,7 @@ usb_strdup(const char *str)
 
 	len = 1 + strlen(str);
 
-	tmp = usb_malloc(len);
+	tmp = malloc(len,XXX,XXX);
 	if (tmp == NULL)
 		return (NULL);
 

Modified: head/sys/boot/usb/bsd_kernel.h
==============================================================================
--- head/sys/boot/usb/bsd_kernel.h	Fri May 30 13:10:49 2014	(r266881)
+++ head/sys/boot/usb/bsd_kernel.h	Fri May 30 13:39:58 2014	(r266882)
@@ -28,7 +28,8 @@
 #define	_BSD_KERNEL_H_
 
 #define	_KERNEL
-#define	__FreeBSD_version 1000000
+#undef __FreeBSD_version
+#define	__FreeBSD_version 1100000
 
 #include <sys/cdefs.h>
 #include <sys/queue.h>
@@ -92,8 +93,11 @@ SYSINIT_ENTRY(uniq##_entry, "sysuninit",
 #define	BUS_SPACE_BARRIER_READ 0x01
 #define	BUS_SPACE_BARRIER_WRITE 0x02
 #define	hz 1000
+#undef PAGE_SIZE
 #define	PAGE_SIZE 4096
+#undef MIN
 #define	MIN(a,b) (((a) < (b)) ? (a) : (b))
+#undef MAX
 #define	MAX(a,b) (((a) > (b)) ? (a) : (b))
 #define	MTX_DEF 0
 #define	MTX_SPIN 0
@@ -104,10 +108,15 @@ SYSINIT_ENTRY(uniq##_entry, "sysuninit",
 #define	cold 0
 #define	BUS_PROBE_GENERIC 0
 #define	CALLOUT_RETURNUNLOCKED 0x1
+#undef va_list
 #define	va_list __builtin_va_list
+#undef va_size
 #define	va_size(type) __builtin_va_size(type)
+#undef va_start
 #define	va_start(ap, last) __builtin_va_start(ap, last)
+#undef va_end
 #define	va_end(ap) __builtin_va_end(ap)
+#undef va_arg
 #define	va_arg(ap, type) __builtin_va_arg((ap), type)
 #define	DEVICE_ATTACH(dev, ...) \
   (((device_attach_t *)(device_get_method(dev, "device_attach")))(dev,## __VA_ARGS__))
@@ -150,23 +159,38 @@ struct thread;
 struct malloc_type;
 struct usb_process;
 
+#ifndef HAVE_STANDARD_DEFS
+#define	_UINT8_T_DECLARED
 typedef unsigned char uint8_t;
+#define	_INT8_T_DECLARED
 typedef signed char int8_t;
-
+#define	_UINT16_T_DECLARED
 typedef unsigned short uint16_t;
+#define	_INT16_T_DECLARED
 typedef signed short int16_t;
-
+#define	_UINT32_T_DECLARED
 typedef unsigned int uint32_t;
+#define	_INT32_T_DECLARED
 typedef signed int int32_t;
-
+#define	_UINT64_T_DECLARED
 typedef unsigned long long uint64_t;
+#define	_INT16_T_DECLARED
 typedef signed long long int64_t;
 
-typedef unsigned long bus_addr_t;
-typedef unsigned long bus_size_t;
+typedef uint16_t uid_t;
+typedef uint16_t gid_t;
+typedef uint16_t mode_t;
+
+typedef uint8_t *caddr_t;
+typedef unsigned long __uintptr_t;
+typedef unsigned long uintptr_t;
 
 typedef unsigned long size_t;
 typedef unsigned long u_long;
+#endif
+
+typedef unsigned long bus_addr_t;
+typedef unsigned long bus_size_t;
 
 typedef void *bus_dmamap_t;
 typedef void *bus_dma_tag_t;
@@ -174,14 +198,6 @@ typedef void *bus_dma_tag_t;
 typedef void *bus_space_tag_t;
 typedef uint8_t *bus_space_handle_t;
 
-typedef uint16_t uid_t;
-typedef uint16_t gid_t;
-typedef uint16_t mode_t;
-
-typedef uint8_t *caddr_t;
-typedef unsigned long __uintptr_t;
-typedef unsigned long uintptr_t;
-
 /* SYSINIT API */
 
 #include <sysinit.h>
@@ -414,17 +430,31 @@ size_t	strlen(const char *s);
 
 /* MALLOC API */
 
+#ifndef HAVE_MALLOC
+#undef malloc
 #define	malloc(s,x,f) usb_malloc(s)
 void   *usb_malloc(size_t);
 
+#undef free
 #define	free(p,x) usb_free(p)
 void	usb_free(void *);
+#else
+#undef malloc
+void *malloc(size_t);
+#define	malloc(s,x,f) malloc(s)
+
+#undef free
+void free(void *);
+#define	free(p,x) free(p)
+#endif
 
 #define	strdup(p,x) usb_strdup(p)
 char   *usb_strdup(const char *str);
 
 /* ENDIANNESS */
 
+#ifndef HAVE_ENDIAN_DEFS
+
 /* Assume little endian */
 
 #define	htole64(x) ((uint64_t)(x))
@@ -439,6 +469,10 @@ char   *usb_strdup(const char *str);
 #define	be32toh(x) ((uint32_t)(x))
 #define	htobe32(x) ((uint32_t)(x))
 
+#else
+#include <sys/endian.h>
+#endif
+
 /* USB */
 
 typedef int usb_handle_request_t (device_t dev, const void *req, void **pptr, uint16_t *plen, uint16_t offset, uint8_t *pstate);

Modified: head/sys/boot/usb/usb_busdma_loader.c
==============================================================================
--- head/sys/boot/usb/usb_busdma_loader.c	Fri May 30 13:10:49 2014	(r266881)
+++ head/sys/boot/usb/usb_busdma_loader.c	Fri May 30 13:39:58 2014	(r266882)
@@ -211,13 +211,13 @@ usb_pc_alloc_mem(struct usb_page_cache *
 	/* allocate zeroed memory */
 
 	if (align != 1) {
-		ptr = usb_malloc(size + align);
+		ptr = malloc(size + align, XXX, XXX);
 		if (ptr == NULL)
 			goto error;
 
 		rem = (-((uintptr_t)ptr)) & (align - 1);
 	} else {
-		ptr = usb_malloc(size);
+		ptr = malloc(size, XXX, XXX);
 		if (ptr == NULL)
 			goto error;
 		rem = 0;
@@ -258,7 +258,7 @@ void
 usb_pc_free_mem(struct usb_page_cache *pc)
 {
 	if (pc != NULL && pc->buffer != NULL) {
-		usb_free(pc->tag);
+		free(pc->tag, XXX);
 		pc->buffer = NULL;
 	}
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405301339.s4UDdxAb067664>