Lines Matching refs:dev
39 dev_dbg(&(usb_if)->dev, format, ## arg)
42 dev_err(&(usb_if)->dev, format, ## arg)
94 static void chaoskey_free(struct chaoskey *dev) in chaoskey_free() argument
96 usb_dbg(dev->interface, "free"); in chaoskey_free()
97 kfree(dev->name); in chaoskey_free()
98 kfree(dev->buf); in chaoskey_free()
99 kfree(dev); in chaoskey_free()
109 struct chaoskey *dev; in chaoskey_probe() local
142 dev = kzalloc(sizeof(struct chaoskey), GFP_KERNEL); in chaoskey_probe()
144 if (dev == NULL) in chaoskey_probe()
147 dev->buf = kmalloc(size, GFP_KERNEL); in chaoskey_probe()
149 if (dev->buf == NULL) { in chaoskey_probe()
150 kfree(dev); in chaoskey_probe()
159 dev->name = kmalloc(strlen(udev->product) + 1 + in chaoskey_probe()
161 if (dev->name == NULL) { in chaoskey_probe()
162 kfree(dev->buf); in chaoskey_probe()
163 kfree(dev); in chaoskey_probe()
167 strcpy(dev->name, udev->product); in chaoskey_probe()
168 strcat(dev->name, "-"); in chaoskey_probe()
169 strcat(dev->name, udev->serial); in chaoskey_probe()
172 dev->interface = interface; in chaoskey_probe()
174 dev->in_ep = in_ep; in chaoskey_probe()
176 dev->size = size; in chaoskey_probe()
177 dev->present = 1; in chaoskey_probe()
179 init_waitqueue_head(&dev->wait_q); in chaoskey_probe()
181 mutex_init(&dev->lock); in chaoskey_probe()
182 mutex_init(&dev->rng_lock); in chaoskey_probe()
184 usb_set_intfdata(interface, dev); in chaoskey_probe()
190 chaoskey_free(dev); in chaoskey_probe()
194 dev->hwrng.name = dev->name ? dev->name : chaoskey_driver.name; in chaoskey_probe()
195 dev->hwrng.read = chaoskey_rng_read; in chaoskey_probe()
208 dev->hwrng.quality = 1024 + 1023; in chaoskey_probe()
210 dev->hwrng_registered = (hwrng_register(&dev->hwrng) == 0); in chaoskey_probe()
211 if (!dev->hwrng_registered) in chaoskey_probe()
216 usb_dbg(interface, "chaoskey probe success, size %d", dev->size); in chaoskey_probe()
222 struct chaoskey *dev; in chaoskey_disconnect() local
225 dev = usb_get_intfdata(interface); in chaoskey_disconnect()
226 if (!dev) { in chaoskey_disconnect()
231 if (dev->hwrng_registered) in chaoskey_disconnect()
232 hwrng_unregister(&dev->hwrng); in chaoskey_disconnect()
237 mutex_lock(&dev->lock); in chaoskey_disconnect()
239 dev->present = 0; in chaoskey_disconnect()
241 if (!dev->open) { in chaoskey_disconnect()
242 mutex_unlock(&dev->lock); in chaoskey_disconnect()
243 chaoskey_free(dev); in chaoskey_disconnect()
245 mutex_unlock(&dev->lock); in chaoskey_disconnect()
252 struct chaoskey *dev; in chaoskey_open() local
262 dev = usb_get_intfdata(interface); in chaoskey_open()
263 if (!dev) { in chaoskey_open()
268 file->private_data = dev; in chaoskey_open()
269 mutex_lock(&dev->lock); in chaoskey_open()
270 ++dev->open; in chaoskey_open()
271 mutex_unlock(&dev->lock); in chaoskey_open()
279 struct chaoskey *dev = file->private_data; in chaoskey_release() local
282 if (dev == NULL) in chaoskey_release()
285 interface = dev->interface; in chaoskey_release()
289 mutex_lock(&dev->lock); in chaoskey_release()
291 usb_dbg(interface, "open count at release is %d", dev->open); in chaoskey_release()
293 if (dev->open <= 0) { in chaoskey_release()
294 usb_dbg(interface, "invalid open count (%d)", dev->open); in chaoskey_release()
295 mutex_unlock(&dev->lock); in chaoskey_release()
299 --dev->open; in chaoskey_release()
301 if (!dev->present) { in chaoskey_release()
302 if (dev->open == 0) { in chaoskey_release()
303 mutex_unlock(&dev->lock); in chaoskey_release()
304 chaoskey_free(dev); in chaoskey_release()
306 mutex_unlock(&dev->lock); in chaoskey_release()
308 mutex_unlock(&dev->lock); in chaoskey_release()
316 static int _chaoskey_fill(struct chaoskey *dev) in _chaoskey_fill() argument
321 struct usb_device *udev = interface_to_usbdev(dev->interface); in _chaoskey_fill()
323 usb_dbg(dev->interface, "fill"); in _chaoskey_fill()
327 if (dev->valid != dev->used) { in _chaoskey_fill()
328 usb_dbg(dev->interface, "not empty yet (valid %d used %d)", in _chaoskey_fill()
329 dev->valid, dev->used); in _chaoskey_fill()
334 if (!dev->present) { in _chaoskey_fill()
335 usb_dbg(dev->interface, "device not present"); in _chaoskey_fill()
340 result = usb_autopm_get_interface(dev->interface); in _chaoskey_fill()
342 usb_dbg(dev->interface, "wakeup failed (result %d)", result); in _chaoskey_fill()
347 usb_rcvbulkpipe(udev, dev->in_ep), in _chaoskey_fill()
348 dev->buf, dev->size, &this_read, in _chaoskey_fill()
352 usb_autopm_put_interface(dev->interface); in _chaoskey_fill()
355 dev->valid = this_read; in _chaoskey_fill()
356 dev->used = 0; in _chaoskey_fill()
359 usb_dbg(dev->interface, "bulk_msg result %d this_read %d", in _chaoskey_fill()
370 struct chaoskey *dev; in chaoskey_read() local
376 dev = file->private_data; in chaoskey_read()
378 if (dev == NULL || !dev->present) in chaoskey_read()
381 usb_dbg(dev->interface, "read %zu", count); in chaoskey_read()
388 result = mutex_lock_interruptible(&dev->rng_lock); in chaoskey_read()
391 mutex_unlock(&dev->rng_lock); in chaoskey_read()
393 result = mutex_lock_interruptible(&dev->lock); in chaoskey_read()
396 if (dev->valid == dev->used) { in chaoskey_read()
397 result = _chaoskey_fill(dev); in chaoskey_read()
399 mutex_unlock(&dev->lock); in chaoskey_read()
404 if (dev->used == dev->valid) { in chaoskey_read()
405 mutex_unlock(&dev->lock); in chaoskey_read()
410 this_time = dev->valid - dev->used; in chaoskey_read()
414 remain = copy_to_user(buffer, dev->buf + dev->used, this_time); in chaoskey_read()
421 dev->used += this_time - remain; in chaoskey_read()
422 mutex_unlock(&dev->lock); in chaoskey_read()
429 dev->used += this_time; in chaoskey_read()
430 mutex_unlock(&dev->lock); in chaoskey_read()
434 usb_dbg(dev->interface, "read %zu bytes", read_count); in chaoskey_read()
437 usb_dbg(dev->interface, "empty read, result %d", result); in chaoskey_read()
444 struct chaoskey *dev = container_of(rng, struct chaoskey, hwrng); in chaoskey_rng_read() local
447 usb_dbg(dev->interface, "rng_read max %zu wait %d", max, wait); in chaoskey_rng_read()
449 if (!dev->present) { in chaoskey_rng_read()
450 usb_dbg(dev->interface, "device not present"); in chaoskey_rng_read()
458 mutex_lock(&dev->rng_lock); in chaoskey_rng_read()
460 mutex_lock(&dev->lock); in chaoskey_rng_read()
462 mutex_unlock(&dev->rng_lock); in chaoskey_rng_read()
468 if (dev->valid == dev->used) in chaoskey_rng_read()
469 (void) _chaoskey_fill(dev); in chaoskey_rng_read()
471 this_time = dev->valid - dev->used; in chaoskey_rng_read()
475 memcpy(data, dev->buf + dev->used, this_time); in chaoskey_rng_read()
477 dev->used += this_time; in chaoskey_rng_read()
479 mutex_unlock(&dev->lock); in chaoskey_rng_read()
481 usb_dbg(dev->interface, "rng_read this_time %d\n", this_time); in chaoskey_rng_read()