MmioSPTWalkCode

Require Import Coqlib.
Require Import AST.
Require Import Integers.
Require Import Values.
Require Import Cop.
Require Import Clight.
Require Import CDataTypes.
Require Import Ctypes.

Require Import Ident.

Local Open Scope Z_scope.

Definition _Rd : ident := 999%positive.
Definition _addr := 1%positive.
Definition _alloc := 2%positive.
Definition _arg := 3%positive.
Definition _base := 4%positive.
Definition _cb_offset := 5%positive.
Definition _cbndx := 6%positive.
Definition _cnt := 7%positive.
Definition _count := 8%positive.
Definition _cur_vcpuid := 9%positive.
Definition _cur_vmid := 10%positive.
Definition _data := 11%positive.
Definition _end := 12%positive.
Definition _esr := 13%positive.
Definition _fault_ipa := 14%positive.
Definition _gfn := 15%positive.
Definition _gpa := 16%positive.
Definition _hsr := 17%positive.
Definition _i := 18%positive.
Definition _index := 19%positive.
Definition _iova := 20%positive.
Definition _is_write := 21%positive.
Definition _kvm := 22%positive.
Definition _len := 23%positive.
Definition _level := 24%positive.
Definition _load_addr := 25%positive.
Definition _load_idx := 26%positive.
Definition _load_info_cnt := 27%positive.
Definition _main := 28%positive.
Definition _map := 29%positive.
Definition _mapped := 30%positive.
Definition _n := 31%positive.
Definition _next := 32%positive.
Definition _num := 33%positive.
Definition _num_context_banks := 34%positive.
Definition _offset := 35%positive.
Definition _owner := 36%positive.
Definition _pa := 37%positive.
Definition _paddr := 38%positive.
Definition _page_count := 39%positive.
Definition _pass_lock := 40%positive.
Definition _perm := 41%positive.
Definition _pfn := 42%positive.
Definition _pgd := 43%positive.
Definition _pgd_idx := 44%positive.
Definition _pgd_pa := 45%positive.
Definition _pgnum := 46%positive.
Definition _pmd := 47%positive.
Definition _pmd_idx := 48%positive.
Definition _pmd_pa := 49%positive.
Definition _power := 50%positive.
Definition _prot := 51%positive.
Definition _pte := 52%positive.
Definition _pte_idx := 53%positive.
Definition _pte_pa := 54%positive.
Definition _reg := 55%positive.
Definition _remap := 56%positive.
Definition _remap_addr := 57%positive.
Definition _res := 58%positive.
Definition _ret := 59%positive.
Definition _rt := 60%positive.
Definition _size := 61%positive.
Definition _smmu_enable := 62%positive.
Definition _smmu_index := 63%positive.
Definition _start := 64%positive.
Definition _state := 65%positive.
Definition _t_vmid := 66%positive.
Definition _target := 67%positive.
Definition _target_addr := 68%positive.
Definition _target_vmid := 69%positive.
Definition _total_smmu := 70%positive.
Definition _ttbr := 71%positive.
Definition _ttbr_pa := 72%positive.
Definition _type := 73%positive.
Definition _val := 74%positive.
Definition _valid := 75%positive.
Definition _vcpu := 76%positive.
Definition _vcpu_state := 77%positive.
Definition _vcpuid := 78%positive.
Definition _vm_state := 79%positive.
Definition _vmid := 80%positive.
Definition _wait_lock := 81%positive.
Definition _write_val := 82%positive.
Definition _t'1 := 83%positive.
Definition _t'2 := 84%positive.
Definition _t'3 := 85%positive.
Definition _t'4 := 86%positive.
Definition _t'5 := 87%positive.

Definition clear_smmu_pt_body :=
  (Scall None
    (Evar smmu_pt_clear (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
                           cc_default))
    ((Etempvar _cbndx tuint) :: (Etempvar _index tuint) :: nil)).

Definition f_clear_smmu_pt := {|
  fn_return := tvoid;
  fn_callconv := cc_default;
  fn_params := ((_cbndx, tuint) :: (_index, tuint) :: nil);
  fn_vars := nil;
  fn_temps := nil;
  fn_body := clear_smmu_pt_body
|}.

Definition walk_smmu_pt_body :=
  (Ssequence
    (Ssequence
      (Scall (Some _t'1)
        (Evar get_smmu_cfg_hw_ttbr (Tfunction (Tcons tuint (Tcons tuint Tnil))
                                      tulong cc_default))
        ((Etempvar _cbndx tuint) :: (Etempvar _index tuint) :: nil))
      (Sset _ttbr (Etempvar _t'1 tulong)))
    (Ssequence
      (Ssequence
        (Scall (Some _t'2)
          (Evar walk_smmu_pgd (Tfunction
                                 (Tcons tulong
                                   (Tcons tulong (Tcons tuint Tnil))) tulong
                                 cc_default))
          ((Etempvar _ttbr tulong) :: (Etempvar _addr tulong) ::
           (Econst_int (Int.repr 0) tuint) :: nil))
        (Sset _pgd (Etempvar _t'2 tulong)))
      (Ssequence
        (Ssequence
          (Scall (Some _t'3)
            (Evar walk_smmu_pmd (Tfunction
                                   (Tcons tulong
                                     (Tcons tulong (Tcons tuint Tnil))) tulong
                                   cc_default))
            ((Etempvar _pgd tulong) :: (Etempvar _addr tulong) ::
             (Econst_int (Int.repr 0) tuint) :: nil))
          (Sset _pmd (Etempvar _t'3 tulong)))
        (Ssequence
          (Ssequence
            (Scall (Some _t'4)
              (Evar walk_smmu_pte (Tfunction
                                     (Tcons tulong (Tcons tulong Tnil)) tulong
                                     cc_default))
              ((Etempvar _pmd tulong) :: (Etempvar _addr tulong) :: nil))
            (Sset _ret (Etempvar _t'4 tulong)))
          (Ssequence
            (Scall (Some _t'5)
              (Evar check64 (Tfunction (Tcons tulong Tnil) tulong cc_default))
              ((Etempvar _ret tulong) :: nil))
            (Sreturn (Some (Etempvar _t'5 tulong)))))))).

Definition f_walk_smmu_pt := {|
  fn_return := tulong;
  fn_callconv := cc_default;
  fn_params := ((_cbndx, tuint) :: (_index, tuint) :: (_addr, tulong) :: nil);
  fn_vars := nil;
  fn_temps := ((_ttbr, tulong) :: (_pgd, tulong) :: (_pmd, tulong) ::
               (_ret, tulong) :: (_t'5, tulong) :: (_t'4, tulong) ::
               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tulong) :: nil);
  fn_body := walk_smmu_pt_body
|}.

Definition set_smmu_pt_body :=
  (Ssequence
    (Ssequence
      (Scall (Some _t'1)
        (Evar get_smmu_cfg_hw_ttbr (Tfunction (Tcons tuint (Tcons tuint Tnil))
                                      tulong cc_default))
        ((Etempvar _cbndx tuint) :: (Etempvar _index tuint) :: nil))
      (Sset _ttbr (Etempvar _t'1 tulong)))
    (Ssequence
      (Ssequence
        (Scall (Some _t'2)
          (Evar walk_smmu_pgd (Tfunction
                                 (Tcons tulong
                                   (Tcons tulong (Tcons tuint Tnil))) tulong
                                 cc_default))
          ((Etempvar _ttbr tulong) :: (Etempvar _addr tulong) ::
           (Econst_int (Int.repr 1) tuint) :: nil))
        (Sset _pgd (Etempvar _t'2 tulong)))
      (Ssequence
        (Ssequence
          (Scall (Some _t'3)
            (Evar walk_smmu_pmd (Tfunction
                                   (Tcons tulong
                                     (Tcons tulong (Tcons tuint Tnil))) tulong
                                   cc_default))
            ((Etempvar _pgd tulong) :: (Etempvar _addr tulong) ::
             (Econst_int (Int.repr 1) tuint) :: nil))
          (Sset _pmd (Etempvar _t'3 tulong)))
        (Scall None
          (Evar set_smmu_pte (Tfunction
                                (Tcons tulong
                                  (Tcons tulong (Tcons tulong Tnil))) tvoid
                                cc_default))
          ((Etempvar _pmd tulong) :: (Etempvar _addr tulong) ::
           (Etempvar _pte tulong) :: nil))))).

Definition f_set_smmu_pt := {|
  fn_return := tvoid;
  fn_callconv := cc_default;
  fn_params := ((_cbndx, tuint) :: (_index, tuint) :: (_addr, tulong) ::
                (_pte, tulong) :: nil);
  fn_vars := nil;
  fn_temps := ((_ttbr, tulong) :: (_pgd, tulong) :: (_pmd, tulong) ::
               (_t'3, tulong) :: (_t'2, tulong) :: (_t'1, tulong) :: nil);
  fn_body := set_smmu_pt_body
|}.

Definition dev_load_ref_body :=
  (Scall None
    (Evar dev_load_raw (Tfunction
                          (Tcons tulong
                            (Tcons tuint (Tcons tuint (Tcons tuint Tnil))))
                          tvoid cc_default))
    ((Etempvar _gfn tulong) :: (Etempvar _reg tuint) ::
     (Etempvar _cbndx tuint) :: (Etempvar _index tuint) :: nil)).

Definition f_dev_load_ref := {|
  fn_return := tvoid;
  fn_callconv := cc_default;
  fn_params := ((_gfn, tulong) :: (_reg, tuint) :: (_cbndx, tuint) ::
                (_index, tuint) :: nil);
  fn_vars := nil;
  fn_temps := nil;
  fn_body := dev_load_ref_body
|}.

Definition dev_store_ref_body :=
  (Scall None
    (Evar dev_store_raw (Tfunction
                           (Tcons tulong
                             (Tcons tuint (Tcons tuint (Tcons tuint Tnil))))
                           tvoid cc_default))
    ((Etempvar _gfn tulong) :: (Etempvar _reg tuint) ::
     (Etempvar _cbndx tuint) :: (Etempvar _index tuint) :: nil)).

Definition f_dev_store_ref := {|
  fn_return := tvoid;
  fn_callconv := cc_default;
  fn_params := ((_gfn, tulong) :: (_reg, tuint) :: (_cbndx, tuint) ::
                (_index, tuint) :: nil);
  fn_vars := nil;
  fn_temps := nil;
  fn_body := dev_store_ref_body
|}.