110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_deviceio.h
310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Reading from a special device
410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors
610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING
710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon
910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie
1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef OP_DEVICEIO_H
1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_DEVICEIO_H
1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus
1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectextern "C" {
1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_types.h"
2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include <unistd.h>
2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_open_device - open a special char device for reading
2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param name  file name of device file
2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Open the special file name. Returns the file descriptor
2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * for the file or -1 on error.
2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectfd_t op_open_device(char const * name);
3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * op_read_device - read from a special char device
3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param devfd  file descriptor of device
3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param buf  buffer
3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @param size  size of buffer
3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Read size bytes from a device into buffer buf.
3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * A seek to the start of the device file is done first
4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * then a read is requested in one go of size bytes.
4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * It is the caller's responsibility to do further op_read_device()
4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * calls if the number of bytes read is not what is requested
4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * (where this is applicable).
4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * The number of bytes read is returned, or a negative number
4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * on failure (in which case errno will be set). If the call is
4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * interrupted, then errno will be EINTR, and the client should
4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * arrange for re-starting the read if necessary.
5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectssize_t op_read_device(fd_t devfd, void * buf, size_t size);
5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifdef __cplusplus
5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project}
5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif
5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* OP_DEVICEIO_H */
58