staging: unisys: visorbus: Convert macros to functions.

Several macros in visorchannel.c were doing complex arithmetic, converted
them to functions so that valid type checking could be done.

Signed-off-by: David Kershner <david.kershner@unisys.com>
Reviewed-by: Tim Sell <timothy.sell@unisys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
David Kershner 2017-08-30 13:36:15 -04:00 committed by Greg Kroah-Hartman
parent 74e1129b90
commit c0616454cb
1 changed files with 15 additions and 10 deletions

View File

@ -155,17 +155,22 @@ void *visorchannel_get_header(struct visorchannel *channel)
* Return offset of a specific SIGNAL_QUEUE_HEADER from the beginning of a * Return offset of a specific SIGNAL_QUEUE_HEADER from the beginning of a
* channel header * channel header
*/ */
#define SIG_QUEUE_OFFSET(chan_hdr, q) \ int sig_queue_offset(struct channel_header *chan_hdr, int q)
((chan_hdr)->ch_space_offset + \ {
((q) * sizeof(struct signal_queue_header))) return ((chan_hdr)->ch_space_offset +
((q) * sizeof(struct signal_queue_header)));
}
/* /*
* Return offset of a specific queue entry (data) from the beginning of a * Return offset of a specific queue entry (data) from the beginning of a
* channel header * channel header
*/ */
#define SIG_DATA_OFFSET(chan_hdr, q, sig_hdr, slot) \ int sig_data_offset(struct channel_header *chan_hdr, int q,
(SIG_QUEUE_OFFSET(chan_hdr, q) + (sig_hdr)->sig_base_offset + \ struct signal_queue_header *sig_hdr, int slot)
((slot) * (sig_hdr)->signal_size)) {
return (sig_queue_offset(chan_hdr, q) + sig_hdr->sig_base_offset +
(slot * sig_hdr->signal_size));
}
/* /*
* Write the contents of a specific field within a SIGNAL_QUEUE_HEADER back * Write the contents of a specific field within a SIGNAL_QUEUE_HEADER back
@ -173,7 +178,7 @@ void *visorchannel_get_header(struct visorchannel *channel)
*/ */
#define SIG_WRITE_FIELD(channel, queue, sig_hdr, FIELD) \ #define SIG_WRITE_FIELD(channel, queue, sig_hdr, FIELD) \
visorchannel_write(channel, \ visorchannel_write(channel, \
SIG_QUEUE_OFFSET(&channel->chan_hdr, queue) + \ sig_queue_offset(&channel->chan_hdr, queue) + \
offsetof(struct signal_queue_header, FIELD), \ offsetof(struct signal_queue_header, FIELD), \
&((sig_hdr)->FIELD), \ &((sig_hdr)->FIELD), \
sizeof((sig_hdr)->FIELD)) sizeof((sig_hdr)->FIELD))
@ -186,7 +191,7 @@ static int sig_read_header(struct visorchannel *channel, u32 queue,
/* Read the appropriate SIGNAL_QUEUE_HEADER into local memory. */ /* Read the appropriate SIGNAL_QUEUE_HEADER into local memory. */
return visorchannel_read(channel, return visorchannel_read(channel,
SIG_QUEUE_OFFSET(&channel->chan_hdr, queue), sig_queue_offset(&channel->chan_hdr, queue),
sig_hdr, sizeof(struct signal_queue_header)); sig_hdr, sizeof(struct signal_queue_header));
} }
@ -194,7 +199,7 @@ static int sig_read_data(struct visorchannel *channel, u32 queue,
struct signal_queue_header *sig_hdr, u32 slot, struct signal_queue_header *sig_hdr, u32 slot,
void *data) void *data)
{ {
int signal_data_offset = SIG_DATA_OFFSET(&channel->chan_hdr, queue, int signal_data_offset = sig_data_offset(&channel->chan_hdr, queue,
sig_hdr, slot); sig_hdr, slot);
return visorchannel_read(channel, signal_data_offset, return visorchannel_read(channel, signal_data_offset,
@ -205,7 +210,7 @@ static int sig_write_data(struct visorchannel *channel, u32 queue,
struct signal_queue_header *sig_hdr, u32 slot, struct signal_queue_header *sig_hdr, u32 slot,
void *data) void *data)
{ {
int signal_data_offset = SIG_DATA_OFFSET(&channel->chan_hdr, queue, int signal_data_offset = sig_data_offset(&channel->chan_hdr, queue,
sig_hdr, slot); sig_hdr, slot);
return visorchannel_write(channel, signal_data_offset, return visorchannel_write(channel, signal_data_offset,