static int option_startup(struct usb_serial *serial) { int i, err; struct usb_serial_port *port; struct option_port_private *portdata; dbg("%s", __FUNCTION__); /* Now setup per port private data */ for (i = 0; i < serial->num_ports; i++) { port = serial->port[i]; portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); if (!portdata) { dbg("%s: kmalloc for option_port_private (%d) failed!.", __FUNCTION__, i); return (1); } usb_set_serial_port_data(port, portdata); if (! port->interrupt_in_urb) continue; err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); if (err) dbg("%s: submit irq_in urb failed %d", __FUNCTION__, err); } option_setup_urbs(serial); return (0); }
static int option_startup(struct usb_serial *serial) { int i, j, err; struct usb_serial_port *port; struct option_port_private *portdata; u8 *buffer; dbg("%s", __func__); /* Now setup per port private data */ for (i = 0; i < serial->num_ports; i++) { port = serial->port[i]; portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); if (!portdata) { dbg("%s: kmalloc for option_port_private (%d) failed!.", __func__, i); return (1); } for (j = 0; j < N_IN_URB; j++) { buffer = (u8 *)__get_free_page(GFP_KERNEL); if (!buffer) goto bail_out_error; portdata->in_buffer[j] = buffer; } for (j = 0; j < N_OUT_URB; j++) { buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL); if (!buffer) goto bail_out_error2; portdata->out_buffer[j] = buffer; } usb_set_serial_port_data(port, portdata); if (! port->interrupt_in_urb) continue; err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); if (err) dbg("%s: submit irq_in urb failed %d", __func__, err); } option_setup_urbs(serial); return (0); bail_out_error2: for (j = 0; j < N_OUT_URB; j++) kfree(portdata->out_buffer[j]); bail_out_error: for (j = 0; j < N_IN_URB; j++) if (portdata->in_buffer[j]) free_page((unsigned long)portdata->in_buffer[j]); kfree(portdata); return 1; }