On Fri, Jul 22, 2022 at 05:28:56PM +0900, Yuji Ishikawa wrote: > --- /dev/null > +++ b/drivers/soc/visconti/uapi/dnn.h > @@ -0,0 +1,77 @@ > +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ > +/* Toshiba Visconti DNN Accelerator Support > + * > + * (C) Copyright 2022 TOSHIBA CORPORATION > + * (C) Copyright 2022 Toshiba Electronic Devices & Storage Corporation > + */ > + > +#ifndef _UAPI_LINUX_DNN_H > +#define _UAPI_LINUX_DNN_H > + > +#include <linux/ioctl.h> > +#include <linux/types.h> > +#include "ipa.h" > + > +#define DRV_DNN_BIT_CONFIG_DESC_FINAL (0x8000U) > +#define DRV_DNN_BUFFER_INDEX_MAX (15) > + > +#define DRV_DNN_BASE_ADDR_NUM (8U) /* DNN number of base address */ > + > +#define DRV_DNN_BASE_ADDR_PURPOSE_INPUT (1U) > +#define DRV_DNN_BASE_ADDR_PURPOSE_OUTPUT (2U) > +#define DRV_DNN_BASE_ADDR_PURPOSE_AWB (3U) > +#define DRV_DNN_BASE_ADDR_PURPOSE_TEMPORARY (4U) > + > +/** > + * struct drv_dnn_status - DNN IPA status for IOC_IPA_GET_STATUS > + * > + * @state: State of driver > + * @eer_cmd: Execution error command > + * @eer: Execution error > + * @reserved: Padding > + * @eer_flags: Execution error flags > + */ > +struct drv_dnn_status { > + enum drv_ipa_state state; > + __u32 eer_cmd; > + __u32 eer : 1; > + __u32 reserved : 31; bitfields will not work like this for uapi files, sorry. > + __u32 eer_flags[32]; What endian is all of these? Big? Little? Unknown? > +}; > + > +struct drv_dnn_base_addr { > + __u32 purpose; > + union { > + struct drv_ipa_addr ipa_addr; > + uintptr_t list_addr; You really do not ever want a uintptr_t in a uapi file, that's not going to be portable at all. It's also not a valid kernel type :( No documentation on what "purpose" is for? > + } addr; > +}; > + > +/** > + * struct drv_dnn_descriptor - DNN IPA Descriptor for IOC_IPA_START > + * > + * @configuration: Address of configuration data > + * @configuration_offset: Configuration offset > + * @configuration_size: Configuration data size > + * @list_num: Number of input/output list > + * @base_addr: Base addresses > + * @base_addr_flag: Bit-fields of base_addr list config; > + * 0 for fixed address, > + * 1 for address list. Where are the bitfield definitions? What about unused bits, what happens with them? You are checking them, right? > + * @config_done: Flags of called configuration > + * @buffer_info: Table of buffer information > + * @buffer_info_num: Number of buffer_info > + */ > +struct drv_dnn_descriptor { > + struct drv_ipa_addr configuration; > + __u32 configuration_offset; What endian are any of these? thanks, greg k-h