Lines Matching +full:memory +full:- +full:mapped
1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) 2010 - 2015 UNISYS CORPORATION
8 * This provides s-Par channel communication primitives, which are
31 void *mapped; member
53 if (channel->mapped) { in visorchannel_destroy()
54 memunmap(channel->mapped); in visorchannel_destroy()
55 if (channel->requested) in visorchannel_destroy()
56 release_mem_region(channel->physaddr, channel->nbytes); in visorchannel_destroy()
63 return channel->physaddr; in visorchannel_get_physaddr()
68 return channel->nbytes; in visorchannel_get_nbytes()
79 return visorchannel_guid_id(&channel->guid, s); in visorchannel_id()
84 return visorchannel_guid_id(&channel->chan_hdr.zone_guid, s); in visorchannel_zoneid()
89 return channel->chan_hdr.partition_handle; in visorchannel_get_clientpartition()
95 channel->chan_hdr.partition_handle = partition_handle; in visorchannel_set_clientpartition()
100 * visorchannel_get_guid() - queries the GUID of the designated channel
107 return &channel->guid; in visorchannel_get_guid()
114 if (offset + nbytes > channel->nbytes) in visorchannel_read()
115 return -EIO; in visorchannel_read()
117 memcpy(dest, channel->mapped + offset, nbytes); in visorchannel_read()
127 if (offset + nbytes > channel->nbytes) in visorchannel_write()
128 return -EIO; in visorchannel_write()
131 copy_size = min(chdr_size - offset, nbytes); in visorchannel_write()
132 memcpy(((char *)(&channel->chan_hdr)) + offset, in visorchannel_write()
135 memcpy(channel->mapped + offset, dest, nbytes); in visorchannel_write()
141 return &channel->chan_hdr; in visorchannel_get_header()
150 return ((chan_hdr)->ch_space_offset + in sig_queue_offset()
161 return (sig_queue_offset(chan_hdr, q) + sig_hdr->sig_base_offset + in sig_data_offset()
162 (slot * sig_hdr->signal_size)); in sig_data_offset()
167 * host memory
171 sig_queue_offset(&channel->chan_hdr, queue) + \
173 &((sig_hdr)->FIELD), \
174 sizeof((sig_hdr)->FIELD))
179 if (channel->chan_hdr.ch_space_offset < sizeof(struct channel_header)) in sig_read_header()
180 return -EINVAL; in sig_read_header()
182 /* Read the appropriate SIGNAL_QUEUE_HEADER into local memory. */ in sig_read_header()
184 sig_queue_offset(&channel->chan_hdr, queue), in sig_read_header()
192 int signal_data_offset = sig_data_offset(&channel->chan_hdr, queue, in sig_read_data()
196 data, sig_hdr->signal_size); in sig_read_data()
203 int signal_data_offset = sig_data_offset(&channel->chan_hdr, queue, in sig_write_data()
207 data, sig_hdr->signal_size); in sig_write_data()
221 return -EAGAIN; in signalremove_inner()
229 * host memory. Required for channel sync. in signalremove_inner()
242 * visorchannel_signalremove() - removes a message from the designated
256 if (channel->needs_lock) { in visorchannel_signalremove()
257 spin_lock_irqsave(&channel->remove_lock, flags); in visorchannel_signalremove()
259 spin_unlock_irqrestore(&channel->remove_lock, flags); in visorchannel_signalremove()
278 * visorchannel_signalempty() - checks if the designated channel/queue contains
291 if (!channel->needs_lock) in visorchannel_signalempty()
293 spin_lock_irqsave(&channel->remove_lock, flags); in visorchannel_signalempty()
295 spin_unlock_irqrestore(&channel->remove_lock, flags); in visorchannel_signalempty()
315 return -EIO; in signalinsert_inner()
323 * host memory. Required for channel sync. in signalinsert_inner()
336 * visorchannel_create() - creates the struct visorchannel abstraction for a
337 * data area in memory, but does NOT modify this data
340 * @gfp: gfp_t to use when allocating memory for the data struct
362 channel->needs_lock = needs_lock; in visorchannel_create()
363 spin_lock_init(&channel->insert_lock); in visorchannel_create()
364 spin_lock_init(&channel->remove_lock); in visorchannel_create()
371 channel->requested = request_mem_region(physaddr, size, VISOR_DRV_NAME); in visorchannel_create()
372 if (!channel->requested && !guid_equal(guid, &visor_video_guid)) in visorchannel_create()
375 channel->mapped = memremap(physaddr, size, MEMREMAP_WB); in visorchannel_create()
376 if (!channel->mapped) { in visorchannel_create()
380 channel->physaddr = physaddr; in visorchannel_create()
381 channel->nbytes = size; in visorchannel_create()
382 err = visorchannel_read(channel, 0, &channel->chan_hdr, size); in visorchannel_create()
385 size = (ulong)channel->chan_hdr.size; in visorchannel_create()
386 memunmap(channel->mapped); in visorchannel_create()
387 if (channel->requested) in visorchannel_create()
388 release_mem_region(channel->physaddr, channel->nbytes); in visorchannel_create()
389 channel->mapped = NULL; in visorchannel_create()
390 channel->requested = request_mem_region(channel->physaddr, size, in visorchannel_create()
392 if (!channel->requested && !guid_equal(guid, &visor_video_guid)) in visorchannel_create()
395 channel->mapped = memremap(channel->physaddr, size, MEMREMAP_WB); in visorchannel_create()
396 if (!channel->mapped) { in visorchannel_create()
397 release_mem_region(channel->physaddr, size); in visorchannel_create()
400 channel->nbytes = size; in visorchannel_create()
401 guid_copy(&channel->guid, guid); in visorchannel_create()
410 * visorchannel_signalinsert() - inserts a message into the designated
424 if (channel->needs_lock) { in visorchannel_signalinsert()
425 spin_lock_irqsave(&channel->insert_lock, flags); in visorchannel_signalinsert()
427 spin_unlock_irqrestore(&channel->insert_lock, flags); in visorchannel_signalinsert()