Lines Matching +full:pd +full:- +full:node

1 // SPDX-License-Identifier: GPL-2.0
9 * assigned HMC drive CD/DVD-ROM. It works as follows: First create the
42 #define HMCDRV_DEV_BUSY_DELAY 500 /* delay between -EBUSY trials in ms */
43 #define HMCDRV_DEV_BUSY_RETRIES 3 /* number of retries on -EBUSY */
49 umode_t mode; /* mode of device node (unused, zero) */
85 * hmcdrv_dev_name() - provides a naming hint for a device node in /dev
87 * @mode: file mode for device node created in /dev
118 /* check for non-blocking access, which is really unsupported in hmcdrv_dev_open()
120 if (fp->f_flags & O_NONBLOCK) in hmcdrv_dev_open()
121 return -EINVAL; in hmcdrv_dev_open()
123 /* Because it makes no sense to open this device read-only (then a in hmcdrv_dev_open()
126 if ((fp->f_flags & O_ACCMODE) == O_RDONLY) in hmcdrv_dev_open()
127 return -EINVAL; in hmcdrv_dev_open()
130 * device file open - so increment the reference count here in hmcdrv_dev_open()
133 return -ENODEV; in hmcdrv_dev_open()
135 fp->private_data = NULL; /* no command yet */ in hmcdrv_dev_open()
140 pr_debug("open file '/dev/%pD' with return code %d\n", fp, rc); in hmcdrv_dev_open()
149 pr_debug("closing file '/dev/%pD'\n", fp); in hmcdrv_dev_release()
150 kfree(fp->private_data); in hmcdrv_dev_release()
151 fp->private_data = NULL; in hmcdrv_dev_release()
164 pos += fp->f_pos; /* new position stored in 'pos' */ in hmcdrv_dev_seek()
175 if (fp->private_data) { in hmcdrv_dev_seek()
176 kfree(fp->private_data); in hmcdrv_dev_seek()
177 fp->private_data = NULL; in hmcdrv_dev_seek()
183 return -EINVAL; in hmcdrv_dev_seek()
187 return -EINVAL; in hmcdrv_dev_seek()
189 fp->f_pos = pos; in hmcdrv_dev_seek()
205 if (retlen != -EBUSY) in hmcdrv_dev_transfer()
210 } while (--trials > 0); in hmcdrv_dev_transfer()
223 if (((fp->f_flags & O_ACCMODE) == O_WRONLY) || in hmcdrv_dev_read()
224 (fp->private_data == NULL)) { /* no FTP cmd defined ? */ in hmcdrv_dev_read()
225 return -EBADF; in hmcdrv_dev_read()
228 retlen = hmcdrv_dev_transfer((char *) fp->private_data, in hmcdrv_dev_read()
231 pr_debug("read from file '/dev/%pD' at %lld returns %zd/%zu\n", in hmcdrv_dev_read()
249 pr_debug("writing file '/dev/%pD' at pos. %lld with length %zd\n", in hmcdrv_dev_write()
252 if (!fp->private_data) { /* first expect a cmd write */ in hmcdrv_dev_write()
256 fp->private_data = pdata; in hmcdrv_dev_write()
260 retlen = hmcdrv_dev_transfer((char *) fp->private_data, in hmcdrv_dev_write()
265 pr_debug("write to file '/dev/%pD' returned %zd\n", fp, retlen); in hmcdrv_dev_write()
271 * hmcdrv_dev_init() - creates a HMC drive CD/DVD device
308 /* Finally a device node in /dev has to be established (as 'mkdev' in hmcdrv_dev_init()
310 * node name/mode function is optional (only for mode != 0600). in hmcdrv_dev_init()
313 hmcdrv_dev_class->devnode = hmcdrv_dev_name; in hmcdrv_dev_init()
344 * hmcdrv_dev_exit() - destroys a HMC drive CD/DVD device