Date: Thu, 13 Aug 2009 19:10:03 GMT From: Sylvestre Gallon <syl@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 167302 for review Message-ID: <200908131910.n7DJA3qm030627@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167302 Change 167302 by syl@syl_atuin on 2009/08/13 19:09:17 On Hans Petter advices : - Add static const to usb_roothub_fops. - Use multiple field initialisation. - Update at91dci to use this mechanisms. Affected files ... .. //depot/projects/soc2009/syl_usb/src/sys/dev/usb/controller/at91dci.c#13 edit .. //depot/projects/soc2009/syl_usb/src/sys/dev/usb/usb_controller.h#11 edit .. //depot/projects/soc2009/syl_usb/src/sys/dev/usb/usb_roothub_exec.c#8 edit Differences ... ==== //depot/projects/soc2009/syl_usb/src/sys/dev/usb/controller/at91dci.c#13 (text+ko) ==== @@ -1582,7 +1582,7 @@ static usb_error_t at91dci_get_port_status(struct usb_generic_softc *gensc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { struct at91dci_softc *sc = (struct at91dci_softc *)gensc; @@ -1640,16 +1640,17 @@ struct usb_device_request *req, const void **pptr, uint16_t *plength) { struct at91dci_softc *sc = AT9100_DCI_BUS2SC(udev->bus); - struct usb_roothub_fops fops; + static const struct usb_roothub_fops fops = { + DEFAULT_ROOTHUB, + .handle_get_port_status = &at91dci_get_port_status, + .handle_clocks_on = (usb_clocks_fops_t)&at91dci_clocks_on, + .handle_clocks_off = (usb_clocks_fops_t)&at91dci_clocks_off, + .handle_pull_up = (usb_clocks_fops_t)&at91dci_pull_up, + .handle_pull_down = (usb_clocks_fops_t)&at91dci_pull_down, + .handle_wakeup_peer = (usb_clocks_fops_t)&at91dci_wakeup_peer, + }; - bzero(&fops, sizeof(struct usb_roothub_fops)); - fops.handle_get_port_status = &at91dci_get_port_status; - fops.handle_clocks_on = (usb_clocks_fops_t)&at91dci_clocks_on; - fops.handle_clocks_off = (usb_clocks_fops_t)&at91dci_clocks_off; - fops.handle_pull_up = (usb_clocks_fops_t)&at91dci_pull_up; - fops.handle_pull_down = (usb_clocks_fops_t)&at91dci_pull_down; - fops.handle_wakeup_peer = (usb_clocks_fops_t)&at91dci_wakeup_peer; - return generic_roothub_exec((struct usb_generic_softc *)sc, &fops, req, + return generic_roothub_exec((struct usb_generic_softc *)sc, &fops, req, pptr, plength); } ==== //depot/projects/soc2009/syl_usb/src/sys/dev/usb/usb_controller.h#11 (text+ko) ==== @@ -209,7 +209,7 @@ struct usb_port_status ps; }; -typedef usb_error_t (*usb_roothub_fops_t)(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +typedef usb_error_t (*usb_roothub_fops_t)(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); typedef usb_error_t (*usb_clocks_fops_t)(struct usb_generic_softc *sc); struct usb_roothub_fops { @@ -247,6 +247,50 @@ uint16_t usb_isoc_time_expand(struct usb_bus *bus, uint16_t isoc_time_curr); uint16_t usbd_fs_isoc_schedule_isoc_time_expand(struct usb_device *udev, struct usb_fs_isoc_schedule **pp_start, struct usb_fs_isoc_schedule **pp_end, uint16_t isoc_time); uint8_t usbd_fs_isoc_schedule_alloc(struct usb_fs_isoc_schedule *fss, uint8_t *pstart, uint16_t len); -usb_error_t generic_roothub_exec(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, struct usb_device_request *req, const void **pptr, uint16_t *plength); +usb_error_t generic_roothub_exec(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, struct usb_device_request *req, const void **pptr, uint16_t *plength); + +/* prototypes needed by generic_roothub_exec */ + + +usb_error_t generic_get_descriptor(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_config(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_status(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_set_address(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_set_config(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_clear_halt(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_clear_wakeup(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_set_halt(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_set_wakeup(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_ep_status(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_set_interface(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_interface(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_iface_status(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_clear_port_feature(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_set_port_feature(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_tt_state(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_port_status(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_class_descriptor(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); +usb_error_t generic_get_class_status(struct usb_generic_softc *sc, const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index); + +#define DEFAULT_ROOTHUB \ +.handle_get_descriptor = &generic_get_descriptor, \ +.handle_get_config = &generic_get_config, \ +.handle_get_status = &generic_get_status, \ +.handle_set_address = &generic_set_address, \ +.handle_set_config = &generic_set_config, \ +.handle_clear_halt = &generic_clear_halt, \ +.handle_clear_wakeup = &generic_clear_wakeup, \ +.handle_set_halt = &generic_set_halt, \ +.handle_set_wakeup = &generic_set_wakeup, \ +.handle_get_ep_status = &generic_get_ep_status, \ +.handle_set_interface = &generic_set_interface, \ +.handle_get_interface = &generic_get_interface, \ +.handle_get_iface_status = &generic_get_iface_status, \ +.handle_clear_port_feature = &generic_clear_port_feature, \ +.handle_set_port_feature = &generic_set_port_feature, \ +.handle_get_tt_state = &generic_get_tt_state, \ +.handle_get_port_status = &generic_get_port_status, \ +.handle_get_class_descriptor = &generic_get_class_descriptor, \ +.handle_get_class_status = &generic_get_class_status #endif /* _USB_CONTROLLER_H_ */ ==== //depot/projects/soc2009/syl_usb/src/sys/dev/usb/usb_roothub_exec.c#8 (text+ko) ==== @@ -70,17 +70,9 @@ struct usb_generic_flags sc_flags; }; -#define SAFE_OPS(fops, field, err) \ - if (fops->field == NULL) \ - err = generic_roothub_fops.field(sc, fops, &len, &value, &index); \ - else \ - err = fops->field(sc, fops, &len, &value, &index) - -static struct usb_roothub_fops generic_roothub_fops; - -static usb_error_t +usb_error_t generic_get_descriptor(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { switch ((*value) >> 8) { @@ -116,9 +108,9 @@ return (0); } -static usb_error_t +usb_error_t generic_get_config(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { *len = 1; @@ -126,18 +118,19 @@ return (0); } -static usb_error_t -generic_get_status(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, - uint16_t *len, uint16_t *value, uint16_t *index) +usb_error_t +generic_get_status(struct usb_generic_softc *sc, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + uint16_t *index) { *len = 2; USETW(sc->sc_hub_temp.wValue, UDS_SELF_POWERED); return (0); } -static usb_error_t +usb_error_t generic_set_address(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { if ((*value) & 0xff00) { @@ -147,9 +140,10 @@ return (0); } -static usb_error_t -generic_set_config(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, - uint16_t *len, uint16_t *value, uint16_t *index) +usb_error_t +generic_set_config(struct usb_generic_softc *sc, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + uint16_t *index) { if ((*value) >= 2) { return (USB_ERR_STALLED); @@ -158,38 +152,41 @@ return (0); } -static usb_error_t -generic_clear_halt(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, - uint16_t *len, uint16_t *value, uint16_t *index) +usb_error_t +generic_clear_halt(struct usb_generic_softc *sc, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + uint16_t *index) { return (0); } -static usb_error_t +usb_error_t generic_clear_wakeup(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { return (0); } -static usb_error_t -generic_set_halt(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, - uint16_t *len, uint16_t *value, uint16_t *index) +usb_error_t +generic_set_halt(struct usb_generic_softc *sc, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + uint16_t *index) { return (0); } -static usb_error_t -generic_set_wakeup(struct usb_generic_softc *sc, struct usb_roothub_fops *fops, - uint16_t *len, uint16_t *value, uint16_t *index) +usb_error_t +generic_set_wakeup(struct usb_generic_softc *sc, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + uint16_t *index) { return (0); } -static usb_error_t +usb_error_t generic_get_ep_status(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { *len = 2; @@ -197,17 +194,17 @@ return (0); } -static usb_error_t +usb_error_t generic_set_interface(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { return (0); } -static usb_error_t +usb_error_t generic_get_interface(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { *len = 1; @@ -215,9 +212,9 @@ return (0); } -static usb_error_t +usb_error_t generic_get_iface_status(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { *len = 2; @@ -226,9 +223,9 @@ } /* XXX Atmega need another function here */ -static usb_error_t +usb_error_t generic_clear_port_feature(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { if ((*index) != 1) { @@ -272,9 +269,9 @@ return (0); } -static usb_error_t +usb_error_t generic_set_port_feature(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { if ((*index) != 1) { @@ -301,9 +298,9 @@ return (0); } -static usb_error_t +usb_error_t generic_get_tt_state(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { *len = 2; @@ -311,9 +308,10 @@ return (0); } -static usb_error_t +/* XXX Need to recheck with atmega */ +usb_error_t generic_get_port_status(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { DPRINTFN(9, "UR_GET_PORT_STATUS"); @@ -366,9 +364,9 @@ return (0); } -static usb_error_t +usb_error_t generic_get_class_descriptor(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { if ((*value) & 0xff) { @@ -378,9 +376,9 @@ return (0); } -static usb_error_t +usb_error_t generic_get_class_status(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, + const struct usb_roothub_fops *fops, uint16_t *len, uint16_t *value, uint16_t *index) { *len = 2; @@ -390,7 +388,7 @@ usb_error_t generic_roothub_exec(struct usb_generic_softc *sc, - struct usb_roothub_fops *fops, struct usb_device_request *req, + const struct usb_roothub_fops *fops, struct usb_device_request *req, const void **pptr, uint16_t *plength) { const void *ptr; @@ -406,9 +404,6 @@ len = 0; err = 0; - if (fops == NULL) - fops = &generic_roothub_fops; - value = UGETW(req->wValue); index = UGETW(req->wIndex); @@ -417,13 +412,13 @@ case UT_READ_DEVICE: switch (req->bRequest) { case UR_GET_DESCRIPTOR: - SAFE_OPS(fops, handle_get_descriptor, err); + err = fops->handle_get_descriptor(sc, fops, &len, &value, &index); break; case UR_GET_CONFIG: - SAFE_OPS(fops, handle_get_config, err); + err = fops->handle_get_config(sc, fops, &len, &value, &index); break; case UR_GET_STATUS: - SAFE_OPS(fops, handle_get_status, err); + err = fops->handle_get_status(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -434,10 +429,10 @@ case UT_WRITE_DEVICE: switch (req->bRequest) { case UR_SET_ADDRESS: - SAFE_OPS(fops, handle_set_address, err); + err = fops->handle_set_address(sc, fops, &len, &value, &index); break; case UR_SET_CONFIG: - SAFE_OPS(fops, handle_set_config, err); + err = fops->handle_set_config(sc, fops, &len, &value, &index); break; case UR_CLEAR_FEATURE: break; @@ -455,10 +450,10 @@ case UR_CLEAR_FEATURE: switch (UGETW(req->wValue)) { case UF_ENDPOINT_HALT: - SAFE_OPS(fops, handle_clear_halt, err); + err = fops->handle_clear_halt(sc, fops, &len, &value, &index); break; case UF_DEVICE_REMOTE_WAKEUP: - SAFE_OPS(fops, handle_clear_wakeup, err); + err = fops->handle_clear_wakeup(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -468,10 +463,10 @@ case UR_SET_FEATURE: switch (UGETW(req->wValue)) { case UF_ENDPOINT_HALT: - SAFE_OPS(fops, handle_set_halt, err); + err = fops->handle_set_halt(sc, fops, &len, &value, &index); break; case UF_DEVICE_REMOTE_WAKEUP: - SAFE_OPS(fops, handle_set_wakeup, err); + err = fops->handle_set_wakeup(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -489,7 +484,7 @@ case UT_READ_ENDPOINT: switch (req->bRequest) { case UR_GET_STATUS: - SAFE_OPS(fops, handle_get_ep_status, err); + err = fops->handle_get_ep_status(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -500,7 +495,7 @@ case UT_WRITE_INTERFACE: switch (req->bRequest) { case UR_SET_INTERFACE: - SAFE_OPS(fops, handle_set_interface, err); + err = fops->handle_set_interface(sc, fops, &len, &value, &index); break; case UR_CLEAR_FEATURE: break; @@ -514,10 +509,10 @@ case UT_READ_INTERFACE: switch (req->bRequest) { case UR_GET_INTERFACE: - SAFE_OPS(fops, handle_get_interface, err); + err = fops->handle_get_interface(sc, fops, &len, &value, &index); break; case UR_GET_STATUS: - SAFE_OPS(fops, handle_get_iface_status, err); + err = fops->handle_get_iface_status(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -551,10 +546,10 @@ case UT_WRITE_CLASS_OTHER: switch (req->bRequest) { case UR_CLEAR_FEATURE: - SAFE_OPS(fops, handle_clear_port_feature, err); + err = fops->handle_clear_port_feature(sc, fops, &len, &value, &index); break; case UR_SET_FEATURE: - SAFE_OPS(fops, handle_set_port_feature, err); + err = fops->handle_set_port_feature(sc, fops, &len, &value, &index); break; case UR_CLEAR_TT_BUFFER: case UR_RESET_TT: @@ -569,10 +564,10 @@ case UT_READ_CLASS_OTHER: switch (req->bRequest) { case UR_GET_TT_STATE: - SAFE_OPS(fops, handle_get_tt_state, err); + err = fops->handle_get_tt_state(sc, fops, &len, &value, &index); break; case UR_GET_STATUS: - SAFE_OPS(fops, handle_get_port_status, err); + err = fops->handle_get_port_status(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -583,10 +578,10 @@ case UT_READ_CLASS_DEVICE: switch (req->bRequest) { case UR_GET_DESCRIPTOR: - SAFE_OPS(fops, handle_get_class_descriptor, err); + err = fops->handle_get_class_descriptor(sc, fops, &len, &value, &index); break; case UR_GET_STATUS: - SAFE_OPS(fops, handle_get_class_status, err); + err = fops->handle_get_class_status(sc, fops, &len, &value, &index); break; default: err = USB_ERR_STALLED; @@ -603,31 +598,3 @@ *pptr = ptr; return (err); } - -static struct usb_roothub_fops generic_roothub_fops = { - &generic_get_descriptor, - &generic_get_config, - &generic_get_status, - &generic_set_address, - &generic_set_config, - &generic_clear_halt, - &generic_clear_wakeup, - &generic_set_halt, - &generic_set_wakeup, - &generic_get_ep_status, - &generic_set_interface, - &generic_get_interface, - &generic_get_iface_status, - &generic_clear_port_feature, - &generic_set_port_feature, - &generic_get_tt_state, - &generic_get_port_status, - &generic_get_class_descriptor, - &generic_get_class_status, - NULL, - NULL, - NULL, - NULL, - NULL, -}; -
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908131910.n7DJA3qm030627>