Lines Matching refs:dev
138 struct usb_device_descriptor *dev; member
167 struct dev_data *dev; in dev_new() local
169 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in dev_new()
170 if (!dev) in dev_new()
172 dev->state = STATE_DEV_DISABLED; in dev_new()
173 atomic_set (&dev->count, 1); in dev_new()
174 spin_lock_init (&dev->lock); in dev_new()
175 INIT_LIST_HEAD (&dev->epfiles); in dev_new()
176 init_waitqueue_head (&dev->wait); in dev_new()
177 return dev; in dev_new()
194 struct dev_data *dev; member
215 put_dev (data->dev); in put_ep()
243 #define DBG(dev,fmt,args...) \ argument
244 xprintk(dev , KERN_DEBUG , fmt , ## args)
246 #define DBG(dev,fmt,args...) \ argument
253 #define VDEBUG(dev,fmt,args...) \ argument
257 #define ERROR(dev,fmt,args...) \ argument
258 xprintk(dev , KERN_ERR , fmt , ## args)
259 #define INFO(dev,fmt,args...) \ argument
260 xprintk(dev , KERN_INFO , fmt , ## args)
334 spin_lock_irq (&epdata->dev->lock); in ep_io()
345 spin_unlock_irq (&epdata->dev->lock); in ep_io()
350 spin_lock_irq (&epdata->dev->lock); in ep_io()
352 DBG (epdata->dev, "%s i/o interrupted\n", in ep_io()
355 spin_unlock_irq (&epdata->dev->lock); in ep_io()
361 spin_unlock_irq (&epdata->dev->lock); in ep_io()
363 DBG (epdata->dev, "endpoint gone\n"); in ep_io()
402 spin_lock_irq (&data->dev->lock); in ep_ioctl()
419 spin_unlock_irq (&data->dev->lock); in ep_ioctl()
487 spin_lock(&epdata->dev->lock); in ep_aio_complete()
507 DBG(epdata->dev, "%s fault %d len %d\n", in ep_aio_complete()
515 spin_unlock(&epdata->dev->lock); in ep_aio_complete()
542 spin_lock_irq(&epdata->dev->lock); in ep_aio()
562 spin_unlock_irq(&epdata->dev->lock); in ep_aio()
566 spin_unlock_irq(&epdata->dev->lock); in ep_aio()
592 DBG (epdata->dev, "%s halt\n", epdata->name); in ep_read_iter()
593 spin_lock_irq(&epdata->dev->lock); in ep_read_iter()
596 spin_unlock_irq(&epdata->dev->lock); in ep_read_iter()
654 DBG (epdata->dev, "%s halt\n", epdata->name); in ep_write_iter()
655 spin_lock_irq(&epdata->dev->lock); in ep_write_iter()
658 spin_unlock_irq(&epdata->dev->lock); in ep_write_iter()
739 DBG(data->dev, "config %s, bad tag %d\n", data->name, tag); in ep_config()
762 DBG(data->dev, "config %s, bad hs length or type\n", in ep_config()
768 spin_lock_irq (&data->dev->lock); in ep_config()
769 if (data->dev->state == STATE_DEV_UNBOUND) { in ep_config()
776 switch (data->dev->gadget->speed) { in ep_config()
786 DBG(data->dev, "unconnected, %s init abandoned\n", in ep_config()
797 spin_unlock_irq (&data->dev->lock); in ep_config()
817 spin_lock_irq (&data->dev->lock); in ep_open()
818 if (data->dev->state == STATE_DEV_UNBOUND) in ep_open()
825 VDEBUG (data->dev, "%s ready\n", data->name); in ep_open()
827 DBG (data->dev, "%s state %d\n", in ep_open()
829 spin_unlock_irq (&data->dev->lock); in ep_open()
843 static inline void ep0_readable (struct dev_data *dev) in ep0_readable() argument
845 wake_up (&dev->wait); in ep0_readable()
846 kill_fasync (&dev->fasync, SIGIO, POLL_IN); in ep0_readable()
851 struct dev_data *dev = ep->driver_data; in clean_req() local
853 if (req->buf != dev->rbuf) { in clean_req()
855 req->buf = dev->rbuf; in clean_req()
858 dev->setup_out_ready = 0; in clean_req()
863 struct dev_data *dev = ep->driver_data; in ep0_complete() local
868 spin_lock_irqsave(&dev->lock, flags); in ep0_complete()
869 if (!dev->setup_in) { in ep0_complete()
870 dev->setup_out_error = (req->status != 0); in ep0_complete()
871 if (!dev->setup_out_error) in ep0_complete()
873 dev->setup_out_ready = 1; in ep0_complete()
874 ep0_readable (dev); in ep0_complete()
878 if (free && req->buf != &dev->rbuf) in ep0_complete()
881 spin_unlock_irqrestore(&dev->lock, flags); in ep0_complete()
886 struct dev_data *dev = ep->driver_data; in setup_req() local
888 if (dev->setup_out_ready) { in setup_req()
889 DBG (dev, "ep0 request busy!\n"); in setup_req()
892 if (len > sizeof (dev->rbuf)) in setup_req()
895 req->buf = dev->rbuf; in setup_req()
907 struct dev_data *dev = fd->private_data; in ep0_read() local
911 spin_lock_irq (&dev->lock); in ep0_read()
912 if (dev->state <= STATE_DEV_OPENED) { in ep0_read()
918 if (dev->setup_abort) { in ep0_read()
919 dev->setup_abort = 0; in ep0_read()
925 if ((state = dev->state) == STATE_DEV_SETUP) { in ep0_read()
927 if (dev->setup_in) { /* stall IN */ in ep0_read()
928 VDEBUG(dev, "ep0in stall\n"); in ep0_read()
929 (void) usb_ep_set_halt (dev->gadget->ep0); in ep0_read()
931 dev->state = STATE_DEV_CONNECTED; in ep0_read()
934 struct usb_ep *ep = dev->gadget->ep0; in ep0_read()
935 struct usb_request *req = dev->req; in ep0_read()
939 dev->state = STATE_DEV_CONNECTED; in ep0_read()
942 if (dev->current_config) { in ep0_read()
945 if (gadget_is_dualspeed(dev->gadget) in ep0_read()
946 && (dev->gadget->speed in ep0_read()
948 power = dev->hs_config->bMaxPower; in ep0_read()
950 power = dev->config->bMaxPower; in ep0_read()
951 usb_gadget_vbus_draw(dev->gadget, 2 * power); in ep0_read()
956 && !dev->setup_out_ready) { in ep0_read()
960 spin_unlock_irq (&dev->lock); in ep0_read()
961 retval = wait_event_interruptible (dev->wait, in ep0_read()
962 dev->setup_out_ready != 0); in ep0_read()
965 spin_lock_irq (&dev->lock); in ep0_read()
969 if (dev->state != STATE_DEV_SETUP) { in ep0_read()
973 dev->state = STATE_DEV_CONNECTED; in ep0_read()
975 if (dev->setup_out_error) in ep0_read()
978 len = min (len, (size_t)dev->req->actual); in ep0_read()
980 if (copy_to_user (buf, dev->req->buf, len)) in ep0_read()
984 clean_req (dev->gadget->ep0, dev->req); in ep0_read()
992 if (len < sizeof dev->event [0]) { in ep0_read()
997 dev->usermode_setup = 1; in ep0_read()
1001 if (dev->ev_next != 0) { in ep0_read()
1005 if (dev->ev_next < n) in ep0_read()
1006 n = dev->ev_next; in ep0_read()
1010 if (dev->event [i].type == GADGETFS_SETUP) { in ep0_read()
1011 dev->state = STATE_DEV_SETUP; in ep0_read()
1016 spin_unlock_irq (&dev->lock); in ep0_read()
1018 if (copy_to_user (buf, &dev->event, len)) in ep0_read()
1026 spin_lock_irq (&dev->lock); in ep0_read()
1027 if (dev->ev_next > n) { in ep0_read()
1028 memmove(&dev->event[0], &dev->event[n], in ep0_read()
1030 * (dev->ev_next - n)); in ep0_read()
1032 dev->ev_next -= n; in ep0_read()
1033 spin_unlock_irq (&dev->lock); in ep0_read()
1044 DBG (dev, "fail %s, state %d\n", __func__, state); in ep0_read()
1049 spin_unlock_irq (&dev->lock); in ep0_read()
1050 DBG (dev, "%s wait\n", __func__); in ep0_read()
1053 retval = wait_event_interruptible (dev->wait, in ep0_read()
1054 dev->ev_next != 0); in ep0_read()
1057 spin_lock_irq (&dev->lock); in ep0_read()
1062 spin_unlock_irq (&dev->lock); in ep0_read()
1067 next_event (struct dev_data *dev, enum usb_gadgetfs_event_type type) in next_event() argument
1075 if (dev->state == STATE_DEV_SETUP) in next_event()
1076 dev->setup_abort = 1; in next_event()
1079 dev->ev_next = 0; in next_event()
1084 for (i = 0; i != dev->ev_next; i++) { in next_event()
1085 if (dev->event [i].type != type) in next_event()
1087 DBG(dev, "discard old event[%d] %d\n", i, type); in next_event()
1088 dev->ev_next--; in next_event()
1089 if (i == dev->ev_next) in next_event()
1092 memmove (&dev->event [i], &dev->event [i + 1], in next_event()
1094 * (dev->ev_next - i)); in next_event()
1100 VDEBUG(dev, "event[%d] = %d\n", dev->ev_next, type); in next_event()
1101 event = &dev->event [dev->ev_next++]; in next_event()
1102 BUG_ON (dev->ev_next > N_EVENT); in next_event()
1111 struct dev_data *dev = fd->private_data; in ep0_write() local
1115 if (dev->setup_abort) { in ep0_write()
1116 dev->setup_abort = 0; in ep0_write()
1120 } else if (dev->state == STATE_DEV_SETUP) { in ep0_write()
1123 if (dev->setup_in) { in ep0_write()
1124 retval = setup_req (dev->gadget->ep0, dev->req, len); in ep0_write()
1126 dev->state = STATE_DEV_CONNECTED; in ep0_write()
1127 spin_unlock_irq (&dev->lock); in ep0_write()
1128 if (copy_from_user (dev->req->buf, buf, len)) in ep0_write()
1131 if (len < dev->setup_wLength) in ep0_write()
1132 dev->req->zero = 1; in ep0_write()
1134 dev->gadget->ep0, dev->req, in ep0_write()
1138 spin_lock_irq (&dev->lock); in ep0_write()
1139 clean_req (dev->gadget->ep0, dev->req); in ep0_write()
1140 spin_unlock_irq (&dev->lock); in ep0_write()
1148 } else if (dev->setup_can_stall) { in ep0_write()
1149 VDEBUG(dev, "ep0out stall\n"); in ep0_write()
1150 (void) usb_ep_set_halt (dev->gadget->ep0); in ep0_write()
1152 dev->state = STATE_DEV_CONNECTED; in ep0_write()
1154 DBG(dev, "bogus ep0out stall!\n"); in ep0_write()
1157 DBG (dev, "fail %s, state %d\n", __func__, dev->state); in ep0_write()
1165 struct dev_data *dev = fd->private_data; in ep0_fasync() local
1167 VDEBUG (dev, "%s %s\n", __func__, on ? "on" : "off"); in ep0_fasync()
1168 return fasync_helper (f, fd, on, &dev->fasync); in ep0_fasync()
1176 struct dev_data *dev = fd->private_data; in dev_release() local
1187 kfree (dev->buf); in dev_release()
1188 dev->buf = NULL; in dev_release()
1191 spin_lock_irq(&dev->lock); in dev_release()
1192 dev->state = STATE_DEV_DISABLED; in dev_release()
1193 spin_unlock_irq(&dev->lock); in dev_release()
1195 put_dev (dev); in dev_release()
1202 struct dev_data *dev = fd->private_data; in ep0_poll() local
1205 if (dev->state <= STATE_DEV_OPENED) in ep0_poll()
1208 poll_wait(fd, &dev->wait, wait); in ep0_poll()
1210 spin_lock_irq (&dev->lock); in ep0_poll()
1213 if (dev->setup_abort) { in ep0_poll()
1214 dev->setup_abort = 0; in ep0_poll()
1219 if (dev->state == STATE_DEV_SETUP) { in ep0_poll()
1220 if (dev->setup_in || dev->setup_can_stall) in ep0_poll()
1223 if (dev->ev_next != 0) in ep0_poll()
1227 spin_unlock_irq(&dev->lock); in ep0_poll()
1233 struct dev_data *dev = fd->private_data; in dev_ioctl() local
1234 struct usb_gadget *gadget = dev->gadget; in dev_ioctl()
1251 static void make_qualifier (struct dev_data *dev) in make_qualifier() argument
1260 desc = dev->dev; in make_qualifier()
1266 qual.bMaxPacketSize0 = dev->gadget->ep0->maxpacket; in make_qualifier()
1271 memcpy (dev->rbuf, &qual, sizeof qual); in make_qualifier()
1275 config_buf (struct dev_data *dev, u8 type, unsigned index) in config_buf() argument
1284 if (gadget_is_dualspeed(dev->gadget)) { in config_buf()
1285 hs = (dev->gadget->speed == USB_SPEED_HIGH); in config_buf()
1290 dev->req->buf = dev->hs_config; in config_buf()
1291 len = le16_to_cpu(dev->hs_config->wTotalLength); in config_buf()
1293 dev->req->buf = dev->config; in config_buf()
1294 len = le16_to_cpu(dev->config->wTotalLength); in config_buf()
1296 ((u8 *)dev->req->buf) [1] = type; in config_buf()
1303 struct dev_data *dev = get_gadget_data (gadget); in gadgetfs_setup() local
1304 struct usb_request *req = dev->req; in gadgetfs_setup()
1310 spin_lock (&dev->lock); in gadgetfs_setup()
1311 dev->setup_abort = 0; in gadgetfs_setup()
1312 if (dev->state == STATE_DEV_UNCONNECTED) { in gadgetfs_setup()
1315 && dev->hs_config == NULL) { in gadgetfs_setup()
1316 spin_unlock(&dev->lock); in gadgetfs_setup()
1317 ERROR (dev, "no high speed config??\n"); in gadgetfs_setup()
1321 dev->state = STATE_DEV_CONNECTED; in gadgetfs_setup()
1323 INFO (dev, "connected\n"); in gadgetfs_setup()
1324 event = next_event (dev, GADGETFS_CONNECT); in gadgetfs_setup()
1326 ep0_readable (dev); in gadgetfs_setup()
1333 } else if (dev->state == STATE_DEV_SETUP) in gadgetfs_setup()
1334 dev->setup_abort = 1; in gadgetfs_setup()
1336 req->buf = dev->rbuf; in gadgetfs_setup()
1347 value = min (w_length, (u16) sizeof *dev->dev); in gadgetfs_setup()
1348 dev->dev->bMaxPacketSize0 = dev->gadget->ep0->maxpacket; in gadgetfs_setup()
1349 req->buf = dev->dev; in gadgetfs_setup()
1352 if (!dev->hs_config) in gadgetfs_setup()
1356 make_qualifier (dev); in gadgetfs_setup()
1361 value = config_buf (dev, in gadgetfs_setup()
1381 dev->current_config = 0; in gadgetfs_setup()
1389 config = dev->hs_config->bConfigurationValue; in gadgetfs_setup()
1390 power = dev->hs_config->bMaxPower; in gadgetfs_setup()
1392 config = dev->config->bConfigurationValue; in gadgetfs_setup()
1393 power = dev->config->bMaxPower; in gadgetfs_setup()
1398 dev->current_config = config; in gadgetfs_setup()
1413 INFO (dev, "configuration #%d\n", dev->current_config); in gadgetfs_setup()
1415 if (dev->usermode_setup) { in gadgetfs_setup()
1416 dev->setup_can_stall = 0; in gadgetfs_setup()
1427 *(u8 *)req->buf = dev->current_config; in gadgetfs_setup()
1434 VDEBUG (dev, "%s req%02x.%02x v%04x i%04x l%d\n", in gadgetfs_setup()
1435 dev->usermode_setup ? "delegate" : "fail", in gadgetfs_setup()
1440 if (dev->usermode_setup) { in gadgetfs_setup()
1441 dev->setup_can_stall = 1; in gadgetfs_setup()
1443 dev->setup_in = (ctrl->bRequestType & USB_DIR_IN) in gadgetfs_setup()
1445 dev->setup_wLength = w_length; in gadgetfs_setup()
1446 dev->setup_out_ready = 0; in gadgetfs_setup()
1447 dev->setup_out_error = 0; in gadgetfs_setup()
1451 if (unlikely (!dev->setup_in && w_length)) { in gadgetfs_setup()
1452 value = setup_req (gadget->ep0, dev->req, in gadgetfs_setup()
1456 value = usb_ep_queue (gadget->ep0, dev->req, in gadgetfs_setup()
1459 clean_req (gadget->ep0, dev->req); in gadgetfs_setup()
1464 dev->setup_can_stall = 0; in gadgetfs_setup()
1468 event = next_event (dev, GADGETFS_SETUP); in gadgetfs_setup()
1470 ep0_readable (dev); in gadgetfs_setup()
1471 spin_unlock (&dev->lock); in gadgetfs_setup()
1477 if (value >= 0 && dev->state != STATE_DEV_SETUP) { in gadgetfs_setup()
1482 DBG (dev, "ep_queue --> %d\n", value); in gadgetfs_setup()
1488 spin_unlock (&dev->lock); in gadgetfs_setup()
1492 static void destroy_ep_files (struct dev_data *dev) in destroy_ep_files() argument
1494 DBG (dev, "%s %d\n", __func__, dev->state); in destroy_ep_files()
1497 spin_lock_irq (&dev->lock); in destroy_ep_files()
1498 while (!list_empty(&dev->epfiles)) { in destroy_ep_files()
1504 ep = list_first_entry (&dev->epfiles, struct ep_data, epfiles); in destroy_ep_files()
1519 spin_unlock_irq (&dev->lock); in destroy_ep_files()
1527 spin_lock_irq (&dev->lock); in destroy_ep_files()
1529 spin_unlock_irq (&dev->lock); in destroy_ep_files()
1537 static int activate_ep_files (struct dev_data *dev) in activate_ep_files() argument
1542 gadget_for_each_ep (ep, dev->gadget) { in activate_ep_files()
1553 data->dev = dev; in activate_ep_files()
1554 get_dev (dev); in activate_ep_files()
1563 data->dentry = gadgetfs_create_file (dev->sb, data->name, in activate_ep_files()
1567 list_add_tail (&data->epfiles, &dev->epfiles); in activate_ep_files()
1574 put_dev (dev); in activate_ep_files()
1577 DBG (dev, "%s enomem\n", __func__); in activate_ep_files()
1578 destroy_ep_files (dev); in activate_ep_files()
1585 struct dev_data *dev = get_gadget_data (gadget); in gadgetfs_unbind() local
1587 DBG (dev, "%s\n", __func__); in gadgetfs_unbind()
1589 spin_lock_irq (&dev->lock); in gadgetfs_unbind()
1590 dev->state = STATE_DEV_UNBOUND; in gadgetfs_unbind()
1591 spin_unlock_irq (&dev->lock); in gadgetfs_unbind()
1593 destroy_ep_files (dev); in gadgetfs_unbind()
1598 if (dev->req) in gadgetfs_unbind()
1599 usb_ep_free_request (gadget->ep0, dev->req); in gadgetfs_unbind()
1600 DBG (dev, "%s done\n", __func__); in gadgetfs_unbind()
1601 put_dev (dev); in gadgetfs_unbind()
1609 struct dev_data *dev = the_device; in gadgetfs_bind() local
1611 if (!dev) in gadgetfs_bind()
1619 set_gadget_data (gadget, dev); in gadgetfs_bind()
1620 dev->gadget = gadget; in gadgetfs_bind()
1621 gadget->ep0->driver_data = dev; in gadgetfs_bind()
1624 dev->req = usb_ep_alloc_request (gadget->ep0, GFP_KERNEL); in gadgetfs_bind()
1625 if (!dev->req) in gadgetfs_bind()
1627 dev->req->context = NULL; in gadgetfs_bind()
1628 dev->req->complete = epio_complete; in gadgetfs_bind()
1630 if (activate_ep_files (dev) < 0) in gadgetfs_bind()
1633 INFO (dev, "bound to %s driver\n", gadget->name); in gadgetfs_bind()
1634 spin_lock_irq(&dev->lock); in gadgetfs_bind()
1635 dev->state = STATE_DEV_UNCONNECTED; in gadgetfs_bind()
1636 spin_unlock_irq(&dev->lock); in gadgetfs_bind()
1637 get_dev (dev); in gadgetfs_bind()
1648 struct dev_data *dev = get_gadget_data (gadget); in gadgetfs_disconnect() local
1651 spin_lock_irqsave (&dev->lock, flags); in gadgetfs_disconnect()
1652 if (dev->state == STATE_DEV_UNCONNECTED) in gadgetfs_disconnect()
1654 dev->state = STATE_DEV_UNCONNECTED; in gadgetfs_disconnect()
1656 INFO (dev, "disconnected\n"); in gadgetfs_disconnect()
1657 next_event (dev, GADGETFS_DISCONNECT); in gadgetfs_disconnect()
1658 ep0_readable (dev); in gadgetfs_disconnect()
1660 spin_unlock_irqrestore (&dev->lock, flags); in gadgetfs_disconnect()
1666 struct dev_data *dev = get_gadget_data (gadget); in gadgetfs_suspend() local
1668 INFO (dev, "suspended from state %d\n", dev->state); in gadgetfs_suspend()
1669 spin_lock (&dev->lock); in gadgetfs_suspend()
1670 switch (dev->state) { in gadgetfs_suspend()
1674 next_event (dev, GADGETFS_SUSPEND); in gadgetfs_suspend()
1675 ep0_readable (dev); in gadgetfs_suspend()
1680 spin_unlock (&dev->lock); in gadgetfs_suspend()
1760 struct dev_data *dev = fd->private_data; in dev_config() local
1766 spin_lock_irq(&dev->lock); in dev_config()
1767 if (dev->state > STATE_DEV_OPENED) { in dev_config()
1769 spin_unlock_irq(&dev->lock); in dev_config()
1772 spin_unlock_irq(&dev->lock); in dev_config()
1789 spin_lock_irq (&dev->lock); in dev_config()
1791 if (dev->buf) in dev_config()
1793 dev->buf = kbuf; in dev_config()
1796 dev->config = (void *) kbuf; in dev_config()
1797 total = le16_to_cpu(dev->config->wTotalLength); in dev_config()
1798 if (!is_valid_config (dev->config) || total >= length) in dev_config()
1805 dev->hs_config = (void *) kbuf; in dev_config()
1806 total = le16_to_cpu(dev->hs_config->wTotalLength); in dev_config()
1807 if (!is_valid_config (dev->hs_config) || total >= length) in dev_config()
1818 dev->dev = (void *)kbuf; in dev_config()
1819 if (dev->dev->bLength != USB_DT_DEVICE_SIZE in dev_config()
1820 || dev->dev->bDescriptorType != USB_DT_DEVICE in dev_config()
1821 || dev->dev->bNumConfigurations != 1) in dev_config()
1823 dev->dev->bNumConfigurations = 1; in dev_config()
1824 dev->dev->bcdUSB = cpu_to_le16 (0x0200); in dev_config()
1827 spin_unlock_irq (&dev->lock); in dev_config()
1828 if (dev->hs_config) in dev_config()
1835 kfree (dev->buf); in dev_config()
1836 dev->buf = NULL; in dev_config()
1852 spin_unlock_irq (&dev->lock); in dev_config()
1853 pr_debug ("%s: %s fail %Zd, %p\n", shortname, __func__, value, dev); in dev_config()
1854 kfree (dev->buf); in dev_config()
1855 dev->buf = NULL; in dev_config()
1862 struct dev_data *dev = inode->i_private; in dev_open() local
1865 spin_lock_irq(&dev->lock); in dev_open()
1866 if (dev->state == STATE_DEV_DISABLED) { in dev_open()
1867 dev->ev_next = 0; in dev_open()
1868 dev->state = STATE_DEV_OPENED; in dev_open()
1869 fd->private_data = dev; in dev_open()
1870 get_dev (dev); in dev_open()
1873 spin_unlock_irq(&dev->lock); in dev_open()
1964 struct dev_data *dev; in gadgetfs_fill_super() local
1995 dev = dev_new (); in gadgetfs_fill_super()
1996 if (!dev) in gadgetfs_fill_super()
1999 dev->sb = sb; in gadgetfs_fill_super()
2000 dev->dentry = gadgetfs_create_file(sb, CHIP, dev, &ep0_operations); in gadgetfs_fill_super()
2001 if (!dev->dentry) { in gadgetfs_fill_super()
2002 put_dev(dev); in gadgetfs_fill_super()
2009 the_device = dev; in gadgetfs_fill_super()