/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2002-2003 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _LIBRSC_H #define _LIBRSC_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* * The structure used to pass messages into and out of this layer. */ typedef struct rscp_msg { rsci8 type; rsci32 len; void *data; void *private; } rscp_msg_t; typedef void rscp_bpmsg_cb_t(bp_msg_t *msg); #define RSC_RMCADM_DRV "/devices/pseudo/rmcadm@0:rmcadm" #define RSC_MAX_RX_BUFFER DP_MAX_MSGLEN /* * this table is used to match request/response in order to provide * backward compatibility to obsolete functions: rscp_send(), rscp_recv(), * * in the old way, send and receive were decoupled: applications sent a * request (rscp_send) and waited for a reply (rscp_recv) using two different * calls. * As the ioctl to the communication driver is a single call, send and receive * cannot be decoupled. So, when the rscp_send is called, this table will tell * which reply is expected and in what time. The reply is then stored in a * temporary buffer. When the rscp_recv is called, it will return the * content of the temporary buffer (if a reply was received) or an error */ typedef struct req_resp_table { uint8_t req_type; uint8_t resp_type; uint16_t resp_size; uint_t timeout; } req_resp_table_t; /* timeout value (millisecs) for request/response sessions */ #define RR_TIMEOUT 10000 #define RR_SEPROM_TIMEOUT 10000 #define RR_BOOT_INIT_TIMEOUT 1000 #define RR_BOOT_LOAD_TIMEOUT 10000 #define RR_BOOT_RESET_TIMEOUT 0 #define RR_BP_TIMEOUT 1000 /* function prototypes */ int rscp_init(void); int rscp_send_recv(rscp_msg_t *, rscp_msg_t *, struct timespec *); int rsc_nmi(void); /* function prototypes for firmware download */ int rscp_register_bpmsg_cb(rscp_bpmsg_cb_t *); int rscp_unregister_bpmsg_cb(rscp_bpmsg_cb_t *); void rscp_send_bpmsg(bp_msg_t *); int rsc_raw_write(char *, int); /* prototypes of obsolete functions */ int rscp_send(rscp_msg_t *); int rscp_recv(rscp_msg_t *, struct timespec *); int rscp_start(void); int rscp_free_msg(rscp_msg_t *); #ifdef __cplusplus } #endif #endif /* _LIBRSC_H */