Commit cfa04c31 authored by Andrei Emeltchenko's avatar Andrei Emeltchenko Committed by Anas Nashif
Browse files

netusb: Remove ifdef registration for functions



netusb functions are now registered when interface is selected or
configured.

Signed-off-by: default avatarAndrei Emeltchenko <andrei.emeltchenko@intel.com>
parent 216b1457
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -348,6 +348,11 @@ static int ecm_connect(bool connected)
	return 0;
}

static struct netusb_function ecm_function = {
	.connect_media = ecm_connect,
	.send_pkt = ecm_send,
};

static inline void ecm_status_interface(const u8_t *iface)
{
	USB_DBG("iface %u", *iface);
@@ -357,7 +362,7 @@ static inline void ecm_status_interface(const u8_t *iface)
		return;
	}

	netusb_enable();
	netusb_enable(&ecm_function);
}

static void ecm_status_cb(enum usb_dc_status_code status, const u8_t *param)
@@ -390,15 +395,6 @@ static void ecm_status_cb(enum usb_dc_status_code status, const u8_t *param)
	}
}

struct netusb_function ecm_function = {
	.connect_media = ecm_connect,
	.class_handler = ecm_class_handler,
	.status_cb = ecm_status_cb,
	.send_pkt = ecm_send,
	.num_ep = ARRAY_SIZE(ecm_ep_data),
	.ep = ecm_ep_data,
};

struct usb_cdc_ecm_mac_descr {
	u8_t bLength;
	u8_t bDescriptorType;
+6 −10
Original line number Diff line number Diff line
@@ -223,6 +223,11 @@ static int eem_connect(bool connected)
	return 0;
}

static struct netusb_function eem_function = {
	.connect_media = eem_connect,
	.send_pkt = eem_send,
};

static inline void eem_status_interface(const u8_t *iface)
{
	USB_DBG("");
@@ -231,7 +236,7 @@ static inline void eem_status_interface(const u8_t *iface)
		return;
	}

	netusb_enable();
	netusb_enable(&eem_function);
}

static void eem_status_cb(enum usb_dc_status_code status, const u8_t *param)
@@ -264,15 +269,6 @@ static void eem_status_cb(enum usb_dc_status_code status, const u8_t *param)
	}
}

struct netusb_function eem_function = {
	.connect_media = eem_connect,
	.class_handler = NULL,
	.status_cb = eem_status_cb,
	.send_pkt = eem_send,
	.num_ep = ARRAY_SIZE(eem_ep_data),
	.ep = eem_ep_data,
};

static void eem_interface_config(u8_t bInterfaceNumber)
{
	cdc_eem_cfg.if0.bInterfaceNumber = bInterfaceNumber;
+6 −10
Original line number Diff line number Diff line
@@ -1282,13 +1282,18 @@ static int rndis_connect_media(bool status)
#endif
}

static struct netusb_function rndis_function = {
	.connect_media = rndis_connect_media,
	.send_pkt = rndis_send,
};

static void rndis_status_cb(enum usb_dc_status_code status, const u8_t *param)
{
	/* Check the USB status and do needed action if required */
	switch (status) {
	case USB_DC_CONFIGURED:
		USB_DBG("USB device configured");
		netusb_enable();
		netusb_enable(&rndis_function);
		break;

	case USB_DC_DISCONNECTED:
@@ -1312,15 +1317,6 @@ static void rndis_status_cb(enum usb_dc_status_code status, const u8_t *param)
	}
}

struct netusb_function rndis_function = {
	.connect_media = rndis_connect_media,
	.class_handler = rndis_class_handler,
	.status_cb = rndis_status_cb,
	.send_pkt = rndis_send,
	.num_ep = ARRAY_SIZE(rndis_ep_data),
	.ep = rndis_ep_data,
};

static void netusb_interface_config(u8_t bInterfaceNumber)
{
	rndis_cfg.if0.bInterfaceNumber = bInterfaceNumber;
+19 −21
Original line number Diff line number Diff line
@@ -28,8 +28,7 @@ LOG_MODULE_REGISTER(usb_net)

static struct __netusb {
	struct net_if *iface;
	bool enabled;
	struct netusb_function *func;
	const struct netusb_function *func;
} netusb;

#if !defined(CONFIG_USB_COMPOSITE_DEVICE)
@@ -43,7 +42,7 @@ static int netusb_send(struct net_if *iface, struct net_pkt *pkt)

	USB_DBG("Send pkt, len %u", net_pkt_get_len(pkt));

	if (!netusb.enabled) {
	if (!netusb_enabled()) {
		USB_ERR("interface disabled");
		return -ENODEV;
	}
@@ -71,6 +70,11 @@ static int netusb_connect_media(void)
{
	USB_DBG("");

	if (!netusb_enabled()) {
		USB_ERR("interface disabled");
		return -ENODEV;
	}

	if (!netusb.func->connect_media) {
		return -ENOTSUP;
	}
@@ -82,6 +86,11 @@ static int netusb_disconnect_media(void)
{
	USB_DBG("");

	if (!netusb_enabled()) {
		USB_ERR("interface disabled");
		return -ENODEV;
	}

	if (!netusb.func->connect_media) {
		return -ENOTSUP;
	}
@@ -89,11 +98,12 @@ static int netusb_disconnect_media(void)
	return netusb.func->connect_media(false);
}

void netusb_enable(void)
void netusb_enable(const struct netusb_function *func)
{
	USB_DBG("");

	netusb.enabled = true;
	netusb.func = func;

	net_if_up(netusb.iface);
	netusb_connect_media();
}
@@ -102,18 +112,19 @@ void netusb_disable(void)
{
	USB_DBG("");

	if (!netusb.enabled) {
	if (!netusb_enabled()) {
		return;
	}

	netusb.enabled = false;
	netusb.func = NULL;

	netusb_disconnect_media();
	net_if_down(netusb.iface);
}

bool netusb_enabled(void)
{
	return netusb.enabled;
	return !!netusb.func;
}

int try_write(u8_t ep, u8_t *data, u16_t len)
@@ -178,19 +189,6 @@ static void netusb_init(struct net_if *iface)

	net_if_down(iface);

/*
 * TODO: Add multi-function configuration
 */
#if defined(CONFIG_USB_DEVICE_NETWORK_ECM)
	netusb.func = &ecm_function;
#elif defined(CONFIG_USB_DEVICE_NETWORK_RNDIS)
	netusb.func = &rndis_function;
#elif defined(CONFIG_USB_DEVICE_NETWORK_EEM)
	netusb.func = &eem_function;
#else
#error Unknown USB Device Networking function
#endif

#ifndef CONFIG_USB_COMPOSITE_DEVICE
	/* Linker-defined symbols bound the USB descriptor structs */
	extern struct usb_cfg_data __usb_data_start[];
+1 −18
Original line number Diff line number Diff line
@@ -22,30 +22,13 @@
#define RNDIS_OUT_EP_ADDR		0x01

struct netusb_function {
	int num_ep;
	struct usb_ep_cfg_data *ep;

	int (*connect_media)(bool status);
	int (*send_pkt)(struct net_pkt *pkt);
	int (*class_handler)(struct usb_setup_packet *setup, s32_t *len,
			     u8_t **data);
	void (*status_cb)(enum usb_dc_status_code status, const u8_t *param);
};

void netusb_recv(struct net_pkt *pkt);
int try_write(u8_t ep, u8_t *data, u16_t len);

void netusb_enable(void);
void netusb_enable(const struct netusb_function *func);
void netusb_disable(void);
u8_t netusb_get_first_iface_number(void);
bool netusb_enabled(void);

#if defined(CONFIG_USB_DEVICE_NETWORK_ECM)
struct netusb_function ecm_function;
#elif defined(CONFIG_USB_DEVICE_NETWORK_RNDIS)
struct netusb_function rndis_function;
#elif defined(CONFIG_USB_DEVICE_NETWORK_EEM)
struct netusb_function eem_function;
#else
#error Unknown USB Device Networking function
#endif