diff --git a/devicemodel/hw/pci/xhci.c b/devicemodel/hw/pci/xhci.c index 1aaae15b2..4e1820111 100644 --- a/devicemodel/hw/pci/xhci.c +++ b/devicemodel/hw/pci/xhci.c @@ -200,7 +200,7 @@ struct pci_xhci_dev_ep { #define ep_ccs _ep_trb_rings._epu_trb.ccs #define ep_sctx_trbs _ep_trb_rings._epu_sctx_trbs - struct usb_data_xfer *ep_xfer; /* transfer chain */ + struct usb_xfer *ep_xfer; /* transfer chain */ pthread_mutex_t mtx; }; @@ -458,7 +458,7 @@ static void pci_xhci_dev_destroy(struct pci_xhci_dev_emu *de); static void pci_xhci_set_evtrb(struct xhci_trb *evtrb, uint64_t port, uint32_t errcode, uint32_t evtype); static int pci_xhci_xfer_complete(struct pci_xhci_vdev *xdev, - struct usb_data_xfer *xfer, uint32_t slot, uint32_t epid, + struct usb_xfer *xfer, uint32_t slot, uint32_t epid, int *do_intr); static inline int pci_xhci_is_valid_portnum(int n); static int pci_xhci_parse_tablet(struct pci_xhci_vdev *xdev, char *opts); @@ -893,7 +893,7 @@ static int pci_xhci_usb_dev_notify_cb(void *hci_data, void *udev_data) { int slot, epid, intr, rc; - struct usb_data_xfer *xfer; + struct usb_xfer *xfer; struct pci_xhci_dev_emu *edev; struct pci_xhci_vdev *xdev; @@ -1594,7 +1594,7 @@ pci_xhci_init_ep(struct pci_xhci_dev_emu *dev, int epid) } if (devep->ep_xfer == NULL) { - devep->ep_xfer = calloc(1, sizeof(struct usb_data_xfer)); + devep->ep_xfer = calloc(1, sizeof(struct usb_xfer)); if (devep->ep_xfer) { devep->ep_xfer->dev = (void *)dev; devep->ep_xfer->epid = epid; @@ -2172,7 +2172,7 @@ pci_xhci_cmd_reset_ep(struct pci_xhci_vdev *xdev, struct pci_xhci_dev_ep *devep; struct xhci_dev_ctx *dev_ctx; struct xhci_endp_ctx *ep_ctx; - struct usb_data_xfer *xfer; + struct usb_xfer *xfer; struct usb_dev_req *r; uint32_t cmderr, epid; uint32_t type; @@ -2600,11 +2600,8 @@ pci_xhci_dump_trb(struct xhci_trb *trb) } static int -pci_xhci_xfer_complete(struct pci_xhci_vdev *xdev, - struct usb_data_xfer *xfer, - uint32_t slot, - uint32_t epid, - int *do_intr) +pci_xhci_xfer_complete(struct pci_xhci_vdev *xdev, struct usb_xfer *xfer, + uint32_t slot, uint32_t epid, int *do_intr) { struct xhci_dev_ctx *dev_ctx; struct xhci_endp_ctx *ep_ctx; @@ -2654,18 +2651,18 @@ pci_xhci_xfer_complete(struct pci_xhci_vdev *xdev, UPRINTF(LDBG, "xfer[%d] done?%u:%d trb %x %016lx %x " "(err %d) IOC?%d, chained %d\r\n", - i, xfer->data[i].processed, xfer->data[i].blen, + i, xfer->data[i].stat, xfer->data[i].blen, XHCI_TRB_3_TYPE_GET(trbflags), evtrb.qwTrb0, trbflags, err, trb->dwTrb3 & XHCI_TRB_3_IOC_BIT ? 1 : 0, xfer->data[i].chained); - if (xfer->data[i].processed < USB_XFER_BLK_HANDLED) { + if (xfer->data[i].stat < USB_BLOCK_HANDLED) { xfer->head = (int)i; break; } - xfer->data[i].processed = USB_XFER_BLK_FREE; + xfer->data[i].stat = USB_BLOCK_FREE; xfer->ndata--; xfer->head = (xfer->head + 1) % USB_MAX_XFER_BLOCKS; edtla += xfer->data[i].bdone; @@ -2766,7 +2763,7 @@ pci_xhci_try_usb_xfer(struct pci_xhci_vdev *xdev, uint32_t slot, uint32_t epid) { - struct usb_data_xfer *xfer; + struct usb_xfer *xfer; int err; int do_intr; @@ -2818,9 +2815,9 @@ pci_xhci_handle_transfer(struct pci_xhci_vdev *xdev, uint32_t ccs, uint32_t streamid) { - struct xhci_trb *setup_trb; - struct usb_data_xfer *xfer; - struct usb_data_xfer_block *xfer_block; + struct xhci_trb *setup_trb; + struct usb_xfer *xfer; + struct usb_block *xfer_block; uint64_t val; uint32_t trbflags; int do_intr, err; @@ -2862,13 +2859,13 @@ retry: if (trb->dwTrb3 & XHCI_TRB_3_TC_BIT) ccs ^= 0x1; - xfer_block = usb_data_xfer_append(xfer, NULL, 0, + xfer_block = usb_block_append(xfer, NULL, 0, (void *)addr, ccs); if (!xfer_block) { err = XHCI_TRB_ERROR_STALL; goto errout; } - xfer_block->processed = USB_XFER_BLK_FREE; + xfer_block->stat = USB_BLOCK_FREE; break; case XHCI_TRB_TYPE_SETUP_STAGE: @@ -2891,7 +2888,7 @@ retry: memcpy(xfer->ureq, &val, sizeof(struct usb_device_request)); - xfer_block = usb_data_xfer_append(xfer, NULL, 0, + xfer_block = usb_block_append(xfer, NULL, 0, (void *)addr, ccs); if (!xfer_block) { free(xfer->ureq); @@ -2899,7 +2896,7 @@ retry: err = XHCI_TRB_ERROR_STALL; goto errout; } - xfer_block->processed = USB_XFER_BLK_HANDLED; + xfer_block->stat = USB_BLOCK_HANDLED; break; case XHCI_TRB_TYPE_ISOCH: @@ -2916,7 +2913,7 @@ retry: /* fall through */ case XHCI_TRB_TYPE_DATA_STAGE: - xfer_block = usb_data_xfer_append(xfer, + xfer_block = usb_block_append(xfer, (void *)(trbflags & XHCI_TRB_3_IDT_BIT ? &trb->qwTrb0 : XHCI_GADDR(xdev, trb->qwTrb0)), @@ -2928,29 +2925,29 @@ retry: break; case XHCI_TRB_TYPE_STATUS_STAGE: - xfer_block = usb_data_xfer_append(xfer, NULL, 0, + xfer_block = usb_block_append(xfer, NULL, 0, (void *)addr, ccs); break; case XHCI_TRB_TYPE_NOOP: - xfer_block = usb_data_xfer_append(xfer, NULL, 0, + xfer_block = usb_block_append(xfer, NULL, 0, (void *)addr, ccs); if (!xfer_block) { err = XHCI_TRB_ERROR_STALL; goto errout; } - xfer_block->processed = USB_XFER_BLK_HANDLED; + xfer_block->stat = USB_BLOCK_HANDLED; break; case XHCI_TRB_TYPE_EVENT_DATA: - xfer_block = usb_data_xfer_append(xfer, NULL, 0, + xfer_block = usb_block_append(xfer, NULL, 0, (void *)addr, ccs); if (!xfer_block) { err = XHCI_TRB_ERROR_TRB; goto errout; } if ((epid > 1) && (trbflags & XHCI_TRB_3_IOC_BIT)) - xfer_block->processed = USB_XFER_BLK_HANDLED; + xfer_block->stat = USB_BLOCK_HANDLED; break; default: diff --git a/devicemodel/hw/platform/usb_mouse.c b/devicemodel/hw/platform/usb_mouse.c index cdb4f919e..3519b0bd8 100644 --- a/devicemodel/hw/platform/usb_mouse.c +++ b/devicemodel/hw/platform/usb_mouse.c @@ -308,10 +308,10 @@ umouse_init(void *pdata, char *opt) } static int -umouse_request(void *scarg, struct usb_data_xfer *xfer) +umouse_request(void *scarg, struct usb_xfer *xfer) { struct umouse_vdev *dev; - struct usb_data_xfer_block *data; + struct usb_block *data; const char *str; uint16_t value; uint16_t index; @@ -335,7 +335,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer) udata = data->buf; } - xfer->data[idx].processed = USB_XFER_BLK_HANDLED; + xfer->data[idx].stat = USB_BLOCK_HANDLED; idx = (idx + 1) % USB_MAX_XFER_BLOCKS; } @@ -690,11 +690,11 @@ done: } static int -umouse_data_handler(void *scarg, struct usb_data_xfer *xfer, int dir, +umouse_data_handler(void *scarg, struct usb_xfer *xfer, int dir, int epctx) { struct umouse_vdev *dev; - struct usb_data_xfer_block *data; + struct usb_block *data; uint8_t *udata; int len, i, idx; int err; @@ -714,7 +714,7 @@ umouse_data_handler(void *scarg, struct usb_data_xfer *xfer, int dir, if (data->buf != NULL && data->blen != 0) break; - data->processed = USB_XFER_BLK_HANDLED; + data->stat = USB_BLOCK_HANDLED; data = NULL; idx = (idx + 1) % USB_MAX_XFER_BLOCKS; } @@ -754,7 +754,7 @@ umouse_data_handler(void *scarg, struct usb_data_xfer *xfer, int dir, if (len > 0) { dev->newdata = 0; - data->processed = USB_XFER_BLK_HANDLED; + data->stat = USB_BLOCK_HANDLED; data->bdone += 6; memcpy(udata, &dev->um_report, 6); data->blen = len - 6; diff --git a/devicemodel/hw/platform/usb_pmapper.c b/devicemodel/hw/platform/usb_pmapper.c index f56b95d34..160d93c26 100644 --- a/devicemodel/hw/platform/usb_pmapper.c +++ b/devicemodel/hw/platform/usb_pmapper.c @@ -168,8 +168,8 @@ static void usb_dev_comp_cb(struct libusb_transfer *trn) { struct usb_dev_req *r; - struct usb_data_xfer *xfer; - struct usb_data_xfer_block *block; + struct usb_xfer *xfer; + struct usb_block *block; struct usb_native_devinfo *info; int do_intr = 0; int i, j, idx, buf_idx, done; @@ -267,7 +267,7 @@ usb_dev_comp_cb(struct libusb_transfer *trn) break; block = &xfer->data[idx % USB_MAX_XFER_BLOCKS]; - if (block->processed == USB_XFER_BLK_FREE) + if (block->stat == USB_BLOCK_FREE) UPRINTF(LFTL, "error: found free block\r\n"); d = done; @@ -288,7 +288,7 @@ usb_dev_comp_cb(struct libusb_transfer *trn) done -= d; block->blen -= d; block->bdone = d; - block->processed = USB_XFER_BLK_HANDLED; + block->stat = USB_BLOCK_HANDLED; idx = (idx + 1) % USB_MAX_XFER_BLOCKS; i++; @@ -299,7 +299,7 @@ stall_out: if (is_stalled) { for (i = 0, idx = r->blk_start; i < r->blk_count; ++i) { block = &xfer->data[idx % USB_MAX_XFER_BLOCKS]; - block->processed = USB_XFER_BLK_HANDLED; + block->stat = USB_BLOCK_HANDLED; } } @@ -326,7 +326,7 @@ free_transfer: } static struct usb_dev_req * -usb_dev_alloc_req(struct usb_dev *udev, struct usb_data_xfer *xfer, int in, +usb_dev_alloc_req(struct usb_dev *udev, struct usb_xfer *xfer, int in, size_t size, size_t count) { struct usb_dev_req *req; @@ -366,10 +366,10 @@ errout: } static int -usb_dev_prepare_xfer(struct usb_data_xfer *xfer, int *count, int *size) +usb_dev_prepare_xfer(struct usb_xfer *xfer, int *count, int *size) { int found, i, idx, c, s, first; - struct usb_data_xfer_block *block = NULL; + struct usb_block *block = NULL; idx = xfer->head; found = 0; @@ -381,8 +381,8 @@ usb_dev_prepare_xfer(struct usb_data_xfer *xfer, int *count, int *size) for (i = 0; i < xfer->ndata; i++) { block = &xfer->data[idx]; - if (block->processed == USB_XFER_BLK_HANDLED || - block->processed == USB_XFER_BLK_HANDLING) { + if (block->stat == USB_BLOCK_HANDLED || + block->stat == USB_BLOCK_HANDLING) { idx = (idx + 1) % USB_MAX_XFER_BLOCKS; continue; } @@ -398,14 +398,14 @@ usb_dev_prepare_xfer(struct usb_data_xfer *xfer, int *count, int *size) * 1. LINK trb is in the middle of trbs. * 2. LINK trb is a single trb. */ - block->processed = USB_XFER_BLK_HANDLED; + block->stat = USB_BLOCK_HANDLED; idx = (idx + 1) % USB_MAX_XFER_BLOCKS; continue; } else if (found) { UPRINTF(LWRN, "find a NULL data. %d total %d\n", i, xfer->ndata); } - block->processed = USB_XFER_BLK_HANDLING; + block->stat = USB_BLOCK_HANDLING; idx = (idx + 1) % USB_MAX_XFER_BLOCKS; } @@ -626,7 +626,7 @@ usb_dev_native_toggle_if_drivers(struct usb_dev *udev, int attach) } static void -usb_dev_set_config(struct usb_dev *udev, struct usb_data_xfer *xfer, int config) +usb_dev_set_config(struct usb_dev *udev, struct usb_xfer *xfer, int config) { int rc = 0; struct libusb_config_descriptor *cfg; @@ -676,7 +676,7 @@ err2: } static void -usb_dev_set_if(struct usb_dev *udev, int iface, int alt, struct usb_data_xfer +usb_dev_set_if(struct usb_dev *udev, int iface, int alt, struct usb_xfer *xfer) { if (iface >= USB_NUM_INTERFACE) @@ -706,12 +706,12 @@ errout: alt); } -static struct usb_data_xfer_block * -usb_dev_prepare_ctrl_xfer(struct usb_data_xfer *xfer) +static struct usb_block * +usb_dev_prepare_ctrl_xfer(struct usb_xfer *xfer) { int i, idx; - struct usb_data_xfer_block *ret = NULL; - struct usb_data_xfer_block *blk = NULL; + struct usb_block *ret = NULL; + struct usb_block *blk = NULL; idx = xfer->head; @@ -721,13 +721,13 @@ usb_dev_prepare_ctrl_xfer(struct usb_data_xfer *xfer) for (i = 0; i < xfer->ndata; i++) { /* * find out the data block and set every - * block to be processed + * block to be USB_BLOCK_HANDLED */ blk = &xfer->data[idx]; if (blk->blen > 0 && !ret) ret = blk; - blk->processed = USB_XFER_BLK_HANDLED; + blk->stat = USB_BLOCK_HANDLED; idx = (idx + 1) % USB_MAX_XFER_BLOCKS; } return ret; @@ -748,7 +748,7 @@ usb_dev_reset(void *pdata) } int -usb_dev_data(void *pdata, struct usb_data_xfer *xfer, int dir, int epctx) +usb_dev_data(void *pdata, struct usb_xfer *xfer, int dir, int epctx) { struct usb_dev *udev; struct usb_dev_req *r; @@ -757,7 +757,7 @@ usb_dev_data(void *pdata, struct usb_data_xfer *xfer, int dir, int epctx) uint8_t type; int blk_start, data_size, blk_count; int i, j, idx, buf_idx; - struct usb_data_xfer_block *b; + struct usb_block *b; static const char * const type_str[] = {"CTRL", "ISO", "BULK", "INT"}; static const char * const dir_str[] = {"OUT", "IN"}; int framelen = 0, framecnt = 0; @@ -933,7 +933,7 @@ clear_uas_desc(struct usb_dev *udev, uint8_t *data, uint32_t len) } int -usb_dev_request(void *pdata, struct usb_data_xfer *xfer) +usb_dev_request(void *pdata, struct usb_xfer *xfer) { struct usb_dev *udev; uint8_t request_type; @@ -941,7 +941,7 @@ usb_dev_request(void *pdata, struct usb_data_xfer *xfer) uint16_t value; uint16_t index; uint16_t len; - struct usb_data_xfer_block *blk; + struct usb_block *blk; uint8_t *data; int rc; bool need_chk_uas = false; diff --git a/devicemodel/hw/usb_core.c b/devicemodel/hw/usb_core.c index 3a0f8e21f..e1d1b9ccd 100644 --- a/devicemodel/hw/usb_core.c +++ b/devicemodel/hw/usb_core.c @@ -100,11 +100,11 @@ usb_emu_finddev(char *name) return NULL; } -struct usb_data_xfer_block * -usb_data_xfer_append(struct usb_data_xfer *xfer, void *buf, int blen, - void *hci_data, int ccs) +struct usb_block * +usb_block_append(struct usb_xfer *xfer, void *buf, int blen, + void *hci_data, int ccs) { - struct usb_data_xfer_block *xb; + struct usb_block *xb; if (xfer->ndata >= USB_MAX_XFER_BLOCKS) return NULL; @@ -114,7 +114,7 @@ usb_data_xfer_append(struct usb_data_xfer *xfer, void *buf, int blen, xb->blen = blen; xb->hci_data = hci_data; xb->ccs = ccs; - xb->processed = USB_XFER_BLK_FREE; + xb->stat = USB_BLOCK_FREE; xb->bdone = 0; xb->chained = 0; xfer->ndata++; diff --git a/devicemodel/include/usb_core.h b/devicemodel/include/usb_core.h index 324cd4bb1..24cff1f2f 100644 --- a/devicemodel/include/usb_core.h +++ b/devicemodel/include/usb_core.h @@ -78,10 +78,10 @@ enum usb_dev_type { USB_DEV_PORT_MAPPER }; -enum usb_xfer_blk_stat { - USB_XFER_BLK_FREE = 0, - USB_XFER_BLK_HANDLING, - USB_XFER_BLK_HANDLED +enum usb_block_stat { + USB_BLOCK_FREE = 0, + USB_BLOCK_HANDLING, + USB_BLOCK_HANDLED }; enum usb_native_devtype { @@ -96,7 +96,7 @@ enum usb_native_devtype { struct usb_hci; struct usb_device_request; -struct usb_data_xfer; +struct usb_xfer; /* Device emulation handlers */ struct usb_devemu { @@ -109,8 +109,8 @@ struct usb_devemu { void *(*ue_init)(void *pdata, char *opt); /* handlers */ - int (*ue_request)(void *sc, struct usb_data_xfer *xfer); - int (*ue_data)(void *sc, struct usb_data_xfer *xfer, int dir, + int (*ue_request)(void *sc, struct usb_xfer *xfer); + int (*ue_data)(void *sc, struct usb_xfer *xfer, int dir, int epctx); int (*ue_info)(void *sc, int type, void *value, int size); int (*ue_reset)(void *sc); @@ -148,11 +148,11 @@ struct usb_hci { * The device handler is to update blen to reflect on the residual size * of the buffer, i.e. len(buf) - len(consumed). */ -struct usb_data_xfer_block { +struct usb_block { void *buf; /* IN or OUT pointer */ int blen; /* in:len(buf), out:len(remaining) */ int bdone; /* bytes transferred */ - enum usb_xfer_blk_stat processed; /* processed status */ + enum usb_block_stat stat; /* processed status */ void *hci_data; /* HCI private reference */ int ccs; int chained; @@ -160,9 +160,9 @@ struct usb_data_xfer_block { uint64_t trbnext; /* next TRB guest address */ }; -struct usb_data_xfer { +struct usb_xfer { uint64_t magic; - struct usb_data_xfer_block data[USB_MAX_XFER_BLOCKS]; + struct usb_block data[USB_MAX_XFER_BLOCKS]; struct usb_dev_req *requests[USB_MAX_XFER_BLOCKS]; struct usb_device_request *ureq; /* setup ctl request */ int ndata; /* # of data items */ @@ -201,9 +201,9 @@ enum USB_ERRCODE { USB_SHORT }; -#define USB_DATA_GET_ERRCODE(x) ((x)->processed >> 8) +#define USB_DATA_GET_ERRCODE(x) ((x)->stat >> 8) #define USB_DATA_SET_ERRCODE(x, e) \ -((x)->processed = ((x)->processed & 0xFF) | (e << 8)) +((x)->stat = ((x)->stat & 0xFF) | (e << 8)) #define USB_DATA_OK(x, i) ((x)->data[(i)].buf != NULL) @@ -231,11 +231,8 @@ void usb_parse_log_level(char level); struct usb_devemu *usb_emu_finddev(char *name); int usb_native_is_bus_existed(uint8_t bus_num); int usb_native_is_port_existed(uint8_t bus_num, uint8_t port_num); -struct usb_data_xfer_block *usb_data_xfer_append(struct usb_data_xfer *xfer, - void *buf, - int blen, - void *hci_data, - int ccs); +struct usb_block *usb_block_append(struct usb_xfer *xfer, void *buf, int blen, + void *hci_data, int ccs); int usb_get_hub_port_num(struct usb_devpath *path); char *usb_dev_path(struct usb_devpath *path); bool usb_dev_path_cmp(struct usb_devpath *p1, struct usb_devpath *p2); diff --git a/devicemodel/include/usb_pmapper.h b/devicemodel/include/usb_pmapper.h index 496bb852a..c602cf1c2 100644 --- a/devicemodel/include/usb_pmapper.h +++ b/devicemodel/include/usb_pmapper.h @@ -61,7 +61,7 @@ struct usb_dev { /* * The purpose to implement struct usb_dev_req is to adapt - * struct usb_data_xfer to make a proper data format to talk + * struct usb_xfer to make a proper data format to talk * with libusb. */ struct usb_dev_req { @@ -69,18 +69,17 @@ struct usb_dev_req { int in; int seq; /* - * buffer could include data from multiple - * usb_data_xfer_block, so here need some - * data to record it. + * buffer could include data from multiple usb_block, + * so here need some data to record it. */ uint8_t *buffer; int buf_length; int blk_start; int blk_count; - struct usb_data_xfer *xfer; + struct usb_xfer *xfer; struct libusb_transfer *trn; - struct usb_data_xfer_block *setup_blk; + struct usb_block *setup_blk; }; /* callback type used by code from HCD layer */ @@ -127,7 +126,7 @@ void usb_dev_sys_deinit(void); void *usb_dev_init(void *pdata, char *opt); void usb_dev_deinit(void *pdata); int usb_dev_info(void *pdata, int type, void *value, int size); -int usb_dev_request(void *pdata, struct usb_data_xfer *xfer); +int usb_dev_request(void *pdata, struct usb_xfer *xfer); int usb_dev_reset(void *pdata); -int usb_dev_data(void *pdata, struct usb_data_xfer *xfer, int dir, int epctx); +int usb_dev_data(void *pdata, struct usb_xfer *xfer, int dir, int epctx); #endif