lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 23 Oct 2014 13:47:51 +0100 From: Ian Abbott <abbotti@....co.uk> To: <driverdev-devel@...uxdriverproject.org> Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Ian Abbott <abbotti@....co.uk>, H Hartley Sweeten <hartleys@...ionengravers.com>, <linux-kernel@...r.kernel.org> Subject: [PATCH] staging: comedi: introduce some sample size manipulation functions Introduce a few static inline helper functions: `comedi_bytes_per_sample(s)` is the same as the existing `bytes_per_sample(s)` and determines the size of a comedi sample in bytes. (`bytes_per_sample(s)` will be removed.) `comedi_sample_shift(s)` determines the log2 of the comedi sample size, so it can be used in bit-shift operations to multiply or divide by the sample size. `comedi_bytes_to_samples(s, nbytes)` converts a number of bytes to a number of samples (rounding down). `comedi_samples_to_bytes(s, nsamples)` converts a number of samples to a number of bytes. Signed-off-by: Ian Abbott <abbotti@....co.uk> --- drivers/staging/comedi/comedidev.h | 63 +++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 1b2bbd5..69cf6fe 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -391,12 +391,67 @@ static inline unsigned int comedi_offset_munge(struct comedi_subdevice *s, return val ^ s->maxdata ^ (s->maxdata >> 1); } -static inline unsigned int bytes_per_sample(const struct comedi_subdevice *subd) +/** + * comedi_bytes_per_sample - determine subdevice sample size + * @s: comedi_subdevice struct + * + * The sample size will be 4 (sizeof int) or 2 (sizeof short) depending on + * whether the SDF_LSAMPL subdevice flag is set or not. + * + * Returns the subdevice sample size. + */ +static inline unsigned int comedi_bytes_per_sample(struct comedi_subdevice *s) { - if (subd->subdev_flags & SDF_LSAMPL) - return sizeof(unsigned int); + return s->subdev_flags & SDF_LSAMPL ? sizeof(int) : sizeof(short); +} - return sizeof(short); +/* to be removed */ +static inline unsigned int bytes_per_sample(struct comedi_subdevice *s) +{ + return comedi_bytes_per_sample(s); +} + +/** + * comedi_sample_shift - determine log2 of subdevice sample size + * @s: comedi_subdevice struct + * + * The sample size will be 4 (sizeof int) or 2 (sizeof short) depending on + * whether the SDF_LSAMPL subdevice flag is set or not. The log2 of the + * sample size will be 2 or 1 and can be used as the right operand of a + * bit-shift operator to multiply or divide something by the sample size. + * + * Returns log2 of the subdevice sample size. + */ +static inline unsigned int comedi_sample_shift(struct comedi_subdevice *s) +{ + return s->subdev_flags & SDF_LSAMPL ? 2 : 1; +} + +/** + * comedi_bytes_to_samples - converts a number of bytes to a number of samples + * @s: comedi_subdevice struct + * @nbytes: number of bytes + * + * Returns the number of bytes divided by the subdevice sample size. + */ +static inline unsigned int comedi_bytes_to_samples(struct comedi_subdevice *s, + unsigned int nbytes) +{ + return nbytes >> comedi_sample_shift(s); +} + +/** + * comedi_samples_to_bytes - converts a number of samples to a number of bytes + * @s: comedi_subdevice struct + * @nsamples: number of samples + * + * Returns the number of samples multiplied by the subdevice sample size. + * Does not check for arithmetic overflow. + */ +static inline unsigned int comedi_samples_to_bytes(struct comedi_subdevice *s, + unsigned int nsamples) +{ + return nsamples << comedi_sample_shift(s); } /* -- 2.1.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists