On Fri, Jan 24, 2020 at 11:12:57AM -0700, Jeffrey Hugo wrote: > On 1/24/2020 10:47 AM, Greg KH wrote: > > On Fri, Jan 24, 2020 at 07:24:43AM -0700, Jeffrey Hugo wrote: > > > > > +/** > > > > > + * struct mhi_result - Completed buffer information > > > > > + * @buf_addr: Address of data buffer > > > > > + * @dir: Channel direction > > > > > + * @bytes_xfer: # of bytes transferred > > > > > + * @transaction_status: Status of last transaction > > > > > + */ > > > > > +struct mhi_result { > > > > > + void *buf_addr; > > > > > > > > Why void *? > > > > > > Because its not possible to resolve this more clearly. The client provides > > > the buffer and knows what the structure is. The bus does not. Its just an > > > opaque pointer (hence void *) to the bus, and the client needs to decode it. > > > This is the struct that is handed to the client to allow them to decode the > > > activity (either a received buf, or a confirmation that a transmitted buf > > > has been consumed). > > > > Then shouldn't this be a "u8 *" instead as you are saying how many bytes > > are here? > > I'm sorry, I don't see the benefit of that. Can you elaborate on why you > think that u8 * is a better type? > > Sure, its an arbitrary byte stream from the perspective of the bus, but to > the client, 99% of the time its going to have some structure. So which side is in control here, the "bus" or the "client"? For the bus to care, it's a bytestream and should be represented as such (like you have) with a number of bytes in the "packet". If you already know the structure types, just make a union of all of the valid ones and be done with it. In other words, try to avoid using void * as much as is ever possible please. thanks, greg k-h