• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/char/

Lines Matching defs:portdev

153 	struct ports_device *portdev;
224 static struct port *find_port_by_id(struct ports_device *portdev, u32 id)
229 spin_lock_irqsave(&portdev->ports_lock, flags);
230 list_for_each_entry(port, &portdev->ports, list)
235 spin_unlock_irqrestore(&portdev->ports_lock, flags);
240 static struct port *find_port_by_vq(struct ports_device *portdev,
246 spin_lock_irqsave(&portdev->ports_lock, flags);
247 list_for_each_entry(port, &portdev->ports, list)
252 spin_unlock_irqrestore(&portdev->ports_lock, flags);
263 static inline bool use_multiport(struct ports_device *portdev)
269 if (!portdev->vdev)
271 return portdev->vdev->features[0] & (1 << VIRTIO_CONSOLE_F_MULTIPORT);
384 static ssize_t __send_control_msg(struct ports_device *portdev, u32 port_id,
392 if (!use_multiport(portdev))
399 vq = portdev->c_ovq;
413 return __send_control_msg(port->portdev, port->id, event, value);
803 vdev = port->portdev->vdev;
1004 static int add_port(struct ports_device *portdev, u32 id)
1019 port->portdev = portdev;
1032 port->in_vq = portdev->in_vqs[port->id];
1033 port->out_vq = portdev->out_vqs[port->id];
1037 devt = MKDEV(portdev->chr_major, id);
1040 dev_err(&port->portdev->vdev->dev,
1044 port->dev = device_create(pdrvdata.class, &port->portdev->vdev->dev,
1046 port->portdev->drv_index, id);
1049 dev_err(&port->portdev->vdev->dev,
1070 if (!use_multiport(port->portdev)) {
1076 spin_lock_irq(&portdev->ports_lock);
1077 list_add_tail(&port->list, &port->portdev->ports);
1078 spin_unlock_irq(&portdev->ports_lock);
1093 port->portdev->drv_index, id);
1112 __send_control_msg(portdev, id, VIRTIO_CONSOLE_PORT_READY, 0);
1128 spin_lock_irq(&port->portdev->ports_lock);
1130 spin_unlock_irq(&port->portdev->ports_lock);
1159 static void handle_control_message(struct ports_device *portdev,
1169 port = find_port_by_id(portdev, cpkt->id);
1172 dev_dbg(&portdev->vdev->dev,
1180 dev_dbg(&portdev->vdev->dev,
1185 if (cpkt->id >= portdev->config.max_nr_ports) {
1186 dev_warn(&portdev->vdev->dev,
1188 cpkt->id, portdev->config.max_nr_ports - 1);
1191 add_port(portdev, cpkt->id);
1278 struct ports_device *portdev;
1283 portdev = container_of(work, struct ports_device, control_work);
1284 vq = portdev->c_ivq;
1286 spin_lock(&portdev->cvq_lock);
1288 spin_unlock(&portdev->cvq_lock);
1293 handle_control_message(portdev, buf);
1295 spin_lock(&portdev->cvq_lock);
1296 if (add_inbuf(portdev->c_ivq, buf) < 0) {
1297 dev_warn(&portdev->vdev->dev,
1302 spin_unlock(&portdev->cvq_lock);
1349 struct ports_device *portdev;
1351 portdev = vq->vdev->priv;
1352 schedule_work(&portdev->control_work);
1357 struct ports_device *portdev;
1359 portdev = vdev->priv;
1361 if (!use_multiport(portdev)) {
1372 port = find_port_by_id(portdev, 0);
1386 static int init_vqs(struct ports_device *portdev)
1394 nr_ports = portdev->config.max_nr_ports;
1395 nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2;
1412 portdev->in_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *),
1414 if (!portdev->in_vqs) {
1418 portdev->out_vqs = kmalloc(nr_ports * sizeof(struct virtqueue *),
1420 if (!portdev->out_vqs) {
1437 if (use_multiport(portdev)) {
1452 err = portdev->vdev->config->find_vqs(portdev->vdev, nr_queues, vqs,
1459 portdev->in_vqs[0] = vqs[0];
1460 portdev->out_vqs[0] = vqs[1];
1462 if (use_multiport(portdev)) {
1463 portdev->c_ivq = vqs[j];
1464 portdev->c_ovq = vqs[j + 1];
1468 portdev->in_vqs[i] = vqs[j];
1469 portdev->out_vqs[i] = vqs[j + 1];
1483 kfree(portdev->out_vqs);
1485 kfree(portdev->in_vqs);
1506 struct ports_device *portdev;
1510 portdev = kmalloc(sizeof(*portdev), GFP_KERNEL);
1511 if (!portdev) {
1516 /* Attach this portdev to this virtio_device, and vice-versa. */
1517 portdev->vdev = vdev;
1518 vdev->priv = portdev;
1521 portdev->drv_index = pdrvdata.index++;
1524 portdev->chr_major = register_chrdev(0, "virtio-portsdev",
1526 if (portdev->chr_major < 0) {
1529 portdev->chr_major, portdev->drv_index);
1530 err = portdev->chr_major;
1535 portdev->config.max_nr_ports = 1;
1542 &portdev->config.max_nr_ports,
1543 sizeof(portdev->config.max_nr_ports));
1549 err = init_vqs(portdev);
1555 spin_lock_init(&portdev->ports_lock);
1556 INIT_LIST_HEAD(&portdev->ports);
1561 spin_lock_init(&portdev->cvq_lock);
1562 INIT_WORK(&portdev->control_work, &control_work_handler);
1564 nr_added_bufs = fill_queue(portdev->c_ivq, &portdev->cvq_lock);
1576 add_port(portdev, 0);
1579 __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
1585 __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
1588 kfree(portdev->in_vqs);
1589 kfree(portdev->out_vqs);
1591 unregister_chrdev(portdev->chr_major, "virtio-portsdev");
1593 kfree(portdev);
1600 struct ports_device *portdev;
1605 portdev = vdev->priv;
1607 cancel_work_sync(&portdev->control_work);
1609 list_for_each_entry_safe(port, port2, &portdev->ports, list)
1612 unregister_chrdev(portdev->chr_major, "virtio-portsdev");
1614 while ((buf = virtqueue_get_buf(portdev->c_ivq, &len)))
1617 while ((buf = virtqueue_detach_unused_buf(portdev->c_ivq)))
1621 kfree(portdev->in_vqs);
1622 kfree(portdev->out_vqs);
1624 kfree(portdev);