static int queue_iommu_command(struct amd_iommu *iommu, u32 cmd[])
{
- u32 tail, head, *cmd_buffer;
- int i;
+ uint32_t tail, head;
tail = iommu->cmd_buffer.tail;
if ( ++tail == iommu->cmd_buffer.entries )
IOMMU_CMD_BUFFER_HEAD_OFFSET));
if ( head != tail )
{
- cmd_buffer = (u32 *)(iommu->cmd_buffer.buffer +
- (iommu->cmd_buffer.tail *
- IOMMU_CMD_BUFFER_ENTRY_SIZE));
-
- for ( i = 0; i < IOMMU_CMD_BUFFER_U32_PER_ENTRY; i++ )
- cmd_buffer[i] = cmd[i];
+ memcpy(iommu->cmd_buffer.buffer +
+ (iommu->cmd_buffer.tail * IOMMU_CMD_BUFFER_ENTRY_SIZE),
+ cmd, IOMMU_CMD_BUFFER_ENTRY_SIZE);
iommu->cmd_buffer.tail = tail;
return 1;
#define IOMMU_CMD_BUFFER_ENTRY_SIZE 16
#define IOMMU_CMD_BUFFER_POWER_OF2_ENTRIES_PER_PAGE 8
-#define IOMMU_CMD_BUFFER_U32_PER_ENTRY (IOMMU_CMD_BUFFER_ENTRY_SIZE / 4)
#define IOMMU_CMD_OPCODE_MASK 0xF0000000
#define IOMMU_CMD_OPCODE_SHIFT 28