11a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks/*
21a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Copyright (C) 2017 The Android Open Source Project
31a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
41a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Licensed under the Apache License, Version 2.0 (the "License");
51a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * you may not use this file except in compliance with the License.
61a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * You may obtain a copy of the License at
71a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
81a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *      http://www.apache.org/licenses/LICENSE-2.0
91a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Unless required by applicable law or agreed to in writing, software
111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * distributed under the License is distributed on an "AS IS" BASIS,
121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * See the License for the specific language governing permissions and
141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * limitations under the License.
151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks */
161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks#include "shared.rsh"
181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksint *ain;
201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksint *aout;
211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksint dimX;
221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool failed = false;
231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid init_vars(int *out) {
251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    *out = 7;
261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksint RS_KERNEL root(int ain, uint32_t x) {
301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    _RS_ASSERT(ain == 7);
311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return ain + x;
321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksstatic bool test_root_output() {
351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    bool failed = false;
361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    int i;
371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    for (i = 0; i < dimX; i++) {
391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        _RS_ASSERT(aout[i] == (i + ain[i]));
401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_root_output FAILED", 0);
441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsDebug("test_root_output PASSED", 0);
471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    return failed;
501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid verify_root() {
531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    failed |= test_root_output();
541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksvoid kernel_test() {
571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    if (failed) {
581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    else {
611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
64