mirror of
https://github.com/HarbourMasters/Starship.git
synced 2025-01-24 14:05:00 +03:00
132 lines
5.0 KiB
C
132 lines
5.0 KiB
C
|
#ifndef __SYS_U64DRIVER_H__
|
||
|
#define __SYS_U64DRIVER_H__
|
||
|
|
||
|
/*
|
||
|
* Copyright 1995, Silicon Graphics, Inc.
|
||
|
* All Rights Reserved.
|
||
|
*
|
||
|
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
|
||
|
* the contents of this file may not be disclosed to third parties, copied or
|
||
|
* duplicated in any form, in whole or in part, without the prior written
|
||
|
* permission of Silicon Graphics, Inc.
|
||
|
*
|
||
|
* RESTRICTED RIGHTS LEGEND:
|
||
|
* Use, duplication or disclosure by the Government is subject to restrictions
|
||
|
* as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
|
||
|
* and Computer Software clause at DFARS 252.227-7013, and/or in similar or
|
||
|
* successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
|
||
|
* rights reserved under the Copyright Laws of the United States.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <PR/rdb.h>
|
||
|
#include <PR/ramrom.h>
|
||
|
#include "u64gio.h"
|
||
|
|
||
|
|
||
|
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
|
||
|
|
||
|
|
||
|
#define U64_MINOR_PRINT 1
|
||
|
#define U64_MINOR_DEBUG 2
|
||
|
#define U64_MINOR_LOGGING 3
|
||
|
#define U64_MINOR_DATA 4
|
||
|
#define U64_MINOR_FAULT 5
|
||
|
#define U64_MINOR_KDEBUG 6
|
||
|
#define U64_MINOR_PROFILE 7
|
||
|
#define NUMBER_MINORS 8 /* don't use minor zero , but must count 0-7 */
|
||
|
|
||
|
#define U64_MINOR_PRINT_BUF_SIZE 0x80000 /* buffer used by incoming printf data */
|
||
|
#define U64_MINOR_DEBUG_BUF_SIZE 0x4000
|
||
|
#define U64_MINOR_LOGGING_BUF_SIZE RDB_LOG_MAX_BLOCK_SIZE /* buffer used by incoming logging data */
|
||
|
#define U64_MINOR_DATA_BUF_SIZE RDB_DATA_MAX_BLOCK_SIZE /* buffer used by incoming data */
|
||
|
#define U64_MINOR_FAULT_BUF_SIZE 1024 /* buffer used for incoming fault data */
|
||
|
#define U64_MINOR_KDEBUG_BUF_SIZE 1024 /* buffer used for incoming kdebug data */
|
||
|
#define U64_MINOR_PROFILE_BUF_SIZE 2048 /* buffer used for incoming profile data */
|
||
|
#define U64_MINOR_PROFILE_SEND_BUF_SIZE 16 /* only send one byte messages */
|
||
|
#define U64_INTERNAL_WRITE_BUF_SIZE 0x8000 /* buffer used to store packets waiting to go out */
|
||
|
|
||
|
|
||
|
|
||
|
#define u64_increment_Qptr(x) { ((x) = ((x) + 1) & 0xff) ; }
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
sema_t minor_sema; /* used to allow only one app to open the minor */
|
||
|
sema_t read_sema; /* used to block while waiting for data */
|
||
|
sema_t write_sema; /* only allow one entry to write at a time */
|
||
|
int read_count; /* the number of bytes waiting to be read */
|
||
|
int write_count; /* the number of bytes waiting to be written */
|
||
|
int read_cur_write;
|
||
|
int write_cur_write;
|
||
|
int read_cur_read;
|
||
|
int write_cur_read;
|
||
|
unsigned char *read_buf;
|
||
|
unsigned char *write_buf;
|
||
|
int read_buf_size; /* measured in unsigned char's */
|
||
|
int write_buf_size; /* measured in unsigned char's */
|
||
|
int incoming_ct; /* used by minors that receive data from game */
|
||
|
/* indicates how many bytes left in block */
|
||
|
/* before signaling game that transfer is done */
|
||
|
/* used by logging and game to host data stuff */
|
||
|
int message; /* when not zero, send this message to game to */
|
||
|
/* indicate that data or log data has been read */
|
||
|
struct pollhead *phead;
|
||
|
} u64_minor;
|
||
|
|
||
|
/*
|
||
|
* Our private one-per-board data structure
|
||
|
* The user can't get at any of this
|
||
|
*/
|
||
|
struct u64_data {
|
||
|
|
||
|
volatile struct u64_board *board;
|
||
|
unsigned char *memaddr; /* 16/32 bit access R/W */
|
||
|
|
||
|
/*
|
||
|
* Only one client may be in the kernel at a time; this semaphore is used
|
||
|
* to prevent multiple clients from overrunning each other's interactions
|
||
|
* with the hardware.
|
||
|
*/
|
||
|
sema_t ioctl_sema;
|
||
|
|
||
|
/*
|
||
|
* The ramrom_sema is used by the driver so that it can arbitrate for the
|
||
|
* control of ramrom with the game, and sleep while waiting for the game
|
||
|
* to respond.
|
||
|
*/
|
||
|
sema_t ramrom_sema;
|
||
|
|
||
|
/*
|
||
|
* Allocate a megabyte buffer which we can use when reading/writing data
|
||
|
* to or from the board (we can't copyin/copyout directly from the user's
|
||
|
* buffer, because those routines use 64 bit transfers).
|
||
|
*/
|
||
|
unsigned int *oneMeg;
|
||
|
|
||
|
union {
|
||
|
u64_write_arg_t u64_write; /* WRITE, SAFE_WRITE */
|
||
|
u64_read_arg_t u64_read; /* READ, SAFE_READ */
|
||
|
} args;
|
||
|
|
||
|
/* rdb port */
|
||
|
unsigned int *write_buf;
|
||
|
unsigned int write_buf_cur_write;
|
||
|
unsigned int write_buf_cur_read;
|
||
|
unsigned int write_buf_ct; /* number of packets waiting for transmission */
|
||
|
unsigned int write_buf_size; /* measured in rdbPackets */
|
||
|
sema_t write_buf_sema;
|
||
|
u64_minor minors[NUMBER_MINORS];
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
|
||
|
|
||
|
#endif /* __SYS_U64DRIVER_H__ */
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|