mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-18 18:59:44 +00:00
8729b1ae2c
At present these functions return 0 on success. For some devices we want to know how many bytes were transferred. It seems useful to adjust the API to be more like the POSIX read() and write() functions. Update these two methods, a test and all users. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Patrick Delaunay <patrick.delaunay@st.com>
144 lines
4.8 KiB
C
144 lines
4.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw>
|
|
*/
|
|
|
|
#ifndef _MISC_H_
|
|
#define _MISC_H_
|
|
|
|
/**
|
|
* misc_read() - Read the device to buffer, optional.
|
|
* @dev: the device
|
|
* @offset: offset to read the device
|
|
* @buf: pointer to data buffer
|
|
* @size: data size in bytes to read the device
|
|
*
|
|
* Return: number of bytes read if OK (may be 0 if EOF), -ve on error
|
|
*/
|
|
int misc_read(struct udevice *dev, int offset, void *buf, int size);
|
|
|
|
/**
|
|
* misc_write() - Write buffer to the device, optional.
|
|
* @dev: the device
|
|
* @offset: offset to write the device
|
|
* @buf: pointer to data buffer
|
|
* @size: data size in bytes to write the device
|
|
*
|
|
* Return: number of bytes written if OK (may be < @size), -ve on error
|
|
*/
|
|
int misc_write(struct udevice *dev, int offset, void *buf, int size);
|
|
|
|
/**
|
|
* misc_ioctl() - Assert command to the device, optional.
|
|
* @dev: the device
|
|
* @request: command to be sent to the device
|
|
* @buf: pointer to buffer related to the request
|
|
*
|
|
* Return: 0 if OK, -ve on error
|
|
*/
|
|
int misc_ioctl(struct udevice *dev, unsigned long request, void *buf);
|
|
|
|
/**
|
|
* misc_call() - Send a message to the device and wait for a response.
|
|
* @dev: the device.
|
|
* @msgid: the message ID/number to send.
|
|
* @tx_msg: the request/transmit message payload.
|
|
* @tx_size: the size of the buffer pointed at by tx_msg.
|
|
* @rx_msg: the buffer to receive the response message payload. May be NULL if
|
|
* the caller only cares about the error code.
|
|
* @rx_size: the size of the buffer pointed at by rx_msg.
|
|
*
|
|
* The caller provides the message type/ID and payload to be sent.
|
|
* The callee constructs any message header required, transmits it to the
|
|
* target, waits for a response, checks any error code in the response,
|
|
* strips any message header from the response, and returns the error code
|
|
* (or a parsed version of it) and the response message payload.
|
|
*
|
|
* Return: the response message size if OK, -ve on error
|
|
*/
|
|
int misc_call(struct udevice *dev, int msgid, void *tx_msg, int tx_size,
|
|
void *rx_msg, int rx_size);
|
|
|
|
/**
|
|
* misc_set_enabled() - Enable or disable a device.
|
|
* @dev: the device to enable or disable.
|
|
* @val: the flag that tells the driver to either enable or disable the device.
|
|
*
|
|
* The semantics of "disable" and "enable" should be understood here as
|
|
* activating or deactivating the device's primary function, hence a "disabled"
|
|
* device should be dormant, but still answer to commands and queries.
|
|
*
|
|
* A probed device may start in a disabled or enabled state, depending on the
|
|
* driver and hardware.
|
|
*
|
|
* Return: -ve on error, 0 if the previous state was "disabled", 1 if the
|
|
* previous state was "enabled"
|
|
*/
|
|
int misc_set_enabled(struct udevice *dev, bool val);
|
|
|
|
/*
|
|
* struct misc_ops - Driver model Misc operations
|
|
*
|
|
* The uclass interface is implemented by all miscellaneous devices which
|
|
* use driver model.
|
|
*/
|
|
struct misc_ops {
|
|
/**
|
|
* Read the device to buffer, optional.
|
|
* @dev: the device
|
|
* @offset: offset to read the device
|
|
* @buf: pointer to data buffer
|
|
* @size: data size in bytes to read the device
|
|
*
|
|
* Return: number of bytes read if OK (may be 0 if EOF), -ve on error
|
|
*/
|
|
int (*read)(struct udevice *dev, int offset, void *buf, int size);
|
|
|
|
/**
|
|
* Write buffer to the device, optional.
|
|
* @dev: the device
|
|
* @offset: offset to write the device
|
|
* @buf: pointer to data buffer
|
|
* @size: data size in bytes to write the device
|
|
*
|
|
* Return: number of bytes written if OK (may be < @size), -ve on error
|
|
*/
|
|
int (*write)(struct udevice *dev, int offset, const void *buf,
|
|
int size);
|
|
/**
|
|
* Assert command to the device, optional.
|
|
* @dev: the device
|
|
* @request: command to be sent to the device
|
|
* @buf: pointer to buffer related to the request
|
|
*
|
|
* Return: 0 if OK, -ve on error
|
|
*/
|
|
int (*ioctl)(struct udevice *dev, unsigned long request, void *buf);
|
|
|
|
/**
|
|
* Send a message to the device and wait for a response.
|
|
* @dev: the device
|
|
* @msgid: the message ID/number to send
|
|
* @tx_msg: the request/transmit message payload
|
|
* @tx_size: the size of the buffer pointed at by tx_msg
|
|
* @rx_msg: the buffer to receive the response message payload. May be
|
|
* NULL if the caller only cares about the error code.
|
|
* @rx_size: the size of the buffer pointed at by rx_msg
|
|
*
|
|
* Return: the response message size if OK, -ve on error
|
|
*/
|
|
int (*call)(struct udevice *dev, int msgid, void *tx_msg, int tx_size,
|
|
void *rx_msg, int rx_size);
|
|
/**
|
|
* Enable or disable a device, optional.
|
|
* @dev: the device to enable.
|
|
* @val: the flag that tells the driver to either enable or disable the
|
|
* device.
|
|
*
|
|
* Return: -ve on error, 0 if the previous state was "disabled", 1 if
|
|
* the previous state was "enabled"
|
|
*/
|
|
int (*set_enabled)(struct udevice *dev, bool val);
|
|
};
|
|
|
|
#endif /* _MISC_H_ */
|