Home | History | Annotate | Download | only in VirtioMmioDeviceLib
      1 /** @file
      2 
      3   Internal definitions for the VirtIo MMIO Device driver
      4 
      5   Copyright (C) 2013, ARM Ltd
      6 
      7   This program and the accompanying materials are licensed and made available
      8   under the terms and conditions of the BSD License which accompanies this
      9   distribution. The full text of the license may be found at
     10   http://opensource.org/licenses/bsd-license.php
     11 
     12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
     13   WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 **/
     16 
     17 #ifndef _VIRTIO_MMIO_DEVICE_INTERNAL_H_
     18 #define _VIRTIO_MMIO_DEVICE_INTERNAL_H_
     19 
     20 #include <Protocol/VirtioDevice.h>
     21 
     22 #include <IndustryStandard/Virtio.h>
     23 
     24 #include <Library/DebugLib.h>
     25 #include <Library/IoLib.h>
     26 #include <Library/UefiLib.h>
     27 #include <Library/VirtioMmioDeviceLib.h>
     28 
     29 #define VIRTIO_MMIO_DEVICE_SIGNATURE  SIGNATURE_32 ('V', 'M', 'I', 'O')
     30 
     31 typedef struct {
     32   UINT32                 Signature;
     33   VIRTIO_DEVICE_PROTOCOL VirtioDevice;
     34   PHYSICAL_ADDRESS       BaseAddress;
     35 } VIRTIO_MMIO_DEVICE;
     36 
     37 #define VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE(Device) \
     38     CR (Device, VIRTIO_MMIO_DEVICE, VirtioDevice, VIRTIO_MMIO_DEVICE_SIGNATURE)
     39 
     40 #define VIRTIO_CFG_WRITE(Device, Offset, Val) \
     41     (MmioWrite32 (Device->BaseAddress + (Offset), Val))
     42 #define VIRTIO_CFG_READ(Device, Offset)       \
     43     (MmioRead32  (Device->BaseAddress + (Offset)))
     44 
     45 EFI_STATUS
     46 EFIAPI
     47 VirtioMmioDeviceRead (
     48   IN  VIRTIO_DEVICE_PROTOCOL    *This,
     49   IN  UINTN                     FieldOFfset,
     50   IN  UINTN                     FieldSize,
     51   IN  UINTN                     BufferSize,
     52   OUT VOID*                     Buffer
     53   );
     54 
     55 EFI_STATUS
     56 EFIAPI
     57 VirtioMmioDeviceWrite (
     58   IN  VIRTIO_DEVICE_PROTOCOL    *This,
     59   IN  UINTN                     FieldOffset,
     60   IN  UINTN                     FieldSize,
     61   IN  UINT64                    Value
     62   );
     63 
     64 EFI_STATUS
     65 EFIAPI
     66 VirtioMmioGetDeviceFeatures (
     67   IN VIRTIO_DEVICE_PROTOCOL *This,
     68   OUT UINT32                *DeviceFeatures
     69   );
     70 
     71 EFI_STATUS
     72 EFIAPI
     73 VirtioMmioGetQueueAddress (
     74   IN  VIRTIO_DEVICE_PROTOCOL *This,
     75   OUT UINT32                 *QueueAddress
     76   );
     77 
     78 EFI_STATUS
     79 EFIAPI
     80 VirtioMmioGetQueueSize (
     81   IN  VIRTIO_DEVICE_PROTOCOL  *This,
     82   OUT UINT16                  *QueueNumMax
     83   );
     84 
     85 EFI_STATUS
     86 EFIAPI
     87 VirtioMmioGetDeviceStatus (
     88   IN  VIRTIO_DEVICE_PROTOCOL  *This,
     89   OUT UINT8                   *DeviceStatus
     90   );
     91 
     92 EFI_STATUS
     93 EFIAPI
     94 VirtioMmioSetQueueSize (
     95   VIRTIO_DEVICE_PROTOCOL *This,
     96   UINT16                  QueueSize
     97   );
     98 
     99 EFI_STATUS
    100 EFIAPI
    101 VirtioMmioSetDeviceStatus (
    102   VIRTIO_DEVICE_PROTOCOL *This,
    103   UINT8                   DeviceStatus
    104   );
    105 
    106 EFI_STATUS
    107 EFIAPI
    108 VirtioMmioSetQueueNotify (
    109   VIRTIO_DEVICE_PROTOCOL *This,
    110   UINT16                  QueueNotify
    111   );
    112 
    113 EFI_STATUS
    114 EFIAPI
    115 VirtioMmioSetQueueSel (
    116   VIRTIO_DEVICE_PROTOCOL *This,
    117   UINT16                  Sel
    118   );
    119 
    120 EFI_STATUS
    121 VirtioMmioSetQueueAddress (
    122   VIRTIO_DEVICE_PROTOCOL *This,
    123   UINT32                  Address
    124   );
    125 
    126 EFI_STATUS
    127 EFIAPI
    128 VirtioMmioSetQueueAlignment (
    129   VIRTIO_DEVICE_PROTOCOL *This,
    130   UINT32                  Alignment
    131   );
    132 
    133 EFI_STATUS
    134 EFIAPI
    135 VirtioMmioSetPageSize (
    136   VIRTIO_DEVICE_PROTOCOL *This,
    137   UINT32                  PageSize
    138   );
    139 
    140 EFI_STATUS
    141 EFIAPI
    142 VirtioMmioSetGuestFeatures (
    143   VIRTIO_DEVICE_PROTOCOL *This,
    144   UINT32                  Features
    145   );
    146 
    147 #endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_
    148