3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * CDDL HEADER START
3db86aab554edbb4244c8d1a1c90f152eee768afstevel *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * The contents of this file are subject to the terms of the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Common Development and Distribution License, Version 1.0 only
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * (the "License"). You may not use this file except in compliance
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * with the License.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * or http://www.opensolaris.org/os/licensing.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * See the License for the specific language governing permissions
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * and limitations under the License.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * When distributing Covered Code, include this CDDL HEADER in each
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * If applicable, add the following below this CDDL HEADER, with the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * fields enclosed by brackets "[]" replaced with your own identifying
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * information: Portions Copyright [yyyy] [name of copyright owner]
3db86aab554edbb4244c8d1a1c90f152eee768afstevel *
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * CDDL HEADER END
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Copyright (c) 1996-1998 by Sun Microsystems, Inc.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * All rights reserved.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#ifndef _MEMA_TEST_H
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define _MEMA_TEST_H
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#pragma ident "%Z%%M% %I% %E% SMI"
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#ifdef __cplusplus
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern "C" {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstruct mtest_alloc_ent {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel struct mtest_alloc_ent *next;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel void *buf;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel};
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstruct mtest_handle {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel u_longlong_t bank_size;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ulong_t page_size;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ulong_t line_size;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ulong_t lines_per_page;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel cfga_cond_t condition;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel int fd;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel ulong_t max_errors;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel struct mtest_alloc_ent *alloc_list;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel void *drvhandle;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel struct cfga_msg *msgp;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel};
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afsteveltypedef struct mtest_handle *mtest_handle_t;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afsteveltypedef int mtest_func_t(mtest_handle_t);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstruct mtest_table_ent {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel const char *test_name;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel mtest_func_t *test_func;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel};
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern struct mtest_table_ent mtest_table[];
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_DEFAULT_TEST (0)
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern char **mtest_build_opts(int *maxerr_idx);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define BANK_SIZE(H) ((H)->bank_size)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define PAGE_SIZE(H) ((H)->page_size)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define LINE_SIZE(H) ((H)->line_size)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define LINES_PER_PAGE(H) ((H)->lines_per_page)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define SET_CONDITION(H, C) ((H)->condition = (C))
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevelstruct mtest_error {
3db86aab554edbb4244c8d1a1c90f152eee768afstevel int error_type;
3db86aab554edbb4244c8d1a1c90f152eee768afstevel};
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Error types.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_ERR_NONE 0
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_ERR_UE 1
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_ERR_CE 2
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Test routine return codes.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_DONE 0
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_LIB_ERROR 1
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MTEST_DEV_ERROR 2
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Each test is allowed maximum number of errors and the index has
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * to be coordinated with the token table size in mema_test_config.c
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define MAX_ERRORS 32
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define REPORT_SEC 5
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Test functions should use this buffer allocation interface.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * The test framework will deallocate them on return.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern void *mtest_allocate_buf(mtest_handle_t, size_t);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#define mtest_allocate_page_buf(H) mtest_allocate_buf((H), \
3db86aab554edbb4244c8d1a1c90f152eee768afstevel (size_t)PAGE_SIZE(H))
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern void mtest_deallocate_buf(mtest_handle_t, void *);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern void mtest_deallocate_buf_all(mtest_handle_t);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Test write: mtest_write(handle, buffer, page_num, line_offset, line_count)
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * A line count of 0 indicates the whole page.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * A return of 0 indicates success. A return of -1 indicates a failure of
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * the device interface.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern int mtest_write(mtest_handle_t, void *, u_longlong_t, uint_t, uint_t);
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern int mtest_read(mtest_handle_t, void *, u_longlong_t, uint_t, uint_t,
3db86aab554edbb4244c8d1a1c90f152eee768afstevel struct mtest_error *);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel/*
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * Message interface. If the upper layer has verbose on, the
3db86aab554edbb4244c8d1a1c90f152eee768afstevel * message will be seen by the user.
3db86aab554edbb4244c8d1a1c90f152eee768afstevel */
3db86aab554edbb4244c8d1a1c90f152eee768afstevelextern void mtest_message(mtest_handle_t, const char *);
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#ifdef __cplusplus
3db86aab554edbb4244c8d1a1c90f152eee768afstevel}
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif
3db86aab554edbb4244c8d1a1c90f152eee768afstevel
3db86aab554edbb4244c8d1a1c90f152eee768afstevel#endif /* _MEMA_TEST_H */