• Home
  • Raw
  • Download

Lines Matching refs:mdev

139 	struct maple_device *mdev;  in maple_release_device()  local
142 mdev = to_maple_dev(dev); in maple_release_device()
143 mq = mdev->mq; in maple_release_device()
146 kfree(mdev); in maple_release_device()
157 int maple_add_packet(struct maple_device *mdev, u32 function, u32 command, in maple_add_packet() argument
172 mdev->mq->command = command; in maple_add_packet()
173 mdev->mq->length = length; in maple_add_packet()
176 mdev->mq->sendbuf = sendbuf; in maple_add_packet()
179 list_add_tail(&mdev->mq->list, &maple_waitq); in maple_add_packet()
186 static struct mapleq *maple_allocq(struct maple_device *mdev) in maple_allocq() argument
195 mq->dev = mdev; in maple_allocq()
206 dev_err(&mdev->dev, "could not allocate memory for device (%d, %d)\n", in maple_allocq()
207 mdev->port, mdev->unit); in maple_allocq()
213 struct maple_device *mdev; in maple_alloc_dev() local
218 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); in maple_alloc_dev()
219 if (!mdev) in maple_alloc_dev()
222 mdev->port = port; in maple_alloc_dev()
223 mdev->unit = unit; in maple_alloc_dev()
225 mdev->mq = maple_allocq(mdev); in maple_alloc_dev()
227 if (!mdev->mq) { in maple_alloc_dev()
228 kfree(mdev); in maple_alloc_dev()
231 mdev->dev.bus = &maple_bus_type; in maple_alloc_dev()
232 mdev->dev.parent = &maple_bus; in maple_alloc_dev()
233 init_waitqueue_head(&mdev->maple_wait); in maple_alloc_dev()
234 return mdev; in maple_alloc_dev()
237 static void maple_free_dev(struct maple_device *mdev) in maple_free_dev() argument
239 kmem_cache_free(maple_queue_cache, mdev->mq->recvbuf); in maple_free_dev()
240 kfree(mdev->mq); in maple_free_dev()
241 kfree(mdev); in maple_free_dev()
316 struct maple_device *mdev; in maple_check_matching_driver() local
318 mdev = devptr; in maple_check_matching_driver()
320 if (mdev->devinfo.function & cpu_to_be32(maple_drv->function)) in maple_check_matching_driver()
325 static void maple_detach_driver(struct maple_device *mdev) in maple_detach_driver() argument
327 device_unregister(&mdev->dev); in maple_detach_driver()
331 static void maple_attach_driver(struct maple_device *mdev) in maple_attach_driver() argument
337 recvbuf = mdev->mq->recvbuf->buf; in maple_attach_driver()
340 memcpy(&mdev->devinfo.function, recvbuf + 4, 4); in maple_attach_driver()
341 memcpy(&mdev->devinfo.function_data[0], recvbuf + 8, 12); in maple_attach_driver()
342 memcpy(&mdev->devinfo.area_code, recvbuf + 20, 1); in maple_attach_driver()
343 memcpy(&mdev->devinfo.connector_direction, recvbuf + 21, 1); in maple_attach_driver()
344 memcpy(&mdev->devinfo.product_name[0], recvbuf + 22, 30); in maple_attach_driver()
345 memcpy(&mdev->devinfo.standby_power, recvbuf + 112, 2); in maple_attach_driver()
346 memcpy(&mdev->devinfo.max_power, recvbuf + 114, 2); in maple_attach_driver()
347 memcpy(mdev->product_name, mdev->devinfo.product_name, 30); in maple_attach_driver()
348 mdev->product_name[30] = '\0'; in maple_attach_driver()
349 memcpy(mdev->product_licence, mdev->devinfo.product_licence, 60); in maple_attach_driver()
350 mdev->product_licence[60] = '\0'; in maple_attach_driver()
352 for (p = mdev->product_name + 29; mdev->product_name <= p; p--) in maple_attach_driver()
357 for (p = mdev->product_licence + 59; mdev->product_licence <= p; p--) in maple_attach_driver()
363 function = be32_to_cpu(mdev->devinfo.function); in maple_attach_driver()
365 dev_info(&mdev->dev, "detected %s: function 0x%lX: at (%d, %d)\n", in maple_attach_driver()
366 mdev->product_name, function, mdev->port, mdev->unit); in maple_attach_driver()
371 mdev->driver = &maple_unsupported_device; in maple_attach_driver()
372 dev_set_name(&mdev->dev, "%d:0.port", mdev->port); in maple_attach_driver()
375 bus_for_each_drv(&maple_bus_type, NULL, mdev, in maple_attach_driver()
380 dev_info(&mdev->dev, "no driver found\n"); in maple_attach_driver()
381 mdev->driver = &maple_unsupported_device; in maple_attach_driver()
383 dev_set_name(&mdev->dev, "%d:0%d.%lX", mdev->port, in maple_attach_driver()
384 mdev->unit, function); in maple_attach_driver()
387 mdev->function = function; in maple_attach_driver()
388 mdev->dev.release = &maple_release_device; in maple_attach_driver()
390 atomic_set(&mdev->busy, 0); in maple_attach_driver()
391 error = device_register(&mdev->dev); in maple_attach_driver()
393 dev_warn(&mdev->dev, "could not register device at" in maple_attach_driver()
394 " (%d, %d), with error 0x%X\n", mdev->unit, in maple_attach_driver()
395 mdev->port, error); in maple_attach_driver()
396 maple_free_dev(mdev); in maple_attach_driver()
397 mdev = NULL; in maple_attach_driver()
410 struct maple_device *mdev; in check_maple_device() local
413 mdev = to_maple_dev(device); in check_maple_device()
414 if (mdev->port == ds->port && mdev->unit == ds->unit) in check_maple_device()
422 struct maple_device *mdev = to_maple_dev(device); in setup_maple_commands() local
423 if (mdev->interval > 0 && atomic_read(&mdev->busy) == 0 && in setup_maple_commands()
424 time_after(jiffies, mdev->when)) { in setup_maple_commands()
426 add = maple_add_packet(mdev, in setup_maple_commands()
427 be32_to_cpu(mdev->devinfo.function), in setup_maple_commands()
430 mdev->when = jiffies + mdev->interval; in setup_maple_commands()
436 if (atomic_read(&mdev->busy) == 0) { in setup_maple_commands()
437 atomic_set(&mdev->busy, 1); in setup_maple_commands()
438 maple_add_packet(mdev, 0, in setup_maple_commands()
449 struct maple_device *mdev; in maple_vblank_handler() local
473 mdev = baseunits[x]; in maple_vblank_handler()
474 if (!mdev) in maple_vblank_handler()
476 atomic_set(&mdev->busy, 1); in maple_vblank_handler()
477 locking = maple_add_packet(mdev, 0, in maple_vblank_handler()
492 static void maple_map_subunits(struct maple_device *mdev, int submask) in maple_map_subunits() argument
498 ds.port = mdev->port; in maple_map_subunits()
510 mdev_add = maple_alloc_dev(mdev->port, k + 1); in maple_map_subunits()
524 static void maple_clean_submap(struct maple_device *mdev) in maple_clean_submap() argument
528 killbit = (mdev->unit > 0 ? (1 << (mdev->unit - 1)) & 0x1f : 0x20); in maple_clean_submap()
531 subdevice_map[mdev->port] = subdevice_map[mdev->port] & killbit; in maple_clean_submap()
535 static void maple_response_none(struct maple_device *mdev) in maple_response_none() argument
537 maple_clean_submap(mdev); in maple_response_none()
539 if (likely(mdev->unit != 0)) { in maple_response_none()
549 if (mdev->can_unload) { in maple_response_none()
550 if (!mdev->can_unload(mdev)) { in maple_response_none()
551 atomic_set(&mdev->busy, 2); in maple_response_none()
552 wake_up(&mdev->maple_wait); in maple_response_none()
557 dev_info(&mdev->dev, "detaching device at (%d, %d)\n", in maple_response_none()
558 mdev->port, mdev->unit); in maple_response_none()
559 maple_detach_driver(mdev); in maple_response_none()
563 if (checked[mdev->port] == false) { in maple_response_none()
564 checked[mdev->port] = true; in maple_response_none()
565 empty[mdev->port] = true; in maple_response_none()
566 dev_info(&mdev->dev, "no devices" in maple_response_none()
567 " to port %d\n", mdev->port); in maple_response_none()
573 atomic_set(&mdev->busy, 0); in maple_response_none()
577 static void maple_response_devinfo(struct maple_device *mdev, in maple_response_devinfo() argument
582 if ((mdev->unit == 0) && (checked[mdev->port] == false)) { in maple_response_devinfo()
583 checked[mdev->port] = true; in maple_response_devinfo()
584 maple_attach_driver(mdev); in maple_response_devinfo()
586 if (mdev->unit != 0) in maple_response_devinfo()
587 maple_attach_driver(mdev); in maple_response_devinfo()
588 if (mdev->unit == 0) { in maple_response_devinfo()
589 empty[mdev->port] = false; in maple_response_devinfo()
590 maple_attach_driver(mdev); in maple_response_devinfo()
594 if (mdev->unit == 0) { in maple_response_devinfo()
596 if (submask ^ subdevice_map[mdev->port]) { in maple_response_devinfo()
597 maple_map_subunits(mdev, submask); in maple_response_devinfo()
598 subdevice_map[mdev->port] = submask; in maple_response_devinfo()
603 static void maple_response_fileerr(struct maple_device *mdev, void *recvbuf) in maple_response_fileerr() argument
605 if (mdev->fileerr_handler) { in maple_response_fileerr()
606 mdev->fileerr_handler(mdev, recvbuf); in maple_response_fileerr()
609 dev_warn(&mdev->dev, "device at (%d, %d) reports" in maple_response_fileerr()
610 "file error 0x%X\n", mdev->port, mdev->unit, in maple_response_fileerr()
617 struct maple_device *mdev; in maple_port_rescan() local
623 mdev = baseunits[i]; in maple_port_rescan()
624 maple_add_packet(mdev, 0, MAPLE_COMMAND_DEVINFO, in maple_port_rescan()
634 struct maple_device *mdev; in maple_dma_handler() local
643 mdev = mq->dev; in maple_dma_handler()
645 dma_cache_sync(&mdev->dev, recvbuf, 0x400, in maple_dma_handler()
652 maple_response_none(mdev); in maple_dma_handler()
656 maple_response_devinfo(mdev, recvbuf); in maple_dma_handler()
657 atomic_set(&mdev->busy, 0); in maple_dma_handler()
661 if (mdev->callback) in maple_dma_handler()
662 mdev->callback(mq); in maple_dma_handler()
663 atomic_set(&mdev->busy, 0); in maple_dma_handler()
664 wake_up(&mdev->maple_wait); in maple_dma_handler()
668 maple_response_fileerr(mdev, recvbuf); in maple_dma_handler()
669 atomic_set(&mdev->busy, 0); in maple_dma_handler()
670 wake_up(&mdev->maple_wait); in maple_dma_handler()
676 dev_warn(&mdev->dev, "non-fatal error" in maple_dma_handler()
678 mdev->port, mdev->unit); in maple_dma_handler()
679 atomic_set(&mdev->busy, 0); in maple_dma_handler()
683 dev_notice(&mdev->dev, "extended" in maple_dma_handler()
685 " but call is not supported\n", mdev->port, in maple_dma_handler()
686 mdev->unit); in maple_dma_handler()
687 atomic_set(&mdev->busy, 0); in maple_dma_handler()
691 atomic_set(&mdev->busy, 0); in maple_dma_handler()
692 wake_up(&mdev->maple_wait); in maple_dma_handler()
798 struct maple_device *mdev[MAPLE_PORTS]; in maple_bus_init() local
848 mdev[i] = maple_alloc_dev(i, 0); in maple_bus_init()
849 if (!mdev[i]) { in maple_bus_init()
851 maple_free_dev(mdev[i]); in maple_bus_init()
854 baseunits[i] = mdev[i]; in maple_bus_init()
855 atomic_set(&mdev[i]->busy, 1); in maple_bus_init()
856 maple_add_packet(mdev[i], 0, MAPLE_COMMAND_DEVINFO, 0, NULL); in maple_bus_init()