forked from yystopf/xiuos
rndis uses naive_mmap to allocate memory during connect.
This commit is contained in:
parent
f1f533cdc1
commit
6504f11f00
|
@ -27,7 +27,11 @@ Modification: rndis uses naive_mmap to assign virtual and physical addresses and
|
|||
|
||||
#define DEV_FORMAT "/dev/rndis"
|
||||
|
||||
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_rndis_buf[4096];
|
||||
//USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_rndis_buf[4096];
|
||||
uint8_t *g_rndis_buf;
|
||||
uint8_t *g_rndis_buf_phy;
|
||||
uint8_t *g_rndis_keepalive_buf;
|
||||
uint8_t *g_rndis_keepalive_buf_phy;
|
||||
|
||||
static struct usbh_rndis g_rndis_class;
|
||||
|
||||
|
@ -39,17 +43,9 @@ static int usbh_rndis_init_msg_transfer(struct usbh_rndis *rndis_class)
|
|||
rndis_initialize_cmplt_t *resp;
|
||||
rndis_initialize_msg_t *cmd_phy;
|
||||
rndis_initialize_cmplt_t *resp_phy;
|
||||
uintptr_t vaddr;
|
||||
uintptr_t paddr;
|
||||
|
||||
//cmd = (rndis_initialize_msg_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, sizeof(rndis_initialize_msg_t), false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_initialize_msg_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
cmd = (rndis_initialize_msg_t *)vaddr;
|
||||
cmd_phy = (rndis_initialize_msg_t *)paddr;
|
||||
cmd = (rndis_initialize_msg_t *)g_rndis_buf;
|
||||
cmd_phy = (rndis_initialize_msg_t *)g_rndis_buf_phy;
|
||||
|
||||
cmd->MessageType = REMOTE_NDIS_INITIALIZE_MSG;
|
||||
cmd->MessageLength = sizeof(rndis_initialize_msg_t);
|
||||
|
@ -72,14 +68,8 @@ static int usbh_rndis_init_msg_transfer(struct usbh_rndis *rndis_class)
|
|||
|
||||
//ret = usbh_ep_intr_transfer()
|
||||
|
||||
//resp = (rndis_initialize_cmplt_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, 4096, false); // Parameter len is consistent with setup->wLength.
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_initialize_cmplt_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
resp = (rndis_initialize_cmplt_t *)vaddr;
|
||||
resp_phy = (rndis_initialize_cmplt_t *)paddr;
|
||||
resp = (rndis_initialize_cmplt_t *)g_rndis_buf;
|
||||
resp_phy = (rndis_initialize_cmplt_t *)g_rndis_buf_phy;
|
||||
|
||||
setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
|
||||
setup->bRequest = CDC_REQUEST_GET_ENCAPSULATED_RESPONSE;
|
||||
|
@ -104,17 +94,9 @@ int usbh_rndis_query_msg_transfer(struct usbh_rndis *rndis_class, uint32_t oid,
|
|||
rndis_query_cmplt_t *resp;
|
||||
rndis_query_msg_t *cmd_phy;
|
||||
rndis_query_cmplt_t *resp_phy;
|
||||
uintptr_t vaddr;
|
||||
uintptr_t paddr;
|
||||
|
||||
//cmd = (rndis_query_msg_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, query_len + sizeof(rndis_query_msg_t), false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_query_msg_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
cmd = (rndis_query_msg_t *)vaddr;
|
||||
cmd_phy = (rndis_query_msg_t *)paddr;
|
||||
cmd = (rndis_query_msg_t *)g_rndis_buf;
|
||||
cmd_phy = (rndis_query_msg_t *)g_rndis_buf_phy;
|
||||
|
||||
cmd->MessageType = REMOTE_NDIS_QUERY_MSG;
|
||||
cmd->MessageLength = query_len + sizeof(rndis_query_msg_t);
|
||||
|
@ -138,14 +120,8 @@ int usbh_rndis_query_msg_transfer(struct usbh_rndis *rndis_class, uint32_t oid,
|
|||
|
||||
//ret = usbh_ep_intr_transfer()
|
||||
|
||||
//resp = (rndis_query_cmplt_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, 4096, false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_query_cmplt_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
resp = (rndis_query_cmplt_t *)vaddr;
|
||||
resp_phy = (rndis_query_cmplt_t *)paddr;
|
||||
resp = (rndis_query_cmplt_t *)g_rndis_buf;
|
||||
resp_phy = (rndis_query_cmplt_t *)g_rndis_buf_phy;
|
||||
|
||||
setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
|
||||
setup->bRequest = CDC_REQUEST_GET_ENCAPSULATED_RESPONSE;
|
||||
|
@ -173,17 +149,9 @@ static int usbh_rndis_set_msg_transfer(struct usbh_rndis *rndis_class, uint32_t
|
|||
rndis_set_cmplt_t *resp;
|
||||
rndis_set_msg_t *cmd_phy;
|
||||
rndis_set_cmplt_t *resp_phy;
|
||||
uintptr_t vaddr;
|
||||
uintptr_t paddr;
|
||||
|
||||
//cmd = (rndis_set_msg_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, info_len + sizeof(rndis_set_msg_t), false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_set_msg_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
cmd = (rndis_set_msg_t *)vaddr;
|
||||
cmd_phy = (rndis_set_msg_t *)paddr;
|
||||
cmd = (rndis_set_msg_t *)g_rndis_buf;
|
||||
cmd_phy = (rndis_set_msg_t *)g_rndis_buf_phy;
|
||||
|
||||
cmd->MessageType = REMOTE_NDIS_SET_MSG;
|
||||
cmd->MessageLength = info_len + sizeof(rndis_set_msg_t);
|
||||
|
@ -208,14 +176,8 @@ static int usbh_rndis_set_msg_transfer(struct usbh_rndis *rndis_class, uint32_t
|
|||
|
||||
//ret = usbh_ep_intr_transfer(rndis_class->hport->intin,buf,len,500);
|
||||
|
||||
//resp = (rndis_set_cmplt_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, 4096, false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_set_cmplt_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
resp = (rndis_set_cmplt_t *)vaddr;
|
||||
resp_phy = (rndis_set_cmplt_t *)paddr;
|
||||
resp = (rndis_set_cmplt_t *)g_rndis_buf;
|
||||
resp_phy = (rndis_set_cmplt_t *)g_rndis_buf_phy;
|
||||
|
||||
setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
|
||||
setup->bRequest = CDC_REQUEST_GET_ENCAPSULATED_RESPONSE;
|
||||
|
@ -268,17 +230,9 @@ int usbh_rndis_keepalive(struct usbh_rndis *rndis_class)
|
|||
rndis_keepalive_cmplt_t *resp;
|
||||
rndis_keepalive_msg_t *cmd_phy;
|
||||
rndis_keepalive_cmplt_t *resp_phy;
|
||||
uintptr_t vaddr;
|
||||
uintptr_t paddr;
|
||||
|
||||
//cmd = (rndis_keepalive_msg_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, sizeof(rndis_keepalive_msg_t), false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_keepalive_msg_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
cmd = (rndis_keepalive_msg_t *)vaddr;
|
||||
cmd_phy = (rndis_keepalive_msg_t *)paddr;
|
||||
cmd = (rndis_keepalive_msg_t *)g_rndis_keepalive_buf;
|
||||
cmd_phy = (rndis_keepalive_msg_t *)g_rndis_keepalive_buf_phy;
|
||||
|
||||
cmd->MessageType = REMOTE_NDIS_KEEPALIVE_MSG;
|
||||
cmd->MessageLength = sizeof(rndis_keepalive_msg_t);
|
||||
|
@ -298,14 +252,8 @@ int usbh_rndis_keepalive(struct usbh_rndis *rndis_class)
|
|||
|
||||
//ret = usbh_ep_intr_transfer(rndis_class->hport->intin,buf,len,500);
|
||||
|
||||
//resp = (rndis_keepalive_cmplt_t *)g_rndis_buf;
|
||||
ret = naive_mmap(&vaddr, &paddr, 4096, false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("rndis_keepalive_cmplt_t allocate error, ret: %d\r\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
resp = (rndis_keepalive_cmplt_t *)vaddr;
|
||||
resp_phy = (rndis_keepalive_cmplt_t *)paddr;
|
||||
resp = (rndis_keepalive_cmplt_t *)g_rndis_keepalive_buf;
|
||||
resp_phy = (rndis_keepalive_cmplt_t *)g_rndis_keepalive_buf_phy;
|
||||
|
||||
setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
|
||||
setup->bRequest = CDC_REQUEST_GET_ENCAPSULATED_RESPONSE;
|
||||
|
@ -332,6 +280,7 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf)
|
|||
uint32_t data_len;
|
||||
uint8_t tmp_buffer[512];
|
||||
uint8_t data[32];
|
||||
uintptr_t vaddr, paddr;
|
||||
|
||||
struct usbh_rndis *rndis_class = &g_rndis_class;
|
||||
|
||||
|
@ -341,6 +290,23 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf)
|
|||
rndis_class->ctrl_intf = intf;
|
||||
rndis_class->data_intf = intf + 1;
|
||||
|
||||
/* allocate virtual address and physical address*/
|
||||
ret = naive_mmap(&vaddr, &paddr, 4096, false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("g_rndis_buf allocate error, ret: %d\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
g_rndis_buf = (uint8_t *)vaddr;
|
||||
g_rndis_buf_phy = (uint8_t *)paddr;
|
||||
|
||||
ret = naive_mmap(&vaddr, &paddr, 4096, false);
|
||||
if(ret != 0){
|
||||
USB_LOG_ERR("g_rndis_keepalive_buf allocate error, ret: %d\n", ret);
|
||||
return -ENOMEM;
|
||||
}
|
||||
g_rndis_keepalive_buf = (uint8_t *)vaddr;
|
||||
g_rndis_keepalive_buf_phy = (uint8_t *)paddr;
|
||||
|
||||
hport->config.intf[intf].priv = rndis_class;
|
||||
hport->config.intf[intf + 1].priv = NULL;
|
||||
|
||||
|
|
Loading…
Reference in New Issue