New IPC interface, lwip sends data to rndis
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
SRC_DIR := components
|
||||
SRC_DIR := components usb_service
|
||||
|
||||
include $(KERNEL_ROOT)/compiler.mk
|
||||
|
||||
@@ -36,6 +36,7 @@ INC_DIR = -I$(KERNEL_ROOT)/services/drivers/usb/ \
|
||||
-I$(KERNEL_ROOT)/services/drivers/usb/components/osal \
|
||||
-I$(KERNEL_ROOT)/services/drivers/usb/components/port \
|
||||
-I$(KERNEL_ROOT)/services/drivers/usb/components/port/xhci \
|
||||
-I$(KERNEL_ROOT)/services/drivers/usb/usb_service \
|
||||
-I$(KERNEL_ROOT)/services//semaphore \
|
||||
-I$(KERNEL_ROOT)/services/lib/ipc \
|
||||
-I$(KERNEL_ROOT)/services/lib/memory \
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
include $(KERNEL_ROOT)/services/drivers/usb/components/usb.mk
|
||||
|
||||
objs = usb_host.o
|
||||
|
||||
all: ${objs}
|
||||
@echo "generate $^"
|
||||
|
||||
%.o: %.c
|
||||
@echo "cc $^"
|
||||
@${cc} ${cflags} ${c_useropts} ${INC_DIR} -o $@ -c $^
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#include "libipc.h"
|
||||
#include "rndis_service.h"
|
||||
|
||||
IPC_INTERFACE(Ipc_usbh_rndis_eth_tx, 2, dataptr, tot_len, *(size_t *)tot_len, sizeof(size_t));
|
||||
int ipc_usbh_rndis_eth_tx(struct Session* session, void *dataptr, size_t tot_len){
|
||||
return IPC_CALL(Ipc_usbh_rndis_eth_tx)(session, dataptr, &tot_len);
|
||||
}
|
||||
|
||||
IPC_INTERFACE(Ipc_usbh_rndis_eth_control, 3, cmd, args, len, sizeof(int), *(size_t *)len, sizeof(size_t));
|
||||
int ipc_usbh_rndis_eth_control(struct Session* session, int cmd, void *args, size_t len){
|
||||
return IPC_CALL(Ipc_usbh_rndis_eth_control)(session, &cmd, args, &len);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef RNDIS_SERVICE_H_
|
||||
#define RNDIS_SERVICE_H_
|
||||
|
||||
#include "libipc.h"
|
||||
|
||||
IPC_SERVICES(IpcRndisServer, Ipc_usbh_rndis_eth_tx, Ipc_usbh_rndis_eth_control);
|
||||
|
||||
int ipc_usbh_rndis_eth_tx(struct Session* session, void *dataptr, size_t tot_len);
|
||||
int ipc_usbh_rndis_eth_control(struct Session* session, int cmd, void *args, size_t len);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,37 @@
|
||||
#include "usb_host.h"
|
||||
|
||||
|
||||
int main(){
|
||||
return 0;
|
||||
}
|
||||
#include "usb_host.h"
|
||||
#include "usyscall.h"
|
||||
#include "libipc.h"
|
||||
#include "rndis_service.h"
|
||||
|
||||
/* IPC rndis server */
|
||||
int IPC_DO_SERVE_FUNC(Ipc_usbh_rndis_eth_tx)(void *dataptr, size_t *tot_len){
|
||||
return usbh_rndis_eth_tx(dataptr, *tot_len);
|
||||
}
|
||||
|
||||
int IPC_DO_SERVE_FUNC(Ipc_usbh_rndis_eth_control)(int *cmd, void *args, size_t *len){
|
||||
return usbh_rndis_eth_control(*cmd, args, *len);
|
||||
}
|
||||
|
||||
IPC_SERVER_INTERFACE(Ipc_usbh_rndis_eth_tx, 2);
|
||||
IPC_SERVER_INTERFACE(Ipc_usbh_rndis_eth_control, 3);
|
||||
|
||||
IPC_SERVER_REGISTER_INTERFACES(IpcRndisServer, 2, Ipc_usbh_rndis_eth_tx, Ipc_usbh_rndis_eth_control);
|
||||
|
||||
int ipc_rndis_server_init(void)
|
||||
{
|
||||
if (register_server("RndisServer") < 0) {
|
||||
printf("register server name: %s failed.\n", "RndisServer");
|
||||
return -1;
|
||||
}
|
||||
ipc_server_loop(&IpcRndisServer);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* usb main*/
|
||||
int main(){
|
||||
ipc_rndis_server_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#ifndef USB_HOST_H_
|
||||
#define USB_HOST_H_
|
||||
#include <usb_osal.h>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int usbh_rndis_eth_tx(void *dataptr, size_t tot_len);
|
||||
int usbh_rndis_eth_control(int cmd, void *args, size_t len);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user