123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef _libs_hardware_qemu_h
- #define _libs_hardware_qemu_h
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifdef QEMU_HARDWARE
- /* returns 1 iff we're running in the emulator */
- extern int qemu_check(void);
- /* a structure used to hold enough state to connect to a given
- * QEMU communication channel, either through a qemud socket or
- * a serial port.
- *
- * initialize the structure by zero-ing it out
- */
- typedef struct {
- char is_inited;
- char is_available;
- char is_qemud;
- char is_qemud_old;
- char is_tty;
- int fd;
- char device[32];
- } QemuChannel;
- /* try to open a qemu communication channel.
- * returns a file descriptor on success, or -1 in case of
- * error.
- *
- * 'channel' must be a QemuChannel structure that is empty
- * on the first call. You can call this function several
- * time to re-open the channel using the same 'channel'
- * object to speed things a bit.
- */
- extern int qemu_channel_open( QemuChannel* channel,
- const char* name,
- int mode );
- /* create a command made of a 4-hexchar prefix followed
- * by the content. the prefix contains the content's length
- * in hexadecimal coding.
- *
- * 'buffer' must be at last 6 bytes
- * returns -1 in case of overflow, or the command's total length
- * otherwise (i.e. content length + 4)
- */
- extern int qemu_command_format( char* buffer,
- int buffer_size,
- const char* format,
- ... );
- /* directly sends a command through the 'hw-control' channel.
- * this will open the channel, send the formatted command, then
- * close the channel automatically.
- * returns 0 on success, or -1 on error.
- */
- extern int qemu_control_command( const char* fmt, ... );
- /* sends a question to the hw-control channel, then receive an answer in
- * a user-allocated buffer. returns the length of the answer, or -1
- * in case of error.
- *
- * 'question' *must* have been formatted through qemu_command_format
- */
- extern int qemu_control_query( const char* question, int questionlen,
- char* answer, int answersize );
- #endif /* QEMU_HARDWARE */
- /* use QEMU_FALLBACK(call) to call a QEMU-specific callback */
- /* use QEMU_FALLBACK_VOID(call) if the function returns void */
- #ifdef QEMU_HARDWARE
- # define QEMU_FALLBACK(x) \
- do { \
- if (qemu_check()) \
- return qemu_ ## x ; \
- } while (0)
- # define QEMU_FALLBACK_VOID(x) \
- do { \
- if (qemu_check()) { \
- qemu_ ## x ; \
- return; \
- } \
- } while (0)
- #else
- # define QEMU_FALLBACK(x) ((void)0)
- # define QEMU_FALLBACK_VOID(x) ((void)0)
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* _libs_hardware_qemu_h */
|